Skip to content
Snippets Groups Projects
Commit 8b20b0db authored by pkupczyk's avatar pkupczyk
Browse files

SSDM-3768 : bugfixes:

- incorrect check of availability times in the maintenance task that marks TIME_OUT_PENDING executions
- reduce the number of logins made by the operation execution related maintenance tasks

SVN: 37420
parent 4e31be7c
No related branches found
No related tags found
No related merge requests found
...@@ -25,6 +25,7 @@ import org.apache.log4j.Logger; ...@@ -25,6 +25,7 @@ import org.apache.log4j.Logger;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecution; import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecution;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.OperationContext; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.OperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.operation.store.IOperationExecutionStore; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.operation.store.IOperationExecutionStore;
import ch.systemsx.cisd.common.exceptions.InvalidSessionException;
import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogCategory;
import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.logging.LogFactory;
import ch.systemsx.cisd.common.maintenance.IMaintenanceTask; import ch.systemsx.cisd.common.maintenance.IMaintenanceTask;
...@@ -52,6 +53,8 @@ public abstract class AbstractOperationExecutionMarkMaintenanceTask implements I ...@@ -52,6 +53,8 @@ public abstract class AbstractOperationExecutionMarkMaintenanceTask implements I
private long timeLimit; private long timeLimit;
private Session session;
@Override @Override
public void setUp(String pluginName, Properties properties) public void setUp(String pluginName, Properties properties)
{ {
...@@ -63,13 +66,32 @@ public abstract class AbstractOperationExecutionMarkMaintenanceTask implements I ...@@ -63,13 +66,32 @@ public abstract class AbstractOperationExecutionMarkMaintenanceTask implements I
operationLog.info("Task " + pluginName + " initialized."); operationLog.info("Task " + pluginName + " initialized.");
} }
protected OperationContext createOperationContext() protected OperationContext getOperationContext()
{ {
SessionContextDTO sessionDTO = CommonServiceProvider.getCommonServer().tryToAuthenticateAsSystem(); if (session == null)
Session session = getSessionManager().getSession(sessionDTO.getSessionToken()); {
session = createSession();
} else
{
try
{
// Touches the session if exists, otherwise throws an exception.
// It does not log anything. It's good - we don't want to spam the log file.
CommonServiceProvider.getCommonServer().getAuthSession(session.getSessionToken());
} catch (InvalidSessionException e)
{
session = createSession();
}
}
return new OperationContext(session); return new OperationContext(session);
} }
private Session createSession()
{
SessionContextDTO sessionDTO = CommonServiceProvider.getCommonServer().tryToAuthenticateAsSystem();
return getSessionManager().getSession(sessionDTO.getSessionToken());
}
@Override @Override
public final void execute() public final void execute()
{ {
......
...@@ -18,10 +18,11 @@ package ch.ethz.sis.openbis.generic.server.asapi.v3.task; ...@@ -18,10 +18,11 @@ package ch.ethz.sis.openbis.generic.server.asapi.v3.task;
import java.util.List; import java.util.List;
import org.apache.commons.lang.time.DateUtils;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecution; import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecution;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecutionAvailability; import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecutionAvailability;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.fetchoptions.OperationExecutionFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.fetchoptions.OperationExecutionFetchOptions;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
/** /**
* @author pkupczyk * @author pkupczyk
...@@ -37,9 +38,8 @@ public class OperationExecutionMarkTimeOutPendingMaintenanceTask extends Abstrac ...@@ -37,9 +38,8 @@ public class OperationExecutionMarkTimeOutPendingMaintenanceTask extends Abstrac
private void markTimeoutPending() private void markTimeoutPending()
{ {
final IOperationContext context = createOperationContext();
final List<OperationExecution> executions = final List<OperationExecution> executions =
getExecutionStore().getExecutionsToBeTimeOutPending(context, new OperationExecutionFetchOptions()); getExecutionStore().getExecutionsToBeTimeOutPending(getOperationContext(), new OperationExecutionFetchOptions());
if (false == executions.isEmpty()) if (false == executions.isEmpty())
{ {
...@@ -56,19 +56,19 @@ public class OperationExecutionMarkTimeOutPendingMaintenanceTask extends Abstrac ...@@ -56,19 +56,19 @@ public class OperationExecutionMarkTimeOutPendingMaintenanceTask extends Abstrac
{ {
if (execution.getFinishDate() != null) if (execution.getFinishDate() != null)
{ {
if (now > execution.getFinishDate().getTime() + execution.getAvailabilityTime()) if (now > execution.getFinishDate().getTime() + execution.getAvailabilityTime() * DateUtils.MILLIS_PER_SECOND)
{ {
getExecutionStore().executionAvailability(context, execution.getPermId(), getExecutionStore().executionAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.TIME_OUT_PENDING); OperationExecutionAvailability.TIME_OUT_PENDING);
} }
if (now > execution.getFinishDate().getTime() + execution.getSummaryAvailabilityTime()) if (now > execution.getFinishDate().getTime() + execution.getSummaryAvailabilityTime() * DateUtils.MILLIS_PER_SECOND)
{ {
getExecutionStore().executionSummaryAvailability(context, execution.getPermId(), getExecutionStore().executionSummaryAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.TIME_OUT_PENDING); OperationExecutionAvailability.TIME_OUT_PENDING);
} }
if (now > execution.getFinishDate().getTime() + execution.getDetailsAvailabilityTime()) if (now > execution.getFinishDate().getTime() + execution.getDetailsAvailabilityTime() * DateUtils.MILLIS_PER_SECOND)
{ {
getExecutionStore().executionDetailsAvailability(context, execution.getPermId(), getExecutionStore().executionDetailsAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.TIME_OUT_PENDING); OperationExecutionAvailability.TIME_OUT_PENDING);
} }
} }
......
...@@ -21,7 +21,6 @@ import java.util.List; ...@@ -21,7 +21,6 @@ import java.util.List;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecution; import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecution;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecutionAvailability; import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecutionAvailability;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.fetchoptions.OperationExecutionFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.fetchoptions.OperationExecutionFetchOptions;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
/** /**
* @author pkupczyk * @author pkupczyk
...@@ -38,8 +37,8 @@ public class OperationExecutionMarkTimedOutOrDeletedMaintenanceTask extends Abst ...@@ -38,8 +37,8 @@ public class OperationExecutionMarkTimedOutOrDeletedMaintenanceTask extends Abst
private void markTimedOut() private void markTimedOut()
{ {
final IOperationContext context = createOperationContext(); final List<OperationExecution> executions =
final List<OperationExecution> executions = getExecutionStore().getExecutionsToBeTimedOut(context, new OperationExecutionFetchOptions()); getExecutionStore().getExecutionsToBeTimedOut(getOperationContext(), new OperationExecutionFetchOptions());
if (false == executions.isEmpty()) if (false == executions.isEmpty())
{ {
...@@ -53,17 +52,18 @@ public class OperationExecutionMarkTimedOutOrDeletedMaintenanceTask extends Abst ...@@ -53,17 +52,18 @@ public class OperationExecutionMarkTimedOutOrDeletedMaintenanceTask extends Abst
{ {
if (OperationExecutionAvailability.TIME_OUT_PENDING.equals(execution.getAvailability())) if (OperationExecutionAvailability.TIME_OUT_PENDING.equals(execution.getAvailability()))
{ {
getExecutionStore().executionAvailability(context, execution.getPermId(), OperationExecutionAvailability.TIMED_OUT); getExecutionStore().executionAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.TIMED_OUT);
} else } else
{ {
if (OperationExecutionAvailability.TIME_OUT_PENDING.equals(execution.getSummaryAvailability())) if (OperationExecutionAvailability.TIME_OUT_PENDING.equals(execution.getSummaryAvailability()))
{ {
getExecutionStore().executionSummaryAvailability(context, execution.getPermId(), getExecutionStore().executionSummaryAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.TIMED_OUT); OperationExecutionAvailability.TIMED_OUT);
} }
if (OperationExecutionAvailability.TIME_OUT_PENDING.equals(execution.getDetailsAvailability())) if (OperationExecutionAvailability.TIME_OUT_PENDING.equals(execution.getDetailsAvailability()))
{ {
getExecutionStore().executionDetailsAvailability(context, execution.getPermId(), getExecutionStore().executionDetailsAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.TIMED_OUT); OperationExecutionAvailability.TIMED_OUT);
} }
} }
...@@ -73,10 +73,13 @@ public class OperationExecutionMarkTimedOutOrDeletedMaintenanceTask extends Abst ...@@ -73,10 +73,13 @@ public class OperationExecutionMarkTimedOutOrDeletedMaintenanceTask extends Abst
private void markDeleted() private void markDeleted()
{ {
final IOperationContext context = createOperationContext(); final List<OperationExecution> executions =
final List<OperationExecution> executions = getExecutionStore().getExecutionsToBeDeleted(context, new OperationExecutionFetchOptions()); getExecutionStore().getExecutionsToBeDeleted(getOperationContext(), new OperationExecutionFetchOptions());
getOperationLog().info("found " + executions.size() + " execution(s) to be marked " + OperationExecutionAvailability.DELETED); if (false == executions.isEmpty())
{
getOperationLog().info("found " + executions.size() + " execution(s) to be marked " + OperationExecutionAvailability.DELETED);
}
markOperationExecutions(executions, new MarkAction() markOperationExecutions(executions, new MarkAction()
{ {
...@@ -86,16 +89,19 @@ public class OperationExecutionMarkTimedOutOrDeletedMaintenanceTask extends Abst ...@@ -86,16 +89,19 @@ public class OperationExecutionMarkTimedOutOrDeletedMaintenanceTask extends Abst
{ {
if (OperationExecutionAvailability.DELETE_PENDING.equals(execution.getAvailability())) if (OperationExecutionAvailability.DELETE_PENDING.equals(execution.getAvailability()))
{ {
getExecutionStore().executionAvailability(context, execution.getPermId(), OperationExecutionAvailability.DELETED); getExecutionStore().executionAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.DELETED);
} else } else
{ {
if (OperationExecutionAvailability.DELETE_PENDING.equals(execution.getSummaryAvailability())) if (OperationExecutionAvailability.DELETE_PENDING.equals(execution.getSummaryAvailability()))
{ {
getExecutionStore().executionSummaryAvailability(context, execution.getPermId(), OperationExecutionAvailability.DELETED); getExecutionStore().executionSummaryAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.DELETED);
} }
if (OperationExecutionAvailability.DELETE_PENDING.equals(execution.getDetailsAvailability())) if (OperationExecutionAvailability.DELETE_PENDING.equals(execution.getDetailsAvailability()))
{ {
getExecutionStore().executionDetailsAvailability(context, execution.getPermId(), OperationExecutionAvailability.DELETED); getExecutionStore().executionDetailsAvailability(getOperationContext(), execution.getPermId(),
OperationExecutionAvailability.DELETED);
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment