@@ -1540,7 +1540,7 @@ private void createVolumeHelperEvent(UsageEventVO event) {
15401540 //For volumes which are 'attached' successfully, set the 'deleted' column in the usage_storage table,
15411541 //so that the secondary storage should stop accounting and only primary will be accounted.
15421542 SearchCriteria <UsageStorageVO > sc = _usageStorageDao .createSearchCriteria ();
1543- sc .addAnd ("id " , SearchCriteria .Op .EQ , volId );
1543+ sc .addAnd ("entityId " , SearchCriteria .Op .EQ , volId );
15441544 sc .addAnd ("storageType" , SearchCriteria .Op .EQ , StorageTypes .VOLUME );
15451545 List <UsageStorageVO > volumesVOs = _usageStorageDao .search (sc , null );
15461546 if (volumesVOs != null ) {
@@ -1595,7 +1595,8 @@ private void createVolumeHelperEvent(UsageEventVO event) {
15951595 //For Upload event add an entry to the usage_storage table.
15961596 SearchCriteria <UsageStorageVO > sc = _usageStorageDao .createSearchCriteria ();
15971597 sc .addAnd ("accountId" , SearchCriteria .Op .EQ , event .getAccountId ());
1598- sc .addAnd ("id" , SearchCriteria .Op .EQ , volId );
1598+ sc .addAnd ("entityId" , SearchCriteria .Op .EQ , volId );
1599+ sc .addAnd ("storageType" , SearchCriteria .Op .EQ , StorageTypes .VOLUME );
15991600 sc .addAnd ("deleted" , SearchCriteria .Op .NULL );
16001601 List <UsageStorageVO > volumesVOs = _usageStorageDao .search (sc , null );
16011602
@@ -1772,7 +1773,7 @@ private void createLoadBalancerHelperEvent(UsageEventVO event) {
17721773 } else if (EventTypes .EVENT_LOAD_BALANCER_DELETE .equals (event .getType ())) {
17731774 SearchCriteria <UsageLoadBalancerPolicyVO > sc = _usageLoadBalancerPolicyDao .createSearchCriteria ();
17741775 sc .addAnd ("accountId" , SearchCriteria .Op .EQ , event .getAccountId ());
1775- sc .addAnd ("id " , SearchCriteria .Op .EQ , id );
1776+ sc .addAnd ("lbId " , SearchCriteria .Op .EQ , id );
17761777 sc .addAnd ("deleted" , SearchCriteria .Op .NULL );
17771778 List <UsageLoadBalancerPolicyVO > lbVOs = _usageLoadBalancerPolicyDao .search (sc , null );
17781779 if (lbVOs .size () > 1 ) {
@@ -1806,7 +1807,7 @@ private void createPortForwardingHelperEvent(UsageEventVO event) {
18061807 } else if (EventTypes .EVENT_NET_RULE_DELETE .equals (event .getType ())) {
18071808 SearchCriteria <UsagePortForwardingRuleVO > sc = _usagePortForwardingRuleDao .createSearchCriteria ();
18081809 sc .addAnd ("accountId" , SearchCriteria .Op .EQ , event .getAccountId ());
1809- sc .addAnd ("id " , SearchCriteria .Op .EQ , id );
1810+ sc .addAnd ("pfId " , SearchCriteria .Op .EQ , id );
18101811 sc .addAnd ("deleted" , SearchCriteria .Op .NULL );
18111812 List <UsagePortForwardingRuleVO > pfVOs = _usagePortForwardingRuleDao .search (sc , null );
18121813 if (pfVOs .size () > 1 ) {
@@ -2104,7 +2105,7 @@ private void createVmSnapshotOnPrimaryEvent(UsageEventVO event) {
21042105 } else if (EventTypes .EVENT_VM_SNAPSHOT_OFF_PRIMARY .equals (event .getType ())) {
21052106 QueryBuilder <UsageSnapshotOnPrimaryVO > sc = QueryBuilder .create (UsageSnapshotOnPrimaryVO .class );
21062107 sc .and (sc .entity ().getAccountId (), SearchCriteria .Op .EQ , event .getAccountId ());
2107- sc .and (sc .entity ().getId (), SearchCriteria .Op .EQ , vmId );
2108+ sc .and (sc .entity ().getVmId (), SearchCriteria .Op .EQ , vmId );
21082109 sc .and (sc .entity ().getName (), SearchCriteria .Op .EQ , name );
21092110 sc .and (sc .entity ().getDeleted (), SearchCriteria .Op .NULL );
21102111 List <UsageSnapshotOnPrimaryVO > vmsnaps = sc .list ();
@@ -2142,33 +2143,90 @@ private void createBackupEvent(final UsageEventVO event) {
21422143 }
21432144
21442145 private void handleNetworkEvent (UsageEventVO event ) {
2146+ String eventType = event .getType ();
2147+ if (EventTypes .EVENT_NETWORK_DELETE .equals (eventType )) {
2148+ removeNetworkHelperEntry (event );
2149+ } else if (EventTypes .EVENT_NETWORK_CREATE .equals (eventType )) {
2150+ createNetworkHelperEntry (event );
2151+ } else if (EventTypes .EVENT_NETWORK_UPDATE .equals (eventType )) {
2152+ updateNetworkHelperEntry (event );
2153+ } else {
2154+ s_logger .error (String .format ("Unknown event type [%s] in Networks event parser. Skipping it." , eventType ));
2155+ }
2156+ }
2157+
2158+ private void removeNetworkHelperEntry (UsageEventVO event ) {
2159+ long networkId = event .getResourceId ();
2160+ s_logger .debug (String .format ("Removing helper entries of network [%s]." , networkId ));
2161+ usageNetworksDao .remove (networkId , event .getCreateDate ());
2162+ }
2163+
2164+ private void createNetworkHelperEntry (UsageEventVO event ) {
2165+ long networkId = event .getResourceId ();
21452166 Account account = _accountDao .findByIdIncludingRemoved (event .getAccountId ());
21462167 long domainId = account .getDomainId ();
2147- if (EventTypes .EVENT_NETWORK_DELETE .equals (event .getType ())) {
2148- usageNetworksDao .remove (event .getResourceId (), event .getCreateDate ());
2149- } else if (EventTypes .EVENT_NETWORK_CREATE .equals (event .getType ())) {
2150- UsageNetworksVO usageNetworksVO = new UsageNetworksVO (event .getResourceId (), event .getOfferingId (), event .getZoneId (), event .getAccountId (), domainId , Network .State .Allocated .name (), event .getCreateDate (), null );
2151- usageNetworksDao .persist (usageNetworksVO );
2152- } else if (EventTypes .EVENT_NETWORK_UPDATE .equals (event .getType ())) {
2153- usageNetworksDao .update (event .getResourceId (), event .getOfferingId (), event .getResourceType ());
2154- } else {
2155- s_logger .error (String .format ("Unknown event type [%s] in Networks event parser. Skipping it." , event .getType ()));
2168+
2169+ List <UsageNetworksVO > entries = usageNetworksDao .listAll (networkId );
2170+ if (!entries .isEmpty ()) {
2171+ s_logger .warn (String .format ("Received a NETWORK.CREATE event for a network [%s] that already has helper entries; " +
2172+ "therefore, we will not create a new one." , networkId ));
2173+ return ;
21562174 }
2175+
2176+ s_logger .debug (String .format ("Creating a helper entry for network [%s]." , networkId ));
2177+ UsageNetworksVO usageNetworksVO = new UsageNetworksVO (networkId , event .getOfferingId (), event .getZoneId (),
2178+ event .getAccountId (), domainId , Network .State .Allocated .name (), event .getCreateDate (), null );
2179+ usageNetworksDao .persist (usageNetworksVO );
21572180 }
21582181
2159- private void handleVpcEvent (UsageEventVO event ) {
2182+ private void updateNetworkHelperEntry (UsageEventVO event ) {
2183+ long networkId = event .getResourceId ();
21602184 Account account = _accountDao .findByIdIncludingRemoved (event .getAccountId ());
21612185 long domainId = account .getDomainId ();
2162- if (EventTypes .EVENT_VPC_DELETE .equals (event .getType ())) {
2163- usageVpcDao .remove (event .getResourceId (), event .getCreateDate ());
2164- } else if (EventTypes .EVENT_VPC_CREATE .equals (event .getType ())) {
2165- UsageVpcVO usageVPCVO = new UsageVpcVO (event .getResourceId (), event .getZoneId (), event .getAccountId (), domainId , Vpc .State .Enabled .name (), event .getCreateDate (), null );
2166- usageVpcDao .persist (usageVPCVO );
2186+
2187+ s_logger .debug (String .format ("Marking previous helper entries of network [%s] as removed." , networkId ));
2188+ usageNetworksDao .remove (networkId , event .getCreateDate ());
2189+
2190+ s_logger .debug (String .format ("Creating an updated helper entry for network [%s]." , networkId ));
2191+ UsageNetworksVO usageNetworksVO = new UsageNetworksVO (networkId , event .getOfferingId (), event .getZoneId (),
2192+ event .getAccountId (), domainId , event .getResourceType (), event .getCreateDate (), null );
2193+ usageNetworksDao .persist (usageNetworksVO );
2194+ }
2195+
2196+ private void handleVpcEvent (UsageEventVO event ) {
2197+ String eventType = event .getType ();
2198+ if (EventTypes .EVENT_VPC_DELETE .equals (eventType )) {
2199+ removeVpcHelperEntry (event );
2200+ } else if (EventTypes .EVENT_VPC_CREATE .equals (eventType )) {
2201+ createVpcHelperEntry (event );
21672202 } else {
2168- s_logger .error (String .format ("Unknown event type [%s] in VPC event parser. Skipping it." , event . getType () ));
2203+ s_logger .error (String .format ("Unknown event type [%s] in VPC event parser. Skipping it." , eventType ));
21692204 }
21702205 }
21712206
2207+ private void removeVpcHelperEntry (UsageEventVO event ) {
2208+ long vpcId = event .getResourceId ();
2209+ s_logger .debug (String .format ("Removing helper entries of VPC [%s]." , vpcId ));
2210+ usageVpcDao .remove (vpcId , event .getCreateDate ());
2211+ }
2212+
2213+ private void createVpcHelperEntry (UsageEventVO event ) {
2214+ long vpcId = event .getResourceId ();
2215+ Account account = _accountDao .findByIdIncludingRemoved (event .getAccountId ());
2216+ long domainId = account .getDomainId ();
2217+
2218+ List <UsageVpcVO > entries = usageVpcDao .listAll (vpcId );
2219+ if (!entries .isEmpty ()) {
2220+ s_logger .warn (String .format ("Active helper entries already exist for VPC [%s]; therefore, we will not create a new one." ,
2221+ vpcId ));
2222+ return ;
2223+ }
2224+
2225+ s_logger .debug (String .format ("Creating a helper entry for VPC [%s]." , vpcId ));
2226+ UsageVpcVO usageVPCVO = new UsageVpcVO (vpcId , event .getZoneId (), event .getAccountId (), domainId , Vpc .State .Enabled .name (), event .getCreateDate (), null );
2227+ usageVpcDao .persist (usageVPCVO );
2228+ }
2229+
21722230 private class Heartbeat extends ManagedContextRunnable {
21732231 @ Override
21742232 protected void runInContext () {
0 commit comments