Updated Branches:
  refs/heads/javelin 593b60ca5 -> 1283712d9

replace spring injection in nfssecondarystorage


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/1283712d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/1283712d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/1283712d

Branch: refs/heads/javelin
Commit: 1283712d9320e6438995084f5a7df0ed57fa4b71
Parents: 593b60c
Author: Edison Su <sudi...@gmail.com>
Authored: Fri Jan 18 15:09:55 2013 -0800
Committer: Edison Su <sudi...@gmail.com>
Committed: Fri Jan 18 15:10:08 2013 -0800

----------------------------------------------------------------------
 .../resource/NfsSecondaryStorageResource.java      |    6 ++-
 .../storage/image/store/TemplateObject.java        |    4 +-
 .../storage/command/CreateVolumeCommand.java       |   45 ---------------
 .../storage/endpoint/DefaultEndPointSelector.java  |   26 +++++++-
 .../storage/endpoint/EndPointSelector.java         |    6 ++
 .../driver/DefaultPrimaryDataStoreDriverImpl.java  |   25 ++++-----
 .../xen/resource/XenServerStorageResource.java     |    8 +-
 7 files changed, 50 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1283712d/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java
----------------------------------------------------------------------
diff --git 
a/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java 
b/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java
index 7c10548..a6f8a93 100755
--- a/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java
+++ b/core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java
@@ -1494,10 +1494,14 @@ SecondaryStorageResource {
 
             try {
                 Class<?> clazz = Class.forName(value);
-                _storage = (StorageLayer)ComponentContext.inject(clazz);
+                _storage = (StorageLayer)clazz.newInstance();
                 _storage.configure("StorageLayer", params);
             } catch (ClassNotFoundException e) {
                 throw new ConfigurationException("Unable to find class " + 
value);
+            } catch (InstantiationException e) {
+                throw new ConfigurationException("Unable to find class " + 
value);
+            } catch (IllegalAccessException e) {
+                throw new ConfigurationException("Unable to find class " + 
value);
             }
         }
         _storage.mkdirs(_parent);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1283712d/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
 
