CLOUDSTACK-2707: use executeBatch instead of persist when Usage Server 
createNetworkHelperEntry


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/2e8d1264
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2e8d1264
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2e8d1264

Branch: refs/heads/vmware-storage-motion
Commit: 2e8d1264a247772b5dfda5bcab26fa5ed384a6d9
Parents: 8fd476e
Author: Wei Zhou <w.z...@leaseweb.com>
Authored: Tue May 28 09:43:23 2013 +0200
Committer: Wei Zhou <w.z...@leaseweb.com>
Committed: Tue May 28 09:43:23 2013 +0200

----------------------------------------------------------------------
 .../src/com/cloud/usage/dao/UsageNetworkDao.java   |    2 +
 .../com/cloud/usage/dao/UsageNetworkDaoImpl.java   |   34 +++++++++++++++
 usage/src/com/cloud/usage/UsageManagerImpl.java    |   12 +++--
 3 files changed, 44 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e8d1264/engine/schema/src/com/cloud/usage/dao/UsageNetworkDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageNetworkDao.java 
b/engine/schema/src/com/cloud/usage/dao/UsageNetworkDao.java
index 0f7c771..aa43eab 100644
--- a/engine/schema/src/com/cloud/usage/dao/UsageNetworkDao.java
+++ b/engine/schema/src/com/cloud/usage/dao/UsageNetworkDao.java
@@ -16,6 +16,7 @@
 // under the License.
 package com.cloud.usage.dao;
 
+import java.util.List;
 import java.util.Map;
 
 import com.cloud.usage.UsageNetworkVO;
@@ -24,4 +25,5 @@ import com.cloud.utils.db.GenericDao;
 public interface UsageNetworkDao extends GenericDao<UsageNetworkVO, Long> {
     Map<String, UsageNetworkVO> getRecentNetworkStats();
     void deleteOldStats(long maxEventTime);
+    void saveUsageNetworks(List<UsageNetworkVO> usageNetworks);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e8d1264/engine/schema/src/com/cloud/usage/dao/UsageNetworkDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/usage/dao/UsageNetworkDaoImpl.java 
b/engine/schema/src/com/cloud/usage/dao/UsageNetworkDaoImpl.java
index d64fd80..af8083a 100644
--- a/engine/schema/src/com/cloud/usage/dao/UsageNetworkDaoImpl.java
+++ b/engine/schema/src/com/cloud/usage/dao/UsageNetworkDaoImpl.java
@@ -19,6 +19,7 @@ package com.cloud.usage.dao;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.ejb.Local;
@@ -29,6 +30,7 @@ import org.springframework.stereotype.Component;
 import com.cloud.usage.UsageNetworkVO;
 import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.Transaction;
+import com.cloud.utils.exception.CloudRuntimeException;
 
 @Component
 @Local(value={UsageNetworkDao.class})
@@ -41,6 +43,8 @@ public class UsageNetworkDaoImpl extends 
GenericDaoBase<UsageNetworkVO, Long> im
                                                                                
                         ") joinnet on u.account_id = joinnet.acct_id and 
u.zone_id = joinnet.z_id and u.event_time_millis = joinnet.max_date";
        private static final String DELETE_OLD_STATS = "DELETE FROM 
cloud_usage.usage_network WHERE event_time_millis < ?";
 
+       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 (?,?,?,?,?,?,?,?,?,?)";
+
        public UsageNetworkDaoImpl() {
        }
 
@@ -95,4 +99,34 @@ public class UsageNetworkDaoImpl extends 
GenericDaoBase<UsageNetworkVO, Long> im
             s_logger.error("error deleting old usage network stats", ex);
         }
        }
