Skip to content

Commit 2e8d126

Browse files
committed
CLOUDSTACK-2707: use executeBatch instead of persist when Usage Server createNetworkHelperEntry
1 parent 8fd476e commit 2e8d126

3 files changed

Lines changed: 44 additions & 4 deletions

File tree

engine/schema/src/com/cloud/usage/dao/UsageNetworkDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717
package com.cloud.usage.dao;
1818

19+
import java.util.List;
1920
import java.util.Map;
2021

2122
import com.cloud.usage.UsageNetworkVO;
@@ -24,4 +25,5 @@
2425
public interface UsageNetworkDao extends GenericDao<UsageNetworkVO, Long> {
2526
Map<String, UsageNetworkVO> getRecentNetworkStats();
2627
void deleteOldStats(long maxEventTime);
28+
void saveUsageNetworks(List<UsageNetworkVO> usageNetworks);
2729
}

engine/schema/src/com/cloud/usage/dao/UsageNetworkDaoImpl.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.sql.PreparedStatement;
2020
import java.sql.ResultSet;
2121
import java.util.HashMap;
22+
import java.util.List;
2223
import java.util.Map;
2324

2425
import javax.ejb.Local;
@@ -29,6 +30,7 @@
2930
import com.cloud.usage.UsageNetworkVO;
3031
import com.cloud.utils.db.GenericDaoBase;
3132
import com.cloud.utils.db.Transaction;
33+
import com.cloud.utils.exception.CloudRuntimeException;
3234

3335
@Component
3436
@Local(value={UsageNetworkDao.class})
@@ -41,6 +43,8 @@ public class UsageNetworkDaoImpl extends GenericDaoBase<UsageNetworkVO, Long> im
4143
") joinnet on u.account_id = joinnet.acct_id and u.zone_id = joinnet.z_id and u.event_time_millis = joinnet.max_date";
4244
private static final String DELETE_OLD_STATS = "DELETE FROM cloud_usage.usage_network WHERE event_time_millis < ?";
4345

46+
private static final String INSERT_USAGE_NETWORK = "INSERT INTO cloud_usage.usage_network (account_id, zone_id, host_id, host_type, network_id, bytes_sent, bytes_received, agg_bytes_received, agg_bytes_sent, event_time_millis) VALUES (?,?,?,?,?,?,?,?,?,?)";
47+
4448
public UsageNetworkDaoImpl() {
4549
}
4650

@@ -95,4 +99,34 @@ public void deleteOldStats(long maxEventTime) {
9599
s_logger.error("error deleting old usage network stats", ex);
96100
}
97101
}
102+
103+
@Override
104+
public void saveUsageNetworks (List<UsageNetworkVO> usageNetworks) {
105+
Transaction txn = Transaction.currentTxn();
106+
try {
107+
txn.start();
108+
String sql = INSERT_USAGE_NETWORK;
109+
PreparedStatement pstmt = null;
110+
pstmt = txn.prepareAutoCloseStatement(sql); // in reality I just want CLOUD_USAGE dataSource connection
111+
for (UsageNetworkVO usageNetwork : usageNetworks) {
112+
pstmt.setLong(1, usageNetwork.getAccountId());
113+
pstmt.setLong(2, usageNetwork.getZoneId());
114+
pstmt.setLong(3, usageNetwork.getHostId());
115+
pstmt.setString(4, usageNetwork.getHostType());
116+
pstmt.setLong(5, usageNetwork.getNetworkId());
117+
pstmt.setLong(6, usageNetwork.getBytesSent());
118+
pstmt.setLong(7, usageNetwork.getBytesReceived());
119+
pstmt.setLong(8, usageNetwork.getAggBytesReceived());
120+
pstmt.setLong(9, usageNetwork.getAggBytesSent());
121+
pstmt.setLong(10, usageNetwork.getEventTimeMillis());
122+
pstmt.addBatch();
123+
}
124+
pstmt.executeBatch();
125+
txn.commit();
126+
} catch (Exception ex) {
127+
txn.rollback();
128+
s_logger.error("error saving usage_network to cloud_usage db", ex);
129+
throw new CloudRuntimeException(ex.getMessage());
130+
}
131+
}
98132
}

usage/src/com/cloud/usage/UsageManagerImpl.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.net.InetAddress;
2020
import java.sql.SQLException;
21+
import java.util.ArrayList;
2122
import java.util.Calendar;
2223
import java.util.Date;
2324
import java.util.HashMap;
@@ -119,6 +120,7 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna
119120
int m_pid = 0;
120121
TimeZone m_usageTimezone = TimeZone.getTimeZone("GMT");;
121122
private final GlobalLock m_heartbeatLock = GlobalLock.getInternLock("usage.job.heartbeat.check");
123+
private List<UsageNetworkVO> usageNetworks = new ArrayList<UsageNetworkVO>();
122124

123125
private final ScheduledExecutorService m_executor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Usage-Job"));
124126
private final ScheduledExecutorService m_heartbeatExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Usage-HB"));
@@ -547,16 +549,18 @@ public void parse(UsageJobVO job, long startDateMillis, long endDateMillis) {
547549

548550
// loop over the user stats, create delta entries in the usage_network helper table
549551
int numAcctsProcessed = 0;
552+
usageNetworks.clear();
550553
for (String key : aggregatedStats.keySet()) {
551554
UsageNetworkVO currentNetworkStats = null;
552555
if (networkStats != null) {
553556
currentNetworkStats = networkStats.get(key);
554557
}
555-
558+
556559
createNetworkHelperEntry(aggregatedStats.get(key), currentNetworkStats, endDateMillis);
557560
numAcctsProcessed++;
558-
}
559-
561+
}
562+
m_usageNetworkDao.saveUsageNetworks(usageNetworks);
563+
560564
if (s_logger.isDebugEnabled()) {
561565
s_logger.debug("created network stats helper entries for " + numAcctsProcessed + " accts");
562566
}
@@ -999,7 +1003,7 @@ private void createNetworkHelperEntry(UserStatisticsVO userStat, UsageNetworkVO
9991003
s_logger.debug("creating networkHelperEntry... accountId: " + userStat.getAccountId() + " in zone: " + userStat.getDataCenterId() + "; abr: " + userStat.getAggBytesReceived() + "; abs: " + userStat.getAggBytesSent() +
10001004
"; curABS: " + currentAccountedBytesSent + "; curABR: " + currentAccountedBytesReceived + "; ubs: " + bytesSent + "; ubr: " + bytesReceived);
10011005
}
1002-
m_usageNetworkDao.persist(usageNetworkVO);
1006+
usageNetworks.add(usageNetworkVO);
10031007
}
10041008

10051009
private void createIPHelperEvent(UsageEventVO event) {

0 commit comments

Comments
 (0)