From 5a90da3276057ab0c9816f83b24e6495a84ab857 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Mon, 18 Aug 2025 11:57:54 +0530 Subject: [PATCH] Fix for PowerFlex MDM configuration on host while preparing the SDC connection (#11458) --- .../kvm/storage/ScaleIOStorageAdaptor.java | 34 +++++++++++++------ .../storage/ScaleIOStorageAdaptorTest.java | 28 --------------- 2 files changed, 24 insertions(+), 38 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptor.java index 46e6068a837..efa8024a34b 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptor.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptor.java @@ -653,10 +653,24 @@ public class ScaleIOStorageAdaptor implements StorageAdaptor { if (!ScaleIOUtil.startSDCService()) { return new Ternary<>(false, null, "Couldn't start SDC service on host"); } - } else { - logger.debug("SDC service is active on host, re-starting it"); - if (!ScaleIOUtil.restartSDCService()) { - return new Ternary<>(false, null, "Couldn't restart SDC service on host"); + } + + if (MapUtils.isNotEmpty(details) && details.containsKey(ScaleIOGatewayClient.STORAGE_POOL_MDMS)) { + // Assuming SDC service is started, add mdms + String mdms = details.get(ScaleIOGatewayClient.STORAGE_POOL_MDMS); + String[] mdmAddresses = mdms.split(","); + if (mdmAddresses.length > 0) { + if (ScaleIOUtil.isMdmPresent(mdmAddresses[0])) { + return new Ternary<>(true, getSDCDetails(details), "MDM added, no need to prepare the SDC client"); + } + + ScaleIOUtil.addMdms(mdmAddresses); + if (!ScaleIOUtil.isMdmPresent(mdmAddresses[0])) { + return new Ternary<>(false, null, "Failed to add MDMs"); + } else { + logger.debug(String.format("MDMs %s added to storage pool %s", mdms, uuid)); + applyMdmsChangeWaitTime(details); + } } } @@ -784,12 +798,12 @@ public class ScaleIOStorageAdaptor implements StorageAdaptor { if (sdcId != null) { sdcDetails.put(ScaleIOGatewayClient.SDC_ID, sdcId); return sdcDetails; - } else { - String sdcGuId = ScaleIOUtil.getSdcGuid(); - if (sdcGuId != null) { - sdcDetails.put(ScaleIOGatewayClient.SDC_GUID, sdcGuId); - return sdcDetails; - } + } + + String sdcGuId = ScaleIOUtil.getSdcGuid(); + if (sdcGuId != null) { + sdcDetails.put(ScaleIOGatewayClient.SDC_GUID, sdcGuId); + return sdcDetails; } try { diff --git a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptorTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptorTest.java index dba31f84dbd..eddaa8f6499 100644 --- a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptorTest.java +++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/ScaleIOStorageAdaptorTest.java @@ -92,34 +92,6 @@ public class ScaleIOStorageAdaptorTest { Assert.assertEquals("SDC service not enabled on host", result.third()); } - @Test - public void testPrepareStorageClient_SDCServiceNotRestarted() { - when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl status scini"))).thenReturn(3); - when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl is-enabled scini"))).thenReturn(0); - when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl is-active scini"))).thenReturn(0); - when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl restart scini"))).thenReturn(1); - - Ternary, String> result = scaleIOStorageAdaptor.prepareStorageClient(poolUuid, new HashMap<>()); - - Assert.assertFalse(result.first()); - Assert.assertNull(result.second()); - Assert.assertEquals("Couldn't restart SDC service on host", result.third()); - } - - @Test - public void testPrepareStorageClient_SDCServiceRestarted() { - when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl status scini"))).thenReturn(3); - when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl is-enabled scini"))).thenReturn(0); - when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl is-active scini"))).thenReturn(0); - when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl restart scini"))).thenReturn(0); - - Ternary, String> result = scaleIOStorageAdaptor.prepareStorageClient(poolUuid, new HashMap<>()); - - Assert.assertFalse(result.first()); - Assert.assertNull(result.second()); - Assert.assertEquals("Couldn't get the SDC details on the host", result.third()); - } - @Test public void testPrepareStorageClient_SDCServiceNotStarted() { when(Script.runSimpleBashScriptForExitValue(Mockito.eq("systemctl status scini"))).thenReturn(3);