Skip to content

Commit b4988e8

Browse files
sudisonEdison Su
authored andcommitted
add backedn code
1 parent f7e75d3 commit b4988e8

15 files changed

Lines changed: 165 additions & 178 deletions

File tree

engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPoint.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.cloud.agent.api.Command;
2323

2424
public interface EndPoint {
25+
public long getId();
2526
public Answer sendMessage(Command cmd);
2627
public void sendMessageAsync(Command cmd, AsyncCompletionCallback<Answer> callback);
2728
}

engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockHostEndpointRpcServerDirectCallResource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ public void sendCommandAsync(HypervisorHostEndPoint host, final Command command,
5151
MockRpcCallBack run = ComponentContext.inject(MockRpcCallBack.class);
5252
run.setCallback(callback);
5353
run.setCmd(command);
54-
run.setHostId(host.getHostId());
54+
run.setHostId(host.getId());
5555
executor.schedule(run, 10, TimeUnit.SECONDS);
5656
}
5757

5858
@Override
5959
public Answer sendCommand(HypervisorHostEndPoint host, Command command) {
6060
Answer answer;
6161
try {
62-
answer = agentMgr.send(host.getHostId(), command);
62+
answer = agentMgr.send(host.getId(), command);
6363
return answer;
6464
} catch (AgentUnavailableException e) {
6565
return null;

engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.cloudstack.storage.test;
2020

2121
import java.util.ArrayList;
22+
import java.util.HashMap;
2223
import java.util.List;
2324
import java.util.UUID;
2425

@@ -31,6 +32,7 @@
3132
import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
3233
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
3334
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
35+
import org.apache.cloudstack.storage.datastore.provider.DataStoreProviderManager;
3436
import org.apache.cloudstack.storage.image.ImageService;
3537
import org.apache.cloudstack.storage.image.db.ImageDataDao;
3638
import org.apache.cloudstack.storage.image.db.ImageDataVO;
@@ -80,8 +82,8 @@ public class volumeServiceTest extends CloudStackTestNGBase {
8082
DataCenterDao dcDao;
8183
@Inject
8284
PrimaryDataStoreDao primaryStoreDao;
83-
//@Inject
84-
//PrimaryDataStoreProviderManager primaryDataStoreProviderMgr;
85+
@Inject
86+
DataStoreProviderManager dataStoreProviderMgr;
8587
@Inject
8688
AgentManager agentMgr;
8789
Long dcId;
@@ -135,6 +137,12 @@ public void setUp() {
135137
host.setClusterId(cluster.getId());
136138

137139
host = hostDao.persist(host);
140+
try {
141+
dataStoreProviderMgr.configure(null, new HashMap<String, Object>());
142+
} catch (ConfigurationException e) {
143+
// TODO Auto-generated catch block
144+
e.printStackTrace();
145+
}
138146
primaryStore = createPrimaryDataStore();
139147

140148
//CreateVolumeAnswer createVolumeFromImageAnswer = new CreateVolumeAnswer(UUID.randomUUID().toString());
@@ -209,6 +217,7 @@ public void createTemplateTest() {
209217

210218
private PrimaryDataStoreInfo createPrimaryDataStore() {
211219
try {
220+
212221
/*
213222
PrimaryDataStoreProvider provider = primaryDataStoreProviderMgr.getDataStoreProvider("default primary data store provider");
214223
primaryDataStoreProviderMgr.configure("primary data store mgr", new HashMap<String, Object>());

engine/storage/src/org/apache/cloudstack/storage/HypervisorHostEndPoint.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public String getHostAddr() {
4848
return this.hostAddress;
4949
}
5050

51-
public long getHostId() {
51+
public long getId() {
5252
return this.hostId;
5353
}
5454

engine/storage/src/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,15 @@
1616
// under the License.
1717
package org.apache.cloudstack.storage.command;
1818

19-
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
20-
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
21-
2219
import com.cloud.agent.api.Command;
2320

2421
public class CreatePrimaryDataStoreCmd extends Command implements StorageSubSystemCommand {
25-
private final PrimaryDataStoreTO dataStore;
26-
public CreatePrimaryDataStoreCmd(PrimaryDataStoreTO dataStore) {
27-
this.dataStore = dataStore;
22+
private final String dataStore;
23+
public CreatePrimaryDataStoreCmd(String uri) {
24+
this.dataStore = uri;
2825
}
2926

30-
public PrimaryDataStoreTO getDataStore() {
27+
public String getDataStore() {
3128
return this.dataStore;
3229
}
3330

engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.sql.PreparedStatement;
2222
import java.sql.ResultSet;
2323
import java.sql.SQLException;
24+
import java.util.ArrayList;
25+
import java.util.List;
2426

2527
import javax.inject.Inject;
2628

@@ -36,9 +38,13 @@
3638
import org.springframework.stereotype.Component;
3739

3840
import com.cloud.host.HostVO;
41+
import com.cloud.host.Status;
3942
import com.cloud.host.dao.HostDao;
4043
import com.cloud.utils.db.DB;
44+
import com.cloud.utils.db.SearchCriteria2;
45+
import com.cloud.utils.db.SearchCriteriaService;
4146
import com.cloud.utils.db.Transaction;
47+
import com.cloud.utils.db.SearchCriteria.Op;
4248
import com.cloud.utils.exception.CloudRuntimeException;
4349

4450
@Component
@@ -164,4 +170,27 @@ public EndPoint select(DataObject object) {
164170
}
165171

166172
}
173+
174+
@Override
175+
public List<EndPoint> selectAll(DataStore store) {
176+
List<EndPoint> endPoints = new ArrayList<EndPoint>();
177+
if (store.getScope().getScopeType() == ScopeType.HOST) {
178+
HostVO host = hostDao.findById(store.getScope().getScopeId());
179+
endPoints.add(new HypervisorHostEndPoint(host.getId(),
180+
host.getPrivateIpAddress()));
181+
} else if (store.getScope().getScopeType() == ScopeType.CLUSTER) {
182+
SearchCriteriaService<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
183+
sc.addAnd(sc.getEntity().getClusterId(), Op.EQ, store.getScope().getScopeId());
184+
sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Up);
185+
List<HostVO> hosts = sc.find();
186+
for (HostVO host : hosts) {
187+
endPoints.add(new HypervisorHostEndPoint(host.getId(),
188+
host.getPrivateIpAddress()));
189+
}
190+
191+
} else {
192+
throw new CloudRuntimeException("shouldn't use it for other scope");
193+
}
194+
return endPoints;
195+
}
167196
}

engine/storage/src/org/apache/cloudstack/storage/endpoint/EndPointSelector.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818
*/
1919
package org.apache.cloudstack.storage.endpoint;
2020

21+
import java.util.List;
22+
2123
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
24+
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
2225
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
2326

2427
public interface EndPointSelector {
@@ -29,4 +32,9 @@ public interface EndPointSelector {
2932
* @return
3033
*/
3134
EndPoint select(DataObject object);
35+
/**
36+
* @param store
37+
* @return
38+
*/
39+
List<EndPoint> selectAll(DataStore store);
3240
}

engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.apache.log4j.Logger;
4747

4848
import com.cloud.hypervisor.Hypervisor.HypervisorType;
49+
import com.cloud.storage.dao.StoragePoolHostDao;
4950
import com.cloud.utils.component.ComponentContext;
5051

5152
public class DefaultPrimaryDataStore implements PrimaryDataStore {
@@ -120,7 +121,8 @@ public String getUri() {
120121
return this.pdsv.getPoolType() + File.separator
121122
+ this.pdsv.getHostAddress() + File.separator
122123
+ this.pdsv.getPath() + File.separator
123-
+ "?role=" + this.getRole();
124+
+ "?role=" + this.getRole()
125+
+ "&storeUuid=" + this.pdsv.getUuid();
124126
}
125127

126128
@Override

engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,16 @@
3838
import org.apache.log4j.Logger;
3939

4040
import com.cloud.agent.api.Answer;
41+
import com.cloud.storage.StoragePoolHostVO;
42+
import com.cloud.storage.dao.StoragePoolHostDao;
4143

4244

4345
public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver {
4446
private static final Logger s_logger = Logger.getLogger(DefaultPrimaryDataStoreDriverImpl.class);
4547
@Inject
4648
EndPointSelector selector;
47-
49+
@Inject
50+
StoragePoolHostDao storeHostDao;
4851
public DefaultPrimaryDataStoreDriverImpl() {
4952

5053
}
@@ -65,13 +68,13 @@ public DataObject getVolume() {
6568

6669
}
6770

68-
public Void createAsyncCallback(AsyncCallbackDispatcher<DefaultPrimaryDataStoreDriverImpl, Answer> callback, CreateVolumeContext<CommandResult> context) {
69-
CommandResult result = new CommandResult();
71+
public Void createAsyncCallback(AsyncCallbackDispatcher<DefaultPrimaryDataStoreDriverImpl, Answer> callback, CreateVolumeContext<CreateCmdResult> context) {
72+
CreateCmdResult result = null;
7073
CreateVolumeAnswer volAnswer = (CreateVolumeAnswer) callback.getResult();
7174
if (volAnswer.getResult()) {
72-
DataObject volume = context.getVolume();
73-
//volume.setPath(volAnswer.getVolumeUuid());
75+
result = new CreateCmdResult(volAnswer.getVolumeUuid());
7476
} else {
77+
result = new CreateCmdResult("");
7578
result.setResult(volAnswer.getDetails());
7679
}
7780

@@ -155,7 +158,7 @@ public void createAsync(DataObject vol,
155158
EndPoint ep = selector.select(vol);
156159
CreateObjectCommand createCmd = new CreateObjectCommand(vol.getUri());
157160

158-
CreateVolumeContext<CommandResult> context = null;
161+
CreateVolumeContext<CreateCmdResult> context = null;
159162
AsyncCallbackDispatcher<DefaultPrimaryDataStoreDriverImpl, Answer> caller = AsyncCallbackDispatcher.create(this);
160163
caller.setContext(context)
161164
.setCallback(caller.getTarget().createAsyncCallback(null, null));
@@ -165,7 +168,8 @@ public void createAsync(DataObject vol,
165168

166169
@Override
167170
public String grantAccess(DataObject object, EndPoint ep) {
168-
return object.getUri();
171+
StoragePoolHostVO poolHost = storeHostDao.findByPoolHost(object.getDataStore().getId(), ep.getId());
172+
return object.getUri() + "&storagePath=" + poolHost.getLocalPath();
169173
}
170174

171175
@Override

engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultKvmPrimaryDataStoreLifeCycle.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)