From 6bb4af83811377abd4d8d16044f09cf8062c52f1 Mon Sep 17 00:00:00 2001 From: kishan Date: Wed, 12 Jan 2011 19:09:56 +0530 Subject: [PATCH] bug 6947: removed network type from service offering APIs status 6947: resolved fixed --- core/src/com/cloud/event/UsageEventVO.java | 11 +++ .../com/cloud/event/dao/UsageEventDao.java | 8 +- .../cloud/event/dao/UsageEventDaoImpl.java | 80 +++++++------------ setup/db/create-schema.sql | 1 + 4 files changed, 42 insertions(+), 58 deletions(-) diff --git a/core/src/com/cloud/event/UsageEventVO.java b/core/src/com/cloud/event/UsageEventVO.java index 4ed67fe527f..bc21f2c283b 100644 --- a/core/src/com/cloud/event/UsageEventVO.java +++ b/core/src/com/cloud/event/UsageEventVO.java @@ -63,6 +63,9 @@ public class UsageEventVO implements UsageEvent { @Column(name="size") private Long size; + + @Column(name="processed") + boolean processed; public UsageEventVO() { @@ -163,4 +166,12 @@ public class UsageEventVO implements UsageEvent { return size; } + public boolean isProcessed() { + return processed; + } + + public void setProcessed(boolean processed) { + this.processed = processed; + } + } diff --git a/core/src/com/cloud/event/dao/UsageEventDao.java b/core/src/com/cloud/event/dao/UsageEventDao.java index 271856b2f5d..acd6099cca1 100644 --- a/core/src/com/cloud/event/dao/UsageEventDao.java +++ b/core/src/com/cloud/event/dao/UsageEventDao.java @@ -29,13 +29,9 @@ import com.cloud.utils.db.SearchCriteria; public interface UsageEventDao extends GenericDao { - public List searchAllUsageEvents(SearchCriteria sc, Filter filter); + public List listLatestEvents(Date endDate); - public List listLatestEvents(Date recentEventDate, Date endDate); - - public List listAllEvents(Date endDate); - - public List getLatestEventDate(); + public List getLatestEvent(); List getRecentEvents(Date endDate) throws UsageServerException; diff --git a/core/src/com/cloud/event/dao/UsageEventDaoImpl.java b/core/src/com/cloud/event/dao/UsageEventDaoImpl.java index 170892dd95e..70dce7d6dcb 100644 --- a/core/src/com/cloud/event/dao/UsageEventDaoImpl.java +++ b/core/src/com/cloud/event/dao/UsageEventDaoImpl.java @@ -19,7 +19,6 @@ package com.cloud.event.dao; import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.util.Date; import java.util.List; import java.util.TimeZone; @@ -31,6 +30,7 @@ import org.apache.log4j.Logger; import com.cloud.event.UsageEventVO; import com.cloud.exception.UsageServerException; import com.cloud.utils.DateUtil; +import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; @@ -42,58 +42,40 @@ public class UsageEventDaoImpl extends GenericDaoBase implem public static final Logger s_logger = Logger.getLogger(UsageEventDaoImpl.class.getName()); private final SearchBuilder latestEventsSearch; - private final SearchBuilder allEventsSearch; - private static final String GET_LATEST_EVENT_DATE = "SELECT created FROM usage_event ORDER BY created DESC LIMIT 1"; - private static final String COPY_EVENTS = "INSERT INTO cloud_usage.usage_event SELECT id, type, account_id, created, zone_id, resource_id, resource_name, offering_id, template_id, size FROM cloud.usage_event vmevt WHERE vmevt.created > ? and vmevt.created <= ? "; - private static final String COPY_ALL_EVENTS = "INSERT INTO cloud_usage.usage_event SELECT id, type, account_id, created, zone_id, resource_id, resource_name, offering_id, template_id, size FROM cloud.usage_event where created <= ? "; + private static final String COPY_EVENTS = "INSERT INTO cloud_usage.usage_event (id, type, account_id, created, zone_id, resource_id, resource_name, offering_id, template_id, size) " + + "SELECT id, type, account_id, created, zone_id, resource_id, resource_name, offering_id, template_id, size FROM cloud.usage_event vmevt WHERE vmevt.id > ? and vmevt.created <= ? "; + private static final String COPY_ALL_EVENTS = "INSERT INTO cloud_usage.usage_event (id, type, account_id, created, zone_id, resource_id, resource_name, offering_id, template_id, size) " + + "SELECT id, type, account_id, created, zone_id, resource_id, resource_name, offering_id, template_id, size FROM cloud.usage_event where id <= ? "; public UsageEventDaoImpl () { latestEventsSearch = createSearchBuilder(); - latestEventsSearch.and("recentEventDate", latestEventsSearch.entity().getCreateDate(), SearchCriteria.Op.GT); + latestEventsSearch.and("processed", latestEventsSearch.entity().isProcessed(), SearchCriteria.Op.EQ); latestEventsSearch.and("enddate", latestEventsSearch.entity().getCreateDate(), SearchCriteria.Op.LTEQ); latestEventsSearch.done(); - - allEventsSearch = createSearchBuilder(); - allEventsSearch.and("enddate", allEventsSearch.entity().getCreateDate(), SearchCriteria.Op.LTEQ); - allEventsSearch.done(); - } @Override - public List listLatestEvents(Date recentEventDate, Date endDate) { + public List listLatestEvents(Date endDate) { Filter filter = new Filter(UsageEventVO.class, "createDate", Boolean.TRUE, null, null); SearchCriteria sc = latestEventsSearch.create(); - sc.setParameters("recentEventDate", recentEventDate); + sc.setParameters("processed", false); sc.setParameters("enddate", endDate); return listBy(sc, filter); } @Override - public List listAllEvents(Date endDate) { - Filter filter = new Filter(UsageEventVO.class, "createDate", Boolean.TRUE, null, null); - SearchCriteria sc = latestEventsSearch.create(); - sc.setParameters("enddate", endDate); - return listBy(sc, filter); - } - - @Override - public List getLatestEventDate() { - Filter filter = new Filter(UsageEventVO.class, "createDate", Boolean.FALSE, null, 1L); + public List getLatestEvent() { + Filter filter = new Filter(UsageEventVO.class, "id", Boolean.FALSE, Long.valueOf(0), Long.valueOf(1)); return listAll(filter); } - - @Override - public List searchAllUsageEvents(SearchCriteria sc, Filter filter) { - return listIncludingRemovedBy(sc, filter); - } - + @DB public synchronized List getRecentEvents(Date endDate) throws UsageServerException { Transaction txn = Transaction.open(Transaction.USAGE_DB); - Date recentEventDate = getMostRecentEventDate(); + long recentEventId = getMostRecentEventId(); String sql = COPY_EVENTS; - if (recentEventDate == null) { + if (recentEventId == 0) { if (s_logger.isDebugEnabled()) { s_logger.debug("no recent event date, copying all events"); } @@ -105,13 +87,13 @@ public class UsageEventDaoImpl extends GenericDaoBase implem txn.start(); pstmt = txn.prepareAutoCloseStatement(sql); int i = 1; - if (recentEventDate != null) { - pstmt.setString(i++, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), recentEventDate)); + if (recentEventId != 0) { + pstmt.setLong(i++, recentEventId); } pstmt.setString(i, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), endDate)); pstmt.executeUpdate(); txn.commit(); - return findRecentEvents(recentEventDate, endDate); + return findRecentEvents(endDate); } catch (Exception ex) { txn.rollback(); s_logger.error("error copying events from cloud db to usage db", ex); @@ -121,37 +103,31 @@ public class UsageEventDaoImpl extends GenericDaoBase implem } } - private Date getMostRecentEventDate() throws UsageServerException { + @DB + private long getMostRecentEventId() throws UsageServerException { Transaction txn = Transaction.open(Transaction.USAGE_DB); - PreparedStatement pstmt = null; - String sql = GET_LATEST_EVENT_DATE; try { - pstmt = txn.prepareAutoCloseStatement(sql); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) { - String mostRecentTimestampStr = rs.getString(1); - if (mostRecentTimestampStr != null) { - return DateUtil.parseDateString(s_gmtTimeZone, mostRecentTimestampStr); + List latestEvents = getLatestEvent(); + + if(latestEvents !=null && latestEvents.size() == 1){ + UsageEventVO latestEvent = latestEvents.get(0); + if(latestEvent != null){ + return latestEvent.getId(); } } + return 0; } catch (Exception ex) { - s_logger.error("error getting most recent event date", ex); + s_logger.error("error getting most recent event id", ex); throw new UsageServerException(ex.getMessage()); } finally { txn.close(); } - return null; } - private List findRecentEvents(Date recentEventDate, Date endDate) throws UsageServerException { + private List findRecentEvents(Date endDate) throws UsageServerException { Transaction txn = Transaction.open(Transaction.USAGE_DB); try { - int i = 1; - if (recentEventDate == null) { - return listAllEvents(endDate); - } else { - return listLatestEvents(recentEventDate, endDate); - } + return listLatestEvents(endDate); } catch (Exception ex) { s_logger.error("error getting most recent event date", ex); throw new UsageServerException(ex.getMessage()); diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 7ca67a16387..eb88bf6388e 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -1337,6 +1337,7 @@ CREATE TABLE `cloud`.`usage_event` ( `offering_id` bigint unsigned, `template_id` bigint unsigned, `size` bigint unsigned, + `processed` tinyint NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;