Skip to content

Commit f099ff0

Browse files
winterhazeldhslove
authored andcommitted
Network Usage event model adjustments (apache#10755)
1 parent 3f601cb commit f099ff0

File tree

4 files changed

+36
-21
lines changed

4 files changed

+36
-21
lines changed

engine/components-api/src/main/java/com/cloud/event/UsageEventUtils.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@
2525
import javax.annotation.PostConstruct;
2626
import javax.inject.Inject;
2727

28+
import com.cloud.network.Network;
29+
import org.apache.commons.collections.MapUtils;
30+
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
31+
2832
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
2933
import org.apache.cloudstack.framework.events.Event;
3034
import org.apache.cloudstack.framework.events.EventBus;
3135
import org.apache.cloudstack.framework.events.EventDistributor;
32-
import org.apache.commons.collections.MapUtils;
3336
import org.apache.logging.log4j.LogManager;
3437
import org.apache.logging.log4j.Logger;
35-
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
3638

3739
import com.cloud.dc.DataCenterVO;
3840
import com.cloud.dc.dao.DataCenterDao;
@@ -243,4 +245,22 @@ private static void publishUsageEvent(String usageEventType, Long accountId, Lon
243245

244246
static final String Name = "management-server";
245247

248+
public static void publishNetworkCreation(Network network) {
249+
publishUsageEvent(EventTypes.EVENT_NETWORK_CREATE, network.getAccountId(), network.getDataCenterId(),
250+
network.getId(), network.getName(), network.getNetworkOfferingId(), null, null, null, network.getState().name(),
251+
network.getUuid());
252+
}
253+
254+
public static void publishNetworkUpdate(Network network) {
255+
publishUsageEvent(EventTypes.EVENT_NETWORK_UPDATE, network.getAccountId(), network.getDataCenterId(),
256+
network.getId(), network.getName(), network.getNetworkOfferingId(), null, network.getState().name(),
257+
Network.class.getName(), network.getUuid(), true);
258+
}
259+
260+
public static void publishNetworkDeletion(Network network) {
261+
publishUsageEvent(EventTypes.EVENT_NETWORK_DELETE, network.getAccountId(), network.getDataCenterId(),
262+
network.getId(), network.getName(), network.getNetworkOfferingId(), null, null, null,
263+
Network.class.getName(), network.getUuid());
264+
}
265+
246266
}

engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,8 +1531,6 @@ public Pair<NetworkGuru, NetworkVO> implementNetwork(final long networkId, final
15311531
if (isNetworkImplemented(network)) {
15321532
logger.debug("Network {} is already implemented", network);
15331533
implemented.set(guru, network);
1534-
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_UPDATE, network.getAccountId(), network.getDataCenterId(), network.getId(),
1535-
network.getName(), network.getNetworkOfferingId(), null, network.getState().name(), Network.class.getName(), network.getUuid(), true);
15361534
return implemented;
15371535
}
15381536

@@ -1588,9 +1586,8 @@ public Pair<NetworkGuru, NetworkVO> implementNetwork(final long networkId, final
15881586

15891587
network.setRestartRequired(false);
15901588
_networksDao.update(network.getId(), network);
1589+
UsageEventUtils.publishNetworkUpdate(network);
15911590
implemented.set(guru, network);
1592-
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_CREATE, network.getAccountId(), network.getDataCenterId(), network.getId(),
1593-
network.getName(), network.getNetworkOfferingId(), null, null, null, network.getState().name(), network.getUuid());
15941591
return implemented;
15951592
} catch (final NoTransitionException e) {
15961593
logger.error(e.getMessage());
@@ -3089,6 +3086,7 @@ public Network doInTransaction(final TransactionStatus status) {
30893086
if (updateResourceCount) {
30903087
_resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.network, isDisplayNetworkEnabled);
30913088
}
3089+
UsageEventUtils.publishNetworkCreation(network);
30923090

30933091
return network;
30943092
}
@@ -3170,13 +3168,14 @@ public boolean shutdownNetwork(final long networkId, final ReservationContext co
31703168
}
31713169
logger.debug("Lock is acquired for network {} as a part of network shutdown", network);
31723170