b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
index edc194c..fb4f9ca 100644
--- 
a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
+++ 
b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
@@ -90,9 +90,9 @@ public class TemplateObject implements TemplateInfo {
         } else {
             ObjectInDataStoreVO obj = 
ojbectInStoreMgr.findObject(this.imageVO.getId(), DataObjectType.TEMPLATE, 
this.dataStore.getId(), this.dataStore.getRole());
             if (obj.getState() != ObjectInDataStoreStateMachine.State.Ready) {
-                return this.dataStore.getUri() + File.separator + "?type=" + 
DataObjectType.TEMPLATE + "&size=" + this.imageVO.getSize(); 
+                return this.dataStore.getUri() + File.separator + "&objType=" 
+ DataObjectType.TEMPLATE + "&size=" + this.imageVO.getSize(); 
             } else {
-                return this.dataStore.getUri() + File.separator + "?type=" + 
DataObjectType.TEMPLATE + "&path=" + obj.getInstallPath();
+                return this.dataStore.getUri() + File.separator + "&objType=" 
+ DataObjectType.TEMPLATE + "&path=" + obj.getInstallPath();
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1283712d/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
 
b/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
deleted file mode 100644
index db643fe..0000000
--- 
a/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
+++ /dev/null
@@ -1,45 +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.cloud.agent.api.Command;
-
-public class CreateVolumeCommand extends Command implements 
StorageSubSystemCommand {
-    protected String volumeUri;
-
-    public CreateVolumeCommand(String volumeUri) {
-        super();
-        this.volumeUri = volumeUri;
-    }
-
-    protected CreateVolumeCommand() {
-        super();
-    }
-
-    @Override
-    public boolean executeInSequence() {
-        // TODO Auto-generated method stub
-        return false;
-    }
-    
-    public String getVolume() {
-        return this.volumeUri;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1283712d/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
 
b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
index 5d1e1ff..846697c 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java
@@ -39,6 +39,7 @@ import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
+import com.cloud.utils.exception.CloudRuntimeException;
 
 @Component
 public class DefaultEndPointSelector implements EndPointSelector {
@@ -48,6 +49,8 @@ public class DefaultEndPointSelector implements 
EndPointSelector {
     HostDao hostDao;
     private String findOneHostInaScope = "select id from host where "
             + " status == 'Up' and hypervisor_type != 'VMware' and type in 
('Routing', 'SecondaryStorageVM') ";
+    private String findOneHostOnPrimaryStorage = "select id from host where"
+            +  "status == 'Up' and type == 'Routing' ";
 
     protected boolean moveBetweenPrimaryImage(DataStore srcStore,
             DataStore destStore) {
@@ -62,9 +65,9 @@ public class DefaultEndPointSelector implements 
EndPointSelector {
     }
 
     @DB
-    protected EndPoint findEndPointInScope(Scope scope) {
+    protected EndPoint findEndPointInScope(Scope scope, String sqlBase) {
         StringBuilder sbuilder = new StringBuilder();
-        sbuilder.append(findOneHostInaScope);
+        sbuilder.append(sqlBase);
 
         if (scope.getScopeType() == ScopeType.HOST) {
             sbuilder.append(" and id = ");
@@ -76,7 +79,7 @@ public class DefaultEndPointSelector implements 
EndPointSelector {
             sbuilder.append(" and data_center_id = ");
             sbuilder.append(scope.getScopeId());
         }
-
+//TODO: order by rand() is slow if there are lot of hosts
         sbuilder.append(" ORDER by rand() limit 1");
         String sql = sbuilder.toString();
         PreparedStatement pstmt = null;
@@ -129,7 +132,7 @@ public class DefaultEndPointSelector implements 
EndPointSelector {
             // if both are zone scope
             selectedScope = srcScope;
         }
-        return findEndPointInScope(selectedScope);
+        return findEndPointInScope(selectedScope, findOneHostInaScope);
     }
 
     @Override
@@ -146,4 +149,19 @@ public class DefaultEndPointSelector implements 
EndPointSelector {
         // TODO Auto-generated method stub
         return null;
     }
+    
+    protected EndPoint findEndpointForPrimaryStorage(DataStore store) {
+        return findEndPointInScope(store.getScope(), 
findOneHostOnPrimaryStorage);
+    }
+    
+    @Override
+    public EndPoint select(DataObject object) {
+        DataStore store = object.getDataStore();
+        if (store.getRole() == DataStoreRole.Primary) {
+            return findEndpointForPrimaryStorage(store);
+        } else {
+            throw new CloudRuntimeException("not implemented yet");
+        }
+        
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1283712d/engine/storage/src/org/apache/cloudstack/storage/endpoint/EndPointSelector.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/endpoint/EndPointSelector.java
 
b/engine/storage/src/org/apache/cloudstack/storage/endpoint/EndPointSelector.java
index 274c5dc..9f93cda 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/endpoint/EndPointSelector.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/endpoint/EndPointSelector.java
@@ -23,4 +23,10 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 
 public interface EndPointSelector {
     public EndPoint select(DataObject srcData, DataObject destData);
+
+    /**
+     * @param object
+     * @return
+     */
+    EndPoint select(DataObject object);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1283712d/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
 
b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
index 3cf5697..dfc6566 100644
--- 
a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
+++ 
b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
@@ -16,9 +16,10 @@
 // under the License.
 package org.apache.cloudstack.storage.datastore.driver;
 
-import java.util.List;
 import java.util.Set;
 
+import javax.inject.Inject;
+
 import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
 import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
 import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
@@ -28,10 +29,10 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher;
 import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
 import org.apache.cloudstack.framework.async.AsyncRpcConext;
+import org.apache.cloudstack.storage.command.CreateObjectCommand;
 import org.apache.cloudstack.storage.command.CreateVolumeAnswer;
-import org.apache.cloudstack.storage.command.CreateVolumeCommand;
 import org.apache.cloudstack.storage.command.DeleteCommand;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.endpoint.EndPointSelector;
 import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
 import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver;
 import org.apache.log4j.Logger;
@@ -41,11 +42,9 @@ import com.cloud.agent.api.Answer;
 
 public class DefaultPrimaryDataStoreDriverImpl implements 
PrimaryDataStoreDriver {
     private static final Logger s_logger = 
Logger.getLogger(DefaultPrimaryDataStoreDriverImpl.class);
-    protected PrimaryDataStore dataStore;
-    public DefaultPrimaryDataStoreDriverImpl(PrimaryDataStore dataStore) {
-        this.dataStore = dataStore;
-    }
-    
+    @Inject
+    EndPointSelector selector;
+
     public DefaultPrimaryDataStoreDriverImpl() {
         
     }
@@ -83,8 +82,8 @@ public class DefaultPrimaryDataStoreDriverImpl implements 
PrimaryDataStoreDriver
     @Override
     public void deleteAsync(DataObject vo, 
AsyncCompletionCallback<CommandResult> callback) {
         DeleteCommand cmd = new DeleteCommand(vo.getUri());
-        List<EndPoint> endPoints = null;
-        EndPoint ep = endPoints.get(0);
+    
+        EndPoint ep = selector.select(vo);
         AsyncRpcConext<CommandResult> context = new 
AsyncRpcConext<CommandResult>(callback);
         AsyncCallbackDispatcher<DefaultPrimaryDataStoreDriverImpl, Answer> 
caller = AsyncCallbackDispatcher.create(this);
         caller.setCallback(caller.getTarget().deleteCallback(null, null))
@@ -153,9 +152,8 @@ public class DefaultPrimaryDataStoreDriverImpl implements 
PrimaryDataStoreDriver
     @Override
     public void createAsync(DataObject vol,
             AsyncCompletionCallback<CreateCmdResult> callback) {
-        List<EndPoint> endPoints = null;
-        EndPoint ep = endPoints.get(0);
-        CreateVolumeCommand createCmd = new CreateVolumeCommand(vol.getUri());
+        EndPoint ep = selector.select(vol);
+        CreateObjectCommand createCmd = new CreateObjectCommand(vol.getUri());
         
         CreateVolumeContext<CommandResult> context = null;
         AsyncCallbackDispatcher<DefaultPrimaryDataStoreDriverImpl, Answer> 
caller = AsyncCallbackDispatcher.create(this);
@@ -163,7 +161,6 @@ public class DefaultPrimaryDataStoreDriverImpl implements 
PrimaryDataStoreDriver
             .setCallback(caller.getTarget().createAsyncCallback(null, null));
 
         ep.sendMessageAsync(createCmd, caller);
-        
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/1283712d/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
 
b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
index d47da9b..a245fb7 100644
--- 
a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
+++ 
b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
@@ -33,7 +33,7 @@ import org.apache.cloudstack.storage.command.CopyCmd;
 import org.apache.cloudstack.storage.command.CopyCmdAnswer;
 import org.apache.cloudstack.storage.command.CreatePrimaryDataStoreCmd;
 import org.apache.cloudstack.storage.command.CreateVolumeAnswer;
-import org.apache.cloudstack.storage.command.CreateVolumeCommand;
+import org.apache.cloudstack.storage.command.CreateObjectCommand;
 import org.apache.cloudstack.storage.command.CreateVolumeFromBaseImageCommand;
 import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
 import org.apache.cloudstack.storage.datastore.protocol.DataStoreProtocol;
@@ -82,8 +82,8 @@ public class XenServerStorageResource {
             return execute((CreatePrimaryDataStoreCmd) command);
         } else if (command instanceof CreateVolumeFromBaseImageCommand) {
             return execute((CreateVolumeFromBaseImageCommand)command);
-        } else if (command instanceof CreateVolumeCommand) {
-            return execute((CreateVolumeCommand) command);
+        } else if (command instanceof CreateObjectCommand) {
+            return execute((CreateObjectCommand) command);
         } else if (command instanceof DeleteVolumeCommand) {
             return execute((DeleteVolumeCommand)command);
         }
@@ -114,7 +114,7 @@ public class XenServerStorageResource {
         vdi.destroy(conn);
     }
     
-    protected CreateVolumeAnswer execute(CreateVolumeCommand cmd) {
+    protected CreateVolumeAnswer execute(CreateObjectCommand cmd) {
         VolumeTO volume = null;
         PrimaryDataStoreTO primaryDataStore = volume.getDataStore();
         Connection conn = hypervisorResource.getConnection();

Reply via email to