@@ -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