shwstppr commented on code in PR #9840:
URL: https://github.com/apache/cloudstack/pull/9840#discussion_r1828937318
##########
engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java:
##########
@@ -4988,89 +5016,58 @@ private void
scanStalledVMInTransitionStateOnDisconnectedHosts() {
}
}
- private List<Long> listStalledVMInTransitionStateOnUpHost(final long
hostId, final Date cutTime) {
- final String sql = "SELECT i.* FROM vm_instance as i, host as h WHERE
h.status = 'UP' " +
- "AND h.id = ? AND i.power_state_update_time < ? AND i.host_id
= h.id " +
- "AND (i.state ='Starting' OR i.state='Stopping' OR
i.state='Migrating') " +
- "AND i.id NOT IN (SELECT w.vm_instance_id FROM vm_work_job AS
w JOIN async_job AS j ON w.id = j.id WHERE j.job_status = ?)" +
- "AND i.removed IS NULL";
-
- final List<Long> l = new ArrayList<>();
- try (TransactionLegacy txn =
TransactionLegacy.open(TransactionLegacy.CLOUD_DB)) {
- String cutTimeStr =
DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), cutTime);
-
- try {
- PreparedStatement pstmt = txn.prepareAutoCloseStatement(sql);
-
- pstmt.setLong(1, hostId);
- pstmt.setString(2, cutTimeStr);
- pstmt.setInt(3, JobInfo.Status.IN_PROGRESS.ordinal());
- final ResultSet rs = pstmt.executeQuery();
- while (rs.next()) {
- l.add(rs.getLong(1));
- }
- } catch (SQLException e) {
- logger.error("Unable to execute SQL [{}] with params
{\"h.id\": {}, \"i.power_state_update_time\": \"{}\"} due to [{}].", sql,
hostId, cutTimeStr, e.getMessage(), e);
- }
+ private List<VMInstanceVO> listStalledVMInTransitionStateOnUpHost(
+ final List<VMInstanceVO> transitioningVms, final long cutTime) {
+ if (CollectionUtils.isEmpty(transitioningVms)) {
+ return transitioningVms;
}
- return l;
+ List<Long> vmIdsInProgress = vmIdsInProgressCache.get();
+ return transitioningVms.stream()
+ .filter(v -> v.getPowerStateUpdateTime().getTime() < cutTime
&& !vmIdsInProgress.contains(v.getId()))
+ .collect(Collectors.toList());
}
- private List<Long> listVMInTransitionStateWithRecentReportOnUpHost(final
long hostId, final Date cutTime) {
- final String sql = "SELECT i.* FROM vm_instance as i, host as h WHERE
h.status = 'UP' " +
- "AND h.id = ? AND i.power_state_update_time > ? AND i.host_id
= h.id " +
- "AND (i.state ='Starting' OR i.state='Stopping' OR
i.state='Migrating') " +
- "AND i.id NOT IN (SELECT w.vm_instance_id FROM vm_work_job AS
w JOIN async_job AS j ON w.id = j.id WHERE j.job_status = ?)" +
- "AND i.removed IS NULL";
-
- final List<Long> l = new ArrayList<>();
- try (TransactionLegacy txn =
TransactionLegacy.open(TransactionLegacy.CLOUD_DB)) {
- String cutTimeStr =
DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), cutTime);
- int jobStatusInProgress = JobInfo.Status.IN_PROGRESS.ordinal();
-
- try {
- PreparedStatement pstmt = txn.prepareAutoCloseStatement(sql);
-
- pstmt.setLong(1, hostId);
- pstmt.setString(2, cutTimeStr);
- pstmt.setInt(3, jobStatusInProgress);
- final ResultSet rs = pstmt.executeQuery();
- while (rs.next()) {
- l.add(rs.getLong(1));
- }
- } catch (final SQLException e) {
- logger.error("Unable to execute SQL [{}] with params
{\"h.id\": {}, \"i.power_state_update_time\": \"{}\", \"j.job_status\": {}} due
to [{}].", sql, hostId, cutTimeStr, jobStatusInProgress, e.getMessage(), e);
- }
- return l;
+ private List<VMInstanceVO> listVMInTransitionStateWithRecentReportOnUpHost(
+ final List<VMInstanceVO> transitioningVms, final long cutTime) {
+ if (CollectionUtils.isEmpty(transitioningVms)) {
+ return transitioningVms;
}
+ List<Long> vmIdsInProgress = vmIdsInProgressCache.get();
+ return transitioningVms.stream()
+ .filter(v -> v.getPowerStateUpdateTime().getTime() > cutTime
&& !vmIdsInProgress.contains(v.getId()))
+ .collect(Collectors.toList());
}
private List<Long> listStalledVMInTransitionStateOnDisconnectedHosts(final
Date cutTime) {
- final String sql = "SELECT i.* FROM vm_instance as i, host as h WHERE
h.status != 'UP' " +
- "AND i.power_state_update_time < ? AND i.host_id = h.id " +
- "AND (i.state ='Starting' OR i.state='Stopping' OR
i.state='Migrating') " +
- "AND i.id NOT IN (SELECT w.vm_instance_id FROM vm_work_job AS
w JOIN async_job AS j ON w.id = j.id WHERE j.job_status = ?)" +
- "AND i.removed IS NULL";
+ final String sql = "SELECT i.*\n" +
Review Comment:
done
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]