2019-03-12 19:01:29 +01:00
|
|
|
package org.gcube.data.publishing.gCatFeeder.service.engine.impl;
|
|
|
|
|
2019-03-22 19:09:06 +01:00
|
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
2019-03-12 19:01:29 +01:00
|
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
2019-03-22 19:09:06 +01:00
|
|
|
import java.util.concurrent.TimeUnit;
|
2019-03-12 19:01:29 +01:00
|
|
|
|
2019-03-22 19:09:06 +01:00
|
|
|
import javax.annotation.PostConstruct;
|
2019-03-25 12:55:34 +01:00
|
|
|
import javax.inject.Inject;
|
2019-03-12 19:01:29 +01:00
|
|
|
|
2019-03-25 12:55:34 +01:00
|
|
|
import org.gcube.data.publishing.gCatFeeder.service.engine.CatalogueControllersManager;
|
|
|
|
import org.gcube.data.publishing.gCatFeeder.service.engine.CollectorsManager;
|
2019-03-12 19:01:29 +01:00
|
|
|
import org.gcube.data.publishing.gCatFeeder.service.engine.ExecutionManager;
|
2019-03-25 12:55:34 +01:00
|
|
|
import org.gcube.data.publishing.gCatFeeder.service.engine.Infrastructure;
|
|
|
|
import org.gcube.data.publishing.gCatFeeder.service.engine.PersistenceManager;
|
|
|
|
import org.gcube.data.publishing.gCatFeeder.service.engine.Storage;
|
2019-03-12 19:01:29 +01:00
|
|
|
import org.gcube.data.publishing.gCatFeeder.service.model.ExecutionDescriptor;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
2019-03-22 19:09:06 +01:00
|
|
|
|
2019-03-12 19:01:29 +01:00
|
|
|
public class ExecutionManagerImpl implements ExecutionManager {
|
|
|
|
|
|
|
|
private ThreadPoolExecutor executor=null;
|
|
|
|
private static final Logger log= LoggerFactory.getLogger(ExecutionManagerImpl.class);
|
|
|
|
|
2019-03-22 19:09:06 +01:00
|
|
|
private boolean defaultConfiguration=true;
|
|
|
|
|
2019-03-25 12:55:34 +01:00
|
|
|
private PersistenceManager persistence;
|
|
|
|
private CollectorsManager collectors;
|
|
|
|
private CatalogueControllersManager catalogues;
|
|
|
|
|
|
|
|
private Infrastructure infrastructure;
|
|
|
|
private Storage storage;
|
|
|
|
|
|
|
|
|
2019-03-22 19:09:06 +01:00
|
|
|
@PostConstruct
|
|
|
|
private void post() {
|
|
|
|
executor=new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
|
|
|
|
new LinkedBlockingQueue<Runnable>());
|
|
|
|
}
|
|
|
|
|
2019-03-25 12:55:34 +01:00
|
|
|
@Inject
|
|
|
|
public void setPersistence(PersistenceManager p) {
|
|
|
|
this.persistence=p;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Inject
|
|
|
|
public void setCollectorPluginManager(CollectorsManager c) {
|
|
|
|
this.collectors=c;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Inject
|
|
|
|
public void setCataloguesPluginManager(CatalogueControllersManager c) {
|
|
|
|
this.catalogues=c;
|
|
|
|
}
|
|
|
|
|
2019-03-22 19:09:06 +01:00
|
|
|
|
2019-03-25 12:55:34 +01:00
|
|
|
@Inject
|
|
|
|
public void setInfastructureInterface(Infrastructure infra) {
|
|
|
|
this.infrastructure=infra;
|
|
|
|
}
|
|
|
|
@Inject
|
|
|
|
public void setStorage(Storage storage) {
|
|
|
|
this.storage = storage;
|
|
|
|
}
|
2019-03-22 19:09:06 +01:00
|
|
|
|
2019-03-12 19:01:29 +01:00
|
|
|
@Override
|
|
|
|
public synchronized void submit(ExecutionDescriptor desc) {
|
|
|
|
log.debug("Checking if {} is already in queue");
|
|
|
|
ExecutionTask toSubmit=new ExecutionTask(desc);
|
2019-03-25 12:55:34 +01:00
|
|
|
toSubmit.setCataloguesPluginManager(catalogues);
|
|
|
|
toSubmit.setCollectorPluginManager(collectors);
|
|
|
|
toSubmit.setInfastructureInterface(infrastructure);
|
|
|
|
toSubmit.setPersistence(persistence);
|
|
|
|
toSubmit.setStorage(storage);
|
|
|
|
|
2019-03-12 19:01:29 +01:00
|
|
|
if(!executor.getQueue().contains(toSubmit)) {
|
|
|
|
log.trace("Inserting execution in queue {} ");
|
|
|
|
executor.execute(toSubmit);
|
2019-03-22 19:09:06 +01:00
|
|
|
log.debug("Request submitted");
|
|
|
|
}else {
|
|
|
|
log.debug("Execution already in queue");
|
2019-03-12 19:01:29 +01:00
|
|
|
}
|
2019-03-22 19:09:06 +01:00
|
|
|
|
2019-03-12 19:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void stop() {
|
|
|
|
// Clear queue
|
|
|
|
// Stop all
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void load() {
|
|
|
|
// connect to persistence
|
|
|
|
// load all pending
|
|
|
|
throw new RuntimeException("NOT YET IMPLEMENTED");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public synchronized void init(ExecutionManagerConfiguration config) {
|
|
|
|
// NEED TO BE IDEMPOTENT
|
2019-03-22 19:09:06 +01:00
|
|
|
if(executor==null||defaultConfiguration) {
|
2019-03-12 19:01:29 +01:00
|
|
|
throw new RuntimeException("NOT YET IMPLEMENTED");
|
|
|
|
// executor=new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, new ConcurrentLinkedQueue<ExecutionTask>());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|