11package org.zstack.test.integration.storage.primary.addon.zbs
22
33import org.springframework.http.HttpEntity
4+ import org.zstack.core.cloudbus.CloudBus
45import org.zstack.core.cloudbus.EventCallback
56import org.zstack.core.cloudbus.EventFacade
67import org.zstack.core.db.Q
8+ import org.zstack.core.thread.ThreadFacadeImpl
79import org.zstack.header.storage.addon.primary.ExternalPrimaryStorageVO
810import org.zstack.header.storage.addon.primary.ExternalPrimaryStorageSpaceVO
911import org.zstack.header.storage.addon.primary.ExternalPrimaryStorageVO_
@@ -13,6 +15,8 @@ import org.zstack.header.storage.primary.PrimaryStorageCapacityVO_
1315import org.zstack.header.storage.primary.PrimaryStorageHostRefVO
1416import org.zstack.header.storage.primary.PrimaryStorageHostRefVO_
1517import org.zstack.header.storage.primary.PrimaryStorageStatus
18+ import org.zstack.header.storage.primary.ReconnectPrimaryStorageMsg
19+ import org.zstack.header.storage.primary.ReconnectPrimaryStorageReply
1620import org.zstack.storage.zbs.MdsUri
1721import org.zstack.sdk.*
1822import org.zstack.storage.addon.primary.ExternalPrimaryStorageSystemTags
@@ -47,6 +51,8 @@ class ZbsPrimaryStorageCase extends SubCase {
4751 VolumeInventory vol, vol2
4852 KVMHostInventory kvm
4953 EventFacade evtf
54+ ThreadFacadeImpl thdf
55+ AtomicInteger reconnectMsgCount = new AtomicInteger (0 )
5056
5157 @Override
5258 void clean () {
@@ -165,6 +171,7 @@ class ZbsPrimaryStorageCase extends SubCase {
165171 diskOffering = env. inventoryByName(" diskOffering" ) as DiskOfferingInventory
166172 kvm = env. inventoryByName(" kvm-1" ) as KVMHostInventory
167173 evtf = bean(EventFacade . class)
174+ thdf = bean(ThreadFacadeImpl . class)
168175
169176 testSyncPrimaryStorageCapacityConcurrently()
170177 testDefaultConfig()
@@ -294,14 +301,67 @@ class ZbsPrimaryStorageCase extends SubCase {
294301 assert Q.New (ExternalPrimaryStorageSpaceVO . class)
295302 .eq(ExternalPrimaryStorageSpaceVO_ . primaryStorageUuid, ps. uuid)
296303 .count() == 1
304+
305+ def signature = String . format(" update-external-primary-storage-%s" , ps. uuid)
306+ def run = thdf. getChainTaskInfo(signature). getRunningTask(). size()
307+ retryInSecs {
308+ assert thdf. getChainTaskInfo(signature). getRunningTask(). size() == 0
309+ assert thdf. getChainTaskInfo(signature). getPendingTask(). size() == 0
310+ }
311+ env. message(ReconnectPrimaryStorageMsg . class) { ReconnectPrimaryStorageMsg msg , CloudBus bus ->
312+ if (ps != null && msg. getPrimaryStorageUuid() == ps. uuid) {
313+ reconnectMsgCount. incrementAndGet()
314+ run = thdf. getChainTaskInfo(signature). getRunningTask(). size()
315+ assert run == 1
316+ }
317+ def reply = new ReconnectPrimaryStorageReply ()
318+ bus. reply(msg, reply)
319+ }
320+ Thread . start {
321+ updateExternalPrimaryStorage {
322+ uuid = ps. uuid
323+ config = " {\" mdsUrls\" :[\" root:password@127.0.1.4\" ,\" root:password@127.0.1.2\" ,\" root:password@127.0.1.3\" ],\" logicalPoolName\" :\" lpool1\" }"
324+ }
325+ }
326+ Thread . start {
327+ updateExternalPrimaryStorage {
328+ uuid = ps. uuid
329+ config = " {\" mdsUrls\" :[\" root:password@127.0.1.5\" ,\" root:password@127.0.1.2\" ,\" root:password@127.0.1.3\" ],\" logicalPoolName\" :\" lpool1\" }"
330+ }
331+ }
332+ retryInSecs {
333+ assert reconnectMsgCount. get() >= 1
334+ assert thdf. getChainTaskInfo(signature). getRunningTask(). size() == 0
335+ assert thdf. getChainTaskInfo(signature). getPendingTask(). size() == 0
336+ }
337+ def oldReconnectMsgCount= reconnectMsgCount. get()
338+ String oldConfig = Q.New (ExternalPrimaryStorageVO . class)
339+ .select(ExternalPrimaryStorageVO_ . config)
340+ .eq(ExternalPrimaryStorageVO_ . uuid, ps. uuid)
341+ .findValue()
342+ Thread . start {
343+ updateExternalPrimaryStorage {
344+ uuid = ps. uuid
345+ config = oldConfig
346+ }
347+ }
348+ retryInSecs {
349+ assert thdf. getChainTaskInfo(signature). getRunningTask(). size() == 0
350+ assert thdf. getChainTaskInfo(signature). getPendingTask(). size() == 0
351+ }
352+ assert reconnectMsgCount. get() == oldReconnectMsgCount
353+ env. revokeMessage(ReconnectPrimaryStorageMsg . class, null )
297354 // update multi pools
298355 // Config.Pool
299356 updateExternalPrimaryStorage {
300357 uuid = ps. uuid
301358 config = " {\" mdsUrls\" :[\" root:password@127.0.1.1\" ,\" root:password@127.0.1.2\" ,\" root:password@127.0.1.3\" ]," +
302359 " \" pools\" :[{\" logicalName\" :\" lpool1\" }, {\" logicalName\" :\" lpool2\" }]}"
303360 }
304-
361+ retryInSecs {
362+ assert thdf. getChainTaskInfo(signature). getRunningTask(). size() == 0
363+ assert thdf. getChainTaskInfo(signature). getPendingTask(). size() == 0
364+ }
305365 assert Q.New (ExternalPrimaryStorageSpaceVO . class)
306366 .eq(ExternalPrimaryStorageSpaceVO_ . primaryStorageUuid, ps. uuid)
307367 .count() == 2
0 commit comments