diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java index 3d903f6835a9ad0930d800db38fbaac6af5f8598..93eb48b58e30265be47d657716c8edac3a90db8f 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java @@ -484,10 +484,22 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat state.getGlobalState().getStorageRecoveryManager() .extractPrecommittedCheckpoint(recoveryMarkerFile); - // TODO: real cleanup action + // TODO: cleanup also with the incoming marker file + + final File recoveryFile = + state.getGlobalState().getStorageRecoveryManager() + .getRecoveryFileFromMarker(recoveryMarkerFile); + + if (false == recoveryFile.exists()) + { + //TODO: is it safe to throw from here? + operationLog.error("recovery file does not exist. " + recoveryFile); + throw new IllegalStateException("Recovery file " + recoveryFile + " doesn't exist"); + } + + operationLog.info("will recover from broken registration. Found marker file " + + recoveryMarkerFile + " and " + recoveryFile); - final File recoveryFile = state.getGlobalState().getStorageRecoveryManager().getRecoveryFileFromMarker(recoveryMarkerFile); - IDelegatedActionWithResult<Boolean> recoveryMarkerFileCleanupAction = new IDelegatedActionWithResult<Boolean>() { @@ -509,11 +521,9 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat private void handleRecoveryState(DataSetStoragePrecommitRecoveryState<T> recoveryState, final IDelegatedActionWithResult<Boolean> cleanAfterwardsAction) { - // TODO: Jobs left to do: + // TODO: Jobs left to do here: // rollback - // cleanup - // jython - System.err.println("Handle recovery"); + // jython hooks DssRegistrationLogger logger = recoveryState.getRegistrationLogger(state); @@ -556,16 +566,18 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat state.getGlobalState().getStorageRecoveryManager()); boolean registrationSuccessful = false; - System.err.println("Successfully created runner"); - + operationLog.info("Recovery succesfully deserialized the state of the registration"); try { List<String> dataSetCodes = recoveryState.getDataSetCodes(); + //TODO: we need to check for something more than just a registered datasets, for the registrations that doesn't register anything. + //OTOH: do we need to recover in this case? (as there is nothing to store) + //maybe then we should only checkpoint for recovery if there ARE datasets registered? List<ExternalData> registeredDataSets = state.getGlobalState().getOpenBisService().listDataSetsByCode(dataSetCodes); if (registeredDataSets.isEmpty()) { - // System.err.println("There are no registered datasets!"); + operationLog.info("Recovery hasn't found registration artifacts in the application server. Registration of metadata was not succesfull."); // recoveryState.getRollbackStack().rollbackAll(Live transaction state);./fe // encounteredErrors.add(ex); // @@ -582,7 +594,7 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat // // rollback during metadata registration } else { - System.err.println("There are registered datasets!"); + operationLog.info("Recovery has found datasets in the AS. The registration of metadata was succesfull."); runner.storeAfterRegistration(); logger.registerSuccess(); registrationSuccessful = true;