diff --git a/build/build-cloud.xml b/build/build-cloud.xml index 85550a3dd3f..9c0202bf89d 100755 --- a/build/build-cloud.xml +++ b/build/build-cloud.xml @@ -317,7 +317,7 @@ - + diff --git a/build/package.xml b/build/package.xml index 31aee189c73..5bc293f05e5 100755 --- a/build/package.xml +++ b/build/package.xml @@ -57,7 +57,7 @@ - + @@ -169,7 +169,7 @@ - + diff --git a/core/src/com/cloud/agent/api/ModifyStoragePoolCommand.java b/core/src/com/cloud/agent/api/ModifyStoragePoolCommand.java index 5941b1b5471..5d8ca2ae545 100644 --- a/core/src/com/cloud/agent/api/ModifyStoragePoolCommand.java +++ b/core/src/com/cloud/agent/api/ModifyStoragePoolCommand.java @@ -38,7 +38,7 @@ public class ModifyStoragePoolCommand extends Command { public ModifyStoragePoolCommand(boolean add, StoragePoolVO pool, String localPath) { this.add = add; - this.pool = pool; + this.pool = new StoragePoolVO(pool); this.localPath = localPath; } diff --git a/core/src/com/cloud/agent/api/StartRouterCommand.java b/core/src/com/cloud/agent/api/StartRouterCommand.java index c4d3fed8325..3afc6b4e0ec 100755 --- a/core/src/com/cloud/agent/api/StartRouterCommand.java +++ b/core/src/com/cloud/agent/api/StartRouterCommand.java @@ -21,8 +21,8 @@ import java.util.List; import com.cloud.storage.VolumeVO; import com.cloud.vm.DomainRouter; -import com.cloud.vm.DomainRouterVO; import com.cloud.vm.DomainRouter.Role; +import com.cloud.vm.DomainRouterVO; public class StartRouterCommand extends AbstractStartCommand { @@ -46,7 +46,7 @@ public class StartRouterCommand extends AbstractStartCommand { String routerName, String[] storageIps, List vols, boolean mirroredVols, String guestOSDescription, String mgmtHost) { super(routerName, storageIps, vols, mirroredVols); - this.router = router; + this.router = new DomainRouterVO(router); this.networkRateMbps = networkRateMbps; this.networkRateMulticastMbps = networkRateMulticastMbps; this.guestOSDescription = guestOSDescription; diff --git a/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java b/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java index f356b0d60d2..089281add4a 100644 --- a/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java +++ b/core/src/com/cloud/agent/api/StartSecStorageVmCommand.java @@ -38,7 +38,7 @@ public class StartSecStorageVmCommand extends AbstractStartCommand { protected StartSecStorageVmCommand() { } - + public StartSecStorageVmCommand(int networkRateMbps, int networkRateMulticastMbps, int proxyCmdPort, SecondaryStorageVmVO secStorageVm, String vmName, String storageHost, List vols, String mgmtHost, int mgmtPort, boolean sslCopy, String guestOSDescription) { @@ -46,7 +46,7 @@ public class StartSecStorageVmCommand extends AbstractStartCommand { this.networkRateMbps = networkRateMbps; this.networkRateMulticastMbps = networkRateMulticastMbps; this.proxyCmdPort = proxyCmdPort; - this.secStorageVm = secStorageVm; + this.secStorageVm = new SecondaryStorageVmVO(secStorageVm); this.mgmt_host = mgmtHost; this.mgmt_port = mgmtPort; diff --git a/core/src/com/cloud/agent/transport/ArrayTypeAdaptor.java b/core/src/com/cloud/agent/transport/ArrayTypeAdaptor.java index fdabc6fb666..40c6bf8bb25 100755 --- a/core/src/com/cloud/agent/transport/ArrayTypeAdaptor.java +++ b/core/src/com/cloud/agent/transport/ArrayTypeAdaptor.java @@ -22,10 +22,9 @@ import java.lang.reflect.Array; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Iterator; -import java.util.List; +import java.util.Map; import com.cloud.agent.api.Command; -import com.cloud.storage.VolumeVO; import com.cloud.utils.exception.CloudRuntimeException; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -33,19 +32,18 @@ import com.google.gson.JsonArray; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; -import com.google.gson.reflect.TypeToken; public class ArrayTypeAdaptor implements JsonDeserializer, JsonSerializer { static final GsonBuilder s_gBuilder; static { - s_gBuilder = new GsonBuilder(); - final Type listType = new TypeToken>() {}.getType(); - s_gBuilder.registerTypeAdapter(listType, new VolListTypeAdaptor()); + s_gBuilder = Request.initBuilder(); +// final Type listType = new TypeToken>() {}.getType(); +// s_gBuilder.registerTypeAdapter(listType, new VolListTypeAdaptor()); } @@ -53,35 +51,39 @@ public class ArrayTypeAdaptor implements JsonDeserializer, JsonSerialize public ArrayTypeAdaptor() { } + @Override public JsonElement serialize(T[] src, Type typeOfSrc, JsonSerializationContext context) { Gson gson = s_gBuilder.create(); JsonArray array = new JsonArray(); for (T cmd : src) { - String result = gson.toJson(cmd); - array.add(new JsonPrimitive(cmd.getClass().getName().substring(s_pkg.length()))); - array.add(new JsonPrimitive(result)); + JsonObject obj = new JsonObject(); + obj.add(cmd.getClass().getName().substring(s_pkg.length()), gson.toJsonTree(cmd)); + array.add(obj); } return array; } + @Override @SuppressWarnings("unchecked") public T[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonArray array = json.getAsJsonArray(); Iterator it = array.iterator(); ArrayList cmds = new ArrayList(); - Gson gson = Request.initBuilder().create(); + Gson gson = s_gBuilder.create(); while (it.hasNext()) { - JsonElement element = it.next(); - String name = s_pkg + element.getAsString(); + JsonObject element = (JsonObject)it.next(); + Map.Entry entry = element.entrySet().iterator().next(); + + String name = s_pkg + entry.getKey(); Class clazz; try { clazz = Class.forName(name); } catch (ClassNotFoundException e) { throw new CloudRuntimeException("can't find " + name); } - T cmd = (T)gson.fromJson(it.next().getAsString(), clazz); + T cmd = (T)gson.fromJson(entry.getValue(), clazz); cmds.add(cmd); } Class type = ((Class)typeOfT).getComponentType(); diff --git a/core/src/com/cloud/storage/StoragePoolVO.java b/core/src/com/cloud/storage/StoragePoolVO.java index f15be056f97..a2b9cf3c640 100644 --- a/core/src/com/cloud/storage/StoragePoolVO.java +++ b/core/src/com/cloud/storage/StoragePoolVO.java @@ -161,6 +161,7 @@ public class StoragePoolVO implements StoragePool { private Long clusterId; + @Override public Long getClusterId() { return clusterId; } @@ -195,6 +196,10 @@ public class StoragePoolVO implements StoragePool { this.setStatus(Status.Up); } + public StoragePoolVO(StoragePoolVO that) { + this(that.id, that.name, that.uuid, that.poolType, that.dataCenterId, that.podId, that.availableBytes, that.capacityBytes, that.hostAddress, that.port, that.path); + } + public StoragePoolVO(StoragePoolType type, String hostAddress, int port, String path) { this.poolType = type; this.hostAddress = hostAddress; @@ -224,6 +229,7 @@ public class StoragePoolVO implements StoragePool { this.uuid = uuid; } + @Override public int getPort() { return port; } @@ -257,7 +263,8 @@ public class StoragePoolVO implements StoragePool { return null; } - public Long getPodId() { + @Override + public Long getPodId() { return podId; } diff --git a/core/src/com/cloud/vm/DomainRouterVO.java b/core/src/com/cloud/vm/DomainRouterVO.java index a191836dbe9..34e173dbdab 100755 --- a/core/src/com/cloud/vm/DomainRouterVO.java +++ b/core/src/com/cloud/vm/DomainRouterVO.java @@ -90,6 +90,11 @@ public class DomainRouterVO extends VMInstanceVO implements DomainRouter { @Enumerated(EnumType.STRING) private Role role = Role.DHCP_FIREWALL_LB_PASSWD_USERDATA; + public DomainRouterVO(DomainRouterVO that) { + this(that.id, that.serviceOfferingId, that.instanceName, that.privateMacAddress, that.privateIpAddress, that.privateNetmask, that.templateId, that.guestOSId, that.guestMacAddress, that.guestIpAddress, that.guestNetmask, that.accountId, that.domainId, that.publicMacAddress, that.publicIpAddress, that.publicNetmask, that.vlanDbId, that.vlanId, that.podId, that.dataCenterId, that.ramSize, that.gateway, that.domain, that.dns1, that.dns2); + this.vnet = that.vnet; + } + public DomainRouterVO(long id, long serviceOfferingId, String name, diff --git a/core/src/com/cloud/vm/SecondaryStorageVmVO.java b/core/src/com/cloud/vm/SecondaryStorageVmVO.java index a97f690638e..5afb42c8633 100644 --- a/core/src/com/cloud/vm/SecondaryStorageVmVO.java +++ b/core/src/com/cloud/vm/SecondaryStorageVmVO.java @@ -26,8 +26,6 @@ import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; - -import com.cloud.vm.VirtualMachine.Type; /** * SecondaryStorageVmVO domain object @@ -87,7 +85,9 @@ public class SecondaryStorageVmVO extends VMInstanceVO implements SecondaryStora @Temporal(TemporalType.TIMESTAMP) @Column(name="last_update", updatable=true, nullable=true) - private Date lastUpdateTime; + private Date lastUpdateTime; + + public SecondaryStorageVmVO(long id, long serviceOfferingId, String name, long templateId, long guestOSId, long dataCenterId, long domainId, long accountId) { @@ -140,6 +140,10 @@ public class SecondaryStorageVmVO extends VMInstanceVO implements SecondaryStora this.ramSize = ramSize; this.setGuid(guid); this.nfsShare = nfsShare; + } + + public SecondaryStorageVmVO(SecondaryStorageVmVO that) { + this(that.id, that.serviceOfferingId, that.instanceName, that.guestMacAddress, that.guestIpAddress, that.guestNetmask, that.privateMacAddress, that.privateIpAddress, that.privateNetmask, that.templateId, that.guestOSId, that.publicMacAddress, that.publicIpAddress, that.publicNetmask, that.vlanDbId, that.vlanId, that.podId, that.dataCenterId, that.domainId, that.accountId, that.gateway, that.hostId, that.dns1, that.dns2, that.domain, that.ramSize, that.guid, that.nfsShare); } protected SecondaryStorageVmVO() { diff --git a/core/src/com/cloud/vm/VMInstanceVO.java b/core/src/com/cloud/vm/VMInstanceVO.java index 07e8e1c16a7..8bfa0906c36 100644 --- a/core/src/com/cloud/vm/VMInstanceVO.java +++ b/core/src/com/cloud/vm/VMInstanceVO.java @@ -47,20 +47,20 @@ public class VMInstanceVO implements VirtualMachine, FiniteStateObject