in plugin-azure-server-base/src/main/java/jetbrains/buildServer/clouds/azure/connector/ProvisionActionsQueue.java [29:70]
public synchronized void queueAction(@NotNull final String serviceName, @NotNull final InstanceAction action) {
if (!requestsQueue.containsKey(serviceName)) {
requestsQueue.put(serviceName, new AtomicReference<String>(null));
}
myRunner.addConditional(new ConditionalRunner.Conditional() {
@NotNull
public String getName() {
return "Start handler of '" + action.getName() + "'";
}
public boolean canExecute() {
return requestsQueue.get(serviceName).get() == null;
}
public boolean execute() throws Exception {
try {
final String actionId = action.action();
myRunner.addConditional(createFromActionId(action, actionId, serviceName));
requestsQueue.get(serviceName).set(actionId);
return true;
} catch (Exception ex) {
LOG.warn("An error occurred while attempting to execute " + getName() + ": " + ex.toString(), ex);
if (ex.getMessage() == null) {
action.onError(ex);
throw ex;
}
final Matcher matcher = CONFLICT_ERROR_PATTERN.matcher(ex.getMessage());
if (matcher.matches()) {
requestsQueue.get(serviceName).set(matcher.group(1));
return false;
} else {
Matcher portMatcher = PORT_ERROR_PATTERN.matcher(ex.getMessage());
if (portMatcher.matches()) {
return false;
}
}
action.onError(ex);
throw ex;
}
}
});
}