Compare commits

...

9 Commits

4 changed files with 28 additions and 18 deletions

View File

@ -2,6 +2,12 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for Smart Executor Service
## [v3.2.1-SNAPSHOT]
- Fixed bug on concurrent attempt to enter in a session while trying to schedule a second task #27319
- Fixed bug on concurrent attempt to enter in a session while trying to execute another task #24116
## [v3.2.0]
- Fixed RequestFilter to avoid to remove info to Smartgears
@ -13,6 +19,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- Ported service to authorization-utils [#22871]
## [v3.0.0]
- Switched smart-executor JSON management to gcube-jackson [#19647]

View File

@ -11,7 +11,7 @@
<groupId>org.gcube.vremanagement</groupId>
<artifactId>smart-executor</artifactId>
<version>3.2.0</version>
<version>3.2.1-SNAPSHOT</version>
<name>SmartExecutor</name>
<description>Smart Executor Service allows to launch recurrent tasks such as task for infrastructure management, healthy monitoring etc.</description>
<packaging>war</packaging>
@ -34,7 +34,7 @@
<dependency>
<groupId>org.gcube.distribution</groupId>
<artifactId>gcube-smartgears-bom</artifactId>
<version>2.5.0</version>
<version>2.5.1-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>

View File

@ -148,24 +148,27 @@ public class SmartExecutorInitializator implements ApplicationManager {
Secret secret = SecretUtility.getSecretByTokenString(scheduledTasktoken);
SecretManager secretManager = SecretManagerProvider.instance.get();
try {
secretManager.startSession(secret);
SmartExecutorScheduler smartExecutorScheduler = SmartExecutorSchedulerFactory.getSmartExecutorScheduler();
// A new Scheduled Task will be persisted due to launch. Removing it
smartExecutorPersistenceConnector.removeScheduledTask(scheduledTask);
smartExecutorScheduler.schedule(launchParameter, scheduledTask.getUUID());
} catch (Exception e) {
logger.error("({}) Error while trying to relaunch scheduled task.", context, e);
synchronized (secretManager) {
try {
smartExecutorPersistenceConnector.addScheduledTask(scheduledTask);
} catch (Exception ex) {
logger.error("({}) Unable to add back scheduled task {}", context, taskAsString);
logger.trace("Starting a Secret Manager session (synchronized block)...");
secretManager.startSession(secret);
SmartExecutorScheduler smartExecutorScheduler = SmartExecutorSchedulerFactory.getSmartExecutorScheduler();
// A new Scheduled Task will be persisted due to launch. Removing it
smartExecutorPersistenceConnector.removeScheduledTask(scheduledTask);
smartExecutorScheduler.schedule(launchParameter, scheduledTask.getUUID());
} catch (Exception e) {
logger.error("({}) Error while trying to relaunch scheduled task.", context, e);
try {
smartExecutorPersistenceConnector.addScheduledTask(scheduledTask);
} catch (Exception ex) {
logger.error("({}) Unable to add back scheduled task {}", context, taskAsString);
}
}finally {
secretManager.endSession();
logger.trace("Secret Manager session terminated (synchronized block).");
}
}finally {
secretManager.endSession();
}
}
};

View File

@ -75,7 +75,7 @@ public class RunnablePlugin<T extends Plugin> implements Runnable {
@Override
public void run(){
public synchronized void run(){
String pluginName = plugin.getName();
logger.info("{} : {} is going to be launched (UUID={}, iterationNumber={}) with the following inputs {}",
@ -85,10 +85,10 @@ public class RunnablePlugin<T extends Plugin> implements Runnable {
JobUsageRecord jobUsageRecord = new JobUsageRecord();
long startTime = actualStateEvolution.getTimestamp();
Secret secret = SecretUtility.getSecretByTokenString(token);
SecretManager secretManager = SecretManagerProvider.instance.get();
try {
Secret secret = SecretUtility.getSecretByTokenString(token);
secretManager.startSession(secret);
setState(PluginState.RUNNING);