private synchronized void updateRequestSchedule
    (Set<RequestScheduleRequest> requests) throws AmbariException {

    if (requests.isEmpty()) {
      LOG.warn("Received an empty requests set");
      return;
    }

    Clusters clusters = getManagementController().getClusters();

    for (RequestScheduleRequest request : requests) {

      validateRequest(request);

      Cluster cluster;
      try {
        cluster = clusters.getCluster(request.getClusterName());
      } catch (ClusterNotFoundException e) {
        throw new ParentObjectNotFoundException(
          "Attempted to add a request schedule to a cluster which doesn't " +
            "exist", e);
      }

      if (request.getId() == null) {
        throw new AmbariException("Id is a required parameter.");
      }

      RequestExecution requestExecution =
        cluster.getAllRequestExecutions().get(request.getId());

      if (requestExecution == null) {
        throw new AmbariException("Request Schedule not found "
          + ", clusterName = " + request.getClusterName()
          + ", description = " + request.getDescription()
          + ", id = " + request.getId());
      }

      String username = getManagementController().getAuthName();
      Integer userId = getManagementController().getAuthId();

      if (request.getDescription() != null) {
        requestExecution.setDescription(request.getDescription());
      }

      if (request.getSchedule() != null) {
        requestExecution.setSchedule(request.getSchedule());
      }

      if (request.getStatus() != null) {
        //TODO status changes graph
        if (!isValidRequestScheduleStatus(request.getStatus())) {
          throw new AmbariException("Request Schedule status not valid"
            + ", clusterName = " + request.getClusterName()
            + ", description = " + request.getDescription()
            + ", id = " + request.getId());
        }
        requestExecution.setStatus(RequestExecution.Status.valueOf(request.getStatus()));
      }
      requestExecution.setUpdateUser(username);
      requestExecution.setAuthenticatedUserId(userId);

      LOG.info("Persisting updated Request Schedule "
        + ", clusterName = " + request.getClusterName()
        + ", description = " + request.getDescription()
        + ", status = " + request.getStatus()
        + ", user = " + username);

      requestExecution.persist();

      // Update schedule for the batch
      getManagementController().getExecutionScheduleManager()
        .updateBatchSchedule(requestExecution);
    }
  }
Currently unsupported operation. Since strong guarantees are required
that no jobs are currently running.
@param request    the request object which defines the set of properties
                  for the resources to be updated
@param predicate  the predicate object which can be used to filter which
                  resources are updated

@return
@throws SystemException
@throws UnsupportedPropertyException
@throws NoSuchResourceException
@throws NoSuchParentResourceException
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestScheduleResourceProvider.java