Skip to content

Commit 93e3cc1

Browse files
suryag1201Gupta, Suryacursoragent
authored andcommitted
[CSTACKEX-204] ASUP Implementation (#69)
This PR... ASUP Implementation - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] New feature (non-breaking change which adds functionality) - [ ] Bug fix (non-breaking change which fixes an issue) - [x] Enhancement (improves an existing feature and functionality) - [ ] Cleanup (Code refactoring and cleanup, that may add test cases) - [ ] Build/CI - [ ] Test (unit or integration test code) - [x] Major - [ ] Minor - [ ] BLOCKER - [ ] Critical - [ ] Major - [ ] Minor - [ ] Trivial This is a testing screen shot, the min frequency is 4 hours, not 1 hour <img width="1723" height="790" alt="image" src="https://github.com/user-attachments/assets/f2351e08-6ce3-4925-a1e7-391dfd17cfc3" /> <img width="1584" height="523" alt="image" src="https://github.com/user-attachments/assets/a4313ac9-de68-400a-81dc-1298e9b0a13b" /> Smart Solve Data SmartSolve_EMS-LOG-FILEGZ_Asupid_2026091501340005.html [?] Tue Sep 15 00:47:27 -0400 [sti245-vsim-ocvs032b: kernel: ems.engine.suppressed:debug]: Event 'netinet6.rtr.high.mtu' suppressed 205 times in last 3634 seconds. [ [?] ](javascript:void(0)) Tue Sep 15 00:47:27 -0400 [sti245-vsim-ocvs032b: kernel: netinet6.rtr.high.mtu:info]: nd6_ra_input: MTU option mtu=9214 sent from fe80:3::21c:73ff:fe00:99; exceeds the maxmtu 1500 on 'e0c'; ignoring. [ [?] ](javascript:void(0)) Tue Sep 15 00:50:34 -0400 [sti245-vsim-ocvs032b: dense_ads_monitor: sis.auto.session.change:notice]: ADS: Number of auto sessions changed from 4 to 1 [?] Tue Sep 15 00:53:09 -0400 [sti245-vsim-ocvs032b: mgwd: app.log.notice:notice]: **cstack08.rtp.openenglab.netapp.com: CloudStack ONTAP plugin 4.23.0.0-SNAPSHOT: (0) provisioning: {"message":"CloudStack connected to Unified ONTAP cluster","cloudstackVersion":"4.23.0.0-SNAPSHOT","platform":"Linux 6.8.0-136-generic (amd64)","ontapVersion":"9.17.1","ontapClusterModel":"SIMBOX","ontapPlatformType":"performance","clusterUuid":"7cd7613a-a571-11f1-b6f8-005056bdad8c","managementServerCount":1} [ [?] ](javascript:void(0)) Tue Sep 15 00:53:09 -0400 [sti245-vsim-ocvs032b: mgwd: app.log.notice:notice]: cstack08.rtp.openenglab.netapp.com: CloudStack ONTAP plugin 4.23.0.0-SNAPSHOT: (1) provisioning: {"message":"CloudStack storage pool backed by Unified ONTAP volume","poolName":"PoolNFS_43","poolStatus":"Up","protocol":"NFS3","clusterUuid":"7cd7613a-a571-11f1-b6f8-005056bdad8c","svm":"vs0","ontapVolumeUuid":"fb8fece4-a576-11f1-b46d-005056bd1333","rootDiskCount":1,"dataDiskCount":1,"totalLogicalSizeBytes":8589934592,"vmSnapshotCount":1,"volumeSnapshotCount":1,"multiPrimaryStoragePoolVm":false}** [ [?] ](javascript:void(0)) Tue Sep 15 00:53:42 -0400 [sti245-vsim-ocvs032b: dense_ads_monitor: sis.auto.session.change:notice]: ADS: Number of auto sessions changed from 1 to 2 [?] Tue Sep 15 00:54:44 -0400 [sti245-vsim-ocvs032b: dense_ads_monitor: sis.auto.session.change:notice]: ADS: Number of auto sessions changed from 2 to 3 [?] Tue Sep 15 00:55:47 -0400 [sti245-vsim-ocvs032b: dense_ads_monitor: sis.auto.session.change:notice]: ADS: Number of auto sessions changed from 3 to 1 [?] Tue Sep 15 00:56:50 -0400 [sti245-vsim-ocvs032b: dense_ads_monitor: sis.auto.session.change:notice]: ADS: Number of auto sessions changed from 1 to 2 [ [?] ](javascript:void(0)) Tue Sep 15 00:57:52 -0400 [sti245-vsim-ocvs032b: dense_ads_monitor: sis.auto.session.change:notice]: ADS: Number of auto sessions changed from 2 to 3 [?] Tue Sep 15 00:58:55 -0400 [sti245-vsim-ocvs032b: dense_ads_monitor: sis.auto.session.change:notice]: ADS: Number of auto sessions changed from 3 to 1 1- Keep the ASUP disabled by keep value as 0 and check the events on ONTAP - No events are getting generated 2- Enable the ASUP and check the events and it was getting triggered on the given frequency on ontap 3- Verified the data on ontap for event 0 and event 1 4- Created the new VM and Snapshots, and VM across pools then required field on new run took the new values. 5- Keep the ASUP frequency value less than or greater than required, throw the error on UI 6- Disable the ASUP again by keep value as 0, the data stop getting pushed to ontap change? <!-- see how your change affects other areas of the code, etc. --> <!-- Please read the [CONTRIBUTING](https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md) document --> --------- Co-authored-by: Gupta, Surya <Surya.Gupta@netapp.com> Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 27722a5 commit 93e3cc1

