Rethrow exceptions

This commit is contained in:
Fabio Sinibaldi 2022-04-08 15:20:21 +02:00
parent 803e7776ee
commit 58fcad9da6
1 changed files with 47 additions and 40 deletions

View File

@ -139,7 +139,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
protected Project unlockAndUpdate(Project proj) throws InvalidLockException, ProjectNotFoundException, JsonProcessingException, InvalidUserRoleException, UnauthorizedAccess {
log.trace("Unlocking {} lock is {} ",proj.getId(),proj.getLock());
log.trace("Unlocking for update {} lock is {} ",proj.getId(),proj.getLock());
// find one and update
Lock oldLock = proj.getLock();
proj.setLock(null);
@ -158,15 +158,31 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
Project p = getByID(proj.getId());
throw new InvalidLockException("Found lock for "+p.getId()+" is "+p.getLock()+", expected is "+oldLock);
}return Serialization.convert(obj,Project.class);
// filter : id, lock id
// update with project (NB without lock)
// if none matched
// not found if proj id non existent
// else invalid lock
// return null;
}
protected Project unlock(Project proj) throws InvalidLockException, InvalidUserRoleException, ProjectNotFoundException, UnauthorizedAccess {
log.trace("Unlocking for update {} lock is {} ",proj.getId(),proj.getLock());
// find one and update
Lock oldLock = proj.getLock();
Document filter = new Document(mongoIDFieldName(),asId(proj.getId())).append(Project.LOCK+"."+Lock.ID,oldLock.getId());
Object obj = getCollection().findOneAndUpdate(
// filter by id and missing lock
filter,
// update lock info
new Document("$set",new Document(Project.LOCK, null)),
new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
);
if(obj== null){
// can-t unlock, check cause
Project p = getByID(proj.getId());
throw new InvalidLockException("Found lock for "+p.getId()+" is "+p.getLock()+", expected is "+oldLock);
}return Serialization.convert(obj,Project.class);
}
@Getter(lazy = true)
private final LifecycleManager manager=getLCManager();
@ -195,7 +211,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
@Override
public Project registerNew(Document toRegisterDoc) throws IOException, StepException, EventException, InvalidUserRoleException {
public Project registerNew(Document toRegisterDoc) throws IOException, InvalidUserRoleException {
log.info("Registering new document in {} ", useCaseDescriptor.getId());
log.trace("Going to register {}",toRegisterDoc.toJson());
@ -274,8 +290,11 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
toUpdate.setTheDocument(toSet);
toUpdate.getLifecycleInformation().cleanState();
toUpdate = onUpdate(toUpdate);
}finally{
return unlockAndUpdate(toUpdate);
}catch(Throwable t){
log.error("Unexpected exception ",t);
unlock(toUpdate);
throw t;
}
}
@ -420,8 +439,6 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
@Override
public Project performStep(String id, String step, Document options) throws StepException, JsonProcessingException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess, ConfigurationException, InsufficientPrivileges {
Project document = lock(id,"Step "+step+" execution");
Boolean store = true;
try {
User u = UserUtils.getCurrent().asInfo().getUser();
@ -437,33 +454,21 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
document.getLifecycleInformation().cleanState();
document = step(document, step, options);
}catch (UnrecognizedStepException e){
store = false;
return unlockAndUpdate(document);
}catch (UnrecognizedStepException | ConfigurationException | InsufficientPrivileges e){
log.debug("Unable to perform step ",e);
unlock(document);
throw e;
}catch (ConfigurationException e){
store = false;
throw e;
}catch (InsufficientPrivileges e){
store = false;
throw e;
} catch(Throwable t){
log.error("[UseCaseDescriptor {} ] ERROR Invoking Step {} on document {}" , useCaseDescriptor.getId(),step,id,t);
} catch(Throwable t) {
log.error("[UseCaseDescriptor {} ] ERROR Invoking Step {} on document {}", useCaseDescriptor.getId(), step, id, t);
LifecycleInformation info = new LifecycleInformation();
info.setPhase(document.getLifecycleInformation().getPhase());
info.setLastOperationStatus(LifecycleInformation.Status.ERROR);
info.addErrorMessage(t.getMessage());
info.setLastInvokedStep(step);
document.setLifecycleInformation(info);
}finally{
if (store) {
log.info("Storing {} [UseCaseDescriptor {}] After Step {}, Status : {} " ,id, useCaseDescriptor.getId(),
step,document.getLifecycleInformation().getLastOperationStatus());
log.debug("LifecycleInformation is {} ",document.getLifecycleInformation());
if(log.isTraceEnabled())log.trace("Document is {} ",Serialization.write(document));
}
return unlockAndUpdate(document);
}
return unlockAndUpdate(document);
}
@ -481,7 +486,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
*
*/
@Override
public Project registerFileSet(String id, RegisterFileSetRequest request) throws ConfigurationException, StorageHubException, StorageException, StepException, JsonProcessingException, DeletionException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess {
public Project registerFileSet(String id, RegisterFileSetRequest request) throws ConfigurationException, StorageHubException, StorageException, JsonProcessingException, EventException, ProjectLockedException, ProjectNotFoundException, InvalidLockException, InvalidUserRoleException, UnauthorizedAccess {
log.info("Registering Fileset for {} [useCaseDescriptor ID {}], Request is {} ",id, useCaseDescriptor.getId(),request);
List<TempFile> files=request.getStreams();
@ -578,12 +583,13 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
doc.setTheDocument(Document.parse(docWrapper.getValueCTX().jsonString()));
doc = onUpdate(doc);
}catch (Throwable t){
log.warn("Unexpected Exception while trying to registering fileset on {}.",id,t);
log.debug("Request was {}",request);
log.debug("Complete doc was {} ",doc);
}finally {
return unlockAndUpdate(doc);
}catch (Throwable t) {
log.warn("Unexpected Exception while trying to registering fileset on {}.", id, t);
log.debug("Request was {}", request);
log.debug("Complete doc was {} ", doc);
unlock(doc);
throw t;
}
}
@ -607,10 +613,11 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
doc.getLifecycleInformation().cleanState().setLastOperationStatus(LifecycleInformation.Status.OK);
doc= deleteFileSetRoutine(doc,force,path);
doc = onUpdate(doc);
return doc;
}finally {
return unlockAndUpdate(doc);
}catch (Throwable t) {
log.warn("Unexpected Exception while trying to delete fileset on {}.", id, t);
unlock(doc);
throw t;
}
}