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
@@ -31,6 +35,7 @@ import org.zstack.testlib.HttpError
3135import org.zstack.testlib.SubCase
3236import org.zstack.utils.data.SizeUnit
3337import org.zstack.utils.gson.JSONObjectUtil
38+ import java.util.concurrent.atomic.AtomicInteger
3439
3540import java.util.concurrent.atomic.AtomicInteger
3641
@@ -47,6 +52,8 @@ class ZbsPrimaryStorageCase extends SubCase {
4752 VolumeInventory vol, vol2
4853 KVMHostInventory kvm
4954 EventFacade evtf
55+ ThreadFacadeImpl thdf
56+ AtomicInteger reconnectMsgCount = new AtomicInteger (0 )
5057
5158 @Override
5259 void clean () {
@@ -165,6 +172,7 @@ class ZbsPrimaryStorageCase extends SubCase {
165172 diskOffering = env. inventoryByName(" diskOffering" ) as DiskOfferingInventory
166173 kvm = env. inventoryByName(" kvm-1" ) as KVMHostInventory
167174 evtf = bean(EventFacade . class)
175+ thdf = bean(ThreadFacadeImpl . class)
168176
169177 testSyncPrimaryStorageCapacityConcurrently()
170178 testDefaultConfig()
@@ -294,6 +302,49 @@ class ZbsPrimaryStorageCase extends SubCase {
294302 assert Q.New (ExternalPrimaryStorageSpaceVO . class)
295303 .eq(ExternalPrimaryStorageSpaceVO_ . primaryStorageUuid, ps. uuid)
296304 .count() == 1
305+
306+ def signature = String . format(" update-external-primary-storage-%s" , ps. uuid)
307+ def run = thdf. getChainTaskInfo(signature). getRunningTask(). size()
308+ env. message(ReconnectPrimaryStorageMsg . class) { ReconnectPrimaryStorageMsg msg , CloudBus bus ->
309+ if (ps != null && msg. getPrimaryStorageUuid() == ps. uuid) {
310+ reconnectMsgCount. incrementAndGet()
311+ run = thdf. getChainTaskInfo(signature). getRunningTask(). size()
312+ assert run == 1
313+ }
314+ def reply = new ReconnectPrimaryStorageReply ()
315+ bus. reply(msg, reply)
316+ }
317+ Thread . start {
318+ updateExternalPrimaryStorage {
319+ uuid = ps. uuid
320+ config = " {\" mdsUrls\" :[\" root:password@127.0.1.4\" ,\" root:password@127.0.1.2\" ,\" root:password@127.0.1.3\" ],\" logicalPoolName\" :\" lpool1\" }"
321+ }
322+ }
323+ Thread . start {
324+ updateExternalPrimaryStorage {
325+ uuid = ps. uuid
326+ config = " {\" mdsUrls\" :[\" root:password@127.0.1.5\" ,\" root:password@127.0.1.2\" ,\" root:password@127.0.1.3\" ],\" logicalPoolName\" :\" lpool1\" }"
327+ }
328+ }
329+ String oldConfig = Q.New (ExternalPrimaryStorageVO . class)
330+ .select(ExternalPrimaryStorageVO_ . config)
331+ .eq(ExternalPrimaryStorageVO_ . uuid, ps. uuid)
332+ .findValue()
333+ Thread . start {
334+ updateExternalPrimaryStorage {
335+ uuid = ps. uuid
336+ config = oldConfig
337+ }
338+ }
339+ retryInSecs {
340+ assert reconnectMsgCount. get() >= 1
341+ }
342+ retryInSecs {
343+ assert thdf. getChainTaskInfo(signature). getRunningTask(). size() == 0
344+ assert thdf. getChainTaskInfo(signature). getPendingTask(). size() == 0
345+ }
346+ assert reconnectMsgCount. get() == 2
347+ env. revokeMessage(ReconnectPrimaryStorageMsg . class, null )
297348 // update multi pools
298349 // Config.Pool
299350 updateExternalPrimaryStorage {
0 commit comments