mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	ssvm: wrong SSVM behavior causes redownloading for all the templates (#3844)
As per discussion at #3838 and proposal by @weizhouapache this PR implements the fix. Fixes #3838
This commit is contained in:
		
							parent
							
								
									a746b29a83
								
							
						
					
					
						commit
						f78cbf4efc
					
				| @ -163,16 +163,16 @@ public class NfsMountManagerImpl implements NfsMountManager { | |||||||
| 
 | 
 | ||||||
|     private boolean mountExists(String localRootPath) { |     private boolean mountExists(String localRootPath) { | ||||||
|         Script script = new Script(true, "mount", timeout, s_logger); |         Script script = new Script(true, "mount", timeout, s_logger); | ||||||
|         ZfsPathParser parser = new ZfsPathParser(localRootPath); |         PathParser parser = new PathParser(localRootPath); | ||||||
|         script.execute(parser); |         script.execute(parser); | ||||||
|         return parser.getPaths().stream().filter(s -> s.contains(localRootPath)).findAny().map(s -> true).orElse(false); |         return parser.getPaths().stream().filter(s -> s.contains(localRootPath)).findAny().map(s -> true).orElse(false); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static class ZfsPathParser extends OutputInterpreter { |     public static class PathParser extends OutputInterpreter { | ||||||
|         String _parent; |         String _parent; | ||||||
|         List<String> paths = new ArrayList<>(); |         List<String> paths = new ArrayList<>(); | ||||||
| 
 | 
 | ||||||
|         public ZfsPathParser(String parent) { |         public PathParser(String parent) { | ||||||
|             _parent = parent; |             _parent = parent; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -67,7 +67,7 @@ import org.apache.cloudstack.storage.configdrive.ConfigDrive; | |||||||
| import org.apache.cloudstack.storage.configdrive.ConfigDriveBuilder; | import org.apache.cloudstack.storage.configdrive.ConfigDriveBuilder; | ||||||
| import org.apache.cloudstack.storage.template.DownloadManager; | import org.apache.cloudstack.storage.template.DownloadManager; | ||||||
| import org.apache.cloudstack.storage.template.DownloadManagerImpl; | import org.apache.cloudstack.storage.template.DownloadManagerImpl; | ||||||
| import org.apache.cloudstack.storage.template.DownloadManagerImpl.ZfsPathParser; | import org.apache.cloudstack.storage.NfsMountManagerImpl.PathParser; | ||||||
| import org.apache.cloudstack.storage.template.UploadEntity; | import org.apache.cloudstack.storage.template.UploadEntity; | ||||||
| import org.apache.cloudstack.storage.template.UploadManager; | import org.apache.cloudstack.storage.template.UploadManager; | ||||||
| import org.apache.cloudstack.storage.template.UploadManagerImpl; | import org.apache.cloudstack.storage.template.UploadManagerImpl; | ||||||
| @ -2905,7 +2905,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S | |||||||
|         script = new Script(!_inSystemVM, "mount", _timeout, s_logger); |         script = new Script(!_inSystemVM, "mount", _timeout, s_logger); | ||||||
| 
 | 
 | ||||||
|         List<String> res = new ArrayList<String>(); |         List<String> res = new ArrayList<String>(); | ||||||
|         ZfsPathParser parser = new ZfsPathParser(localRootPath); |         PathParser parser = new PathParser(localRootPath); | ||||||
|         script.execute(parser); |         script.execute(parser); | ||||||
|         res.addAll(parser.getPaths()); |         res.addAll(parser.getPaths()); | ||||||
|         for (String s : res) { |         for (String s : res) { | ||||||
|  | |||||||
| @ -16,7 +16,6 @@ | |||||||
| // under the License. | // under the License. | ||||||
| package org.apache.cloudstack.storage.template; | package org.apache.cloudstack.storage.template; | ||||||
| 
 | 
 | ||||||
| import java.io.BufferedReader; |  | ||||||
| import java.io.File; | import java.io.File; | ||||||
| import java.io.FileInputStream; | import java.io.FileInputStream; | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| @ -60,6 +59,7 @@ import org.apache.cloudstack.storage.command.DownloadCommand; | |||||||
| import org.apache.cloudstack.storage.command.DownloadCommand.ResourceType; | import org.apache.cloudstack.storage.command.DownloadCommand.ResourceType; | ||||||
| import org.apache.cloudstack.storage.command.DownloadProgressCommand; | import org.apache.cloudstack.storage.command.DownloadProgressCommand; | ||||||
| import org.apache.cloudstack.storage.command.DownloadProgressCommand.RequestType; | import org.apache.cloudstack.storage.command.DownloadProgressCommand.RequestType; | ||||||
|  | import org.apache.cloudstack.storage.NfsMountManagerImpl.PathParser; | ||||||
| import org.apache.cloudstack.storage.resource.NfsSecondaryStorageResource; | import org.apache.cloudstack.storage.resource.NfsSecondaryStorageResource; | ||||||
| import org.apache.cloudstack.storage.resource.SecondaryStorageResource; | import org.apache.cloudstack.storage.resource.SecondaryStorageResource; | ||||||
| import org.apache.commons.collections.CollectionUtils; | import org.apache.commons.collections.CollectionUtils; | ||||||
| @ -82,7 +82,6 @@ import com.cloud.utils.NumbersUtil; | |||||||
| import com.cloud.utils.StringUtils; | import com.cloud.utils.StringUtils; | ||||||
| import com.cloud.utils.component.ManagerBase; | import com.cloud.utils.component.ManagerBase; | ||||||
| import com.cloud.utils.exception.CloudRuntimeException; | import com.cloud.utils.exception.CloudRuntimeException; | ||||||
| import com.cloud.utils.script.OutputInterpreter; |  | ||||||
| import com.cloud.utils.script.Script; | import com.cloud.utils.script.Script; | ||||||
| import com.cloud.utils.storage.QCOW2Utils; | import com.cloud.utils.storage.QCOW2Utils; | ||||||
| import org.apache.cloudstack.utils.security.ChecksumValue; | import org.apache.cloudstack.utils.security.ChecksumValue; | ||||||
| @ -850,8 +849,12 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager | |||||||
| 
 | 
 | ||||||
|         Script script = new Script(listVolScr, LOGGER); |         Script script = new Script(listVolScr, LOGGER); | ||||||
|         script.add("-r", rootdir); |         script.add("-r", rootdir); | ||||||
|         ZfsPathParser zpp = new ZfsPathParser(rootdir); |         PathParser zpp = new PathParser(rootdir); | ||||||
|         script.execute(zpp); |         script.execute(zpp); | ||||||
|  |         if (script.getExitValue() != 0) { | ||||||
|  |             LOGGER.error("Error while executing script " + script.toString()); | ||||||
|  |             throw new CloudRuntimeException("Error while executing script " + script.toString()); | ||||||
|  |         } | ||||||
|         result.addAll(zpp.getPaths()); |         result.addAll(zpp.getPaths()); | ||||||
|         LOGGER.info("found " + zpp.getPaths().size() + " volumes" + zpp.getPaths()); |         LOGGER.info("found " + zpp.getPaths().size() + " volumes" + zpp.getPaths()); | ||||||
|         return result; |         return result; | ||||||
| @ -862,8 +865,12 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager | |||||||
| 
 | 
 | ||||||
|         Script script = new Script(listTmpltScr, LOGGER); |         Script script = new Script(listTmpltScr, LOGGER); | ||||||
|         script.add("-r", rootdir); |         script.add("-r", rootdir); | ||||||
|         ZfsPathParser zpp = new ZfsPathParser(rootdir); |         PathParser zpp = new PathParser(rootdir); | ||||||
|         script.execute(zpp); |         script.execute(zpp); | ||||||
|  |         if (script.getExitValue() != 0) { | ||||||
|  |             LOGGER.error("Error while executing script " + script.toString()); | ||||||
|  |             throw new CloudRuntimeException("Error while executing script " + script.toString()); | ||||||
|  |         } | ||||||
|         result.addAll(zpp.getPaths()); |         result.addAll(zpp.getPaths()); | ||||||
|         LOGGER.info("found " + zpp.getPaths().size() + " templates" + zpp.getPaths()); |         LOGGER.info("found " + zpp.getPaths().size() + " templates" + zpp.getPaths()); | ||||||
|         return result; |         return result; | ||||||
| @ -961,33 +968,6 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager | |||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static class ZfsPathParser extends OutputInterpreter { |  | ||||||
|         String _parent; |  | ||||||
|         List<String> paths = new ArrayList<String>(); |  | ||||||
| 
 |  | ||||||
|         public ZfsPathParser(String parent) { |  | ||||||
|             _parent = parent; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         @Override |  | ||||||
|         public String interpret(BufferedReader reader) throws IOException { |  | ||||||
|             String line = null; |  | ||||||
|             while ((line = reader.readLine()) != null) { |  | ||||||
|                 paths.add(line); |  | ||||||
|             } |  | ||||||
|             return null; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         public List<String> getPaths() { |  | ||||||
|             return paths; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         @Override |  | ||||||
|         public boolean drain() { |  | ||||||
|             return true; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public DownloadManagerImpl() { |     public DownloadManagerImpl() { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user