[ 
https://issues.apache.org/jira/browse/CLOUDSTACK-9691?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15796715#comment-15796715
 ] 

ASF GitHub Bot commented on CLOUDSTACK-9691:
--------------------------------------------

Github user mike-tutkowski commented on the issue:

    https://github.com/apache/cloudstack/pull/1847
  
    Let me provide a bit of background on this and then we can decide which way 
we want to correct this side effect.
    
    Here is the PR that went in a while ago that enabled CloudStack to support 
volume snapshots that reside on primary storage:
    
    https://github.com/apache/cloudstack/pull/1403
    
    The idea being these types of snapshots are faster than the 
back-up-to-secondary-storage approach CloudStack does by default and they can 
be a lot more space efficient, as well.
    
    As part of this process, I went through and tried to identify all of the 
locations where we assumed a volume snapshot resided on secondary storage (and 
I put in code to see if it really resides there or, instead, if it's on primary 
storage).
    
    As we have noted, a couple places were missed and this PR (as wells as 
#1735) were opened to address those issues.
    
    The way this particular PR's code is written should work fine. In the case 
where the original primary storage has been removed, an exception will be 
thrown, caught, logged, and then we will default to returning secondary storage 
as the location (which it should be).
    
    Instead of the try/catch approach, though, it might be better if we see if 
dataStore is null.
    
    DataStore dataStore = dataStoreMgr.getDataStore(storagePoolId, 
DataStoreRole.Primary);
    
    If that comes back null, then we apparently have removed primary storage, 
which can only be done if your snapshots don't reside on it. If dataStore == 
null, return DataStoreRole.IMAGE.
    



> unhandeled excetion in list snapshot command when a primary store is deleted
> ----------------------------------------------------------------------------
>
>                 Key: CLOUDSTACK-9691
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9691
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>            Reporter: Anshul Gangwar
>
> Repro steps:
> I have a setup with 3 clusters . for one cluster i deleted the primary storage
> now when i traverse to storage tab getting exception "Unable to locate 
> datastore with id 1"
> DB entries for deleted primary storage :
> "id"  "name"  "uuid"  "pool_type"     "port"  "data_center_id"        
> "pod_id"        "cluster_id" "used_bytes"       "capacity_bytes"        
> "host_address"  "user_info"     "path"  "created" "removed"     "update_time" 
>   "status"        "storage_provider_name" "scope" "hypervisor" "managed"  
> "capacity_iops"
> "1"   "dddd"  \N      "NetworkFilesystem"     "2049"  "1"     "1"     "1"     
> "4674624913408" "5902284816384" "10.147.28.7"   \N      
> "/export/home/shweta/471.xen.primary"   "2016-08-17 08:14:12"   "2016-08-25 
> 04:54:53"   \N      "Maintenance"   "DefaultPrimary" "CLUSTER"      \N      
> "0"     \N
> MS log shows :
> 2016-08-26 14:34:36,709 DEBUG [c.c.a.ApiServlet] 
> (catalina-exec-1:ctx-90c9ba3a) (logid:115e39ad) ===START=== 10.233.88.59 – 
> GET 
> command=listSnapshots&response=json&listAll=true&page=1&pagesize=20&_=1472202277072
> 2016-08-26 14:34:36,747 ERROR [c.c.a.ApiServer] (catalina-exec-1:ctx-90c9ba3a 
> ctx-94284178) (logid:115e39ad) unhandled exception executing api command: 
> [Ljava.lang.String;@77f27ce8
> com.cloud.utils.exception.CloudRuntimeException: Unable to locate datastore 
> with id 1
> at 
> org.apache.cloudstack.storage.datastore.manager.PrimaryDataStoreProviderManagerImpl.getPrimaryDataStore(PrimaryDataStoreProviderManagerImpl.java:61)
> at 
> org.apache.cloudstack.storage.datastore.DataStoreManagerImpl.getDataStore(DataStoreManagerImpl.java:48)
> at 
> com.cloud.api.ApiResponseHelper.getDataStoreRole(ApiResponseHelper.java:571)
> at 
> com.cloud.api.ApiResponseHelper.createSnapshotResponse(ApiResponseHelper.java:537)
> at 
> org.apache.cloudstack.api.command.user.snapshot.ListSnapshotsCmd.execute(ListSnapshotsCmd.java:117)
> at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:132)
> at com.cloud.api.ApiServer.queueCommand(ApiServer.java:707)
> at com.cloud.api.ApiServer.handleRequest(ApiServer.java:538)
> at com.cloud.api.ApiServlet.processRequestInContext(ApiServlet.java:297)
> at com.cloud.api.ApiServlet$1.run(ApiServlet.java:129)
> at 
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
> at 
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
> at 
> org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
> at com.cloud.api.ApiServlet.processRequest(ApiServlet.java:126)
> at com.cloud.api.ApiServlet.doGet(ApiServlet.java:86)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
> at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
> at 
> org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:889)
> at 
> org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:721)
> at 
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2268)
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> 2016-08-26 14:34:36,749 DEBUG [c.c.a.ApiServlet] 
> (catalina-exec-1:ctx-90c9ba3a ctx-94284178) (logid:115e39ad) ===END=== 
> 10.233.88.59 – GET 
> command=listSnapshots&response=json&listAll=true&page=1&pagesize=20&_=1472202277072
> 2016-08-26 14:34:38,478 DEBUG [c.c.a.m.AgentManagerImpl] 
> (AgentManager-Handler-8:null) (logid SeqA 3-49869: Processing Seq 3-49869: { 
> Cmd , MgmtId: -1, via: 3, Ver: v1, Flags: 11, 
> [{"com.cloud.agent.api.ConsoleProxyLoadReportCommand":{"_proxyVmId":2,"_loadInfo":"
> {\n \"connections\": []\n}
> ","wait":0}}] }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to