public synchronized void queueAction()

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;
        }
      }
    });
  }