You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2013/02/01 20:38:10 UTC
[48/50] [abbrv] Sync master to javelin one more time
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/NetworkServiceImpl.java
index f0282ab,622b448..6872c3f
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@@ -79,20 -47,7 +72,21 @@@ import com.cloud.network.Networks.Traff
import com.cloud.network.PhysicalNetwork.BroadcastDomainRange;
import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType;
import com.cloud.network.addr.PublicIp;
+import com.cloud.network.dao.FirewallRulesDao;
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.dao.IPAddressVO;
+import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.dao.NetworkDomainDao;
+import com.cloud.network.dao.NetworkDomainVO;
+import com.cloud.network.dao.NetworkServiceMapDao;
+import com.cloud.network.dao.NetworkVO;
+import com.cloud.network.dao.PhysicalNetworkDao;
+import com.cloud.network.dao.PhysicalNetworkServiceProviderDao;
+import com.cloud.network.dao.PhysicalNetworkServiceProviderVO;
+import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao;
+import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO;
+import com.cloud.network.dao.PhysicalNetworkVO;
+ import com.cloud.network.dao.*;
import com.cloud.network.element.NetworkElement;
import com.cloud.network.element.VirtualRouterElement;
import com.cloud.network.element.VpcVirtualRouterElement;
@@@ -124,27 -73,31 +112,22 @@@ import com.cloud.user.dao.AccountDao
import com.cloud.utils.AnnotationHelper;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager;
+import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+ import com.cloud.utils.db.*;
import com.cloud.utils.db.SearchCriteria.Op;
- import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
- import com.cloud.vm.NicVO;
- import com.cloud.vm.ReservationContext;
- import com.cloud.vm.ReservationContextImpl;
- import com.cloud.vm.SecondaryStorageVmVO;
- import com.cloud.vm.UserVmVO;
- import com.cloud.vm.VMInstanceVO;
- import com.cloud.vm.VirtualMachine;
+ import com.cloud.vm.*;
import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.VMInstanceDao;
-import org.apache.cloudstack.acl.ControlledEntity.ACLType;
-import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd;
-import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;
-import org.apache.cloudstack.api.command.user.network.ListNetworksCmd;
-import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;
-import org.apache.log4j.Logger;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-import java.security.InvalidParameterException;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
+ import java.util.*;
/**
* NetworkServiceImpl implements NetworkService.
@@@ -1688,10 -1648,8 +1671,8 @@@ public class NetworkServiceImpl extend
continue;
}
long isDefault = (nic.isDefaultNic()) ? 1 : 0;
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), null, oldNetworkOfferingId, null, 0L);
- _usageEventDao.persist(usageEvent);
- usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), vm.getHostName(), networkOfferingId, null, isDefault);
- _usageEventDao.persist(usageEvent);
- UsageEventUtils.saveUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), null, oldNetworkOfferingId, null, 0L);
- UsageEventUtils.saveUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), vm.getHostName(), networkOfferingId, null, isDefault);
++ UsageEventUtils.saveUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), null, oldNetworkOfferingId, null, 0L);
++ UsageEventUtils.saveUsageEvent(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), vm.getHostName(), networkOfferingId, null, isDefault);
}
txn.commit();
} else {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/NetworkStateListener.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/NetworkStateListener.java
index 0000000,a379286..bafe6d2
mode 000000,100644..100644
--- a/server/src/com/cloud/network/NetworkStateListener.java
+++ b/server/src/com/cloud/network/NetworkStateListener.java
@@@ -1,0 -1,107 +1,98 @@@
+ // Licensed to the Apache Software Foundation (ASF) under one
+ // or more contributor license agreements. See the NOTICE file
+ // distributed with this work for additional information
+ // regarding copyright ownership. The ASF licenses this file
+ // to you under the Apache License, Version 2.0 (the
+ // "License"); you may not use this file except in compliance
+ // with the License. You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing,
+ // software distributed under the License is distributed on an
+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ // KIND, either express or implied. See the License for the
+ // specific language governing permissions and limitations
+ // under the License.
+
+ package com.cloud.network;
+
+ import com.cloud.event.EventCategory;
+ import com.cloud.event.dao.UsageEventDao;
+ import com.cloud.network.Network.Event;
+ import com.cloud.network.Network.State;
+ import com.cloud.network.dao.NetworkDao;
+ import com.cloud.server.ManagementServer;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.ComponentLocator;
+ import com.cloud.utils.fsm.StateListener;
+ import org.apache.cloudstack.framework.events.EventBus;
+ import org.apache.cloudstack.framework.events.EventBusException;
+ import org.apache.log4j.Logger;
+
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Map;
+
++import javax.inject.Inject;
++
+ public class NetworkStateListener implements StateListener<State, Event, Network> {
+
- protected UsageEventDao _usageEventDao;
- protected NetworkDao _networkDao;
++ @Inject protected UsageEventDao _usageEventDao;
++ @Inject protected NetworkDao _networkDao;
+
+ // get the event bus provider if configured
- protected static EventBus _eventBus = null;
- static {
- Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement(); // configure event bus if configured
- }
- }
- }
++ @Inject protected EventBus _eventBus;
+
+ private static final Logger s_logger = Logger.getLogger(NetworkStateListener.class);
+
+ public NetworkStateListener(UsageEventDao usageEventDao, NetworkDao networkDao) {
+ this._usageEventDao = usageEventDao;
+ this._networkDao = networkDao;
+ }
+
+ @Override
+ public boolean preStateTransitionEvent(State oldState, Event event, State newState, Network vo, boolean status, Object opaque) {
+ pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, oldState, newState);
+ return true;
+ }
+
+ @Override
+ public boolean postStateTransitionEvent(State oldState, Event event, State newState, Network vo, boolean status, Object opaque) {
+ pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, oldState, newState);
+ return true;
+ }
+
+ private void pubishOnEventBus(String event, String status, Network vo, State oldState, State newState) {
+
+ if (_eventBus == null) {
+ return; // no provider is configured to provide events bus, so just return
+ }
+
+ String resourceName = getEntityFromClassName(Network.class.getName());
+ org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
+ ManagementServer.Name,
+ EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
+ event,
+ resourceName,
+ vo.getUuid());
+ Map<String, String> eventDescription = new HashMap<String, String>();
+ eventDescription.put("resource", resourceName);
+ eventDescription.put("id", vo.getUuid());
+ eventDescription.put("old-state", oldState.name());
+ eventDescription.put("new-state", newState.name());
+ eventMsg.setDescription(eventDescription);
+ try {
+ _eventBus.publish(eventMsg);
+ } catch (EventBusException e) {
+ s_logger.warn("Failed to publish state change event on the the event bus.");
+ }
+ }
+
+ private String getEntityFromClassName(String entityClassName) {
+ int index = entityClassName.lastIndexOf(".");
+ String entityName = entityClassName;
+ if (index != -1) {
+ entityName = entityClassName.substring(index+1);
+ }
+ return entityName;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/dao/NetworkDao.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/dao/NetworkDao.java
index 342a2c5,18dcb6f..1d3f0b8
--- a/server/src/com/cloud/network/dao/NetworkDao.java
+++ b/server/src/com/cloud/network/dao/NetworkDao.java
@@@ -21,11 -21,15 +21,13 @@@ import java.util.Map
import com.cloud.network.Network;
import com.cloud.network.Network.GuestType;
-import com.cloud.network.NetworkAccountVO;
-import com.cloud.network.NetworkVO;
import com.cloud.network.Networks.TrafficType;
+ import com.cloud.network.Network.State;
import com.cloud.utils.db.GenericDao;
import com.cloud.utils.db.SearchBuilder;
+ import com.cloud.utils.fsm.StateDao;
- public interface NetworkDao extends GenericDao<NetworkVO, Long> {
+ public interface NetworkDao extends GenericDao<NetworkVO, Long> , StateDao<State, Network.Event, Network> {
List<NetworkVO> listByOwner(long ownerId);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/dao/NetworkDaoImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/dao/NetworkDaoImpl.java
index 60f421b,2c5b46d..8fadf04
--- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java
+++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java
@@@ -32,6 -28,13 +32,8 @@@ import com.cloud.network.Network
import com.cloud.network.Network.GuestType;
import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service;
+ import com.cloud.network.Network.State;
+ import com.cloud.network.Network.Event;
-import com.cloud.network.NetworkAccountDaoImpl;
-import com.cloud.network.NetworkAccountVO;
-import com.cloud.network.NetworkDomainVO;
-import com.cloud.network.NetworkServiceMapVO;
-import com.cloud.network.NetworkVO;
import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.Networks.Mode;
import com.cloud.network.Networks.TrafficType;
@@@ -40,20 -43,19 +42,17 @@@ import com.cloud.offerings.NetworkOffer
import com.cloud.offerings.dao.NetworkOfferingDaoImpl;
import com.cloud.server.ResourceTag.TaggedResourceType;
import com.cloud.tags.dao.ResourceTagsDaoImpl;
-import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.GenericSearchBuilder;
+import com.cloud.utils.db.JoinBuilder;
+ import com.cloud.utils.db.*;
import com.cloud.utils.db.JoinBuilder.JoinType;
- import com.cloud.utils.db.SearchBuilder;
- import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Func;
import com.cloud.utils.db.SearchCriteria.Op;
- import com.cloud.utils.db.SequenceFetcher;
- import com.cloud.utils.db.Transaction;
import com.cloud.utils.net.NetUtils;
-import javax.ejb.Local;
-import javax.persistence.TableGenerator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
+@Component
@Local(value = NetworkDao.class)
@DB(txn = false)
public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> implements NetworkDao {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/dao/NetworkVO.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/dao/NetworkVO.java
index 5ecb22f,0000000..d51a065
mode 100644,000000..100644
--- a/server/src/com/cloud/network/dao/NetworkVO.java
+++ b/server/src/com/cloud/network/dao/NetworkVO.java
@@@ -1,523 -1,0 +1,524 @@@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.network.dao;
+
+import java.net.URI;
+import java.util.Date;
+import java.util.UUID;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+import javax.persistence.Transient;
+
+import org.apache.cloudstack.acl.ControlledEntity;
+
+import com.cloud.network.Network;
+import com.cloud.network.Networks;
+import com.cloud.network.Network.GuestType;
+import com.cloud.network.Network.State;
+import com.cloud.network.Networks.BroadcastDomainType;
+import com.cloud.network.Networks.Mode;
+import com.cloud.network.Networks.TrafficType;
+import com.cloud.utils.NumbersUtil;
+import com.cloud.utils.db.GenericDao;
+import com.cloud.utils.net.NetUtils;
+
+/**
+ * NetworkConfigurationVO contains information about a specific network.
+ *
+ */
+@Entity
+@Table(name="networks")
+public class NetworkVO implements Network {
+ @Id
+ @TableGenerator(name="networks_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="networks_seq", allocationSize=1)
+ @Column(name="id")
+ long id;
+
+ @Column(name="mode")
+ @Enumerated(value=EnumType.STRING)
+ Mode mode;
+
+ @Column(name="broadcast_domain_type")
+ @Enumerated(value=EnumType.STRING)
+ BroadcastDomainType broadcastDomainType;
+
+ @Column(name="traffic_type")
+ @Enumerated(value=EnumType.STRING)
+ TrafficType trafficType;
+
+ @Column(name="name")
+ String name;
+
+ @Column(name="display_text")
+ String displayText;;
+
+ @Column(name="broadcast_uri")
+ URI broadcastUri;
+
+ @Column(name="gateway")
+ String gateway;
+
+ @Column(name="cidr")
+ String cidr;
+
+ @Column(name="network_offering_id")
+ long networkOfferingId;
+
+ @Column(name="vpc_id")
+ Long vpcId;
+
+ @Column(name="physical_network_id")
+ Long physicalNetworkId;
+
+ @Column(name="data_center_id")
+ long dataCenterId;
+
+ @Column(name="related")
+ long related;
+
+ @Column(name="guru_name")
+ String guruName;
+
+ @Column(name="state")
+ @Enumerated(value=EnumType.STRING)
+ State state;
+
+ @Column(name="dns1")
+ String dns1;
+
+ @Column(name="domain_id")
+ long domainId;
+
+ @Column(name="account_id")
+ long accountId;
+
+ @Column(name="set_fields")
+ long setFields;
+
+ @TableGenerator(name="mac_address_seq", table="op_networks", pkColumnName="id", valueColumnName="mac_address_seq", allocationSize=1)
+ @Transient
+ long macAddress = 1;
+
+ @Column(name="guru_data", length=1024)
+ String guruData;
+
+ @Column(name="dns2")
+ String dns2;
+
+ @Column(name="network_domain")
+ String networkDomain;
+
+ @Column(name=GenericDao.REMOVED_COLUMN)
+ Date removed;
+
+ @Column(name=GenericDao.CREATED_COLUMN)
+ Date created;
+
+ @Column(name="reservation_id")
+ String reservationId;
+
+ @Column(name="uuid")
+ String uuid;
+
+ @Column(name="guest_type")
+ @Enumerated(value=EnumType.STRING)
+ Network.GuestType guestType;
+
+ @Column(name="acl_type")
+ @Enumerated(value=EnumType.STRING)
+ ControlledEntity.ACLType aclType;
+
+ @Column(name="restart_required")
+ boolean restartRequired = false;
+
+ @Column(name="specify_ip_ranges")
+ boolean specifyIpRanges = false;
+
+ @Column(name="ip6_gateway")
+ String ip6Gateway;
+
+ @Column(name="ip6_cidr")
+ String ip6Cidr;
+
+ public NetworkVO() {
+ this.uuid = UUID.randomUUID().toString();
+ }
+
+ /**
+ * Constructor to be used for the adapters because it only initializes what's needed.
+ * @param trafficType
+ * @param mode
+ * @param broadcastDomainType
+ * @param networkOfferingId
+ * @param state TODO
+ * @param dataCenterId
+ * @param physicalNetworkId TODO
+ */
+ public NetworkVO(TrafficType trafficType, Mode mode, BroadcastDomainType broadcastDomainType, long networkOfferingId,
+ State state, long dataCenterId, Long physicalNetworkId) {
+ this.trafficType = trafficType;
+ this.mode = mode;
+ this.broadcastDomainType = broadcastDomainType;
+ this.networkOfferingId = networkOfferingId;
+ this.dataCenterId = dataCenterId;
+ this.physicalNetworkId = physicalNetworkId;
+ if (state == null) {
+ state = State.Allocated;
+ } else {
+ this.state = state;
+ }
+ this.id = -1;
+ this.uuid = UUID.randomUUID().toString();
+ }
+
+ public NetworkVO(long id, Network that, long offeringId, String guruName, long domainId, long accountId,
+ long related, String name, String displayText, String networkDomain, GuestType guestType, long dcId,
+ Long physicalNetworkId, ACLType aclType, boolean specifyIpRanges, Long vpcId) {
+ this(id, that.getTrafficType(), that.getMode(), that.getBroadcastDomainType(), offeringId, domainId, accountId,
+ related, name, displayText, networkDomain, guestType, dcId, physicalNetworkId, aclType, specifyIpRanges, vpcId);
+ this.gateway = that.getGateway();
+ this.cidr = that.getCidr();
+ this.broadcastUri = that.getBroadcastUri();
+ this.broadcastDomainType = that.getBroadcastDomainType();
+ this.guruName = guruName;
+ this.state = that.getState();
+ if (state == null) {
+ state = State.Allocated;
+ }
+ this.uuid = UUID.randomUUID().toString();
+ this.ip6Gateway = that.getIp6Gateway();
+ this.ip6Cidr = that.getIp6Cidr();
+ }
+
+ /**
+ * Constructor for the actual DAO object.
+ * @param trafficType
+ * @param mode
+ * @param broadcastDomainType
+ * @param networkOfferingId
+ * @param domainId
+ * @param accountId
+ * @param name
+ * @param displayText
+ * @param networkDomain
+ * @param guestType TODO
+ * @param aclType TODO
+ * @param specifyIpRanges TODO
+ * @param vpcId TODO
+ * @param dataCenterId
+ */
+ public NetworkVO(long id, TrafficType trafficType, Mode mode, BroadcastDomainType broadcastDomainType,
+ long networkOfferingId, long domainId, long accountId, long related, String name, String displayText,
+ String networkDomain, GuestType guestType, long dcId, Long physicalNetworkId, ACLType aclType, boolean specifyIpRanges, Long vpcId) {
+ this(trafficType, mode, broadcastDomainType, networkOfferingId, State.Allocated, dcId, physicalNetworkId);
+ this.domainId = domainId;
+ this.accountId = accountId;
+ this.related = related;
+ this.id = id;
+ this.name = name;
+ this.displayText = displayText;
+ this.aclType = aclType;
+ this.networkDomain = networkDomain;
+ this.uuid = UUID.randomUUID().toString();
+ this.guestType = guestType;
+ this.specifyIpRanges = specifyIpRanges;
+ this.vpcId = vpcId;
+ }
+
+ @Override
+ public String getReservationId() {
+ return reservationId;
+ }
+
+ public void setReservationId(String reservationId) {
+ this.reservationId = reservationId;
+ }
+
+ @Override
+ public State getState() {
+ return state;
+ }
+
++ // don't use this directly when possible, use Network state machine instead
+ public void setState(State state) {
+ this.state = state;
+ }
+
+ @Override
+ public long getRelated() {
+ return related;
+ }
+
+ @Override
+ public long getId() {
+ return id;
+ }
+
+ @Override
+ public Mode getMode() {
+ return mode;
+ }
+
+ @Override
+ public long getAccountId() {
+ return accountId;
+ }
+
+ @Override
+ public long getDomainId() {
+ return domainId;
+ }
+
+ @Override
+ public long getNetworkOfferingId() {
+ return networkOfferingId;
+ }
+
+ public void setNetworkOfferingId(long networkOfferingId) {
+ this.networkOfferingId = networkOfferingId;
+ }
+
+ public void setMode(Mode mode) {
+ this.mode = mode;
+ }
+
+ @Override
+ public BroadcastDomainType getBroadcastDomainType() {
+ return broadcastDomainType;
+ }
+
+ public String getGuruData() {
+ return guruData;
+ }
+
+ public void setGuruData(String guruData) {
+ this.guruData = guruData;
+ }
+
+ public String getGuruName() {
+ return guruName;
+ }
+
+ public void setGuruName(String guruName) {
+ this.guruName = guruName;
+ }
+
+ public void setBroadcastDomainType(BroadcastDomainType broadcastDomainType) {
+ this.broadcastDomainType = broadcastDomainType;
+ }
+
+ @Override
+ public String getNetworkDomain() {
+ return networkDomain;
+ }
+
+ public void setNetworkDomain(String networkDomain) {
+ this.networkDomain = networkDomain;
+ }
+
+ @Override
+ public TrafficType getTrafficType() {
+ return trafficType;
+ }
+
+ public void setTrafficType(TrafficType trafficType) {
+ this.trafficType = trafficType;
+ }
+
+ @Override
+ public String getGateway() {
+ return gateway;
+ }
+
+ public void setGateway(String gateway) {
+ this.gateway = gateway;
+ }
+
+ @Override
+ public String getCidr() {
+ return cidr;
+ }
+
+ public void setCidr(String cidr) {
+ this.cidr = cidr;
+ }
+
+ @Override
+ public URI getBroadcastUri() {
+ return broadcastUri;
+ }
+
+ public void setBroadcastUri(URI broadcastUri) {
+ this.broadcastUri = broadcastUri;
+ }
+
+ @Override
+ public int hashCode() {
+ return NumbersUtil.hash(id);
+ }
+
+ @Override
+ public Long getPhysicalNetworkId() {
+ return physicalNetworkId;
+ }
+
+ @Override
+ public void setPhysicalNetworkId(Long physicalNetworkId) {
+ this.physicalNetworkId = physicalNetworkId;
+ }
+
+ @Override
+ public long getDataCenterId() {
+ return dataCenterId;
+ }
+
+ public String getDns1() {
+ return dns1;
+ }
+
+ public void setDns1(String dns) {
+ this.dns1 = dns;
+ }
+
+ public String getDns2() {
+ return dns2;
+ }
+
+ public void setDns2(String dns) {
+ this.dns2 = dns;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getDisplayText() {
+ return displayText;
+ }
+
+ public void setDisplayText(String displayText) {
+ this.displayText = displayText;
+ }
+
+ public Date getRemoved() {
+ return removed;
+ }
+
+ public void setRemoved(Date removed) {
+ this.removed = removed;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+
+ public void setCreated(Date created) {
+ this.created = created;
+ }
+
+ @Override
+ public Network.GuestType getGuestType() {
+ return guestType;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof NetworkVO)) {
+ return false;
+ }
+ NetworkVO that = (NetworkVO)obj;
+ if (this.trafficType != that.trafficType) {
+ return false;
+ }
+
+ if ((this.cidr == null && that.cidr != null) || (this.cidr != null && that.cidr == null)) {
+ return false;
+ }
+
+ if (this.cidr == null && that.cidr == null) {
+ return true;
+ }
+
+ return NetUtils.isNetworkAWithinNetworkB(this.cidr, that.cidr);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder buf = new StringBuilder("Ntwk[");
+ buf.append(id).append("|").append(trafficType).append("|").append(networkOfferingId).append("]");
+ return buf.toString();
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public ControlledEntity.ACLType getAclType() {
+ return aclType;
+ }
+
+ public void setRestartRequired(boolean restartRequired) {
+ this.restartRequired = restartRequired;
+ }
+
+ @Override
+ public boolean isRestartRequired() {
+ return restartRequired;
+ }
+
+ @Override
+ public boolean getSpecifyIpRanges() {
+ return specifyIpRanges;
+ }
+
+ @Override
+ public Long getVpcId() {
+ return vpcId;
+ }
+
+ public String getIp6Cidr() {
+ return ip6Cidr;
+ }
+
+ public void setIp6Cidr(String ip6Cidr) {
+ this.ip6Cidr = ip6Cidr;
+ }
+
+ public String getIp6Gateway() {
+ return ip6Gateway;
+ }
+
+ public void setIp6Gateway(String ip6Gateway) {
+ this.ip6Gateway = ip6Gateway;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/dao/UserIpv6AddressDaoImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/firewall/FirewallManagerImpl.java
index 7bce18c,a3f60cb..d3b4c0b
--- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
+++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
@@@ -85,15 -79,11 +80,14 @@@ import com.cloud.user.DomainManager
import com.cloud.user.UserContext;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary;
- import com.cloud.utils.component.Manager;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.Inject;
-import com.cloud.utils.component.Manager;
+import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+ import com.cloud.utils.db.*;
import com.cloud.utils.db.SearchCriteria.Op;
- import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
import com.cloud.vm.UserVmVO;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
index 37cd7d4,519ad26..b1606db
--- a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
@@@ -19,8 -19,8 +19,9 @@@ package com.cloud.network.guru
import java.util.List;
import javax.ejb.Local;
+import javax.inject.Inject;
+ import com.cloud.event.ActionEventUtils;
import org.apache.log4j.Logger;
import com.cloud.configuration.Config;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/guru/GuestNetworkGuru.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/guru/GuestNetworkGuru.java
index bca5114,dc23b72..ab8a069
--- a/server/src/com/cloud/network/guru/GuestNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/GuestNetworkGuru.java
@@@ -24,10 -23,9 +23,11 @@@ import java.util.SortedSet
import java.util.TreeSet;
import javax.ejb.Local;
+import javax.inject.Inject;
+ import com.cloud.event.ActionEventUtils;
import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
import com.cloud.configuration.Config;
import com.cloud.configuration.dao.ConfigurationDao;
@@@ -432,12 -429,12 +431,12 @@@ public abstract class GuestNetworkGuru
if (profile.getBroadcastDomainType() == BroadcastDomainType.Vlan &&
profile.getBroadcastUri() != null && !offering.getSpecifyVlan()) {
- s_logger.debug("Releasing vnet for the network id=" + profile.getId());
+ s_logger.debug("Releasing vnet for the network id=" + profile.getId());
_dcDao.releaseVnet(profile.getBroadcastUri().getHost(), profile.getDataCenterId(),
profile.getPhysicalNetworkId(), profile.getAccountId(), profile.getReservationId());
- EventUtils.saveEvent(UserContext.current().getCallerUserId(), profile.getAccountId(),
+ ActionEventUtils.onCompletedActionEvent(UserContext.current().getCallerUserId(), profile.getAccountId(),
EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_RELEASE, "Released Zone Vlan: "
- +profile.getBroadcastUri().getHost()+" for Network: "+profile.getId(), 0);
+ + profile.getBroadcastUri().getHost() + " for Network: " + profile.getId(), 0);
}
profile.setBroadcastUri(null);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
index 653a4d3,8e47545..85e850c
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
@@@ -28,19 -28,16 +28,20 @@@ import java.util.Map
import java.util.Set;
import javax.ejb.Local;
-import javax.naming.ConfigurationException;
+import javax.inject.Inject;
- import javax.naming.ConfigurationException;
+
+ import com.cloud.event.UsageEventUtils;
-import org.apache.cloudstack.api.command.user.loadbalancer.*;
+ import org.apache.log4j.Logger;
import org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd;
+import org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd;
+import org.apache.cloudstack.api.command.user.loadbalancer.ListLBStickinessPoliciesCmd;
import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRuleInstancesCmd;
import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRulesCmd;
+import org.apache.cloudstack.api.command.user.loadbalancer.UpdateLoadBalancerRuleCmd;
import org.apache.cloudstack.api.response.ServiceResponse;
- import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
import com.cloud.configuration.Config;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.dao.ConfigurationDao;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/rules/RulesManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
index 54864b3,5635f52..eafe88e
--- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
+++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
@@@ -72,13 -36,9 +67,14 @@@ import com.cloud.network.NetworkManager
import com.cloud.network.NetworkModel;
import com.cloud.network.security.SecurityGroupWork.Step;
import com.cloud.network.security.SecurityRule.SecurityRuleType;
+import com.cloud.network.security.dao.SecurityGroupDao;
+import com.cloud.network.security.dao.SecurityGroupRuleDao;
+import com.cloud.network.security.dao.SecurityGroupRulesDao;
+import com.cloud.network.security.dao.SecurityGroupVMMapDao;
+import com.cloud.network.security.dao.SecurityGroupWorkDao;
+import com.cloud.network.security.dao.VmRulesetLogDao;
+ import com.cloud.network.security.dao.*;
import com.cloud.projects.ProjectManager;
-import com.cloud.server.ManagementServer;
import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
@@@ -98,22 -59,25 +94,17 @@@ import com.cloud.utils.db.Transaction
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.StateListener;
import com.cloud.utils.net.NetUtils;
- import com.cloud.vm.Nic;
- import com.cloud.vm.NicProfile;
- import com.cloud.vm.UserVmManager;
- import com.cloud.vm.UserVmVO;
- import com.cloud.vm.VMInstanceVO;
- import com.cloud.vm.VirtualMachine;
+ import com.cloud.vm.*;
import com.cloud.vm.VirtualMachine.Event;
import com.cloud.vm.VirtualMachine.State;
- import com.cloud.vm.VirtualMachineManager;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.VMInstanceDao;
-
import edu.emory.mathcs.backport.java.util.Collections;
+ import org.apache.cloudstack.api.command.user.securitygroup.*;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.log4j.Logger;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
+ import java.util.*;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
@Local(value = { SecurityGroupManager.class, SecurityGroupService.class })
-public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityGroupService, Manager, StateListener<State, VirtualMachine.Event, VirtualMachine> {
+public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGroupManager, SecurityGroupService, StateListener<State, VirtualMachine.Event, VirtualMachine> {
public static final Logger s_logger = Logger.getLogger(SecurityGroupManagerImpl.class);
@Inject
@@@ -458,8 -420,9 +447,9 @@@
// For each group, find the security rules that allow the group
for (SecurityGroupVMMapVO mapVO : groupsForVm) {// FIXME: use custom sql in the dao
//Add usage events for security group assign
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_SECURITY_GROUP_ASSIGN, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), mapVO.getSecurityGroupId());
- _usageEventDao.persist(usageEvent);
+ UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SECURITY_GROUP_ASSIGN, vm.getAccountId(),
- vm.getDataCenterIdToDeployIn(), vm.getId(), mapVO.getSecurityGroupId(),
++ vm.getDataCenterId(), vm.getId(), mapVO.getSecurityGroupId(),
+ vm.getClass().getName(), vm.getUuid());
List<SecurityGroupRuleVO> allowingRules = _securityGroupRuleDao.listByAllowedSecurityGroupId(mapVO.getSecurityGroupId());
// For each security rule that allows a group that the vm belongs to, find the group it belongs to
@@@ -474,8 -437,9 +464,9 @@@
// For each group, find the security rules rules that allow the group
for (SecurityGroupVMMapVO mapVO : groupsForVm) {// FIXME: use custom sql in the dao
//Add usage events for security group remove
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_SECURITY_GROUP_REMOVE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), mapVO.getSecurityGroupId());
- _usageEventDao.persist(usageEvent);
+ UsageEventUtils.publishUsageEvent(EventTypes.EVENT_SECURITY_GROUP_REMOVE,
- vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), mapVO.getSecurityGroupId(),
++ vm.getAccountId(), vm.getDataCenterId(), vm.getId(), mapVO.getSecurityGroupId(),
+ vm.getClass().getName(), vm.getUuid());
List<SecurityGroupRuleVO> allowingRules = _securityGroupRuleDao.listByAllowedSecurityGroupId(mapVO.getSecurityGroupId());
// For each security rule that allows a group that the vm belongs to, find the group it belongs to
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
index d4b2424,858c362..82c0015
--- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
@@@ -41,19 -27,12 +41,19 @@@ import com.cloud.exception.AccountLimit
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.NetworkRuleConflictException;
import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.*;
+import com.cloud.network.Network;
import com.cloud.network.Network.Service;
+import com.cloud.network.NetworkModel;
+import com.cloud.network.PublicIpAddress;
+import com.cloud.network.RemoteAccessVpn;
+import com.cloud.network.VpnUser;
++import com.cloud.network.*;
import com.cloud.network.VpnUser.State;
- import com.cloud.network.VpnUserVO;
import com.cloud.network.dao.FirewallRulesDao;
import com.cloud.network.dao.IPAddressDao;
+import com.cloud.network.dao.IPAddressVO;
import com.cloud.network.dao.RemoteAccessVpnDao;
+import com.cloud.network.dao.RemoteAccessVpnVO;
import com.cloud.network.dao.VpnUserDao;
import com.cloud.network.element.RemoteAccessVPNServiceProvider;
import com.cloud.network.rules.FirewallManager;
@@@ -71,22 -50,29 +71,21 @@@ import com.cloud.utils.NumbersUtil
import com.cloud.utils.Pair;
import com.cloud.utils.PasswordGenerator;
import com.cloud.utils.Ternary;
- import com.cloud.utils.component.Manager;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.ComponentLocator;
-import com.cloud.utils.component.Inject;
-import com.cloud.utils.component.Manager;
+import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+ import com.cloud.utils.db.*;
import com.cloud.utils.db.SearchCriteria.Op;
- import com.cloud.utils.db.Transaction;
import com.cloud.utils.net.NetUtils;
-import org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd;
-import org.apache.cloudstack.api.command.user.vpn.ListVpnUsersCmd;
-import org.apache.log4j.Logger;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
+@Component
@Local(value = RemoteAccessVpnService.class)
-public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manager {
+public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAccessVpnService {
private final static Logger s_logger = Logger.getLogger(RemoteAccessVpnManagerImpl.class);
- String _name;
-
+
@Inject AccountDao _accountDao;
@Inject VpnUserDao _vpnUsersDao;
@Inject RemoteAccessVpnDao _remoteAccessVpnDao;
@@@ -278,11 -264,11 +277,11 @@@
// Stop billing of VPN users when VPN is removed. VPN_User_ADD events will be generated when VPN is created again
List<VpnUserVO> vpnUsers = _vpnUsersDao.listByAccount(vpn.getAccountId());
for(VpnUserVO user : vpnUsers){
- // VPN_USER_REMOVE event is already generated for users in Revoke state
- if(user.getState() != VpnUser.State.Revoke){
+ // VPN_USER_REMOVE event is already generated for users in Revoke state
+ if(user.getState() != VpnUser.State.Revoke){
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VPN_USER_REMOVE, user.getAccountId(), 0, user.getId(), user.getUsername());
- _usageEventDao.persist(usageEvent);
+ UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VPN_USER_REMOVE, user.getAccountId(),
+ 0, user.getId(), user.getUsername(), user.getClass().getName(), user.getUuid());
- }
+ }
}
if (vpnFwRules != null) {
for (FirewallRule vpnFwRule : vpnFwRules) {
@@@ -330,10 -316,10 +329,10 @@@
if (userCount >= _userLimit) {
throw new AccountLimitException("Cannot add more than " + _userLimit + " remote access vpn users");
}
-
+
VpnUser user = _vpnUsersDao.persist(new VpnUserVO(vpnOwnerId, owner.getDomainId(), username, password));
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VPN_USER_ADD, user.getAccountId(), 0, user.getId(), user.getUsername());
- _usageEventDao.persist(usageEvent);
+ UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VPN_USER_ADD, user.getAccountId(), 0, user.getId(),
+ user.getUsername(), user.getClass().getName(), user.getUuid());
txn.commit();
return user;
}
@@@ -405,10 -391,10 +404,10 @@@
// Start billing of existing VPN users in ADD and Active state
List<VpnUserVO> vpnUsers = _vpnUsersDao.listByAccount(vpn.getAccountId());
for(VpnUserVO user : vpnUsers){
- if(user.getState() != VpnUser.State.Revoke){
+ if(user.getState() != VpnUser.State.Revoke){
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VPN_USER_ADD, user.getAccountId(), 0, user.getId(), user.getUsername());
- _usageEventDao.persist(usageEvent);
+ UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VPN_USER_ADD, user.getAccountId(), 0,
+ user.getId(), user.getUsername(), user.getClass().getName(), user.getUuid());
- }
+ }
}
txn.commit();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/projects/ProjectManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/projects/ProjectManagerImpl.java
index 72ed940,f65627e..45a9a24
--- a/server/src/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/com/cloud/projects/ProjectManagerImpl.java
@@@ -203,9 -205,9 +203,9 @@@ public class ProjectManagerImpl extend
//Create an account associated with the project
StringBuilder acctNm = new StringBuilder("PrjAcct-");
acctNm.append(name).append("-").append(owner.getDomainId());
-
+
- Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null);
+ Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.ACCOUNT_TYPE_PROJECT, domainId, null, null, "", 0);
-
+
Project project = _projectDao.persist(new ProjectVO(name, displayText, owner.getDomainId(), projectAccount.getId()));
//assign owner to the project
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/server/ConfigurationServerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/server/ConfigurationServerImpl.java
index b55e949,2ae0843..fa68514
--- a/server/src/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/com/cloud/server/ConfigurationServerImpl.java
@@@ -106,42 -71,62 +106,47 @@@ import com.cloud.utils.exception.CloudR
import com.cloud.utils.net.NetUtils;
import com.cloud.utils.script.Script;
import com.cloud.uuididentity.dao.IdentityDao;
-
+ import org.apache.cloudstack.region.RegionVO;
+ import org.apache.cloudstack.region.dao.RegionDao;
+ import org.apache.commons.codec.binary.Base64;
+ import org.apache.log4j.Logger;
-import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
-import java.io.*;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.NoSuchAlgorithmException;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.*;
-import java.util.regex.Pattern;
-
-public class ConfigurationServerImpl implements ConfigurationServer {
+@Component
+public class ConfigurationServerImpl extends ManagerBase implements ConfigurationServer {
public static final Logger s_logger = Logger.getLogger(ConfigurationServerImpl.class.getName());
- private final ConfigurationDao _configDao;
- private final DataCenterDao _zoneDao;
- private final HostPodDao _podDao;
- private final DiskOfferingDao _diskOfferingDao;
- private final ServiceOfferingDao _serviceOfferingDao;
- private final NetworkOfferingDao _networkOfferingDao;
- private final DataCenterDao _dataCenterDao;
- private final NetworkDao _networkDao;
- private final VlanDao _vlanDao;
+ @Inject private ConfigurationDao _configDao;
+ @Inject private DataCenterDao _zoneDao;
+ @Inject private HostPodDao _podDao;
+ @Inject private DiskOfferingDao _diskOfferingDao;
+ @Inject private ServiceOfferingDao _serviceOfferingDao;
+ @Inject private NetworkOfferingDao _networkOfferingDao;
+ @Inject private DataCenterDao _dataCenterDao;
+ @Inject private NetworkDao _networkDao;
+ @Inject private VlanDao _vlanDao;
private String _domainSuffix;
- private final DomainDao _domainDao;
- private final AccountDao _accountDao;
- private final ResourceCountDao _resourceCountDao;
- private final NetworkOfferingServiceMapDao _ntwkOfferingServiceMapDao;
- private final IdentityDao _identityDao;
- private final RegionDao _regionDao;
+ @Inject private DomainDao _domainDao;
+ @Inject private AccountDao _accountDao;
+ @Inject private ResourceCountDao _resourceCountDao;
+ @Inject private NetworkOfferingServiceMapDao _ntwkOfferingServiceMapDao;
+ @Inject private IdentityDao _identityDao;
++ @Inject private RegionDao _regionDao;
public ConfigurationServerImpl() {
- ComponentLocator locator = ComponentLocator.getLocator(Name);
- _configDao = locator.getDao(ConfigurationDao.class);
- _zoneDao = locator.getDao(DataCenterDao.class);
- _podDao = locator.getDao(HostPodDao.class);
- _diskOfferingDao = locator.getDao(DiskOfferingDao.class);
- _serviceOfferingDao = locator.getDao(ServiceOfferingDao.class);
- _networkOfferingDao = locator.getDao(NetworkOfferingDao.class);
- _dataCenterDao = locator.getDao(DataCenterDao.class);
- _networkDao = locator.getDao(NetworkDao.class);
- _vlanDao = locator.getDao(VlanDao.class);
- _domainDao = locator.getDao(DomainDao.class);
- _accountDao = locator.getDao(AccountDao.class);
- _resourceCountDao = locator.getDao(ResourceCountDao.class);
- _ntwkOfferingServiceMapDao = locator.getDao(NetworkOfferingServiceMapDao.class);
- _identityDao = locator.getDao(IdentityDao.class);
- _regionDao = locator.getDao(RegionDao.class);
+ setRunLevel(ComponentLifecycle.RUN_LEVEL_FRAMEWORK_BOOTSTRAP);
}
+
+ @Override
+ public boolean configure(String name, Map<String, Object> params)
+ throws ConfigurationException {
+
+ try {
+ persistDefaultValues();
+ } catch (InternalErrorException e) {
+ throw new RuntimeException("Unhandled configuration exception", e);
+ }
+ return true;
+ }
@Override
@DB
@@@ -276,12 -263,8 +283,11 @@@
// We should not update seed data UUID column here since this will be invoked in upgrade case as well.
//updateUuids();
-
// Set init to true
_configDao.update("init", "Hidden", "true");
+
+ // invalidate cache in DAO as we have changed DB status
+ _configDao.invalidateCache();
}
/*
@@@ -1264,5 -1248,10 +1271,10 @@@
return svcProviders;
}
-
+
+ private void createDefaultRegion(){
+ //Get Region name and URL from db.properties
+ _regionDao.persist(new RegionVO(_regionDao.getRegionId(), "Local", "http://localhost:8080/client/api", "", ""));
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/server/ManagementServerImpl.java
index be612c8,0b5c531..a1d12c5
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@@ -26,9 -26,9 +26,8 @@@ import java.util.ArrayList
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
- import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@@ -38,19 -38,10 +37,21 @@@ import java.util.concurrent.Executors
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import javax.annotation.PostConstruct;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
+import javax.inject.Inject;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.naming.ConfigurationException;
+
+import com.cloud.storage.dao.*;
+import org.apache.cloudstack.acl.SecurityChecker.AccessType;
+import org.apache.cloudstack.api.ApiConstants;
+
+ import com.cloud.event.ActionEventUtils;
import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd;
import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;
import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd;
@@@ -2828,8 -2811,8 +2827,7 @@@ public class ManagementServerImpl exten
// This means its a new account, set the password using the
// authenticator
- for (Iterator<UserAuthenticator> en = _userAuthenticators.iterator(); en.hasNext();) {
- UserAuthenticator authenticator = en.next();
- for (Enumeration<UserAuthenticator> en = _userAuthenticators.enumeration(); en.hasMoreElements();) {
- UserAuthenticator authenticator = en.nextElement();
++ for (UserAuthenticator authenticator: _userAuthenticators) {
encodedPassword = authenticator.encode(password);
if (encodedPassword != null) {
break;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/StorageManagerImpl.java
index 2c59739,5a799f9..45e3a7f
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@@ -16,66 -16,9 +16,47 @@@
// under the License.
package com.cloud.storage;
+import java.math.BigDecimal;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+
+import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd;
+import org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd;
+import org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd;
+import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;
+import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
import com.cloud.agent.AgentManager;
- import com.cloud.agent.api.Answer;
- import com.cloud.agent.api.BackupSnapshotCommand;
- import com.cloud.agent.api.CleanupSnapshotBackupCommand;
- import com.cloud.agent.api.Command;
- import com.cloud.agent.api.CreateStoragePoolCommand;
- import com.cloud.agent.api.CreateVolumeFromSnapshotAnswer;
- import com.cloud.agent.api.CreateVolumeFromSnapshotCommand;
- import com.cloud.agent.api.DeleteStoragePoolCommand;
- import com.cloud.agent.api.ManageSnapshotCommand;
- import com.cloud.agent.api.ModifyStoragePoolAnswer;
- import com.cloud.agent.api.ModifyStoragePoolCommand;
- import com.cloud.agent.api.UpgradeSnapshotCommand;
- import com.cloud.agent.api.storage.CopyVolumeAnswer;
- import com.cloud.agent.api.storage.CopyVolumeCommand;
- import com.cloud.agent.api.storage.CreateAnswer;
- import com.cloud.agent.api.storage.CreateCommand;
- import com.cloud.agent.api.storage.DeleteTemplateCommand;
- import com.cloud.agent.api.storage.DeleteVolumeCommand;
- import com.cloud.agent.api.storage.DestroyCommand;
- import com.cloud.agent.api.storage.ResizeVolumeCommand;
- import com.cloud.agent.api.storage.ResizeVolumeAnswer;
+ import com.cloud.agent.api.*;
+ import com.cloud.agent.api.storage.*;
import com.cloud.agent.api.to.StorageFilerTO;
import com.cloud.agent.api.to.VolumeTO;
import com.cloud.agent.manager.Commands;
@@@ -175,44 -92,43 +129,24 @@@ import com.cloud.utils.EnumUtils
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.UriUtils;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.ComponentLocator;
-import com.cloud.utils.component.Inject;
+import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.Manager;
+import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.concurrency.NamedThreadFactory;
- import com.cloud.utils.db.DB;
- import com.cloud.utils.db.GenericSearchBuilder;
- import com.cloud.utils.db.GlobalLock;
- import com.cloud.utils.db.JoinBuilder;
+ import com.cloud.utils.db.*;
import com.cloud.utils.db.JoinBuilder.JoinType;
- import com.cloud.utils.db.SearchBuilder;
- import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Op;
- import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.exception.ExecutionException;
import com.cloud.utils.fsm.NoTransitionException;
import com.cloud.utils.fsm.StateMachine2;
- import com.cloud.vm.ConsoleProxyVO;
- import com.cloud.vm.DiskProfile;
- import com.cloud.vm.DomainRouterVO;
- import com.cloud.vm.SecondaryStorageVmVO;
- import com.cloud.vm.UserVmManager;
- import com.cloud.vm.UserVmVO;
- import com.cloud.vm.VMInstanceVO;
- import com.cloud.vm.VirtualMachine;
+ import com.cloud.vm.*;
import com.cloud.vm.VirtualMachine.State;
- import com.cloud.vm.VirtualMachineManager;
- import com.cloud.vm.VirtualMachineProfile;
- import com.cloud.vm.VirtualMachineProfileImpl;
- import com.cloud.vm.dao.ConsoleProxyDao;
- import com.cloud.vm.dao.DomainRouterDao;
- import com.cloud.vm.dao.SecondaryStorageVmDao;
- import com.cloud.vm.dao.UserVmDao;
- import com.cloud.vm.dao.VMInstanceDao;
+ import com.cloud.vm.dao.*;
-import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaintenanceCmd;
-import org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd;
-import org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd;
-import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd;
-import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd;
-import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd;
-import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd;
-import org.apache.log4j.Logger;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-import java.math.BigDecimal;
-import java.net.*;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.util.*;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
+@Component
@Local(value = { StorageManager.class, StorageService.class })
-public class StorageManagerImpl implements StorageManager, Manager, ClusterManagerListener {
+public class StorageManagerImpl extends ManagerBase implements StorageManager, ClusterManagerListener {
private static final Logger s_logger = Logger.getLogger(StorageManagerImpl.class);
protected String _name;
@@@ -773,14 -688,15 +705,15 @@@
volume.setPath(cvAnswer.getVolumePath());
volume.setFolder(destPool.getPath());
volume.setPodId(destPool.getPodId());
- volume.setPoolId(destPool.getId());
+ volume.setPoolId(destPool.getId());
volume.setPodId(destPool.getPodId());
- stateTransitTo(volume, Event.CopySucceeded);
+ stateTransitTo(volume, Event.CopySucceeded);
- UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), volume.getDiskOfferingId(), null, volume.getSize());
- _usageEventDao.persist(usageEvent);
+ UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volume.getAccountId(),
+ volume.getDataCenterId(), volume.getId(), volume.getName(), volume.getDiskOfferingId(),
+ null, volume.getSize(), Volume.class.getName(), volume.getUuid());
_volumeHostDao.remove(volumeHostVO.getId());
- txn.commit();
- return volume;
+ txn.commit();
+ return volume;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
index 8347c4e,3fe1aba..17bcf9b
--- a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java
@@@ -16,38 -16,28 +16,38 @@@
// under the License.
package com.cloud.storage.dao;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Local;
+import javax.inject.Inject;
+
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
import com.cloud.server.ResourceTag.TaggedResourceType;
import com.cloud.storage.Snapshot;
+ import com.cloud.storage.Snapshot.Event;
+ import com.cloud.storage.Snapshot.State;
import com.cloud.storage.Snapshot.Type;
import com.cloud.storage.SnapshotVO;
import com.cloud.storage.Volume;
import com.cloud.storage.VolumeVO;
import com.cloud.tags.dao.ResourceTagsDaoImpl;
-import com.cloud.utils.component.ComponentLocator;
+
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.GenericSearchBuilder;
+ import com.cloud.utils.db.*;
import com.cloud.utils.db.JoinBuilder.JoinType;
- import com.cloud.utils.db.SearchBuilder;
- import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Func;
- import com.cloud.utils.db.Transaction;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.dao.VMInstanceDaoImpl;
-import org.apache.log4j.Logger;
-
-import javax.ejb.Local;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.util.List;
+@Component
@Local (value={SnapshotDao.class})
public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements SnapshotDao {
public static final Logger s_logger = Logger.getLogger(SnapshotDaoImpl.class.getName());
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/storage/download/DownloadMonitorImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/download/DownloadMonitorImpl.java
index 2f8d757,cf51567..6d3cf2a
--- a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java
+++ b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java
@@@ -93,14 -51,9 +68,13 @@@ import com.cloud.storage.template.Templ
import com.cloud.storage.template.TemplateInfo;
import com.cloud.user.Account;
import com.cloud.user.ResourceLimitService;
-import com.cloud.utils.component.Inject;
-import com.cloud.utils.db.*;
+import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException;
- import com.cloud.utils.fsm.NoTransitionException;
import com.cloud.vm.SecondaryStorageVm;
import com.cloud.vm.SecondaryStorageVmVO;
import com.cloud.vm.UserVmManager;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/storage/listener/SnapshotStateListener.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/listener/SnapshotStateListener.java
index 0000000,d0ca389..17ccce5
mode 000000,100644..100644
--- a/server/src/com/cloud/storage/listener/SnapshotStateListener.java
+++ b/server/src/com/cloud/storage/listener/SnapshotStateListener.java
@@@ -1,0 -1,102 +1,94 @@@
+ // Licensed to the Apache Software Foundation (ASF) under one
+ // or more contributor license agreements. See the NOTICE file
+ // distributed with this work for additional information
+ // regarding copyright ownership. The ASF licenses this file
+ // to you under the Apache License, Version 2.0 (the
+ // "License"); you may not use this file except in compliance
+ // with the License. You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing,
+ // software distributed under the License is distributed on an
+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ // KIND, either express or implied. See the License for the
+ // specific language governing permissions and limitations
+ // under the License.
+
+ package com.cloud.storage.listener;
+
+ import com.cloud.event.EventCategory;
+ import com.cloud.storage.Snapshot;
+ import com.cloud.storage.Snapshot.Event;
+ import com.cloud.storage.Snapshot.State;
+ import com.cloud.server.ManagementServer;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.ComponentLocator;
+ import com.cloud.utils.fsm.StateListener;
++
+ import org.apache.cloudstack.framework.events.EventBus;
+ import org.apache.cloudstack.framework.events.EventBusException;
+ import org.apache.log4j.Logger;
+
+ import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Map;
+
++import javax.inject.Inject;
++
+ public class SnapshotStateListener implements StateListener<State, Event, Snapshot> {
+
+ // get the event bus provider if configured
- protected static EventBus _eventBus = null;
- static {
- Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement(); // configure event bus if configured
- }
- }
- }
++ @Inject protected EventBus _eventBus;
+
+ private static final Logger s_logger = Logger.getLogger(VolumeStateListener.class);
+
+ public SnapshotStateListener() {
+
+ }
+
+ @Override
+ public boolean preStateTransitionEvent(State oldState, Event event, State newState, Snapshot vo, boolean status, Object opaque) {
+ pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, oldState, newState);
+ return true;
+ }
+
+ @Override
+ public boolean postStateTransitionEvent(State oldState, Event event, State newState, Snapshot vo, boolean status, Object opaque) {
+ pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, oldState, newState);
+ return true;
+ }
+
+ private void pubishOnEventBus(String event, String status, Snapshot vo, State oldState, State newState) {
+
+ if (_eventBus == null) {
+ return; // no provider is configured to provide events bus, so just return
+ }
+
+ String resourceName = getEntityFromClassName(Snapshot.class.getName());
+ org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
+ ManagementServer.Name,
+ EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
+ event,
+ resourceName,
+ vo.getUuid());
+ Map<String, String> eventDescription = new HashMap<String, String>();
+ eventDescription.put("resource", resourceName);
+ eventDescription.put("id", vo.getUuid());
+ eventDescription.put("old-state", oldState.name());
+ eventDescription.put("new-state", newState.name());
+ eventMsg.setDescription(eventDescription);
+ try {
+ _eventBus.publish(eventMsg);
+ } catch (EventBusException e) {
+ s_logger.warn("Failed to publish state change event on the the event bus.");
+ }
+ }
+
+ private String getEntityFromClassName(String entityClassName) {
+ int index = entityClassName.lastIndexOf(".");
+ String entityName = entityClassName;
+ if (index != -1) {
+ entityName = entityClassName.substring(index+1);
+ }
+ return entityName;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/storage/listener/VolumeStateListener.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/listener/VolumeStateListener.java
index 0000000,177ccf2..ee715e0
mode 000000,100644..100644
--- a/server/src/com/cloud/storage/listener/VolumeStateListener.java
+++ b/server/src/com/cloud/storage/listener/VolumeStateListener.java
@@@ -1,0 -1,102 +1,92 @@@
+ // Licensed to the Apache Software Foundation (ASF) under one
+ // or more contributor license agreements. See the NOTICE file
+ // distributed with this work for additional information
+ // regarding copyright ownership. The ASF licenses this file
+ // to you under the Apache License, Version 2.0 (the
+ // "License"); you may not use this file except in compliance
+ // with the License. You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing,
+ // software distributed under the License is distributed on an
+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ // KIND, either express or implied. See the License for the
+ // specific language governing permissions and limitations
+ // under the License.
+
+ package com.cloud.storage.listener;
+
+ import com.cloud.event.EventCategory;
+ import com.cloud.storage.Volume;
+ import com.cloud.storage.Volume.Event;
+ import com.cloud.storage.Volume.State;
+ import com.cloud.server.ManagementServer;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.ComponentLocator;
+ import com.cloud.utils.fsm.StateListener;
+ import org.apache.cloudstack.framework.events.EventBus;
+ import org.apache.cloudstack.framework.events.EventBusException;
+ import org.apache.log4j.Logger;
+
-import java.util.Enumeration;
+ import java.util.HashMap;
+ import java.util.Map;
+
++import javax.inject.Inject;
++
+ public class VolumeStateListener implements StateListener<State, Event, Volume> {
+
+ // get the event bus provider if configured
- protected static EventBus _eventBus = null;
- static {
- Adapters<EventBus> eventBusImpls = ComponentLocator.getLocator(ManagementServer.Name).getAdapters(EventBus.class);
- if (eventBusImpls != null) {
- Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
- if (eventBusenum != null && eventBusenum.hasMoreElements()) {
- _eventBus = eventBusenum.nextElement(); // configure event bus if configured
- }
- }
- }
++ @Inject protected EventBus _eventBus = null;
+
+ private static final Logger s_logger = Logger.getLogger(VolumeStateListener.class);
+
+ public VolumeStateListener() {
+
+ }
+
+ @Override
+ public boolean preStateTransitionEvent(State oldState, Event event, State newState, Volume vo, boolean status, Object opaque) {
+ pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, oldState, newState);
+ return true;
+ }
+
+ @Override
+ public boolean postStateTransitionEvent(State oldState, Event event, State newState, Volume vo, boolean status, Object opaque) {
+ pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, oldState, newState);
+ return true;
+ }
+
+ private void pubishOnEventBus(String event, String status, Volume vo, State oldState, State newState) {
+
+ if (_eventBus == null) {
+ return; // no provider is configured to provide events bus, so just return
+ }
+
+ String resourceName = getEntityFromClassName(Volume.class.getName());
+ org.apache.cloudstack.framework.events.Event eventMsg = new org.apache.cloudstack.framework.events.Event(
+ ManagementServer.Name,
+ EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
+ event,
+ resourceName,
+ vo.getUuid());
+ Map<String, String> eventDescription = new HashMap<String, String>();
+ eventDescription.put("resource", resourceName);
+ eventDescription.put("id", vo.getUuid());
+ eventDescription.put("old-state", oldState.name());
+ eventDescription.put("new-state", newState.name());
+ eventMsg.setDescription(eventDescription);
+ try {
+ _eventBus.publish(eventMsg);
+ } catch (EventBusException e) {
+ s_logger.warn("Failed to state change event on the the event bus.");
+ }
+ }
+
+ private String getEntityFromClassName(String entityClassName) {
+ int index = entityClassName.lastIndexOf(".");
+ String entityName = entityClassName;
+ if (index != -1) {
+ entityName = entityClassName.substring(index+1);
+ }
+ return entityName;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
index 4ad43cc,66eb8e1..c7beff0
--- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
@@@ -16,33 -16,8 +16,24 @@@
// under the License.
package com.cloud.storage.snapshot;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+
+import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd;
+import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotsCmd;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
import com.cloud.agent.AgentManager;
- import com.cloud.agent.api.Answer;
- import com.cloud.agent.api.BackupSnapshotAnswer;
- import com.cloud.agent.api.BackupSnapshotCommand;
- import com.cloud.agent.api.Command;
- import com.cloud.agent.api.DeleteSnapshotBackupCommand;
- import com.cloud.agent.api.DeleteSnapshotsDirCommand;
- import com.cloud.agent.api.DownloadSnapshotFromS3Command;
- import com.cloud.agent.api.ManageSnapshotAnswer;
- import com.cloud.agent.api.ManageSnapshotCommand;
- import com.cloud.agent.api.downloadSnapshotFromSwiftCommand;
+ import com.cloud.agent.api.*;
import com.cloud.agent.api.to.S3TO;
import com.cloud.agent.api.to.SwiftTO;
import com.cloud.alert.AlertManager;
@@@ -115,25 -61,30 +77,37 @@@ import com.cloud.utils.DateUtil.Interva
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary;
-import com.cloud.utils.component.ComponentLocator;
-import com.cloud.utils.component.Inject;
+
import com.cloud.utils.component.Manager;
+import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+ import com.cloud.utils.db.*;
import com.cloud.utils.exception.CloudRuntimeException;
+ import com.cloud.utils.fsm.NoTransitionException;
+ import com.cloud.utils.fsm.StateMachine2;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.dao.UserVmDao;
+ import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotPolicyCmd;
+ import org.apache.cloudstack.api.command.user.snapshot.DeleteSnapshotPoliciesCmd;
+ import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotPoliciesCmd;
+ import org.apache.cloudstack.api.command.user.snapshot.ListSnapshotsCmd;
+ import org.apache.log4j.Logger;
+
+ import javax.ejb.Local;
+ import javax.naming.ConfigurationException;
+ import java.util.*;
+@Component
@Local(value = { SnapshotManager.class, SnapshotService.class })
-public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Manager {
+public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager, SnapshotService {
private static final Logger s_logger = Logger.getLogger(SnapshotManagerImpl.class);
@Inject
protected VMTemplateDao _templateDao;
@@@ -293,17 -252,19 +276,19 @@@
if (preSnapshotPath != null && preSnapshotPath.equals(answer.getSnapshotPath())) {
// empty snapshot
s_logger.debug("CreateSnapshot: this is empty snapshot ");
+ try {
- snapshot.setPath(preSnapshotPath);
- snapshot.setBackupSnapshotId(preSnapshotVO.getBackupSnapshotId());
- snapshot.setSwiftId(preSnapshotVO.getSwiftId());
- snapshot.setPrevSnapshotId(preId);
- snapshot.setSecHostId(preSnapshotVO.getSecHostId());
+ snapshot.setPath(preSnapshotPath);
+ snapshot.setBackupSnapshotId(preSnapshotVO.getBackupSnapshotId());
+ snapshot.setSwiftId(preSnapshotVO.getSwiftId());
-
- snapshot.setStatus(Snapshot.Status.BackedUp);
+ snapshot.setPrevSnapshotId(preId);
+ snapshot.setSecHostId(preSnapshotVO.getSecHostId());
- _snapshotDao.update(snapshotId, snapshot);
+ stateTransitTo(snapshot, Snapshot.Event.OperationNotPerformed);
+ } catch (NoTransitionException nte) {
+ s_logger.debug("CreateSnapshot: failed to update state of snapshot due to " + nte.getMessage());
+ }
} else {
long preSnapshotId = 0;
-
+
if (preSnapshotVO != null && preSnapshotVO.getBackupSnapshotId() != null) {
preSnapshotId = preId;
// default delta snap number is 16
@@@ -412,9 -378,9 +402,9 @@@
throw new CloudRuntimeException("Creating snapshot failed due to volume:" + volumeId + " is associated with vm:" + userVm.getInstanceName() + " is in "
+ userVm.getState().toString() + " state");
}
-
+
if(userVm.getHypervisorType() == HypervisorType.VMware || userVm.getHypervisorType() == HypervisorType.KVM) {
- List<SnapshotVO> activeSnapshots = _snapshotDao.listByInstanceId(volume.getInstanceId(), Snapshot.Status.Creating, Snapshot.Status.CreatedOnPrimary, Snapshot.Status.BackingUp);
+ List<SnapshotVO> activeSnapshots = _snapshotDao.listByInstanceId(volume.getInstanceId(), Snapshot.State.Creating, Snapshot.State.CreatedOnPrimary, Snapshot.State.BackingUp);
if(activeSnapshots.size() > 1)
throw new CloudRuntimeException("There is other active snapshot tasks on the instance to which the volume is attached, please try again later");
}
@@@ -770,8 -737,8 +761,8 @@@
long oldSnapId = oldestSnapshot.getId();
s_logger.debug("Max snaps: " + policy.getMaxSnaps() + " exceeded for snapshot policy with Id: " + policyId + ". Deleting oldest snapshot: " + oldSnapId);
if(deleteSnapshotInternal(oldSnapId)){
- //log Snapshot delete event
+ //log Snapshot delete event
- EventUtils.saveEvent(User.UID_SYSTEM, oldestSnapshot.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_SNAPSHOT_DELETE, "Successfully deleted oldest snapshot: " + oldSnapId, 0);
+ ActionEventUtils.onCompletedActionEvent(User.UID_SYSTEM, oldestSnapshot.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_SNAPSHOT_DELETE, "Successfully deleted oldest snapshot: " + oldSnapId, 0);
}
snaps.remove(oldestSnapshot);
}
@@@ -788,13 -755,13 +779,13 @@@
if (snapshotCheck == null) {
throw new InvalidParameterValueException("unable to find a snapshot with id " + snapshotId);
}
-
+
_accountMgr.checkAccess(caller, null, true, snapshotCheck);
-
+
- if( !Status.BackedUp.equals(snapshotCheck.getStatus() ) ) {
+ if( !Snapshot.State.BackedUp.equals(snapshotCheck.getState() ) ) {
throw new InvalidParameterValueException("Can't delete snapshotshot " + snapshotId + " due to it is not in BackedUp Status");
}
-
+
return deleteSnapshotInternal(snapshotId);
}
@@@ -1526,10 -1510,11 +1521,11 @@@
}
return false;
}
-
+
@Override
public boolean canOperateOnVolume(VolumeVO volume) {
- List<SnapshotVO> snapshots = _snapshotDao.listByStatus(volume.getId(), Status.Creating, Status.CreatedOnPrimary, Status.BackingUp);
+ List<SnapshotVO> snapshots = _snapshotDao.listByStatus(volume.getId(), Snapshot.State.Creating,
+ Snapshot.State.CreatedOnPrimary, Snapshot.State.BackingUp);
if (snapshots.size() > 0) {
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
index cbd2933,9389893..5af0af0
--- a/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java
@@@ -24,12 -24,11 +24,13 @@@ import java.util.Timer
import java.util.TimerTask;
import javax.ejb.Local;
+import javax.inject.Inject;
import javax.naming.ConfigurationException;
+ import com.cloud.event.ActionEventUtils;
import org.apache.cloudstack.api.command.user.snapshot.CreateSnapshotCmd;
import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
import org.apache.cloudstack.api.ApiConstants;
import com.cloud.api.ApiDispatcher;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/template/HyervisorTemplateAdapter.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/template/HyervisorTemplateAdapter.java
index 732b153,81a482b..089f650
--- a/server/src/com/cloud/template/HyervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HyervisorTemplateAdapter.java
@@@ -53,10 -35,19 +51,19 @@@ import com.cloud.storage.VMTemplateZone
import com.cloud.storage.download.DownloadMonitor;
import com.cloud.storage.secondary.SecondaryStorageVmManager;
import com.cloud.user.Account;
-import com.cloud.utils.component.Inject;
import com.cloud.utils.db.DB;
import com.cloud.utils.exception.CloudRuntimeException;
+ import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd;
+ import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd;
+ import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd;
+ import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd;
+ import org.apache.log4j.Logger;
+
+ import javax.ejb.Local;
+ import java.net.*;
+ import java.util.List;
+@Component
@Local(value=TemplateAdapter.class)
public class HyervisorTemplateAdapter extends TemplateAdapterBase implements TemplateAdapter {
private final static Logger s_logger = Logger.getLogger(HyervisorTemplateAdapter.class);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/7b75f0d9/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --cc server/src/com/cloud/template/TemplateManagerImpl.java
index 0a46414,42106b3..f9cf277
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@@ -79,40 -50,12 +77,19 @@@ import com.cloud.hypervisor.Hypervisor.
import com.cloud.hypervisor.HypervisorGuruManager;
import com.cloud.projects.Project;
import com.cloud.projects.ProjectManager;
- import com.cloud.storage.LaunchPermissionVO;
- import com.cloud.storage.SnapshotVO;
- import com.cloud.storage.Storage;
+ import com.cloud.storage.*;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
+import com.cloud.storage.StorageManager;
+import com.cloud.storage.StoragePool;
+import com.cloud.storage.StoragePoolHostVO;
+import com.cloud.storage.StoragePoolStatus;
+import com.cloud.storage.StoragePoolVO;
+import com.cloud.storage.TemplateProfile;
+import com.cloud.storage.Upload;
import com.cloud.storage.Upload.Type;
- import com.cloud.storage.UploadVO;
- import com.cloud.storage.VMTemplateHostVO;
- import com.cloud.storage.VMTemplateStoragePoolVO;
- import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
- import com.cloud.storage.VMTemplateSwiftVO;
- import com.cloud.storage.VMTemplateVO;
- import com.cloud.storage.VMTemplateZoneVO;
- import com.cloud.storage.VolumeVO;
- import com.cloud.storage.dao.LaunchPermissionDao;
- import com.cloud.storage.dao.SnapshotDao;
- import com.cloud.storage.dao.StoragePoolDao;
- import com.cloud.storage.dao.StoragePoolHostDao;
- import com.cloud.storage.dao.UploadDao;
- import com.cloud.storage.dao.VMTemplateDao;
- import com.cloud.storage.dao.VMTemplateHostDao;
- import com.cloud.storage.dao.VMTemplatePoolDao;
- import com.cloud.storage.dao.VMTemplateS3Dao;
- import com.cloud.storage.dao.VMTemplateSwiftDao;
- import com.cloud.storage.dao.VMTemplateZoneDao;
- import com.cloud.storage.dao.VolumeDao;
+ import com.cloud.storage.dao.*;
import com.cloud.storage.download.DownloadMonitor;
import com.cloud.storage.s3.S3Manager;
import com.cloud.storage.secondary.SecondaryStorageVmManager;
@@@ -130,17 -68,12 +102,11 @@@ import com.cloud.user.dao.UserAccountDa
import com.cloud.user.dao.UserDao;
import com.cloud.uservm.UserVm;
import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.component.Adapters;
-import com.cloud.utils.component.ComponentLocator;
-import com.cloud.utils.component.Inject;
-import com.cloud.utils.component.Manager;
+import com.cloud.utils.component.AdapterBase;
+import com.cloud.utils.component.ManagerBase;
+
- import com.cloud.utils.component.Manager;
import com.cloud.utils.concurrency.NamedThreadFactory;
- import com.cloud.utils.db.DB;
- import com.cloud.utils.db.GlobalLock;
- import com.cloud.utils.db.JoinBuilder;
- import com.cloud.utils.db.SearchBuilder;
- import com.cloud.utils.db.SearchCriteria;
- import com.cloud.utils.db.Transaction;
+ import com.cloud.utils.db.*;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.UserVmManager;
import com.cloud.vm.UserVmVO;