diff --git a/engine/storage/pom.xml b/engine/storage/pom.xml
index 519f6babf3b..a82b3ea1cd1 100644
--- a/engine/storage/pom.xml
+++ b/engine/storage/pom.xml
@@ -56,6 +56,11 @@
${project.version}
+ org.apache.cloudstack
+ cloud-secondary-storage
+ ${project.version}
+
+
mysql
mysql-connector-java
${cs.mysql.version}
diff --git a/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java b/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
index 5a4aaa6ba27..525a507a30b 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/LocalHostEndpoint.java
@@ -11,7 +11,7 @@
// 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
+// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.cloudstack.storage;
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
index b7db243c706..cea30baae18 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
@@ -82,6 +82,7 @@ public class PrimaryDataStoreImpl implements PrimaryDataStore {
@Inject
StoragePoolHostDao poolHostDao;
+ @Inject
private VolumeDao volumeDao;
public PrimaryDataStoreImpl() {
diff --git a/server/src/com/cloud/storage/upload/UploadListener.java b/server/src/com/cloud/storage/upload/UploadListener.java
index d3b7af9f675..c6f273bb93a 100755
--- a/server/src/com/cloud/storage/upload/UploadListener.java
+++ b/server/src/com/cloud/storage/upload/UploadListener.java
@@ -43,6 +43,7 @@ import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.StartupCommand;
import com.cloud.agent.api.StartupStorageCommand;
+import com.cloud.agent.api.storage.DownloadAnswer;
import com.cloud.agent.api.storage.UploadAnswer;
import com.cloud.agent.api.storage.UploadCommand;
import com.cloud.agent.api.storage.UploadProgressCommand;
@@ -56,6 +57,7 @@ import com.cloud.storage.Upload.Status;
import com.cloud.storage.Upload.Type;
import com.cloud.storage.UploadVO;
import com.cloud.storage.dao.UploadDao;
+import com.cloud.storage.download.DownloadListener;
import com.cloud.storage.upload.UploadState.UploadEvent;
import com.cloud.utils.exception.CloudRuntimeException;
@@ -475,6 +477,10 @@ public class UploadListener implements Listener {
@Override
public void complete(Answer answer) {
listener.processAnswers(id, -1, new Answer[] {answer});
+ if (listener instanceof DownloadListener) {
+ DownloadListener dwldListener = (DownloadListener)listener;
+ dwldListener.getCallback().complete((DownloadAnswer)answer);
+ }
}
}
}
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
index 53c96ddf518..d783cdd318c 100644
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
@@ -6,12 +6,14 @@ import static java.util.Arrays.asList;
import java.io.File;
import java.io.InputStream;
+import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import java.util.concurrent.Executors;
import org.apache.cloudstack.storage.command.DownloadSystemTemplateCommand;
@@ -112,6 +114,26 @@ public class LocalNfsSecondaryStorageResource extends NfsSecondaryStorageResourc
}
}
+ @Override
+ synchronized public String getRootDir(String secUrl) {
+ try {
+ URI uri = new URI(secUrl);
+ String nfsHost = uri.getHost();
+
+ InetAddress nfsHostAddr = InetAddress.getByName(nfsHost);
+ String nfsHostIp = nfsHostAddr.getHostAddress();
+ String nfsPath = nfsHostIp + ":" + uri.getPath();
+ String dir = UUID.nameUUIDFromBytes(nfsPath.getBytes()).toString();
+ String root = _parent + "/" + dir;
+ mount(root, nfsPath);
+ return root;
+ } catch (Exception e) {
+ String msg = "GetRootDir for " + secUrl + " failed due to " + e.toString();
+ s_logger.error(msg, e);
+ throw new CloudRuntimeException(msg);
+ }
+ }
+
@Override
protected String mount(String root, String nfsPath) {
File file = new File(root);
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index 1d5e076d75e..fcd34811c1c 100755
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -158,7 +158,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
private String _storageNetmask;
private String _storageGateway;
private final List nfsIps = new ArrayList();
- private String _parent = "/mnt/SecStorage";
+ protected String _parent = "/mnt/SecStorage";
final private String _tmpltDir = "/var/cloudstack/template";
final private String _tmpltpp = "template.properties";
private String createTemplateFromSnapshotXenScript;