You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by mp...@apache.org on 2014/01/16 22:46:03 UTC
git commit: AMBARI-4322. Add relationship from Request to Request
Schedule. (mpapirkovskyy)
Updated Branches:
refs/heads/trunk ca4147f89 -> e056203a2
AMBARI-4322. Add relationship from Request to Request Schedule. (mpapirkovskyy)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e056203a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e056203a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e056203a
Branch: refs/heads/trunk
Commit: e056203a263e20f39fa46fc1aaaf2a86a5328072
Parents: ca4147f
Author: Myroslav Papirkovskyy <mp...@hortonworks.com>
Authored: Thu Jan 16 23:43:45 2014 +0200
Committer: mpapirkovskyy <mp...@hortonworks.com>
Committed: Thu Jan 16 23:45:53 2014 +0200
----------------------------------------------------------------------
.../server/actionmanager/ActionDBAccessor.java | 6 ++
.../actionmanager/ActionDBAccessorImpl.java | 29 +++++++
.../ambari/server/actionmanager/Request.java | 11 +++
.../resources/RequestResourceDefinition.java | 32 +++++++-
.../server/controller/ControllerModule.java | 36 +++++----
.../internal/RequestResourceProvider.java | 5 +-
.../server/orm/JPATableGenerationStrategy.java | 2 +
.../server/orm/entities/RequestEntity.java | 24 ++++++
.../orm/entities/RequestScheduleEntity.java | 12 +++
.../scheduler/AbstractLinearExecutionJob.java | 6 +-
.../scheduler/ExecutionScheduleManager.java | 12 ++-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 3 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 7 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 5 +-
.../Ambari-DDL-Postgres-REMOTE-CREATE.sql | 79 ++++++++++----------
.../src/main/resources/properties.json | 2 +
.../scheduler/ExecutionScheduleManagerTest.java | 31 +++++---
17 files changed, 222 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
index ac36bc6..c29f6f1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessor.java
@@ -69,6 +69,12 @@ public interface ActionDBAccessor {
void endRequest(long requestId);
/**
+ * Updates request with link to source schedule
+ */
+ @Transactional
+ void setSourceScheduleForRequest(long requestId, long scheduleId);
+
+ /**
* For the given host, update all the tasks based on the command report
*/
public void updateHostRoleState(String hostname, long requestId,
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
index a75848c..bc7ea8f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java
@@ -63,6 +63,8 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
HostRoleCommandFactory hostRoleCommandFactory;
@Inject
Clusters clusters;
+ @Inject
+ RequestScheduleDAO requestScheduleDAO;
@@ -257,6 +259,33 @@ public class ActionDBAccessorImpl implements ActionDBAccessor {
@Override
@Transactional
+ public void setSourceScheduleForRequest(long requestId, long scheduleId) {
+ RequestEntity requestEntity = requestDAO.findByPK(requestId);
+ if (requestEntity != null) {
+ RequestScheduleEntity scheduleEntity = requestScheduleDAO.findById(scheduleId);
+ if (scheduleEntity != null) {
+ requestEntity.setRequestScheduleEntity(scheduleEntity);
+ //we may want to break entity graph here for perf purposes (when list size is too large)
+ scheduleEntity.getRequestEntities().add(requestEntity);
+
+ requestDAO.merge(requestEntity);
+ requestScheduleDAO.merge(scheduleEntity);
+
+ } else {
+ String message = String.format("Request Schedule with id=%s not found", scheduleId);
+ LOG.error(message);
+ throw new RuntimeException(message);
+ }
+
+ } else {
+ String message = String.format("Request with id=%s not found", scheduleId);
+ LOG.error(message);
+ throw new RuntimeException(message);
+ }
+ }
+
+ @Override
+ @Transactional
public void updateHostRoleState(String hostname, long requestId,
long stageId, String role, CommandReport report) {
if (LOG.isDebugEnabled()) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Request.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Request.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Request.java
index 35f6864..e4de0cb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Request.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Request.java
@@ -39,6 +39,7 @@ public class Request {
private final long requestId;
private final long clusterId;
private final String clusterName;
+ private Long requestScheduleId;
private String commandName;
private String requestContext;
private long createTime;
@@ -141,6 +142,7 @@ public class Request {
this.targetHosts = entity.getTargetHosts();
this.requestType = entity.getRequestType();
this.commandName = entity.getCommandName();
+ this.requestScheduleId = entity.getRequestScheduleEntity().getScheduleId();
for (StageEntity stageEntity : entity.getStages()) {
Stage stage = stageFactory.createExisting(stageEntity);
@@ -174,6 +176,7 @@ public class Request {
requestEntity.setTargetComponent(targetComponent);
requestEntity.setTargetHosts(targetHosts);
requestEntity.setRequestType(requestType);
+ requestEntity.setRequestScheduleId(requestScheduleId);
//TODO set all fields
return requestEntity;
@@ -264,6 +267,14 @@ public class Request {
this.commandName = commandName;
}
+ public Long getRequestScheduleId() {
+ return requestScheduleId;
+ }
+
+ public void setRequestScheduleId(Long requestScheduleId) {
+ this.requestScheduleId = requestScheduleId;
+ }
+
public List<HostRoleCommand> getCommands() {
List<HostRoleCommand> commands = new ArrayList<HostRoleCommand>();
for (Stage stage : stages) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java
index a870c5e..474bf56 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RequestResourceDefinition.java
@@ -21,11 +21,11 @@ package org.apache.ambari.server.api.resources;
import org.apache.ambari.server.api.services.Request;
import org.apache.ambari.server.api.util.TreeNode;
+import org.apache.ambari.server.controller.internal.RepositoryResourceProvider;
+import org.apache.ambari.server.controller.internal.RequestResourceProvider;
import org.apache.ambari.server.controller.spi.Resource;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
/**
@@ -57,7 +57,7 @@ public class RequestResourceDefinition extends BaseResourceDefinition {
@Override
public List<PostProcessor> getPostProcessors() {
- return Collections.<PostProcessor>singletonList(new RequestHrefPostProcessor());
+ return Arrays.asList(new RequestHrefPostProcessor(), new RequestSourceScheduleHrefPostProcessor());
}
private class RequestHrefPostProcessor implements PostProcessor {
@@ -83,4 +83,28 @@ public class RequestResourceDefinition extends BaseResourceDefinition {
resultNode.setProperty("href", sb.toString());
}
}
+
+ private class RequestSourceScheduleHrefPostProcessor implements PostProcessor {
+
+ @Override
+ public void process(Request request, TreeNode<Resource> resultNode, String href) {
+ StringBuilder sb = new StringBuilder();
+ String[] toks = href.split("/");
+
+ for (int i = 0; i < toks.length; ++i) {
+ String s = toks[i];
+ sb.append(s).append('/');
+ if ("clusters".equals(s)) {
+ sb.append(toks[i + 1]).append('/');
+ break;
+ }
+ }
+
+ Object scheduleId = resultNode.getObject().getPropertyValue(RequestResourceProvider.REQUEST_SOURCE_SCHEDULE_ID);
+ if (scheduleId != null) {
+ sb.append("request_schedules/").append(scheduleId);
+ resultNode.getObject().setProperty(RequestResourceProvider.REQUEST_SOURCE_SCHEDULE_HREF, sb.toString());
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
index 5bff07e..7aa39a8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
@@ -71,6 +71,8 @@ import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.google.inject.name.Names;
import com.google.inject.persist.jpa.JpaPersistModule;
+import static org.eclipse.persistence.config.PersistenceUnitProperties.*;
+
/**
* Used for injection purposes.
*/
@@ -149,40 +151,44 @@ public class ControllerModule extends AbstractModule {
switch (persistenceType) {
case IN_MEMORY:
- properties.put("javax.persistence.jdbc.url", Configuration.JDBC_IN_MEMORY_URL);
- properties.put("javax.persistence.jdbc.driver", Configuration.JDBC_IN_MEMROY_DRIVER);
- properties.put("eclipselink.ddl-generation", "drop-and-create-tables");
- properties.put("eclipselink.orm.throw.exceptions", "true");
+ properties.setProperty(JDBC_URL, Configuration.JDBC_IN_MEMORY_URL);
+ properties.setProperty(JDBC_DRIVER, Configuration.JDBC_IN_MEMROY_DRIVER);
+ properties.setProperty(DDL_GENERATION, DROP_AND_CREATE);
+ properties.setProperty(THROW_EXCEPTIONS, "true");
jpaPersistModule.properties(properties);
return jpaPersistModule;
case REMOTE:
- properties.put("javax.persistence.jdbc.url", configuration.getDatabaseUrl());
- properties.put("javax.persistence.jdbc.driver", configuration.getDatabaseDriver());
+ properties.setProperty(JDBC_URL, configuration.getDatabaseUrl());
+ properties.setProperty(JDBC_DRIVER, configuration.getDatabaseDriver());
break;
case LOCAL:
- properties.put("javax.persistence.jdbc.url", configuration.getLocalDatabaseUrl());
- properties.put("javax.persistence.jdbc.driver", Configuration.JDBC_LOCAL_DRIVER);
+ properties.setProperty(JDBC_URL, configuration.getLocalDatabaseUrl());
+ properties.setProperty(JDBC_DRIVER, Configuration.JDBC_LOCAL_DRIVER);
break;
}
- properties.setProperty("javax.persistence.jdbc.user", configuration.getDatabaseUser());
- properties.setProperty("javax.persistence.jdbc.password", configuration.getDatabasePassword());
+ properties.setProperty(JDBC_USER, configuration.getDatabaseUser());
+ properties.setProperty(JDBC_PASSWORD, configuration.getDatabasePassword());
switch (configuration.getJPATableGenerationStrategy()) {
case CREATE:
- properties.setProperty("eclipselink.ddl-generation", "create-tables");
+ properties.setProperty(DDL_GENERATION, CREATE_ONLY);
dbInitNeeded = true;
break;
case DROP_AND_CREATE:
- properties.setProperty("eclipselink.ddl-generation", "drop-and-create-tables");
+ properties.setProperty(DDL_GENERATION, DROP_AND_CREATE);
dbInitNeeded = true;
break;
+ case CREATE_OR_EXTEND:
+ properties.setProperty(DDL_GENERATION, CREATE_OR_EXTEND);
+ break;
default:
break;
}
- properties.setProperty("eclipselink.ddl-generation.output-mode", "both");
- properties.setProperty("eclipselink.create-ddl-jdbc-file-name", "DDL-create.jdbc");
- properties.setProperty("eclipselink.drop-ddl-jdbc-file-name", "DDL-drop.jdbc");
+
+ properties.setProperty(DDL_GENERATION_MODE, DDL_BOTH_GENERATION);
+ properties.setProperty(CREATE_JDBC_DDL_FILE, "DDL-create.jdbc");
+ properties.setProperty(DROP_JDBC_DDL_FILE, "DDL-drop.jdbc");
jpaPersistModule.properties(properties);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
index fef258b..d96e841 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
@@ -48,7 +48,7 @@ import java.util.Set;
/**
* Resource provider for request resources.
*/
-class RequestResourceProvider extends AbstractControllerResourceProvider {
+public class RequestResourceProvider extends AbstractControllerResourceProvider {
// ----- Property ID constants ---------------------------------------------
// Requests
@@ -56,6 +56,8 @@ class RequestResourceProvider extends AbstractControllerResourceProvider {
protected static final String REQUEST_ID_PROPERTY_ID = "Requests/id";
protected static final String REQUEST_STATUS_PROPERTY_ID = "Requests/request_status";
protected static final String REQUEST_CONTEXT_ID = "Requests/request_context";
+ public static final String REQUEST_SOURCE_SCHEDULE_HREF = "Requests/source_schedule_href";
+ public static final String REQUEST_SOURCE_SCHEDULE_ID = "Requests/source_schedule_id";
protected static final String REQUEST_TYPE_ID = "Requests/type";
protected static final String REQUEST_INPUTS_ID = "Requests/inputs";
protected static final String REQUEST_TARGET_SERVICE_ID = "Requests/target_service";
@@ -288,6 +290,7 @@ class RequestResourceProvider extends AbstractControllerResourceProvider {
setResourceProperty(resource, REQUEST_CREATE_TIME_ID, request.getCreateTime(), requestedPropertyIds);
setResourceProperty(resource, REQUEST_START_TIME_ID, request.getStartTime(), requestedPropertyIds);
setResourceProperty(resource, REQUEST_END_TIME_ID, request.getEndTime(), requestedPropertyIds);
+ setResourceProperty(resource, REQUEST_SOURCE_SCHEDULE_ID, request.getRequestScheduleId(), requestedPropertyIds);
List<HostRoleCommand> commands = request.getCommands();
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/orm/JPATableGenerationStrategy.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/JPATableGenerationStrategy.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/JPATableGenerationStrategy.java
index 4e88fb2..9316c10 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/JPATableGenerationStrategy.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/JPATableGenerationStrategy.java
@@ -21,6 +21,8 @@ package org.apache.ambari.server.orm;
public enum JPATableGenerationStrategy {
//create tables which don't exist
CREATE("create"),
+ //creates tables which not exist, add missing columns
+ CREATE_OR_EXTEND("createOrExtend"),
//drop and create all tables
DROP_AND_CREATE("dropAndCreate"),
//don't create tables
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestEntity.java
index c8d7fb7..1fe763b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestEntity.java
@@ -35,6 +35,10 @@ public class RequestEntity {
@Basic
private Long clusterId;
+ @Column(name = "request_schedule_id", updatable = false, insertable = false, nullable = true)
+ @Basic
+ private Long requestScheduleId;
+
@Column(name = "request_context")
@Basic
private String requestContext;
@@ -85,6 +89,10 @@ public class RequestEntity {
@JoinColumn(name = "cluster_id", referencedColumnName = "cluster_id")
private ClusterEntity cluster;
+ @ManyToOne(cascade = {CascadeType.MERGE})
+ @JoinColumn(name = "request_schedule_id", referencedColumnName = "schedule_id")
+ private RequestScheduleEntity requestScheduleEntity;
+
public Long getRequestId() {
return requestId;
}
@@ -205,6 +213,22 @@ public class RequestEntity {
this.status = status;
}
+ public RequestScheduleEntity getRequestScheduleEntity() {
+ return requestScheduleEntity;
+ }
+
+ public void setRequestScheduleEntity(RequestScheduleEntity requestScheduleEntity) {
+ this.requestScheduleEntity = requestScheduleEntity;
+ }
+
+ public Long getRequestScheduleId() {
+ return requestScheduleId;
+ }
+
+ public void setRequestScheduleId(Long scheduleId) {
+ this.requestScheduleId = scheduleId;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestScheduleEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestScheduleEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestScheduleEntity.java
index 67731f2..60df7b4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestScheduleEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RequestScheduleEntity.java
@@ -31,6 +31,7 @@ import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import java.util.Collection;
+import java.util.List;
@Table(name = "requestschedule")
@Entity
@@ -116,6 +117,9 @@ public class RequestScheduleEntity {
private Collection<RequestScheduleBatchRequestEntity>
requestScheduleBatchRequestEntities;
+ @OneToMany(mappedBy = "requestScheduleEntity")
+ private List<RequestEntity> requestEntities;
+
public long getScheduleId() {
return scheduleId;
}
@@ -285,6 +289,14 @@ public class RequestScheduleEntity {
this.requestScheduleBatchRequestEntities = requestScheduleBatchRequestEntities;
}
+ public List<RequestEntity> getRequestEntities() {
+ return requestEntities;
+ }
+
+ public void setRequestEntities(List<RequestEntity> requestEntities) {
+ this.requestEntities = requestEntities;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java
index 73d81bc..5dbe6e1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java
@@ -87,8 +87,12 @@ public abstract class AbstractLinearExecutionJob implements ExecutionJob {
try {
doWork(properties);
} catch (AmbariException e) {
- LOG.error("Exception caught on job execution. Exiting linear chain...", e);
+ LOG.error("Exception caught on execution of job " + jobKey + ". Exiting linear chain...", e);
throw new JobExecutionException(e);
+ } catch (RuntimeException e) {
+ LOG.error("Unexpected exception caught on execution of job " + jobKey + ". " +
+ "Exiting linear chain...", e);
+ throw e;
}
LOG.debug("Finished linear job: " + jobKey);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java
index 268b4b4..a3bae50 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java
@@ -26,6 +26,7 @@ import com.sun.jersey.api.client.*;
import com.sun.jersey.api.client.filter.ClientFilter;
import com.sun.jersey.api.client.filter.CsrfProtectionFilter;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.actionmanager.ActionDBAccessor;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.security.authorization.internal.InternalTokenClientFilter;
@@ -67,6 +68,7 @@ public class ExecutionScheduleManager {
(ExecutionScheduleManager.class);
private final InternalTokenStorage tokenStorage;
+ private ActionDBAccessor actionDBAccessor;
private final Gson gson;
private final Clusters clusters;
ExecutionScheduler executionScheduler;
@@ -93,11 +95,13 @@ public class ExecutionScheduleManager {
ExecutionScheduler executionScheduler,
InternalTokenStorage tokenStorage,
Clusters clusters,
+ ActionDBAccessor actionDBAccessor,
Gson gson) {
this.configuration = configuration;
this.executionScheduler = executionScheduler;
this.tokenStorage = tokenStorage;
this.clusters = clusters;
+ this.actionDBAccessor = actionDBAccessor;
this.gson = gson;
buildApiClient();
@@ -432,8 +436,8 @@ public class ExecutionScheduleManager {
* @return request id
* @throws AmbariException
*/
- public Long executeBatchRequest(Long executionId,
- Long batchId,
+ public Long executeBatchRequest(long executionId,
+ long batchId,
String clusterName) throws AmbariException {
String type = null;
@@ -452,6 +456,10 @@ public class ExecutionScheduleManager {
updateBatchRequest(executionId, batchId, clusterName, batchRequestResponse, false);
+ if (batchRequestResponse.getRequestId() != null) {
+ actionDBAccessor.setSourceScheduleForRequest(batchRequestResponse.getRequestId(), executionId);
+ }
+
return batchRequestResponse.getRequestId();
} catch (Exception e) {
throw new AmbariException("Exception occurred while performing request", e);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 812bba0..561ac73 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -42,7 +42,7 @@ CREATE TABLE execution_command (task_id BIGINT NOT NULL, command LONGBLOB, PRIMA
CREATE TABLE host_role_command (task_id BIGINT NOT NULL, attempt_count SMALLINT NOT NULL, event LONGTEXT NOT NULL, exitcode INTEGER NOT NULL, host_name VARCHAR(255) NOT NULL, last_attempt_time BIGINT NOT NULL, request_id BIGINT NOT NULL, role VARCHAR(255), role_command VARCHAR(255), stage_id BIGINT NOT NULL, start_time BIGINT NOT NULL, end_time BIGINT, status VARCHAR(255), std_error LONGBLOB, std_out LONGBLOB, structured_out LONGBLOB, PRIMARY KEY (task_id));
CREATE TABLE role_success_criteria (role VARCHAR(255) NOT NULL, request_id BIGINT NOT NULL, stage_id BIGINT NOT NULL, success_factor DOUBLE NOT NULL, PRIMARY KEY (role, request_id, stage_id));
CREATE TABLE stage (stage_id BIGINT NOT NULL, request_id BIGINT NOT NULL, cluster_id BIGINT, log_info VARCHAR(255) NOT NULL, request_context VARCHAR(255), cluster_host_info LONGBLOB, PRIMARY KEY (stage_id, request_id));
-CREATE TABLE request (request_id BIGINT NOT NULL, cluster_id BIGINT, command_name VARCHAR(255), create_time BIGINT NOT NULL, end_time BIGINT NOT NULL, inputs LONGTEXT, request_context VARCHAR(255), request_type VARCHAR(255), start_time BIGINT NOT NULL, status VARCHAR(255), target_component VARCHAR(255), target_hosts LONGTEXT, target_service VARCHAR(255), PRIMARY KEY (request_id));
+CREATE TABLE request (request_id BIGINT NOT NULL, cluster_id BIGINT, request_schedule_id BIGINT, command_name VARCHAR(255), create_time BIGINT NOT NULL, end_time BIGINT NOT NULL, inputs LONGTEXT, request_context VARCHAR(255), request_type VARCHAR(255), start_time BIGINT NOT NULL, status VARCHAR(255), target_component VARCHAR(255), target_hosts LONGTEXT, target_service VARCHAR(255), PRIMARY KEY (request_id));
CREATE TABLE key_value_store (`key` VARCHAR(255), `value` LONGTEXT, PRIMARY KEY (`key`));
CREATE TABLE clusterconfigmapping (type_name VARCHAR(255) NOT NULL, create_timestamp BIGINT NOT NULL, cluster_id BIGINT NOT NULL, selected INTEGER NOT NULL DEFAULT 0, version_tag VARCHAR(255) NOT NULL, user_name VARCHAR(255) NOT NULL DEFAULT '_db', PRIMARY KEY (type_name, create_timestamp, cluster_id));
CREATE TABLE hostconfigmapping (create_timestamp BIGINT NOT NULL, host_name VARCHAR(255) NOT NULL, cluster_id BIGINT NOT NULL, type_name VARCHAR(255) NOT NULL, selected INTEGER NOT NULL DEFAULT 0, service_name VARCHAR(255), version_tag VARCHAR(255) NOT NULL, user_name VARCHAR(255) NOT NULL DEFAULT '_db', PRIMARY KEY (create_timestamp, host_name, cluster_id, type_name));
@@ -75,6 +75,7 @@ ALTER TABLE role_success_criteria ADD CONSTRAINT FK_role_success_criteria_stage_
ALTER TABLE stage ADD CONSTRAINT FK_stage_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
ALTER TABLE request ADD CONSTRAINT FK_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
ALTER TABLE clusterconfigmapping ADD CONSTRAINT FK_clusterconfigmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfigmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfigmapping_host_name FOREIGN KEY (host_name) REFERENCES hosts (host_name);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index 4be3a42..5aa356a 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -32,7 +32,7 @@ CREATE TABLE execution_command (task_id NUMBER(19) NOT NULL, command BLOB NULL,
CREATE TABLE host_role_command (task_id NUMBER(19) NOT NULL, attempt_count NUMBER(5) NOT NULL, event CLOB NULL, exitcode NUMBER(10) NOT NULL, host_name VARCHAR2(255) NOT NULL, last_attempt_time NUMBER(19) NOT NULL, request_id NUMBER(19) NOT NULL, role VARCHAR2(255) NULL, role_command VARCHAR2(255) NULL, stage_id NUMBER(19) NOT NULL, start_time NUMBER(19) NOT NULL, end_time NUMBER(19), status VARCHAR2(255) NULL, std_error BLOB NULL, std_out BLOB NULL, structured_out BLOB NULL, PRIMARY KEY (task_id));
CREATE TABLE role_success_criteria (role VARCHAR2(255) NOT NULL, request_id NUMBER(19) NOT NULL, stage_id NUMBER(19) NOT NULL, success_factor NUMBER(19,4) NOT NULL, PRIMARY KEY (role, request_id, stage_id));
CREATE TABLE stage (stage_id NUMBER(19) NOT NULL, request_id NUMBER(19) NOT NULL, cluster_id NUMBER(19) NULL, log_info VARCHAR2(255) NULL, request_context VARCHAR2(255) NULL, cluster_host_info BLOB NOT NULL, PRIMARY KEY (stage_id, request_id));
-CREATE TABLE request (request_id NUMBER(19) NOT NULL, cluster_id NUMBER(19), command_name VARCHAR(255), create_time NUMBER(19) NOT NULL, end_time NUMBER(19) NOT NULL, inputs CLOB, request_context VARCHAR(255), request_type VARCHAR(255), start_time NUMBER(19) NOT NULL, status VARCHAR(255), target_component VARCHAR(255), target_hosts CLOB, target_service VARCHAR(255), PRIMARY KEY (request_id));
+CREATE TABLE request (request_id NUMBER(19) NOT NULL, cluster_id NUMBER(19), request_schedule_id NUMBER(19), command_name VARCHAR(255), create_time NUMBER(19) NOT NULL, end_time NUMBER(19) NOT NULL, inputs CLOB, request_context VARCHAR(255), request_type VARCHAR(255), start_time NUMBER(19) NOT NULL, status VARCHAR(255), target_component VARCHAR(255), target_hosts CLOB, target_service VARCHAR(255), PRIMARY KEY (request_id));
CREATE TABLE key_value_store ("key" VARCHAR2(255) NOT NULL, "value" CLOB NULL, PRIMARY KEY ("key"));
CREATE TABLE clusterconfigmapping (type_name VARCHAR2(255) NOT NULL, create_timestamp NUMBER(19) NOT NULL, cluster_id NUMBER(19) NOT NULL, selected NUMBER(10) NOT NULL, version_tag VARCHAR2(255) NOT NULL, user_name VARCHAR(255) DEFAULT '_db', PRIMARY KEY (type_name, create_timestamp, cluster_id));
CREATE TABLE hostconfigmapping (create_timestamp NUMBER(19) NOT NULL, host_name VARCHAR2(255) NOT NULL, cluster_id NUMBER(19) NOT NULL, type_name VARCHAR2(255) NOT NULL, selected NUMBER(10) NOT NULL, service_name VARCHAR2(255) NULL, version_tag VARCHAR2(255) NOT NULL, user_name VARCHAR(255) DEFAULT '_db', PRIMARY KEY (create_timestamp, host_name, cluster_id, type_name));
@@ -44,8 +44,8 @@ CREATE TABLE configgroup (group_id NUMBER(19), cluster_id NUMBER(19) NOT NULL, g
CREATE TABLE confgroupclusterconfigmapping (config_group_id NUMBER(19) NOT NULL, cluster_id NUMBER(19) NOT NULL, config_type VARCHAR2(255) NOT NULL, version_tag VARCHAR2(255) NOT NULL, user_name VARCHAR2(255) DEFAULT '_db', create_timestamp NUMBER(19) NOT NULL, PRIMARY KEY(config_group_id, cluster_id, config_type));
CREATE TABLE configgrouphostmapping (config_group_id NUMBER(19) NOT NULL, host_name VARCHAR2(255) NOT NULL, PRIMARY KEY(config_group_id, host_name));
CREATE TABLE action (action_name VARCHAR2(255) NOT NULL, action_type VARCHAR2(255) NOT NULL, inputs VARCHAR2(1024), target_service VARCHAR2(255), target_component VARCHAR2(255), default_timeout NUMBER(10) NOT NULL, description VARCHAR2(1024), target_type VARCHAR2(255), PRIMARY KEY (action_name));
-CREATE TABLE ambari.requestschedule (schedule_id NUMBER(19), cluster_id NUMBER(19) NOT NULL, description VARCHAR2(255), status VARCHAR2(255), batch_separation_seconds smallint, batch_toleration_limit smallint, create_user VARCHAR2(255), create_timestamp NUMBER(19), update_user VARCHAR2(255), update_timestamp NUMBER(19), minutes VARCHAR2(10), hours VARCHAR2(10), days_of_month VARCHAR2(10), month VARCHAR2(10), day_of_week VARCHAR2(10), yearToSchedule VARCHAR2(10), startTime VARCHAR2(50), endTime VARCHAR2(50), last_execution_status VARCHAR2(255), PRIMARY KEY(schedule_id));
-CREATE TABLE ambari.requestschedulebatchrequest (schedule_id NUMBER(19), batch_id NUMBER(19), request_id NUMBER(19), request_type VARCHAR2(255), request_uri VARCHAR2(1024), request_body BLOB, request_status VARCHAR2(255), return_code smallint, return_message VARCHAR2(2000), PRIMARY KEY(schedule_id, batch_id));
+CREATE TABLE requestschedule (schedule_id NUMBER(19), cluster_id NUMBER(19) NOT NULL, description VARCHAR2(255), status VARCHAR2(255), batch_separation_seconds smallint, batch_toleration_limit smallint, create_user VARCHAR2(255), create_timestamp NUMBER(19), update_user VARCHAR2(255), update_timestamp NUMBER(19), minutes VARCHAR2(10), hours VARCHAR2(10), days_of_month VARCHAR2(10), month VARCHAR2(10), day_of_week VARCHAR2(10), yearToSchedule VARCHAR2(10), startTime VARCHAR2(50), endTime VARCHAR2(50), last_execution_status VARCHAR2(255), PRIMARY KEY(schedule_id));
+CREATE TABLE requestschedulebatchrequest (schedule_id NUMBER(19), batch_id NUMBER(19), request_id NUMBER(19), request_type VARCHAR2(255), request_uri VARCHAR2(1024), request_body BLOB, request_status VARCHAR2(255), return_code smallint, return_message VARCHAR2(2000), PRIMARY KEY(schedule_id, batch_id));
ALTER TABLE users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, ldap_user);
ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
@@ -65,6 +65,7 @@ ALTER TABLE role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id
ALTER TABLE stage ADD CONSTRAINT FK_stage_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
ALTER TABLE request ADD CONSTRAINT FK_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
ALTER TABLE clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
ALTER TABLE ClusterHostMapping ADD CONSTRAINT ClusterHostMapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
ALTER TABLE ClusterHostMapping ADD CONSTRAINT ClusterHostMapping_host_name FOREIGN KEY (host_name) REFERENCES hosts (host_name);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 5228121..63c5f4b 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -79,7 +79,7 @@ GRANT ALL PRIVILEGES ON TABLE ambari.role_success_criteria TO :username;
CREATE TABLE ambari.stage (stage_id BIGINT NOT NULL, request_id BIGINT NOT NULL, cluster_id BIGINT NOT NULL, log_info VARCHAR(255) NOT NULL, request_context VARCHAR(255), cluster_host_info BYTEA NOT NULL, PRIMARY KEY (stage_id, request_id));
GRANT ALL PRIVILEGES ON TABLE ambari.stage TO :username;
-CREATE TABLE ambari.request (request_id BIGINT NOT NULL, cluster_id BIGINT, command_name VARCHAR(255), create_time BIGINT NOT NULL, end_time BIGINT NOT NULL, inputs VARCHAR(32000), request_context VARCHAR(255), request_type VARCHAR(255), start_time BIGINT NOT NULL, status VARCHAR(255), target_component VARCHAR(255), target_hosts TEXT, target_service VARCHAR(255), PRIMARY KEY (request_id));
+CREATE TABLE ambari.request (request_id BIGINT NOT NULL, cluster_id BIGINT, command_name VARCHAR(255), create_time BIGINT NOT NULL, end_time BIGINT NOT NULL, inputs VARCHAR(32000), request_context VARCHAR(255), request_type VARCHAR(255), request_schedule_id BIGINT, start_time BIGINT NOT NULL, status VARCHAR(255), target_component VARCHAR(255), target_hosts TEXT, target_service VARCHAR(255), PRIMARY KEY (request_id));
GRANT ALL PRIVILEGES ON TABLE ambari.request TO :username;
CREATE TABLE ambari.ClusterHostMapping (cluster_id BIGINT NOT NULL, host_name VARCHAR(255) NOT NULL, PRIMARY KEY (cluster_id, host_name));
@@ -138,6 +138,7 @@ ALTER TABLE ambari.role_success_criteria ADD CONSTRAINT FK_role_success_criteria
ALTER TABLE ambari.stage ADD CONSTRAINT FK_stage_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
ALTER TABLE ambari.stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES ambari.request (request_id);
ALTER TABLE ambari.request ADD CONSTRAINT FK_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
+ALTER TABLE ambari.request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES ambari.requestschedule (schedule_id);
ALTER TABLE ambari.ClusterHostMapping ADD CONSTRAINT FK_ClusterHostMapping_host_name FOREIGN KEY (host_name) REFERENCES ambari.hosts (host_name);
ALTER TABLE ambari.ClusterHostMapping ADD CONSTRAINT FK_ClusterHostMapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
ALTER TABLE ambari.user_roles ADD CONSTRAINT FK_user_roles_user_id FOREIGN KEY (user_id) REFERENCES ambari.users (user_id);
@@ -360,8 +361,6 @@ create index idx_qrtz_ft_jg on ambari.qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);
create index idx_qrtz_ft_t_g on ambari.qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
create index idx_qrtz_ft_tg on ambari.qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
-commit;
-
-- Insert data into the table
INSERT INTO ambari.action (action_name, action_type, inputs, target_service, target_component, default_timeout, description, target_type)
SELECT 'ambari_hdfs_rebalance', 'SYSTEM', 'threshold,[principal],[keytab]', 'HDFS', 'NAMENODE', 600, 'HDFS Rebalance', 'ANY';
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql
index 7c77d61..0586ba3 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-REMOTE-CREATE.sql
@@ -36,7 +36,7 @@ CREATE TABLE ambari.execution_command (command bytea, task_id BIGINT NOT NULL, P
CREATE TABLE ambari.host_role_command (task_id BIGINT NOT NULL, attempt_count SMALLINT NOT NULL, event VARCHAR(32000) NOT NULL, exitcode INTEGER NOT NULL, host_name VARCHAR(255) NOT NULL, last_attempt_time BIGINT NOT NULL, request_id BIGINT NOT NULL, role VARCHAR(255), stage_id BIGINT NOT NULL, start_time BIGINT NOT NULL, end_time BIGINT, status VARCHAR(255), std_error BYTEA, std_out BYTEA, structured_out BYTEA, role_command VARCHAR(255), PRIMARY KEY (task_id));
CREATE TABLE ambari.role_success_criteria (role VARCHAR(255) NOT NULL, request_id BIGINT NOT NULL, stage_id BIGINT NOT NULL, success_factor FLOAT NOT NULL, PRIMARY KEY (role, request_id, stage_id));
CREATE TABLE ambari.stage (stage_id BIGINT NOT NULL, request_id BIGINT NOT NULL, cluster_id BIGINT NOT NULL, log_info VARCHAR(255) NOT NULL, request_context VARCHAR(255), PRIMARY KEY (stage_id, request_id));
-CREATE TABLE ambari.request (request_id BIGINT NOT NULL, cluster_id BIGINT, command_name VARCHAR(255), create_time BIGINT NOT NULL, end_time BIGINT NOT NULL, inputs VARCHAR(32000), request_context VARCHAR(255), request_type VARCHAR(255), start_time BIGINT NOT NULL, status VARCHAR(255), target_component VARCHAR(255), target_hosts TEXT, target_service VARCHAR(255), PRIMARY KEY (request_id));
+CREATE TABLE ambari.request (request_id BIGINT NOT NULL, cluster_id BIGINT, command_name VARCHAR(255), create_time BIGINT NOT NULL, end_time BIGINT NOT NULL, inputs VARCHAR(32000), request_context VARCHAR(255), request_type VARCHAR(255), request_schedule_id BIGINT, start_time BIGINT NOT NULL, status VARCHAR(255), target_component VARCHAR(255), target_hosts TEXT, target_service VARCHAR(255), PRIMARY KEY (request_id));
CREATE TABLE ambari.ClusterHostMapping (cluster_id BIGINT NOT NULL, host_name VARCHAR(255) NOT NULL, PRIMARY KEY (cluster_id, host_name));
CREATE TABLE ambari.user_roles (role_name VARCHAR(255) NOT NULL, user_id INTEGER NOT NULL, PRIMARY KEY (role_name, user_id));
CREATE TABLE ambari.key_value_store ("key" VARCHAR(255), "value" VARCHAR, PRIMARY KEY("key"));
@@ -67,6 +67,7 @@ ALTER TABLE ambari.role_success_criteria ADD CONSTRAINT FK_role_success_criteria
ALTER TABLE ambari.stage ADD CONSTRAINT FK_stage_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
ALTER TABLE ambari.stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
ALTER TABLE ambari.request ADD CONSTRAINT FK_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE ambari.request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES ambari.requestschedule (schedule_id);
ALTER TABLE ambari.ClusterHostMapping ADD CONSTRAINT FK_ClusterHostMapping_host_name FOREIGN KEY (host_name) REFERENCES ambari.hosts (host_name);
ALTER TABLE ambari.ClusterHostMapping ADD CONSTRAINT FK_ClusterHostMapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
ALTER TABLE ambari.user_roles ADD CONSTRAINT FK_user_roles_user_id FOREIGN KEY (user_id) REFERENCES ambari.users (user_id);
@@ -109,7 +110,7 @@ COMMIT;
-- Quartz tables
-CREATE TABLE qrtz_job_details
+CREATE TABLE ambari.qrtz_job_details
(
SCHED_NAME VARCHAR(120) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
@@ -124,7 +125,7 @@ CREATE TABLE qrtz_job_details
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
);
-CREATE TABLE qrtz_triggers
+CREATE TABLE ambari.qrtz_triggers
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
@@ -144,10 +145,10 @@ CREATE TABLE qrtz_triggers
JOB_DATA BYTEA NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
- REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
+ REFERENCES ambari.QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
);
-CREATE TABLE qrtz_simple_triggers
+CREATE TABLE ambari.qrtz_simple_triggers
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
@@ -157,10 +158,10 @@ CREATE TABLE qrtz_simple_triggers
TIMES_TRIGGERED BIGINT NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+ REFERENCES ambari.QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
-CREATE TABLE qrtz_cron_triggers
+CREATE TABLE ambari.qrtz_cron_triggers
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
@@ -169,10 +170,10 @@ CREATE TABLE qrtz_cron_triggers
TIME_ZONE_ID VARCHAR(80),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+ REFERENCES ambari.QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
-CREATE TABLE qrtz_simprop_triggers
+CREATE TABLE ambari.qrtz_simprop_triggers
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
@@ -190,10 +191,10 @@ CREATE TABLE qrtz_simprop_triggers
BOOL_PROP_2 BOOL NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+ REFERENCES ambari.QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
-CREATE TABLE qrtz_blob_triggers
+CREATE TABLE ambari.qrtz_blob_triggers
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
@@ -201,10 +202,10 @@ CREATE TABLE qrtz_blob_triggers
BLOB_DATA BYTEA NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+ REFERENCES ambari.QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
-CREATE TABLE qrtz_calendars
+CREATE TABLE ambari.qrtz_calendars
(
SCHED_NAME VARCHAR(120) NOT NULL,
CALENDAR_NAME VARCHAR(200) NOT NULL,
@@ -213,14 +214,14 @@ CREATE TABLE qrtz_calendars
);
-CREATE TABLE qrtz_paused_trigger_grps
+CREATE TABLE ambari.qrtz_paused_trigger_grps
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
);
-CREATE TABLE qrtz_fired_triggers
+CREATE TABLE ambari.qrtz_fired_triggers
(
SCHED_NAME VARCHAR(120) NOT NULL,
ENTRY_ID VARCHAR(95) NOT NULL,
@@ -238,7 +239,7 @@ CREATE TABLE qrtz_fired_triggers
PRIMARY KEY (SCHED_NAME,ENTRY_ID)
);
-CREATE TABLE qrtz_scheduler_state
+CREATE TABLE ambari.qrtz_scheduler_state
(
SCHED_NAME VARCHAR(120) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
@@ -247,35 +248,35 @@ CREATE TABLE qrtz_scheduler_state
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
);
-CREATE TABLE qrtz_locks
+CREATE TABLE ambari.qrtz_locks
(
SCHED_NAME VARCHAR(120) NOT NULL,
LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME)
);
-create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);
-create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP);
-
-create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
-create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP);
-create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME);
-create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);
-create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE);
-create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
-create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
-create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);
-create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
-create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
-create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
-create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
-
-create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);
-create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
-create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
-create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);
-create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
-create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
+create index idx_qrtz_j_req_recovery on ambari.qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);
+create index idx_qrtz_j_grp on ambari.qrtz_job_details(SCHED_NAME,JOB_GROUP);
+
+create index idx_qrtz_t_j on ambari.qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
+create index idx_qrtz_t_jg on ambari.qrtz_triggers(SCHED_NAME,JOB_GROUP);
+create index idx_qrtz_t_c on ambari.qrtz_triggers(SCHED_NAME,CALENDAR_NAME);
+create index idx_qrtz_t_g on ambari.qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);
+create index idx_qrtz_t_state on ambari.qrtz_triggers(SCHED_NAME,TRIGGER_STATE);
+create index idx_qrtz_t_n_state on ambari.qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
+create index idx_qrtz_t_n_g_state on ambari.qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
+create index idx_qrtz_t_next_fire_time on ambari.qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);
+create index idx_qrtz_t_nft_st on ambari.qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
+create index idx_qrtz_t_nft_misfire on ambari.qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
+create index idx_qrtz_t_nft_st_misfire on ambari.qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
+create index idx_qrtz_t_nft_st_misfire_grp on ambari.qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
+
+create index idx_qrtz_ft_trig_inst_name on ambari.qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);
+create index idx_qrtz_ft_inst_job_req_rcvry on ambari.qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
+create index idx_qrtz_ft_j_g on ambari.qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
+create index idx_qrtz_ft_jg on ambari.qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);
+create index idx_qrtz_ft_t_g on ambari.qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
+create index idx_qrtz_ft_tg on ambari.qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
commit;
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/main/resources/properties.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json
index 60e438e..ce7292c 100644
--- a/ambari-server/src/main/resources/properties.json
+++ b/ambari-server/src/main/resources/properties.json
@@ -97,6 +97,8 @@
"Requests/cluster_name",
"Requests/request_status",
"Requests/request_context",
+ "Requests/source_schedule_id",
+ "Requests/source_schedule_href",
"Requests/type",
"Requests/inputs",
"Requests/target_service",
http://git-wip-us.apache.org/repos/asf/ambari/blob/e056203a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
index 8f3b800..24e70eb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java
@@ -27,6 +27,7 @@ import com.google.inject.persist.PersistService;
import com.google.inject.persist.Transactional;
import com.google.inject.util.Modules;
import junit.framework.Assert;
+import org.apache.ambari.server.actionmanager.ActionDBAccessor;
import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -323,6 +324,7 @@ public class ExecutionScheduleManagerTest {
Configuration configurationMock = createNiceMock(Configuration.class);
ExecutionScheduler executionSchedulerMock = createMock(ExecutionScheduler.class);
InternalTokenStorage tokenStorageMock = createMock(InternalTokenStorage.class);
+ ActionDBAccessor actionDBAccessorMock = createMock(ActionDBAccessor.class);
Gson gson = new Gson();
BatchRequest batchRequestMock = createMock(BatchRequest.class);
@@ -342,7 +344,8 @@ public class ExecutionScheduleManagerTest {
batchRequestResponse.setReturnCode(202);
ExecutionScheduleManager scheduleManager = createMockBuilder(ExecutionScheduleManager.class).
- withConstructor(configurationMock, executionSchedulerMock, tokenStorageMock, clustersMock, gson).
+ withConstructor(configurationMock, executionSchedulerMock, tokenStorageMock, clustersMock,
+ actionDBAccessorMock, gson).
addMockedMethods("performApiRequest", "updateBatchRequest").createNiceMock();
//interesting easymock behavior, workaround to not to expect method called in constructor
@@ -363,14 +366,16 @@ public class ExecutionScheduleManagerTest {
scheduleManager.updateBatchRequest(eq(executionId), eq(batchId), eq(clusterName), eq(batchRequestResponse), eq(false));
expectLastCall().once();
+ actionDBAccessorMock.setSourceScheduleForRequest(eq(requestId), eq(executionId));
+ expectLastCall().once();
replay(clusterMock, clustersMock, configurationMock, requestExecutionMock, executionSchedulerMock,
- tokenStorageMock, batchRequestMock, scheduleManager);
+ tokenStorageMock, batchRequestMock, scheduleManager, actionDBAccessorMock);
scheduleManager.executeBatchRequest(executionId, batchId, clusterName);
verify(clusterMock, clustersMock, configurationMock, requestExecutionMock, executionSchedulerMock,
- tokenStorageMock, batchRequestMock, scheduleManager);
+ tokenStorageMock, batchRequestMock, scheduleManager, actionDBAccessorMock);
}
@@ -382,6 +387,7 @@ public class ExecutionScheduleManagerTest {
Configuration configurationMock = createNiceMock(Configuration.class);
ExecutionScheduler executionSchedulerMock = createMock(ExecutionScheduler.class);
InternalTokenStorage tokenStorageMock = createMock(InternalTokenStorage.class);
+ ActionDBAccessor actionDBAccessorMock = createMock(ActionDBAccessor.class);
Gson gson = new Gson();
BatchRequest batchRequestMock = createMock(BatchRequest.class);
@@ -399,7 +405,8 @@ public class ExecutionScheduleManagerTest {
batchRequestResponse.setReturnCode(202);
ExecutionScheduleManager scheduleManager = createMockBuilder(ExecutionScheduleManager.class).
- withConstructor(configurationMock, executionSchedulerMock, tokenStorageMock, clustersMock, gson).
+ withConstructor(configurationMock, executionSchedulerMock, tokenStorageMock, clustersMock,
+ actionDBAccessorMock, gson).
addMockedMethods("performApiRequest").createNiceMock();
//interesting easymock behavior, workaround to not to expect method called in constructor
@@ -429,6 +436,7 @@ public class ExecutionScheduleManagerTest {
Configuration configurationMock = createNiceMock(Configuration.class);
ExecutionScheduler executionSchedulerMock = createMock(ExecutionScheduler.class);
InternalTokenStorage tokenStorageMock = createMock(InternalTokenStorage.class);
+ ActionDBAccessor actionDBAccessorMock = createMock(ActionDBAccessor.class);
Gson gson = new Gson();
long requestId = 5L;
@@ -442,7 +450,8 @@ public class ExecutionScheduleManagerTest {
batchRequestResponse.setReturnCode(202);
ExecutionScheduleManager scheduleManager = createMockBuilder(ExecutionScheduleManager.class).
- withConstructor(configurationMock, executionSchedulerMock, tokenStorageMock, clustersMock, gson).
+ withConstructor(configurationMock, executionSchedulerMock, tokenStorageMock, clustersMock,
+ actionDBAccessorMock, gson).
addMockedMethods("performApiGetRequest").createNiceMock();
//interesting easymock behavior, workaround to not to expect method called in constructor
@@ -469,6 +478,7 @@ public class ExecutionScheduleManagerTest {
Configuration configurationMock = createNiceMock(Configuration.class);
ExecutionScheduler executionSchedulerMock = createMock(ExecutionScheduler.class);
InternalTokenStorage tokenStorageMock = createMock(InternalTokenStorage.class);
+ ActionDBAccessor actionDBAccessorMock = createMock(ActionDBAccessor.class);
Gson gson = new Gson();
RequestExecution requestExecutionMock = createMock(RequestExecution.class);
Batch batchMock = createMock(Batch.class);
@@ -482,11 +492,7 @@ public class ExecutionScheduleManagerTest {
Map<Long, RequestExecution> executionMap = new HashMap<Long, RequestExecution>();
executionMap.put(executionId, requestExecutionMock);
- ExecutionScheduleManager scheduleManager = createMockBuilder(ExecutionScheduleManager.class).
- withConstructor(configurationMock, executionSchedulerMock,
- tokenStorageMock, clustersMock, gson).createMock();
- expectLastCall().anyTimes();
expect(clustersMock.getCluster(clusterName)).andReturn(clusterMock).anyTimes();
expect(clusterMock.getAllRequestExecutions()).andReturn(executionMap).anyTimes();
@@ -494,7 +500,10 @@ public class ExecutionScheduleManagerTest {
expect(batchMock.getBatchSettings()).andReturn(batchSettings).anyTimes();
replay(clustersMock, clusterMock, configurationMock, requestExecutionMock,
- executionSchedulerMock, scheduleManager, batchMock);
+ executionSchedulerMock, batchMock);
+
+ ExecutionScheduleManager scheduleManager = new ExecutionScheduleManager(configurationMock, executionSchedulerMock,
+ tokenStorageMock, clustersMock, actionDBAccessorMock, gson);
HashMap<String, Integer> taskCounts = new HashMap<String, Integer>() {{
put(BatchRequestJob.BATCH_REQUEST_FAILED_TASKS_KEY, 2);
@@ -507,7 +516,7 @@ public class ExecutionScheduleManagerTest {
Assert.assertTrue(exceeded);
verify(clustersMock, clusterMock, configurationMock, requestExecutionMock,
- executionSchedulerMock, scheduleManager, batchMock);
+ executionSchedulerMock, batchMock);
}
@SuppressWarnings("unchecked")