[
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)