mirror of https://github.com/apache/cloudstack.git
volume upload: refactored post upload command and used it during template registration
This commit is contained in:
parent
f0b60c742b
commit
15ae33a5b6
|
|
@ -19,42 +19,56 @@
|
|||
|
||||
package org.apache.cloudstack.storage.command;
|
||||
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
|
||||
|
||||
public class TemplateOrVolumePostUploadCommand {
|
||||
DataObject dataObject;
|
||||
EndPoint endPoint;
|
||||
|
||||
long entityId;
|
||||
|
||||
String entityUUID;
|
||||
|
||||
String absolutePath;
|
||||
|
||||
String checksum;
|
||||
|
||||
String type;
|
||||
|
||||
String name;
|
||||
// String installPathPrefix;
|
||||
|
||||
String localPath;
|
||||
// String isHvm;
|
||||
|
||||
boolean requiresHvm;
|
||||
|
||||
String imageFormat;
|
||||
|
||||
String dataTo;
|
||||
|
||||
String dataToRole;
|
||||
|
||||
public TemplateOrVolumePostUploadCommand(long entityId, String entityUUID, String absolutePath, String checksum, String type, String name,
|
||||
String localPath, String imageFormat, String dataTo, String dataToRole) {
|
||||
String remoteEndPoint;
|
||||
|
||||
public TemplateOrVolumePostUploadCommand(long entityId, String entityUUID, String absolutePath, String checksum, String type, String name, String imageFormat, String dataTo,
|
||||
String dataToRole) {
|
||||
this.entityId = entityId;
|
||||
this.entityUUID = entityUUID;
|
||||
this.absolutePath = absolutePath;
|
||||
this.checksum = checksum;
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
// this.installPathPrefix = installPathPrefix;
|
||||
this.localPath = localPath;
|
||||
// this.isHvm = isHvm;
|
||||
this.imageFormat = imageFormat;
|
||||
this.dataTo = dataTo;
|
||||
this.dataToRole = dataToRole;
|
||||
}
|
||||
|
||||
public TemplateOrVolumePostUploadCommand() {
|
||||
}
|
||||
|
||||
public String getRemoteEndPoint() {
|
||||
return remoteEndPoint;
|
||||
}
|
||||
|
||||
public void setRemoteEndPoint(String remoteEndPoint) {
|
||||
this.remoteEndPoint = remoteEndPoint;
|
||||
}
|
||||
|
||||
public String getDataTo() {
|
||||
return dataTo;
|
||||
}
|
||||
|
|
@ -70,13 +84,6 @@ public class TemplateOrVolumePostUploadCommand {
|
|||
public void setDataToRole(String dataToRole) {
|
||||
this.dataToRole = dataToRole;
|
||||
}
|
||||
// public String getInstallPathPrefix() {
|
||||
// return installPathPrefix;
|
||||
// }
|
||||
//
|
||||
// public void setInstallPathPrefix(String installPathPrefix) {
|
||||
// this.installPathPrefix = installPathPrefix;
|
||||
// }
|
||||
|
||||
public String getLocalPath() {
|
||||
return localPath;
|
||||
|
|
@ -86,13 +93,13 @@ public class TemplateOrVolumePostUploadCommand {
|
|||
this.localPath = localPath;
|
||||
}
|
||||
|
||||
// public String getIsHvm() {
|
||||
// return isHvm;
|
||||
// }
|
||||
public boolean getRequiresHvm() {
|
||||
return requiresHvm;
|
||||
}
|
||||
|
||||
// public void setIsHvm(String isHvm) {
|
||||
// this.isHvm = isHvm;
|
||||
// }
|
||||
public void setRequiresHvm(boolean requiresHvm) {
|
||||
this.requiresHvm = requiresHvm;
|
||||
}
|
||||
|
||||
public String getImageFormat() {
|
||||
return imageFormat;
|
||||
|
|
@ -149,55 +156,4 @@ public class TemplateOrVolumePostUploadCommand {
|
|||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public TemplateOrVolumePostUploadCommand(DataObject dataObject, EndPoint endPoint) {
|
||||
this.dataObject = dataObject;
|
||||
this.endPoint = endPoint;
|
||||
}
|
||||
|
||||
public TemplateOrVolumePostUploadCommand() {
|
||||
}
|
||||
|
||||
public DataObject getDataObject() {
|
||||
return dataObject;
|
||||
}
|
||||
|
||||
public void setDataObject(DataObject dataObject) {
|
||||
this.dataObject = dataObject;
|
||||
}
|
||||
|
||||
public EndPoint getEndPoint() {
|
||||
return endPoint;
|
||||
}
|
||||
|
||||
public void setEndPoint(EndPoint endPoint) {
|
||||
this.endPoint = endPoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
TemplateOrVolumePostUploadCommand that = (TemplateOrVolumePostUploadCommand)o;
|
||||
|
||||
return dataObject.equals(that.dataObject) && endPoint.equals(that.endPoint);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = dataObject.hashCode();
|
||||
result = 31 * result + endPoint.hashCode();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TemplateOrVolumePostUploadCommand{" + "dataObject=" + dataObject + ", endPoint=" + endPoint + '}';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,52 +0,0 @@
|
|||
/*
|
||||
* 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 org.apache.cloudstack.storage.command;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
public class TemplateOrVolumePostUploadCommandTypeAdapter implements JsonSerializer<TemplateOrVolumePostUploadCommand> {
|
||||
|
||||
@Override public JsonElement serialize(TemplateOrVolumePostUploadCommand src, Type typeOfSrc, JsonSerializationContext context) {
|
||||
JsonObject obj = new JsonObject();
|
||||
|
||||
EndPoint endPoint = src.getEndPoint();
|
||||
JsonObject endpointJSON = new JsonObject();
|
||||
endpointJSON.addProperty("id", endPoint.getId());
|
||||
endpointJSON.addProperty("hostAddress", endPoint.getHostAddr());
|
||||
endpointJSON.addProperty("publicAddr", endPoint.getPublicAddr());
|
||||
obj.add(endPoint.getClass().getName(), endpointJSON);
|
||||
|
||||
DataObject dataObject = src.getDataObject();
|
||||
JsonObject dataobjectJSON = new JsonObject();
|
||||
dataobjectJSON.addProperty("id", dataObject.getId());
|
||||
dataobjectJSON.addProperty("size", dataObject.getSize());
|
||||
dataobjectJSON.addProperty("uuid", dataObject.getUuid());
|
||||
dataobjectJSON.addProperty("type", String.valueOf(dataObject.getType()));
|
||||
obj.add(dataObject.getClass().getName(), dataobjectJSON);
|
||||
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
|
@ -329,10 +329,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
|
|||
*/
|
||||
|
||||
|
||||
TemplateOrVolumePostUploadCommand command =
|
||||
new TemplateOrVolumePostUploadCommand(vol.getId(), vol.getUuid(), volumeStore.getInstallPath(), volumeStore.getChecksum(), vol.getType().toString(), vol.getName(),
|
||||
volumeStore.getLocalDownloadPath(), vol.getFormat().toString(), dataObject.getDataStore().getUri(),
|
||||
dataObject.getDataStore().getRole().toString());
|
||||
TemplateOrVolumePostUploadCommand command = new TemplateOrVolumePostUploadCommand(vol.getId(), vol.getUuid(), volumeStore.getInstallPath(), volumeStore.getChecksum(), vol
|
||||
.getType().toString(), vol.getName(), vol.getFormat().toString(), dataObject.getDataStore().getUri(), dataObject.getDataStore().getRole().toString());
|
||||
command.setLocalPath(volumeStore.getLocalDownloadPath());
|
||||
Gson gson = new GsonBuilder().create();
|
||||
String jsonPayload = gson.toJson(command);
|
||||
response.setMetadata(EncryptionUtil.encodeData(jsonPayload, key));
|
||||
|
|
|
|||
|
|
@ -256,7 +256,11 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
|
|||
throw new CloudRuntimeException(errMsg);
|
||||
}
|
||||
|
||||
TemplateOrVolumePostUploadCommand payload = new TemplateOrVolumePostUploadCommand(templateOnStore, ep);
|
||||
TemplateOrVolumePostUploadCommand payload = new TemplateOrVolumePostUploadCommand(template.getId(), template.getUuid(), tmpl.getInstallPath(), tmpl.getChecksum(), tmpl
|
||||
.getType().toString(), template.getName(), template.getFormat().toString(), templateOnStore.getDataStore().getUri(), templateOnStore.getDataStore().getRole()
|
||||
.toString());
|
||||
payload.setRemoteEndPoint(ep.getPublicAddr());
|
||||
payload.setRequiresHvm(template.requiresHvm());
|
||||
payloads.add(payload);
|
||||
}
|
||||
_resourceLimitMgr.incrementResourceCount(profile.getAccountId(), ResourceType.template);
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ import com.google.gson.GsonBuilder;
|
|||
import org.apache.cloudstack.api.command.user.template.GetUploadParamsForTemplateCmd;
|
||||
import org.apache.cloudstack.api.response.GetUploadParamsResponse;
|
||||
import org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommand;
|
||||
import org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommandTypeAdapter;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
|
@ -348,10 +347,10 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
|
|||
*/
|
||||
TemplateOrVolumePostUploadCommand firstCommand = payload.get(0);
|
||||
|
||||
String url = "https://" + firstCommand.getEndPoint().getPublicAddr() + "/upload/" + firstCommand.getDataObject().getUuid();
|
||||
String url = "https://" + firstCommand.getRemoteEndPoint() + "/upload/" + firstCommand.getEntityUUID();
|
||||
response.setPostURL(new URL(url));
|
||||
|
||||
response.setId(UUID.fromString(firstCommand.getDataObject().getUuid()));
|
||||
response.setId(UUID.fromString(firstCommand.getEntityUUID()));
|
||||
|
||||
/*
|
||||
* TODO: hardcoding the timeout to current + 60 min for now. This needs to goto the database
|
||||
|
|
@ -365,7 +364,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
|
|||
/*
|
||||
* encoded metadata using the post upload config ssh key
|
||||
*/
|
||||
Gson gson = new GsonBuilder().registerTypeAdapter(TemplateOrVolumePostUploadCommand.class, new TemplateOrVolumePostUploadCommandTypeAdapter()).create();
|
||||
Gson gson = new GsonBuilder().create();
|
||||
String jsonPayload = gson.toJson(payload);
|
||||
response.setMetadata(EncryptionUtil.encodeData(jsonPayload, key));
|
||||
|
||||
|
|
|
|||
|
|
@ -2717,8 +2717,6 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
|
|||
if (httpRequest instanceof HttpEntityEnclosingRequest) {
|
||||
entity = ((HttpEntityEnclosingRequest) httpRequest).getEntity();
|
||||
}
|
||||
// For some reason, just putting the incoming entity into
|
||||
// the response will not work. We have to buffer the message.
|
||||
byte[] data;
|
||||
if (entity == null) {
|
||||
httpResponse.setEntity(new StringEntity("upload failed"));
|
||||
|
|
|
|||
Loading…
Reference in New Issue