Skip to content

Commit adee351

Browse files
Gupta, SuryaGupta, Surya
authored andcommitted
[CSTACKEX-204] Added Pool Status and config description change
1 parent 2eff1aa commit adee351

3 files changed

Lines changed: 31 additions & 11 deletions

File tree

‎plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/asup/OntapAsupManager.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ private String buildHeartbeatDescription(String cloudStackVersion, String ontapV
328328
* mapping, disk usage, and snapshot telemetry into a single EMS message.
329329
*
330330
* <p>Example: {@code {"message":"CloudStack storage pool backed by ONTAP volume",
331-
* "poolName":"...","protocol":"nfs","clusterUuid":"...","svm":"...",
331+
* "poolName":"...","poolStatus":"Up","protocol":"nfs","clusterUuid":"...","svm":"...",
332332
* "ontapVolumeUuid":"...","rootDiskCount":12,"dataDiskCount":18,
333333
* "totalLogicalSizeBytes":322122547200,"multiPrimaryStoragePoolVm":false,
334334
* "volumeSnapshotCount":5,"vmSnapshotCount":3}}</p>
@@ -338,6 +338,8 @@ private String buildPoolDescription(StoragePoolVO pool, Map<String, String> deta
338338
Map<String, Object> payload = new LinkedHashMap<>();
339339
payload.put(OntapStorageConstants.ASUP_MESSAGE, OntapStorageConstants.ASUP_POOL_MESSAGE);
340340
payload.put(OntapStorageConstants.ASUP_POOL_NAME, defaultUnknown(pool.getName()));
341+
payload.put(OntapStorageConstants.ASUP_POOL_STATUS,
342+
pool.getStatus() == null ? OntapStorageConstants.ASUP_UNKNOWN : pool.getStatus().toString());
341343
payload.put(OntapStorageConstants.ASUP_PROTOCOL, defaultUnknown(details.get(OntapStorageConstants.PROTOCOL)));
342344
payload.put(OntapStorageConstants.ASUP_CLUSTER_UUID, defaultUnknown(clusterUuid));
343345
payload.put(OntapStorageConstants.ASUP_SVM, defaultUnknown(details.get(OntapStorageConstants.SVM_NAME)));

‎plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/OntapStorageConstants.java‎

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ public class OntapStorageConstants {
145145
public static final String ASUP_HEARTBEAT_MESSAGE = "CloudStack connected to Unified ONTAP cluster";
146146
public static final String ASUP_POOL_MESSAGE = "CloudStack storage pool backed by Unified ONTAP volume";
147147
public static final String ASUP_POOL_NAME = "poolName";
148+
public static final String ASUP_POOL_STATUS = "poolStatus";
148149
public static final String ASUP_PROTOCOL = "protocol";
149150
public static final String ASUP_SVM = "svm";
150151
public static final String ASUP_ONTAP_VOLUME_UUID = "ontapVolumeUuid";
@@ -177,15 +178,12 @@ public class OntapStorageConstants {
177178
*/
178179
public static final int ASUP_POLL_CHECK_INTERVAL_SECONDS = 7200; // 2 hours
179180

180-
private static final String ASUP_CONFIG_APPLY_NOTE =
181-
"Takes effect immediately; no management server restart required.";
182-
183-
public static final String ASUP_ENABLED_DESCRIPTION = "Enable periodic ASUP (AutoSupport) telemetry push from the "
184-
+ "CloudStack ONTAP plugin to the ONTAP cluster. Set to true to enable or false to disable. "
185-
+ ASUP_CONFIG_APPLY_NOTE;
181+
public static final String ASUP_ENABLED_DESCRIPTION =
182+
"Set to true to enable telemetry reporting from the CloudStack ONTAP plugin, or false to disable it. "
183+
+ "Changes take effect immediately and do not require a management server restart.";
186184
public static final String ASUP_INTERVAL_DESCRIPTION = String.format(
187-
"Interval (in seconds) between periodic ASUP telemetry pushes from the CloudStack ONTAP plugin. "
188-
+ "Allowed range: %d-%d. Default: %d. %s",
189-
ASUP_MIN_INTERVAL_SECONDS, ASUP_MAX_INTERVAL_SECONDS, ASUP_DEFAULT_INTERVAL_SECONDS,
190-
ASUP_CONFIG_APPLY_NOTE);
185+
"Set the telemetry reporting interval for the CloudStack ONTAP plugin. "
186+
+ "Valid values range from %d (3 hours) to %d (24 hours). Default: %d (12 hours). "
187+
+ "Changes take effect immediately and do not require a management server restart.",
188+
ASUP_MIN_INTERVAL_SECONDS, ASUP_MAX_INTERVAL_SECONDS, ASUP_DEFAULT_INTERVAL_SECONDS);
191189
}

‎plugins/storage/volume/ontap/src/test/java/org/apache/cloudstack/storage/asup/OntapAsupManagerTest.java‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.cloud.server.ManagementService;
2525
import com.cloud.storage.Snapshot;
2626
import com.cloud.storage.SnapshotVO;
27+
import com.cloud.storage.StoragePoolStatus;
2728
import com.cloud.storage.Volume;
2829
import com.cloud.storage.VolumeVO;
2930
import com.cloud.storage.dao.SnapshotDao;
@@ -104,6 +105,7 @@ void setUp() {
104105
pool = mock(StoragePoolVO.class);
105106
lenient().when(pool.getId()).thenReturn(1L);
106107
lenient().when(pool.getName()).thenReturn("ontap-pool-1");
108+
lenient().when(pool.getStatus()).thenReturn(StoragePoolStatus.Up);
107109

108110
poolDetails = new HashMap<>();
109111
poolDetails.put(OntapStorageConstants.STORAGE_IP, "192.168.1.10");
@@ -226,12 +228,30 @@ void poolMessage_containsPoolNameClusterUuidAndSnapshotKeys() {
226228

227229
String desc = capturePoolMessage();
228230
assertTrue(desc.contains("ontap-pool-1"), "should contain pool name");
231+
assertTrue(desc.contains("\"poolStatus\":\"Up\""), "should contain pool status");
229232
assertTrue(desc.contains("cluster-uuid-1"), "should contain cluster UUID");
230233
assertTrue(desc.contains("volumeSnapshotCount"), "should contain volumeSnapshotCount");
231234
assertTrue(desc.contains("vmSnapshotCount"), "should contain vmSnapshotCount");
232235
assertTrue(desc.contains("\"multiPrimaryStoragePoolVm\":false"), "desc=" + desc);
233236
}
234237

238+
@Test
239+
void poolMessage_includesMaintenanceStatus() {
240+
when(pool.getStatus()).thenReturn(StoragePoolStatus.Maintenance);
241+
when(storagePoolDetailsDao.listDetailsKeyPairs(1L)).thenReturn(poolDetails);
242+
when(mockStrategy.getClusterInfo()).thenReturn(mockCluster);
243+
when(mockStrategy.getClusterVersion(mockCluster)).thenReturn("9.17.1");
244+
when(volumeDao.findNonDestroyedVolumesByPoolId(eq(1L), isNull())).thenReturn(Collections.emptyList());
245+
246+
try (MockedStatic<OntapStorageUtils> u = mockStatic(OntapStorageUtils.class)) {
247+
u.when(() -> OntapStorageUtils.getStrategyByStoragePoolDetails(any())).thenReturn(mockStrategy);
248+
asupManager.pushAsupForStoragePool(pool, new HashSet<>());
249+
}
250+
251+
String desc = capturePoolMessage();
252+
assertTrue(desc.contains("\"poolStatus\":\"Maintenance\""), "desc=" + desc);
253+
}
254+
235255
@Test
236256
void poolMessage_volumeSnapshots_zeroWhenNoVolumes() {
237257
when(storagePoolDetailsDao.listDetailsKeyPairs(1L)).thenReturn(poolDetails);

0 commit comments

Comments
 (0)