Skip to content

Commit 75e36b5

Browse files
committed
prevent commands when extension path is not ready
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent f2dd216 commit 75e36b5

File tree

4 files changed

+27
-10
lines changed

4 files changed

+27
-10
lines changed

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsManagerImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ protected void updateExtensionPathReady(Extension extension, boolean ready) {
425425
ExtensionVO extensionVO = extensionDao.createForUpdate(extension.getId());
426426
extensionVO.setPathReady(ready);
427427
extensionDao.update(extension.getId(), extensionVO);
428+
updateAllExtensionHosts(extension, null, false);
428429
}
429430

430431
protected void disableExtension(long extensionId) {
@@ -1530,7 +1531,7 @@ public ConfigKey<?>[] getConfigKeys() {
15301531

15311532
public class PathStateCheckWorker extends ManagedContextRunnable {
15321533

1533-
protected void runCleanupForLongestRunningManagementServer() {
1534+
protected void runCheckUsingLongestRunningManagementServer() {
15341535
try {
15351536
List<ManagementServerHostVO> msHosts = managementServerHostDao.listBy(ManagementServerHost.State.Up);
15361537
msHosts.sort(Comparator.comparingLong(ManagementServerHostVO::getRunid));
@@ -1554,7 +1555,7 @@ protected void runInContext() {
15541555
try {
15551556
if (gcLock.lock(3)) {
15561557
try {
1557-
runCleanupForLongestRunningManagementServer();
1558+
runCheckUsingLongestRunningManagementServer();
15581559
} finally {
15591560
gcLock.unlock();
15601561
}

plugins/hypervisors/external/src/main/java/org/apache/cloudstack/agent/manager/ExternalServerPlanner.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ public DeployDestination plan(VirtualMachineProfile vmProfile, DeploymentPlan pl
8686
extensionVO, vmProfile.getInstanceName());
8787
return null;
8888
}
89+
if (!extensionVO.isPathReady()) {
90+
logger.error("{} path is not in ready state therefore planning can not be done for deployment of external instance {}",
91+
extensionVO, vmProfile.getInstanceName());
92+
return null;
93+
}
8994

9095
String haVmTag = (String)vmProfile.getParameter(VirtualMachineProfile.Param.HaTag);
9196

plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/discoverer/ExternalServerDiscoverer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ protected void addExtensionDataToResourceParams(ExtensionVO extension, Map<Strin
140140
params.put("extensionName", extension.getName());
141141
params.put("extensionRelativePath", extension.getRelativePath());
142142
params.put("extensionState", extension.getState());
143+
params.put("extensionPathReady", extension.isPathReady());
143144
}
144145

145146
@Override

plugins/hypervisors/external/src/main/java/org/apache/cloudstack/hypervisor/external/resource/ExternalResource.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public class ExternalResource implements ServerResource {
8787
private String extensionName;
8888
private String extensionRelativePath;
8989
private Extension.State extensionState;
90+
private boolean extensionPathReady;
9091

9192
protected boolean isExtensionDisconnected() {
9293
return StringUtils.isAnyBlank(extensionName, extensionRelativePath);
@@ -96,6 +97,10 @@ protected boolean isExtensionNotEnabled() {
9697
return !Extension.State.Enabled.equals(extensionState);
9798
}
9899

100+
protected boolean isExtensionPathNotReady() {
101+
return !extensionPathReady;
102+
}
103+
99104
public ExternalResource() {
100105
type = Host.Type.Routing;
101106
}
@@ -176,8 +181,12 @@ protected String logAndGetExtensionNotConnectedOrDisabledError() {
176181
logger.error("Extension not connected to host: {}", name);
177182
return "Extension not connected";
178183
}
179-
logger.error("Extension: {} connected to host: {} is not in Enabled state", extensionName, name);
180-
return "Extension is disabled";
184+
if (isExtensionNotEnabled()) {
185+
logger.error("Extension: {} connected to host: {} is not in Enabled state", extensionName, name);
186+
return "Extension is disabled";
187+
}
188+
logger.error("Extension: {} connected to host: {} is not having path in Ready state", extensionName, name);
189+
return "Extension is not ready";
181190
}
182191

183192
private Answer execute(ExtensionRoutingUpdateCommand cmd) {
@@ -241,14 +250,14 @@ public GetHostStatsAnswer execute(GetHostStatsCommand cmd) {
241250
}
242251

243252
public StartAnswer execute(StartCommand cmd) {
244-
if (isExtensionDisconnected() || isExtensionNotEnabled()) {
253+
if (isExtensionDisconnected() || isExtensionNotEnabled() || isExtensionPathNotReady()) {
245254
return new StartAnswer(cmd, logAndGetExtensionNotConnectedOrDisabledError());
246255
}
247256
return externalProvisioner.startInstance(guid, extensionName, extensionRelativePath, cmd);
248257
}
249258

250259
public StopAnswer execute(StopCommand cmd) {
251-
if (isExtensionDisconnected() || isExtensionNotEnabled()) {
260+
if (isExtensionDisconnected() || isExtensionNotEnabled() || isExtensionPathNotReady()) {
252261
return new StopAnswer(cmd, logAndGetExtensionNotConnectedOrDisabledError(), false);
253262
}
254263
if (cmd.isExpungeVM()) {
@@ -258,28 +267,28 @@ public StopAnswer execute(StopCommand cmd) {
258267
}
259268

260269
public RebootAnswer execute(RebootCommand cmd) {
261-
if (isExtensionDisconnected() || isExtensionNotEnabled()) {
270+
if (isExtensionDisconnected() || isExtensionNotEnabled() || isExtensionPathNotReady()) {
262271
return new RebootAnswer(cmd, logAndGetExtensionNotConnectedOrDisabledError(), false);
263272
}
264273
return externalProvisioner.rebootInstance(guid, extensionName, extensionRelativePath, cmd);
265274
}
266275

267276
public PrepareExternalProvisioningAnswer execute(PrepareExternalProvisioningCommand cmd) {
268-
if (isExtensionDisconnected() || isExtensionNotEnabled()) {
277+
if (isExtensionDisconnected() || isExtensionNotEnabled() || isExtensionPathNotReady()) {
269278
return new PrepareExternalProvisioningAnswer(cmd, false, logAndGetExtensionNotConnectedOrDisabledError());
270279
}
271280
return externalProvisioner.prepareExternalProvisioning(guid, extensionName, extensionRelativePath, cmd);
272281
}
273282

274283
public RunCustomActionAnswer execute(RunCustomActionCommand cmd) {
275-
if (isExtensionDisconnected() || isExtensionNotEnabled()) {
284+
if (isExtensionDisconnected() || isExtensionNotEnabled() || isExtensionPathNotReady()) {
276285
return new RunCustomActionAnswer(cmd, false, logAndGetExtensionNotConnectedOrDisabledError());
277286
}
278287
return externalProvisioner.runCustomAction(guid, extensionName, extensionRelativePath, cmd);
279288
}
280289

281290
public Answer execute(Command cmd) {
282-
if (isExtensionDisconnected() || isExtensionNotEnabled()) {
291+
if (isExtensionDisconnected() || isExtensionNotEnabled() || isExtensionPathNotReady()) {
283292
return new Answer(cmd, false, logAndGetExtensionNotConnectedOrDisabledError());
284293
}
285294
RunCustomActionCommand runCustomActionCommand = new RunCustomActionCommand(cmd.toString());
@@ -351,6 +360,7 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
351360
extensionName = (String)params.get("extensionName");
352361
extensionRelativePath = (String)params.get("extensionRelativePath");
353362
extensionState = (Extension.State)params.get("extensionState");
363+
extensionPathReady = (boolean)params.get("extensionPathReady");
354364
return true;
355365
}
356366

0 commit comments

Comments
 (0)