+
+    @Override
+    public void saveUsageNetworks (List<UsageNetworkVO> usageNetworks) {
+        Transaction txn = Transaction.currentTxn();
+        try {
+            txn.start();
+            String sql = INSERT_USAGE_NETWORK;
+            PreparedStatement pstmt = null;
+            pstmt = txn.prepareAutoCloseStatement(sql); // in reality I just 
want CLOUD_USAGE dataSource connection
+            for (UsageNetworkVO usageNetwork : usageNetworks) {
+                pstmt.setLong(1, usageNetwork.getAccountId());
+                pstmt.setLong(2, usageNetwork.getZoneId());
+                pstmt.setLong(3, usageNetwork.getHostId());
+                pstmt.setString(4, usageNetwork.getHostType());
+                pstmt.setLong(5, usageNetwork.getNetworkId());
+                pstmt.setLong(6, usageNetwork.getBytesSent());
+                pstmt.setLong(7, usageNetwork.getBytesReceived());
+                pstmt.setLong(8, usageNetwork.getAggBytesReceived());
+                pstmt.setLong(9, usageNetwork.getAggBytesSent());
+                pstmt.setLong(10, usageNetwork.getEventTimeMillis());
+                pstmt.addBatch();
+            }
+            pstmt.executeBatch();
+            txn.commit();
+        } catch (Exception ex) {
+            txn.rollback();
+            s_logger.error("error saving usage_network to cloud_usage db", ex);
+            throw new CloudRuntimeException(ex.getMessage());
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e8d1264/usage/src/com/cloud/usage/UsageManagerImpl.java
----------------------------------------------------------------------
diff --git a/usage/src/com/cloud/usage/UsageManagerImpl.java 
b/usage/src/com/cloud/usage/UsageManagerImpl.java
index 16fe67b..0c2ad6e 100644
--- a/usage/src/com/cloud/usage/UsageManagerImpl.java
+++ b/usage/src/com/cloud/usage/UsageManagerImpl.java
@@ -18,6 +18,7 @@ package com.cloud.usage;
 
 import java.net.InetAddress;
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
@@ -119,6 +120,7 @@ public class UsageManagerImpl extends ManagerBase 
implements UsageManager, Runna
     int m_pid = 0;
     TimeZone m_usageTimezone = TimeZone.getTimeZone("GMT");;
     private final GlobalLock m_heartbeatLock = 
GlobalLock.getInternLock("usage.job.heartbeat.check");
+    private List<UsageNetworkVO> usageNetworks = new 
ArrayList<UsageNetworkVO>();
 
     private final ScheduledExecutorService m_executor = 
Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Usage-Job"));
     private final ScheduledExecutorService m_heartbeatExecutor = 
Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Usage-HB"));
@@ -547,16 +549,18 @@ public class UsageManagerImpl extends ManagerBase 
implements UsageManager, Runna
 
                 // loop over the user stats, create delta entries in the 
usage_network helper table
                 int numAcctsProcessed = 0;
+                usageNetworks.clear();
                 for (String key : aggregatedStats.keySet()) {
                     UsageNetworkVO currentNetworkStats = null;
                     if (networkStats != null) {
                         currentNetworkStats = networkStats.get(key);
                     }
-                    
+
                     createNetworkHelperEntry(aggregatedStats.get(key), 
currentNetworkStats, endDateMillis);
                     numAcctsProcessed++;
-                }                                
-                                                                            
+                }
+                m_usageNetworkDao.saveUsageNetworks(usageNetworks);
+
                 if (s_logger.isDebugEnabled()) {
                     s_logger.debug("created network stats helper entries for " 
+ numAcctsProcessed + " accts");
                 }
@@ -999,7 +1003,7 @@ public class UsageManagerImpl extends ManagerBase 
implements UsageManager, Runna
             s_logger.debug("creating networkHelperEntry... accountId: " + 
userStat.getAccountId() + " in zone: " + userStat.getDataCenterId() + "; abr: " 
+ userStat.getAggBytesReceived() + "; abs: " + userStat.getAggBytesSent() +
                     "; curABS: " + currentAccountedBytesSent + "; curABR: " + 
currentAccountedBytesReceived + "; ubs: " + bytesSent + "; ubr: " + 
bytesReceived);
         }
-        m_usageNetworkDao.persist(usageNetworkVO);
+        usageNetworks.add(usageNetworkVO);
     }
 
     private void createIPHelperEvent(UsageEventVO event) {

Reply via email to