docs: @Override
      public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
          renameTimeoutToSuspendTimeout(operation);
          final boolean restart = RESTART.resolveModelAttribute(context, operation).asBoolean();
          final int timeout = SUSPEND_TIMEOUT.resolveModelAttribute(context, operation).asInt(); //in seconds, need to convert to ms
          // Acquire the controller lock to prevent new write ops and wait until current ones are done
          context.acquireControllerLock();
          context.addStep(new OperationStepHandler() {
              @Override
              public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
                  // WFLY-2741 -- DO NOT call context.getServiceRegistry(true) as that will trigger blocking for
                  // service container stability and one use case for this op is to recover from a
                  // messed up service container from a previous op. Instead just ask for authorization.
                  // Note that we already have the exclusive lock, so we are just skipping waiting for stability.
                  // If another op that is a step in a composite step with this op needs to modify the container
                  // it will have to wait for container stability, so skipping this only matters for the case
                  // where this step is the only runtime change.
  //                context.getServiceRegistry(true);
                  AuthorizationResult authorizationResult = context.authorize(operation, EnumSet.of(Action.ActionEffect.WRITE_RUNTIME));
                  if (authorizationResult.getDecision() == AuthorizationResult.Decision.DENY) {
                      throw ControllerLogger.ACCESS_LOGGER.unauthorized(operation.get(OP).asString(),
                              PathAddress.pathAddress(operation.get(OP_ADDR)), authorizationResult.getExplanation());
                  }
                  context.completeStep(new OperationContext.ResultHandler() {
                      @Override
                      public void handleResult(OperationContext.ResultAction resultAction, OperationContext context, ModelNode operation) {
                          if(resultAction == OperationContext.ResultAction.KEEP) {
                              //even if the timeout is zero we still pause the server
                              //to stop new requests being accepted as it is shutting down
                              final ShutdownAction shutdown = new ShutdownAction(getOperationName(operation), restart);
                              final ServiceRegistry registry = context.getServiceRegistry(false);
                              final ServiceController<SuspendController> suspendControllerServiceController = (ServiceController<SuspendController>) registry.getRequiredService(JBOSS_SUSPEND_CONTROLLER);
                              final SuspendController suspendController = suspendControllerServiceController.getValue();
                              OperationListener listener = new OperationListener() {
                                  @Override
                                  public void suspendStarted() {
  
                                  }
  
                                  @Override
                                  public void complete() {
                                      suspendController.removeListener(this);
                                      shutdown.shutdown();
                                  }
  
                                  @Override
                                  public void cancelled() {
                                      suspendController.removeListener(this);
                                      shutdown.cancel();
                                  }
  
                                  @Override
                                  public void timeout() {
                                      suspendController.removeListener(this);
                                      shutdown.shutdown();
                                  }
                              };
                              suspendController.addListener(listener);
                              suspendController.suspend(timeout > 0 ?  timeout * 1000 : timeout);
                          }
                      }
                  });
              }
          }, OperationContext.Stage.RUNTIME);
      }