[ https://issues.apache.org/jira/browse/CLOUDSTACK-721?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
David Nalley updated CLOUDSTACK-721: ------------------------------------ Priority: Critical (was: Major) > Bytes sent/received in user statistics is empty (CloudStack 4.0) > ---------------------------------------------------------------- > > Key: CLOUDSTACK-721 > URL: https://issues.apache.org/jira/browse/CLOUDSTACK-721 > Project: CloudStack > Issue Type: Bug > Security Level: Public(Anyone can view this level - this is the > default.) > Components: Usage > Affects Versions: 4.0.0 > Reporter: Ilia Shakitko > Assignee: Kishan Kavala > Priority: Critical > Labels: network, usage, user_statistics > Original Estimate: 168h > Remaining Estimate: 168h > > The usage server can give the system usage of each virtual machine (such as > running time, ServiceOffering, IPAddress, Volume, Template, ISO, Port > Forwarding Rule, Network offering), except the network bytes sent/received. > This problem only exists in CloudStack 4.0. In CloudStack 3.0.2, the usage > server works well. > Analysis steps: > 1. Check the CloudStack logs > We can get the logs in /var/log/cloud/management/management-server.log > 2012-12-18 15:05:51,130 DEBUG [agent.transport.Request] > (AgentManager-Handler-8:null) Seq 1-1158742136: Processing: { Ans: , MgmtId: > 345051509349, via: 1, Ver: v1, Flags: 10, > [{"NetworkUsageAnswer":{"routerName":"r-4-VM","bytesSent":5928,"bytesReceived":6188,"result":true,"details":"","wait":0}}] > } > 2012-12-18 15:05:51,130 DEBUG [agent.transport.Request] > (RouterMonitor-1:null) Seq 1-1158742136: Received: { Ans: , MgmtId: > 345051509349, via: 1, Ver: v1, Flags: 10, { NetworkUsageAnswer } } > 2012-12-18 15:05:51,130 DEBUG [agent.manager.AgentManagerImpl] > (RouterMonitor-1:null) Details from executing class > com.cloud.agent.api.NetworkUsageCommand: > 2012-12-18 15:05:51,131 WARN > [network.router.VirtualNetworkApplianceManagerImpl] (RouterMonitor-1:null) > unable to find stats for account: 2 > We can see that AgentManager works well. It can get the network usage. > However, there is a problem in subsequent data processing. > > 2. Check the source code and the value in database. > We can see the data processing procedure in > /cloud-server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java > (I have deleted some unrelated source codes) > public void run() { > for (DomainRouterVO router : routers) { > String privateIP = router.getPrivateIpAddress(); > // from domain_router table (id=4, > name=r-4-VM, vm_instance.private_ip_address=PRIVATE_IP_ADDRESS) > > if (privateIP != null) { > List<? extends Nic> routerNics = _nicDao.listByVmId(router.getId()); > // from nics table (instance_id=4). Found 3 records. > Return (networkid= 204/202/200) > for (Nic routerNic : routerNics) { > Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); > // from nics table. > if (network.getTrafficType() == TrafficType.Public) { > // get traffic_type in networks table. > Return Guest/Control/Public. > UserStatisticsVO previousStats = > _statsDao.findBy(router.getAccountId(), > router.getDataCenterIdToDeployIn(), network.getId(), null, > router.getId(), router.getType().toString()); > > if (answer != null) { > Transaction txn = Transaction.open(Transaction.CLOUD_DB); > try { > txn.start(); > UserStatisticsVO stats = > _statsDao.lock(router.getAccountId(), > router.getDataCenterIdToDeployIn(), network.getId(), > routerNic.getIp4Address(), router.getId(), router.getType().toString()); > // the parameter is “2, 1, 200, PUBLIC_IP_ADDRESS, 4”. It’s inconsistent to > database. > if (stats == null) { > s_logger.warn("unable to find stats for account: " + > router.getAccountId()); > continue; > } > ……………….. > } > We can see the data initialization in > /cloud-server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java > public void addRouterToGuestNetwork(VirtualRouter router, Network > guestNetwork) { > if (stats == null) { > stats = new UserStatisticsVO(router.getAccountId(), > router.getDataCenterIdToDeployIn(), null, router.getId(), > // the parameter is “2, 1, null, 204, 4”. It’s consistent > to database. > router.getType().toString(), guestNetwork.getId()); > _userStatsDao.persist(stats); > } > } > 3. Check the database. We can see the data is same to data in data > initialization in Step (2), but different to data in data processing. > mysql> select > id,data_center_id,account_id,public_ip_address,device_id,device_type,network_id > from user_statistics; > +----+----------------+------------+-------------------+-----------+--------------+------------+ > | id | data_center_id | account_id | public_ip_address | device_id | > device_type | network_id | > +----+----------------+------------+-------------------+-----------+--------------+------------+ > | 1 | 1 | 2 | NULL | > 4 | DomainRouter | 204 | > | 2 | 1 | 2 | NULL | > 6 | DomainRouter | 205 | > > 4. Testing. If we insert a record into the databases. The record is same to > data processing. It will work! > | 3 | 1 | 2 | PUBLIC_IP_ADDRESS | 4 | > DomainRouter | 200 | > ... after 5 minutes, we can get the VR data traffic.It looks like > | id | data_center_id | account_id | public_ip_address | device_id | > device_type | network_id | net_bytes_received | net_bytes_sent | > current_bytes_received | current_bytes_sent | agg_bytes_received | > agg_bytes_sent | > | 3 | 1 | 2 | PUBLIC_IP_ADDRESS | 4 | > DomainRouter | 200 | 0 | > 0 | 2284239008 | 33613977 | > 2284239008 | 33613977 | > > From Step 1 to Step 4, we can conclude that the inconsistent of data > initialization and data processing procedure is the root cause of this > problem. > ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- > We notice that there are some changes of the data processing procedure > between CloudStack 3.0 and CloudStack 4.0. That's why this problem only > exists in CloudStack 4.0.0 > Does anybody know why this change was made or it's just a bug? -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira