mirror of https://github.com/apache/cloudstack.git
Fix CID-1212194 Resource like dues to left-open statements and
resultsets
This commit is contained in:
parent
a59db987f9
commit
d21a15beb2
|
|
@ -23,9 +23,9 @@ import java.sql.PreparedStatement;
|
|||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import com.cloud.hypervisor.Hypervisor;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.hypervisor.Hypervisor;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.script.Script;
|
||||
|
||||
|
|
@ -86,12 +86,17 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
if(result1.next()){
|
||||
cpuoverprov = result1.getString(1);
|
||||
}
|
||||
result1.close();
|
||||
pstmt1.close();
|
||||
|
||||
pstmt1 = conn.prepareStatement("select value from `cloud`.`configuration` where name='mem.overprovisioning.factor'");
|
||||
result1 = pstmt1.executeQuery();
|
||||
String memoverprov = "1";
|
||||
if(result1.next()){
|
||||
memoverprov = result1.getString(1);
|
||||
}
|
||||
result1.close();
|
||||
pstmt1.close();
|
||||
|
||||
// Need to populate only when overprovisioning factor doesn't pre exist.
|
||||
s_logger.debug("Starting updating user_vm_details with cpu/memory overprovisioning factors");
|
||||
|
|
@ -135,17 +140,29 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
if (pstmt1 != null && !pstmt1.isClosed()) {
|
||||
pstmt1.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
if (pstmt2 != null && !pstmt2.isClosed()) {
|
||||
pstmt2.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
if (pstmt3 != null && !pstmt3.isClosed()) {
|
||||
pstmt3.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
if (result1 != null) {
|
||||
result1.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
if (result2 != null) {
|
||||
result2.close();
|
||||
result2.close();
|
||||
}
|
||||
}catch (SQLException e){
|
||||
|
||||
|
|
@ -161,7 +178,6 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
PreparedStatement pstmt3 = null;
|
||||
PreparedStatement pstmt4 = null;
|
||||
PreparedStatement pstmt5 = null;
|
||||
ResultSet rs = null;
|
||||
ResultSet rsAccount = null;
|
||||
ResultSet rsCount = null;
|
||||
try {
|
||||
|
|
@ -172,9 +188,9 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
long domain_id = rsAccount.getLong(2);
|
||||
// 1. update cpu,memory for all accounts
|
||||
pstmt2 =
|
||||
conn.prepareStatement("SELECT SUM(service_offering.cpu), SUM(service_offering.ram_size)" + " FROM `cloud`.`vm_instance`, `cloud`.`service_offering`"
|
||||
+ " WHERE vm_instance.service_offering_id = service_offering.id AND vm_instance.account_id = ?" + " AND vm_instance.removed is NULL"
|
||||
+ " AND vm_instance.vm_type='User' AND state not in ('Destroyed', 'Error', 'Expunging')");
|
||||
conn.prepareStatement("SELECT SUM(service_offering.cpu), SUM(service_offering.ram_size)" + " FROM `cloud`.`vm_instance`, `cloud`.`service_offering`"
|
||||
+ " WHERE vm_instance.service_offering_id = service_offering.id AND vm_instance.account_id = ?" + " AND vm_instance.removed is NULL"
|
||||
+ " AND vm_instance.vm_type='User' AND state not in ('Destroyed', 'Error', 'Expunging')");
|
||||
pstmt2.setLong(1, account_id);
|
||||
rsCount = pstmt2.executeQuery();
|
||||
if (rsCount.next()) {
|
||||
|
|
@ -184,11 +200,13 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
upgradeResourceCountforAccount(conn, account_id, domain_id, "cpu", 0L);
|
||||
upgradeResourceCountforAccount(conn, account_id, domain_id, "memory", 0L);
|
||||
}
|
||||
rsCount.close();
|
||||
|
||||
// 2. update primary_storage for all accounts
|
||||
pstmt3 =
|
||||
conn.prepareStatement("SELECT sum(size) FROM `cloud`.`volumes` WHERE account_id= ?"
|
||||
+ " AND (path is not NULL OR state in ('Allocated')) AND removed is NULL"
|
||||
+ " AND instance_id IN (SELECT id FROM `cloud`.`vm_instance` WHERE vm_type='User')");
|
||||
conn.prepareStatement("SELECT sum(size) FROM `cloud`.`volumes` WHERE account_id= ?"
|
||||
+ " AND (path is not NULL OR state in ('Allocated')) AND removed is NULL"
|
||||
+ " AND instance_id IN (SELECT id FROM `cloud`.`vm_instance` WHERE vm_type='User')");
|
||||
pstmt3.setLong(1, account_id);
|
||||
rsCount = pstmt3.executeQuery();
|
||||
if (rsCount.next()) {
|
||||
|
|
@ -196,27 +214,35 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
} else {
|
||||
upgradeResourceCountforAccount(conn, account_id, domain_id, "primary_storage", 0L);
|
||||
}
|
||||
rsCount.close();
|
||||
|
||||
// 3. update secondary_storage for all accounts
|
||||
long totalVolumesSize = 0;
|
||||
long totalSnapshotsSize = 0;
|
||||
long totalTemplatesSize = 0;
|
||||
pstmt4 =
|
||||
conn.prepareStatement("SELECT sum(size) FROM `cloud`.`volumes` WHERE account_id= ?"
|
||||
+ " AND path is NULL AND state not in ('Allocated') AND removed is NULL");
|
||||
conn.prepareStatement("SELECT sum(size) FROM `cloud`.`volumes` WHERE account_id= ?"
|
||||
+ " AND path is NULL AND state not in ('Allocated') AND removed is NULL");
|
||||
pstmt4.setLong(1, account_id);
|
||||
rsCount = pstmt4.executeQuery();
|
||||
if (rsCount.next()) {
|
||||
totalVolumesSize = rsCount.getLong(1);
|
||||
}
|
||||
rsCount.close();
|
||||
pstmt4.close();
|
||||
|
||||
pstmt4 = conn.prepareStatement("SELECT sum(size) FROM `cloud`.`snapshots` WHERE account_id= ? AND removed is NULL");
|
||||
pstmt4.setLong(1, account_id);
|
||||
rsCount = pstmt4.executeQuery();
|
||||
if (rsCount.next()) {
|
||||
totalSnapshotsSize = rsCount.getLong(1);
|
||||
}
|
||||
rsCount.close();
|
||||
pstmt4.close();
|
||||
|
||||
pstmt4 =
|
||||
conn.prepareStatement("SELECT sum(template_store_ref.size) FROM `cloud`.`template_store_ref`,`cloud`.`vm_template` WHERE account_id = ?"
|
||||
+ " AND template_store_ref.template_id = vm_template.id AND download_state = 'DOWNLOADED' AND destroyed = false AND removed is NULL");
|
||||
conn.prepareStatement("SELECT sum(template_store_ref.size) FROM `cloud`.`template_store_ref`,`cloud`.`vm_template` WHERE account_id = ?"
|
||||
+ " AND template_store_ref.template_id = vm_template.id AND download_state = 'DOWNLOADED' AND destroyed = false AND removed is NULL");
|
||||
pstmt4.setLong(1, account_id);
|
||||
rsCount = pstmt4.executeQuery();
|
||||
if (rsCount.next()) {
|
||||
|
|
@ -224,6 +250,8 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
}
|
||||
upgradeResourceCountforAccount(conn, account_id, domain_id, "secondary_storage", totalVolumesSize + totalSnapshotsSize + totalTemplatesSize);
|
||||
}
|
||||
rsAccount.close();
|
||||
|
||||
// 4. upgrade cpu,memory,primary_storage,secondary_storage for domains
|
||||
String resource_types[] = {"cpu", "memory", "primary_storage", "secondary_storage"};
|
||||
pstmt5 = conn.prepareStatement("select id FROM `cloud`.`domain`");
|
||||
|
|
@ -238,8 +266,8 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
for (int count = 0; count < resource_types.length; count++) {
|
||||
String resource_type = resource_types[count];
|
||||
pstmt5 =
|
||||
conn.prepareStatement("select account.domain_id,sum(resource_count.count) from `cloud`.`account` left join `cloud`.`resource_count` on account.id=resource_count.account_id "
|
||||
+ "where resource_count.type=? group by account.domain_id;");
|
||||
conn.prepareStatement("select account.domain_id,sum(resource_count.count) from `cloud`.`account` left join `cloud`.`resource_count` on account.id=resource_count.account_id "
|
||||
+ "where resource_count.type=? group by account.domain_id;");
|
||||
pstmt5.setString(1, resource_type);
|
||||
rsCount = pstmt5.executeQuery();
|
||||
while (rsCount.next()) {
|
||||
|
|
@ -253,9 +281,6 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
throw new CloudRuntimeException("Unable to upgrade resource count (cpu,memory,primary_storage,secondary_storage) ", e);
|
||||
} finally {
|
||||
try {
|
||||
if (rs != null) {
|
||||
rs.close();
|
||||
}
|
||||
if (rsAccount != null) {
|
||||
rsAccount.close();
|
||||
}
|
||||
|
|
@ -286,7 +311,7 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
//update or insert into resource_count table.
|
||||
PreparedStatement pstmt = null;
|
||||
pstmt =
|
||||
conn.prepareStatement("INSERT INTO `cloud`.`resource_count` (account_id, type, count) VALUES (?,?,?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), count=?");
|
||||
conn.prepareStatement("INSERT INTO `cloud`.`resource_count` (account_id, type, count) VALUES (?,?,?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), count=?");
|
||||
pstmt.setLong(1, accountId);
|
||||
pstmt.setString(2, type);
|
||||
pstmt.setLong(3, resourceCount);
|
||||
|
|
@ -299,7 +324,7 @@ public class Upgrade420to421 implements DbUpgrade {
|
|||
//update or insert into resource_count table.
|
||||
PreparedStatement pstmt = null;
|
||||
pstmt =
|
||||
conn.prepareStatement("INSERT INTO `cloud`.`resource_count` (domain_id, type, count) VALUES (?,?,?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), count=?");
|
||||
conn.prepareStatement("INSERT INTO `cloud`.`resource_count` (domain_id, type, count) VALUES (?,?,?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), count=?");
|
||||
pstmt.setLong(1, domainId);
|
||||
pstmt.setString(2, type);
|
||||
pstmt.setLong(3, resourceCount);
|
||||
|
|
|
|||
Loading…
Reference in New Issue