You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2013/01/28 21:17:39 UTC
svn commit: r1439607 - in /uima/sandbox/uima-ducc/trunk:
uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/
uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/
uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/even...
Author: degenaro
Date: Mon Jan 28 20:17:38 2013
New Revision: 1439607
URL: http://svn.apache.org/viewvc?rev=1439607&view=rev
Log:
UIMA-2606 CLI, Orchestrator and Transport updates for improved cancel-by-administrator functionality
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobCancel.java
uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationCancel.java
uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceCancel.java
uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiConstants.java
uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobCancel.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobCancel.java?rev=1439607&r1=1439606&r2=1439607&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobCancel.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobCancel.java Mon Jan 28 20:17:38 2013
@@ -60,6 +60,9 @@ public class DuccJobCancel extends DuccU
.withDescription(DuccUiConstants.desc_help).hasArg(false)
.withLongOpt(DuccUiConstants.name_help).create());
options.addOption(OptionBuilder
+ .withDescription(DuccUiConstants.desc_role_administrator).hasArg(false)
+ .withLongOpt(DuccUiConstants.name_role_administrator).create());
+ options.addOption(OptionBuilder
.withArgName(DuccUiConstants.parm_job_id)
.withDescription(makeDesc(DuccUiConstants.desc_job_id,DuccUiConstants.exmp_job_id)).hasArg()
.withLongOpt(DuccUiConstants.name_job_id).create());
@@ -140,6 +143,9 @@ public class DuccJobCancel extends DuccU
Option option = optionList[i];
String name = option.getLongOpt();
String value = option.getValue();
+ if(value == null) {
+ value = "";
+ }
jobRequestProperties.setProperty(name, value);
}
}
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationCancel.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationCancel.java?rev=1439607&r1=1439606&r2=1439607&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationCancel.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationCancel.java Mon Jan 28 20:17:38 2013
@@ -60,6 +60,9 @@ public class DuccReservationCancel exten
.withDescription(DuccUiConstants.desc_help).hasArg(false)
.withLongOpt(DuccUiConstants.name_help).create());
options.addOption(OptionBuilder
+ .withDescription(DuccUiConstants.desc_role_administrator).hasArg(false)
+ .withLongOpt(DuccUiConstants.name_role_administrator).create());
+ options.addOption(OptionBuilder
.withArgName(DuccUiConstants.parm_reservation_id)
.withDescription(makeDesc(DuccUiConstants.desc_reservation_id,DuccUiConstants.exmp_reservation_id)).hasArg()
.withLongOpt(DuccUiConstants.name_reservation_id).create());
@@ -138,6 +141,9 @@ public class DuccReservationCancel exten
String value = option.getValue();
name = trimmer(name);
value = trimmer(value);
+ if(value == null) {
+ value = "";
+ }
reservationRequestProperties.setProperty(name, value);
}
}
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceCancel.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceCancel.java?rev=1439607&r1=1439606&r2=1439607&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceCancel.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceCancel.java Mon Jan 28 20:17:38 2013
@@ -60,6 +60,9 @@ public class DuccServiceCancel extends D
.withDescription(DuccUiConstants.desc_help).hasArg(false)
.withLongOpt(DuccUiConstants.name_help).create());
options.addOption(OptionBuilder
+ .withDescription(DuccUiConstants.desc_role_administrator).hasArg(false)
+ .withLongOpt(DuccUiConstants.name_role_administrator).create());
+ options.addOption(OptionBuilder
.withArgName(DuccUiConstants.parm_service_id)
.withDescription(makeDesc(DuccUiConstants.desc_service_id,DuccUiConstants.exmp_service_id)).hasArg()
.withLongOpt(DuccUiConstants.name_service_id).create());
@@ -136,6 +139,9 @@ public class DuccServiceCancel extends D
Option option = optionList[i];
String name = option.getLongOpt();
String value = option.getValue();
+ if(value == null) {
+ value = "";
+ }
serviceRequestProperties.setProperty(name, value);
}
}
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiConstants.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiConstants.java?rev=1439607&r1=1439606&r2=1439607&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiConstants.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccUiConstants.java Mon Jan 28 20:17:38 2013
@@ -24,6 +24,7 @@ import org.apache.uima.ducc.transport.ev
import org.apache.uima.ducc.transport.event.cli.JobSpecificationProperties;
import org.apache.uima.ducc.transport.event.cli.ReservationSpecificationProperties;
import org.apache.uima.ducc.transport.event.cli.ServiceRequestProperties;
+import org.apache.uima.ducc.transport.event.cli.SpecificationProperties;
public class DuccUiConstants {
@@ -44,6 +45,12 @@ public class DuccUiConstants {
public static final String exmp_help = "";
public static final String dval_help = null;
+ public static final String name_role_administrator = SpecificationProperties.key_role_administrator;
+ public static final String desc_role_administrator = "If CLI invoker is listed in resources/ducc.administrators then allow cancellation on behalf of any user";
+ public static final String labl_role_administrator = "Administrator";
+ public static final String exmp_role_administrator = "";
+ public static final String dval_role_administrator = null;
+
//public static final String abrv_timestamp = "t";
public static final String name_timestamp = "timestamp";
public static final String desc_timestamp = "Timestamp messages.";
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java?rev=1439607&r1=1439606&r2=1439607&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorComponent.java Mon Jan 28 20:17:38 2013
@@ -44,6 +44,7 @@ import org.apache.uima.ducc.common.utils
import org.apache.uima.ducc.common.utils.TimeStamp;
import org.apache.uima.ducc.common.utils.id.DuccId;
import org.apache.uima.ducc.orchestrator.OrchestratorConstants.StartType;
+import org.apache.uima.ducc.orchestrator.authentication.DuccWebAdministrators;
import org.apache.uima.ducc.orchestrator.maintenance.MaintenanceThread;
import org.apache.uima.ducc.orchestrator.maintenance.NodeAccounting;
import org.apache.uima.ducc.transport.event.CancelJobDuccEvent;
@@ -60,7 +61,6 @@ import org.apache.uima.ducc.transport.ev
import org.apache.uima.ducc.transport.event.SubmitServiceDuccEvent;
import org.apache.uima.ducc.transport.event.cli.JobReplyProperties;
import org.apache.uima.ducc.transport.event.cli.JobRequestProperties;
-import org.apache.uima.ducc.transport.event.cli.JobSpecificationProperties;
import org.apache.uima.ducc.transport.event.cli.ReservationReplyProperties;
import org.apache.uima.ducc.transport.event.cli.ReservationRequestProperties;
import org.apache.uima.ducc.transport.event.cli.SpecificationProperties;
@@ -527,6 +527,48 @@ implements Orchestrator {
}
return retVal;
}
+ private String getRole(Properties properties) {
+ String methodName = "isAuthorized";
+ String role = SpecificationProperties.key_role_user;
+ try {
+ if(properties.containsKey(SpecificationProperties.key_role_administrator)) {
+ role = SpecificationProperties.key_role_administrator;
+ }
+ }
+ catch(Exception e) {
+ logger.error(methodName, null, e);
+ }
+ return role;
+ }
+ private boolean isAuthorized(DuccId duccId, String reqUser, String tgtUser, String role) {
+ String methodName = "isAuthorized";
+ boolean retVal = false;
+ try {
+ if(reqUser.equals(tgtUser)) {
+ logger.info(methodName, duccId, reqUser+" is "+tgtUser);
+ retVal = true;
+ }
+ else {
+ if(role.equals(SpecificationProperties.key_role_administrator)) {
+ DuccWebAdministrators dwa = DuccWebAdministrators.getInstance();
+ if(dwa.isAdministrator(reqUser)) {
+ logger.info(methodName, duccId, reqUser+" is "+SpecificationProperties.key_role_administrator);
+ retVal = true;
+ }
+ else {
+ logger.info(methodName, duccId, reqUser+" is not "+SpecificationProperties.key_role_administrator);
+ }
+ }
+ else {
+ logger.info(methodName, duccId, "role"+" is not "+SpecificationProperties.key_role_administrator);
+ }
+ }
+ }
+ catch(Exception e) {
+ logger.error(methodName, duccId, e);
+ }
+ return retVal;
+ }
/**
* Handle Job Submit
*/
@@ -591,108 +633,132 @@ implements Orchestrator {
@Override
public void stopJob(CancelJobDuccEvent duccEvent) {
String methodName = "stopJob";
- logger.trace(methodName, null, messages.fetch("enter"));
+ DuccId dwid = null;
+ logger.trace(methodName, dwid, messages.fetch("enter"));
Properties properties = duccEvent.getProperties();
if(isSignatureInvalid(properties)) {
String error_message = messages.fetch(" type=authentication error, text=signature not valid.");
- logger.error(methodName, null, error_message);
+ logger.error(methodName, dwid, error_message);
submitError(properties, error_message);
}
else if(Validate.request(duccEvent)) {
- // update state
String jobId = properties.getProperty(JobRequestProperties.key_id);
long t0 = System.currentTimeMillis();
DuccWorkJob duccWorkJob = (DuccWorkJob) workMap.findDuccWork(DuccType.Job,jobId);
long t1 = System.currentTimeMillis();
long elapsed = t1 - t0;
if(elapsed > Constants.SYNC_LIMIT) {
- logger.debug(methodName, null, "elapsed msecs: "+elapsed);
+ logger.debug(methodName, dwid, "elapsed msecs: "+elapsed);
}
if(duccWorkJob != null) {
- String userid = properties.getProperty(JobSpecificationProperties.key_user);
- IRationale rationale = new Rationale("job canceled by userid "+userid);
- stateManager.jobTerminate(duccWorkJob, JobCompletionType.CanceledByUser, rationale, ProcessDeallocationType.JobCanceled);
- OrchestratorCheckpoint.getInstance().saveState();
- // prepare for reply to canceler
- properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_canceled);
- duccEvent.setProperties(properties);
- logger.info(methodName, duccWorkJob.getDuccId(), messages.fetchLabel("job state")+duccWorkJob.getJobState());
+ dwid = duccWorkJob.getDuccId();
+ String reqUser = properties.getProperty(JobRequestProperties.key_user).trim();
+ String reqRole = getRole(properties);
+ String tgtUser = duccWorkJob.getStandardInfo().getUser().trim();
+ if(isAuthorized(dwid, reqUser, tgtUser, reqRole)) {
+ logger.debug(methodName, dwid, "reqUser:"+reqUser+" "+"reqRole:"+reqRole+" "+"tgtUser:"+tgtUser);
+ IRationale rationale = new Rationale("job canceled by userid "+reqUser);
+ stateManager.jobTerminate(duccWorkJob, JobCompletionType.CanceledByUser, rationale, ProcessDeallocationType.JobCanceled);
+ OrchestratorCheckpoint.getInstance().saveState();
+ // prepare for reply to canceler
+ properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_canceled);
+ duccEvent.setProperties(properties);
+ logger.info(methodName, dwid, messages.fetchLabel("job state")+duccWorkJob.getJobState());
+ }
+ else {
+ // prepare not authorized reply
+ properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_user_not_authorized);
+ duccEvent.setProperties(properties);
+ logger.info(methodName, dwid, jobId+" : "+messages.fetch(JobReplyProperties.msg_user_not_authorized));
+ }
}
else {
// prepare undefined reply
properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_job_not_found);
duccEvent.setProperties(properties);
- logger.info(methodName, null, jobId+" : "+messages.fetch(JobReplyProperties.msg_job_not_found));
+ logger.info(methodName, dwid, jobId+" : "+messages.fetch(JobReplyProperties.msg_job_not_found));
}
}
else {
- logger.info(methodName, null, messages.fetch("TODO")+" prepare error reply");
+ logger.info(methodName, dwid, messages.fetch("TODO")+" prepare error reply");
//TODO
}
- logger.trace(methodName, null, messages.fetch("exit"));
+ logger.trace(methodName, dwid, messages.fetch("exit"));
return;
}
@Override
public void stopJobProcess(CancelJobDuccEvent duccEvent) {
String methodName = "stopJobProcess";
- logger.trace(methodName, null, messages.fetch("enter"));
+ DuccId dwid = null;
+ logger.trace(methodName, dwid, messages.fetch("enter"));
Properties properties = duccEvent.getProperties();
if(isSignatureInvalid(properties)) {
String error_message = messages.fetch(" type=authentication error, text=signature not valid.");
- logger.error(methodName, null, error_message);
+ logger.error(methodName, dwid, error_message);
submitError(properties, error_message);
}
else if(Validate.request(duccEvent)) {
- DuccId djid = null;
String dpid = null;
String jobId = properties.getProperty(JobRequestProperties.key_id);
DuccWorkJob duccWorkJob = (DuccWorkJob) workMap.findDuccWork(DuccType.Job,jobId);
if(duccWorkJob != null) {
- djid = duccWorkJob.getDuccId();
- dpid = properties.getProperty(JobReplyProperties.key_dpid);
- IDuccProcess idp = duccWorkJob.getProcess(dpid);
- if(idp != null) {
- switch(idp.getProcessState()) {
- case Starting:
- case Initializing:
- case Running:
- idp.setResourceState(ResourceState.Deallocated);
- idp.setProcessState(ProcessState.Abandoned);
- idp.setProcessDeallocationType(ProcessDeallocationType.Canceled);
- idp.setReasonForStoppingProcess(ReasonForStoppingProcess.UserInitiated.toString());
- // prepare process not active
- properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_process_canceled);
- duccEvent.setProperties(properties);
- logger.info(methodName, djid, dpid, messages.fetch(JobReplyProperties.msg_process_canceled));
- break;
- default:
- // prepare process not active
- properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_process_not_active);
+ dwid = duccWorkJob.getDuccId();
+ String reqUser = properties.getProperty(JobRequestProperties.key_user).trim();
+ String reqRole = getRole(properties);
+ String tgtUser = duccWorkJob.getStandardInfo().getUser().trim();
+ if(isAuthorized(dwid, reqUser, tgtUser, reqRole)) {
+ logger.debug(methodName, dwid, "reqUser:"+reqUser+" "+"reqRole:"+reqRole+" "+"tgtUser:"+tgtUser);
+ dpid = properties.getProperty(JobReplyProperties.key_dpid);
+ IDuccProcess idp = duccWorkJob.getProcess(dpid);
+ if(idp != null) {
+ switch(idp.getProcessState()) {
+ case Starting:
+ case Initializing:
+ case Running:
+ idp.setResourceState(ResourceState.Deallocated);
+ idp.setProcessState(ProcessState.Abandoned);
+ idp.setProcessDeallocationType(ProcessDeallocationType.Canceled);
+ idp.setReasonForStoppingProcess(ReasonForStoppingProcess.UserInitiated.toString());
+ // prepare process not active
+ properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_process_canceled);
+ duccEvent.setProperties(properties);
+ logger.info(methodName, dwid, dpid, messages.fetch(JobReplyProperties.msg_process_canceled));
+ break;
+ default:
+ // prepare process not active
+ properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_process_not_active);
+ duccEvent.setProperties(properties);
+ logger.info(methodName, dwid, dpid, messages.fetch(JobReplyProperties.msg_process_not_active));
+ break;
+ }
+ }
+ else {
+ // prepare process not found reply
+ properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_process_not_found);
duccEvent.setProperties(properties);
- logger.info(methodName, djid, dpid, messages.fetch(JobReplyProperties.msg_process_not_active));
- break;
+ logger.info(methodName, dwid, dpid, messages.fetch(JobReplyProperties.msg_process_not_found));
}
}
else {
- // prepare process not found reply
- properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_process_not_found);
+ // prepare not authorized reply
+ properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_user_not_authorized);
duccEvent.setProperties(properties);
- logger.info(methodName, djid, dpid, messages.fetch(JobReplyProperties.msg_process_not_found));
+ logger.info(methodName, dwid, jobId+" : "+messages.fetch(JobReplyProperties.msg_user_not_authorized));
}
}
else {
// prepare job not found
properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_job_not_found);
duccEvent.setProperties(properties);
- logger.info(methodName, djid, dpid, messages.fetch(JobReplyProperties.msg_job_not_found));
+ logger.info(methodName, dwid, dpid, messages.fetch(JobReplyProperties.msg_job_not_found));
}
}
else {
- logger.info(methodName, null, messages.fetch("TODO")+" prepare error reply");
+ logger.info(methodName, dwid, messages.fetch("TODO")+" prepare error reply");
//TODO
}
- logger.trace(methodName, null, messages.fetch("exit"));
+ logger.trace(methodName, dwid, messages.fetch("exit"));
return;
}
@@ -766,59 +832,71 @@ implements Orchestrator {
@Override
public void stopReservation(CancelReservationDuccEvent duccEvent) {
String methodName = "stopReservation";
- logger.trace(methodName, null, messages.fetch("enter"));
+ DuccId dwid = null;
+ logger.trace(methodName, dwid, messages.fetch("enter"));
Properties properties = duccEvent.getProperties();
if(isSignatureInvalid(properties)) {
String error_message = messages.fetch(" type=authentication error, text=signature not valid.");
- logger.error(methodName, null, error_message);
+ logger.error(methodName, dwid, error_message);
submitError(properties, error_message);
}
else {
- // update state
String id = properties.getProperty(ReservationRequestProperties.key_id);
long t0 = System.currentTimeMillis();
DuccWorkReservation duccWorkReservation = (DuccWorkReservation) workMap.findDuccWork(DuccType.Reservation,id);
long t1 = System.currentTimeMillis();
long elapsed = t1 - t0;
if(elapsed > Constants.SYNC_LIMIT) {
- logger.debug(methodName, null, "elapsed msecs: "+elapsed);
+ logger.debug(methodName, dwid, "elapsed msecs: "+elapsed);
}
if(Validate.request(duccEvent,duccWorkReservation)) {
if(duccWorkReservation != null) {
- String cancelUser = properties.getProperty(SpecificationProperties.key_user);
- duccWorkReservation.getStandardInfo().setCancelUser(cancelUser);
- duccWorkReservation.getStandardInfo().setDateOfCompletion(TimeStamp.getCurrentMillis());
- duccWorkReservation.stateChange(ReservationState.Completed);
- duccWorkReservation.complete(ReservationCompletionType.CanceledByUser);
- String u1 = duccWorkReservation.getStandardInfo().getUser();
- String u2 = duccWorkReservation.getStandardInfo().getCancelUser();
- if(u1 != null) {
- if(u2 != null) {
- if(!u1.equals(u2)) {
- duccWorkReservation.complete(ReservationCompletionType.CanceledByAdmin);
+ dwid = duccWorkReservation.getDuccId();
+ String reqUser = properties.getProperty(JobRequestProperties.key_user).trim();
+ String reqRole = getRole(properties);
+ String tgtUser = duccWorkReservation.getStandardInfo().getUser().trim();
+ if(isAuthorized(dwid, reqUser, tgtUser, reqRole)) {
+ logger.debug(methodName, dwid, "reqUser:"+reqUser+" "+"reqRole:"+reqRole+" "+"tgtUser:"+tgtUser);
+ duccWorkReservation.getStandardInfo().setCancelUser(reqUser);
+ duccWorkReservation.getStandardInfo().setDateOfCompletion(TimeStamp.getCurrentMillis());
+ duccWorkReservation.stateChange(ReservationState.Completed);
+ duccWorkReservation.complete(ReservationCompletionType.CanceledByUser);
+ String u1 = duccWorkReservation.getStandardInfo().getUser();
+ String u2 = duccWorkReservation.getStandardInfo().getCancelUser();
+ if(u1 != null) {
+ if(u2 != null) {
+ if(!u1.equals(u2)) {
+ duccWorkReservation.complete(ReservationCompletionType.CanceledByAdmin);
+ }
}
}
+ OrchestratorCheckpoint.getInstance().saveState();
+ // prepare for reply to canceler
+ properties.put(ReservationReplyProperties.key_message, ReservationReplyProperties.msg_canceled);
+ duccEvent.setProperties(properties);
+ logger.info(methodName, dwid, messages.fetchLabel("reservation state")+duccWorkReservation.getReservationState());
+ }
+ else {
+ // prepare not authorized reply
+ properties.put(ReservationReplyProperties.key_message, ReservationReplyProperties.msg_user_not_authorized);
+ duccEvent.setProperties(properties);
+ logger.info(methodName, dwid, dwid+" : "+messages.fetch(ReservationReplyProperties.msg_user_not_authorized));
}
- OrchestratorCheckpoint.getInstance().saveState();
- // prepare for reply to canceler
- properties.put(ReservationReplyProperties.key_message, ReservationReplyProperties.msg_canceled);
- duccEvent.setProperties(properties);
- logger.info(methodName, duccWorkReservation.getDuccId(), messages.fetchLabel("reservation state")+duccWorkReservation.getReservationState());
}
else {
// prepare undefined reply
properties.put(ReservationReplyProperties.key_message, ReservationReplyProperties.msg_not_found);
duccEvent.setProperties(properties);
- logger.info(methodName, null, id+" : "+messages.fetch("reservation not found"));
+ logger.info(methodName, dwid, id+" : "+messages.fetch("reservation not found"));
}
}
else {
properties.put(ReservationReplyProperties.key_message, ReservationReplyProperties.msg_user_not_authorized);
duccEvent.setProperties(properties);
- logger.info(methodName, null, id+" : "+messages.fetch("not authorized"));
+ logger.info(methodName, dwid, id+" : "+messages.fetch("not authorized"));
}
}
- logger.trace(methodName, null, messages.fetch("exit"));
+ logger.trace(methodName, dwid, messages.fetch("exit"));
return;
}
@@ -888,11 +966,12 @@ implements Orchestrator {
@Override
public void stopService(CancelServiceDuccEvent duccEvent) {
String methodName = "stopService";
- logger.trace(methodName, null, messages.fetch("enter"));
+ DuccId dwid = null;
+ logger.trace(methodName, dwid, messages.fetch("enter"));
Properties properties = duccEvent.getProperties();
if(isSignatureInvalid(properties)) {
String error_message = messages.fetch(" type=authentication error, text=signature not valid.");
- logger.error(methodName, null, error_message);
+ logger.error(methodName, dwid, error_message);
submitError(properties, error_message);
}
else if(Validate.request(duccEvent)) {
@@ -903,31 +982,42 @@ implements Orchestrator {
long t1 = System.currentTimeMillis();
long elapsed = t1 - t0;
if(elapsed > Constants.SYNC_LIMIT) {
- logger.debug(methodName, null, "elapsed msecs: "+elapsed);
+ logger.debug(methodName, dwid, "elapsed msecs: "+elapsed);
}
if(duccWorkJob != null) {
- String userid = properties.getProperty(JobSpecificationProperties.key_user);
- IRationale rationale = new Rationale("service canceled by "+userid);
- stateManager.jobTerminate(duccWorkJob, JobCompletionType.CanceledByUser, rationale, ProcessDeallocationType.JobCanceled);
- OrchestratorCheckpoint.getInstance().saveState();
- // prepare for reply to canceler
- properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_canceled);
- duccEvent.setProperties(properties);
- logger.info(methodName, duccWorkJob.getDuccId(), messages.fetchLabel("service state")+duccWorkJob.getJobState());
+ dwid = duccWorkJob.getDuccId();
+ String reqUser = properties.getProperty(JobRequestProperties.key_user).trim();
+ String reqRole = getRole(properties);
+ String tgtUser = duccWorkJob.getStandardInfo().getUser().trim();
+ if(isAuthorized(dwid, reqUser, tgtUser, reqRole)) {
+ logger.debug(methodName, dwid, "reqUser:"+reqUser+" "+"reqRole:"+reqRole+" "+"tgtUser:"+tgtUser);
+ IRationale rationale = new Rationale("service canceled by "+reqUser);
+ stateManager.jobTerminate(duccWorkJob, JobCompletionType.CanceledByUser, rationale, ProcessDeallocationType.JobCanceled);
+ OrchestratorCheckpoint.getInstance().saveState();
+ // prepare for reply to canceler
+ properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_canceled);
+ duccEvent.setProperties(properties);
+ logger.info(methodName, dwid, messages.fetchLabel("service state")+duccWorkJob.getJobState());
+ }
+ else {
+ // prepare not authorized reply
+ properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_user_not_authorized);
+ duccEvent.setProperties(properties);
+ logger.info(methodName, dwid, jobId+" : "+messages.fetch(JobReplyProperties.msg_user_not_authorized));
+ }
}
-
else {
// prepare undefined reply
properties.put(JobReplyProperties.key_message, JobReplyProperties.msg_service_not_found);
duccEvent.setProperties(properties);
- logger.info(methodName, null, jobId+" : "+messages.fetch(JobReplyProperties.msg_service_not_found));
+ logger.info(methodName, dwid, jobId+" : "+messages.fetch(JobReplyProperties.msg_service_not_found));
}
}
else {
- logger.info(methodName, null, messages.fetch("TODO")+" prepare error reply");
+ logger.info(methodName, dwid, messages.fetch("TODO")+" prepare error reply");
//TODO
}
- logger.trace(methodName, null, messages.fetch("exit"));
+ logger.trace(methodName, dwid, messages.fetch("exit"));
return;
}
}
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java?rev=1439607&r1=1439606&r2=1439607&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java Mon Jan 28 20:17:38 2013
@@ -33,6 +33,9 @@ public class SpecificationProperties ext
public static String key_user = "user";
public static String key_date = "date";
+ public static String key_role_administrator = "role_administrator";
+ public static String key_role_user = "role_user";
+
public static String key_description = "description";
public static String key_scheduling_class = "scheduling_class";