16 files changed

Lines changed: 2170 additions & 10 deletions

File tree

engine/schema/src/main/java/com/cloud/storage/dao/VolumeDao.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,13 @@ public interface VolumeDao extends GenericDao<VolumeVO, Long>, StateDao<Volume.S
182182

183183
boolean existsWithKmsKey(long kmsKeyId);
184184

185+
/**
186+
* Returns true if any VM with a non-destroyed ROOT volume on {@code poolId} also has a
187+
* non-destroyed DATADISK on a different primary storage pool. Existence check only
188+
* ({@code LIMIT 1}); does not load volumes into memory.
189+
*/
190+
boolean hasMultiPrimaryStoragePoolVm(long poolId);
191+
185192
/**
186193
* Retrieves volume by its externalId
187194
*

engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,14 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
9696
protected static final String SELECT_HYPERTYPE_FROM_CLUSTER_VOLUME = "SELECT c.hypervisor_type from volumes v, storage_pool s, cluster c where v.pool_id = s.id and s.cluster_id = c.id and v.id = ?";
9797
protected static final String SELECT_HYPERTYPE_FROM_ZONE_VOLUME = "SELECT s.hypervisor from volumes v, storage_pool s where v.pool_id = s.id and v.id = ?";
9898
protected static final String SELECT_POOLSCOPE = "SELECT s.scope from storage_pool s, volumes v where s.id = v.pool_id and v.id = ?";
99+
// Looks for a VM whose root disk is on this pool and whose data disk is on another pool.
100+
// LIMIT 1 stops after the first match so we do not load all volumes.
101+
private static final String HAS_MULTI_PRIMARY_STORAGE_POOL_VM =
102+
"SELECT 1 FROM volumes root INNER JOIN volumes data ON data.instance_id = root.instance_id "
103+
+ "WHERE root.pool_id = ? AND root.volume_type = 'ROOT' AND root.instance_id IS NOT NULL "
104+
+ "AND root.removed IS NULL AND root.state NOT IN ('Destroy', 'Expunged') "
105+
+ "AND data.volume_type = 'DATADISK' AND data.pool_id IS NOT NULL AND data.pool_id <> ? "
106+
+ "AND data.removed IS NULL AND data.state NOT IN ('Destroy', 'Expunged') LIMIT 1";
99107

100108
private static final String ORDER_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT_PART1 = "SELECT pool.id, SUM(IF(vol.state='Ready' AND vol.account_id = ?, 1, 0)) FROM `cloud`.`storage_pool` pool LEFT JOIN `cloud`.`volumes` vol ON pool.id = vol.pool_id WHERE pool.data_center_id = ? ";
101109
private static final String ORDER_POOLS_NUMBER_OF_VOLUMES_FOR_ACCOUNT_PART2 = " GROUP BY pool.id ORDER BY 2 ASC ";
@@ -998,6 +1006,21 @@ public boolean existsWithKmsKey(long kmsKeyId) {
9981006
return findOneBy(sc) != null;
9991007
}
10001008

1009+
@Override
1010+
@DB
1011+
public boolean hasMultiPrimaryStoragePoolVm(long poolId) {
1012+
TransactionLegacy txn = TransactionLegacy.currentTxn();
1013+
try (PreparedStatement pstmt = txn.prepareAutoCloseStatement(HAS_MULTI_PRIMARY_STORAGE_POOL_VM)) {
1014+
pstmt.setLong(1, poolId);
1015+
pstmt.setLong(2, poolId);
1016+
try (ResultSet rs = pstmt.executeQuery()) {
1017+
return rs.next();
1018+
}
1019+
} catch (SQLException e) {
1020+
throw new CloudRuntimeException("DB Exception on: " + HAS_MULTI_PRIMARY_STORAGE_POOL_VM, e);
1021+
}
1022+
}
1023+
10011024
public VolumeVO findByExternalUuid(String externalUuid) {
10021025
SearchCriteria<VolumeVO> sc = ExternalUuidSearch.create();
10031026
sc.setParameters("externalUuid", externalUuid);

plugins/storage/volume/ontap/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@
8686
<artifactId>cloud-engine-storage-volume</artifactId>
8787
<version>${project.version}</version>
8888
</dependency>
89+
<dependency>
90+
<groupId>org.apache.cloudstack</groupId>
91+
<artifactId>cloud-framework-cluster</artifactId>
92+
<version>${project.version}</version>
93+
</dependency>
8994
<dependency>
9095
<groupId>io.swagger</groupId>
9196
<artifactId>swagger-annotations</artifactId>

0 commit comments

Comments
 (0)