3173-
if (network.getState() == Network.State.Allocated) {
3174-
logger.debug("Network is already shutdown: {}", network);
3171+
final Network.State initialState = network.getState();
3172+
if (initialState == Network.State.Allocated) {
3173+
logger.debug(String.format("Network [%s] is in Allocated state, no need to shutdown.", network));
31753174
return true;
31763175
}
31773176

3178-
if (network.getState() != Network.State.Implemented && network.getState() != Network.State.Shutdown) {
3179-
logger.debug("Network is not implemented: {}", network);
3177+
if (initialState != Network.State.Implemented && initialState != Network.State.Shutdown) {
3178+
logger.debug("Network is not implemented: " + network);
31803179
return false;
31813180
}
31823181

@@ -3220,6 +3219,9 @@ public Boolean doInTransaction(final TransactionStatus status) {
32203219
}
32213220
_networksDao.update(networkFinal.getId(), networkFinal);
32223221
_networksDao.clearCheckForGc(networkId);
3222+
if (initialState == Network.State.Implemented) {
3223+
UsageEventUtils.publishNetworkUpdate(networkFinal);
3224+
}
32233225
result = true;
32243226
} else {
32253227
try {
@@ -3471,8 +3473,7 @@ public List<VlanVO> doInTransaction(TransactionStatus status) {
34713473
final Pair<Class<?>, Long> networkMsg = new Pair<Class<?>, Long>(Network.class, networkFinal.getId());
34723474
_messageBus.publish(_name, EntityManager.MESSAGE_REMOVE_ENTITY_EVENT, PublishScope.LOCAL, networkMsg);
34733475
}
3474-
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_DELETE, network.getAccountId(), network.getDataCenterId(), network.getId(),
3475-
network.getName(), network.getNetworkOfferingId(), null, null, null, Network.class.getName(), network.getUuid());
3476+
UsageEventUtils.publishNetworkDeletion(network);
34763477
return true;
34773478
} catch (final CloudRuntimeException e) {
34783479
logger.error("Failed to delete network", e);

engine/orchestration/src/test/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestratorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ public void testShutdownNetworkInImplementingState() {
891891
boolean shutdownNetworkStatus = testOrchestrator.shutdownNetwork(networkId, reservationContext, false);
892892
Assert.assertFalse(shutdownNetworkStatus);
893893

894-
verify(network, times(3)).getState();
894+
verify(network).getState();
895895
verify(testOrchestrator._networksDao, times(1)).acquireInLockTable(networkId, NetworkLockTimeout.value());
896896
verify(testOrchestrator._networksDao, times(1)).releaseFromLockTable(networkId);
897897
}

server/src/main/java/com/cloud/network/NetworkServiceImpl.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2186,12 +2186,7 @@ private Network implementedNetworkInCreation(final Account caller, final DataCen
21862186
if (implementedNetwork == null || implementedNetwork.first() == null) {
21872187
logger.warn("Failed to provision the network " + network);
21882188
}
2189-
Network implemented = implementedNetwork.second();
2190-
if (implemented != null) {
2191-
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_CREATE, implemented.getAccountId(), implemented.getDataCenterId(), implemented.getId(),
2192-
implemented.getName(), implemented.getNetworkOfferingId(), null, null, null, Network.class.getName(), implemented.getUuid());
2193-
}
2194-
return implemented;
2189+
return implementedNetwork.second();
21952190
} catch (ResourceUnavailableException ex) {
21962191
logger.warn("Failed to implement persistent guest network " + network + "due to ", ex);
21972192
CloudRuntimeException e = new CloudRuntimeException("Failed to implement persistent guest network");
@@ -3593,8 +3588,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) {
35933588
}
35943589
}
35953590
Network updatedNetwork = getNetwork(network.getId());
3596-
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_UPDATE, updatedNetwork.getAccountId(), updatedNetwork.getDataCenterId(), updatedNetwork.getId(),
3597-
updatedNetwork.getName(), updatedNetwork.getNetworkOfferingId(), null, updatedNetwork.getState().name(), Network.class.getName(), updatedNetwork.getUuid(), true);
3591+
UsageEventUtils.publishNetworkUpdate(updatedNetwork);
35983592
return updatedNetwork;
35993593
}
36003594

0 commit comments

Comments
 (0)