in brooklyn-server/core/src/main/java/org/apache/brooklyn/core/mgmt/persist/FileBasedObjectStore.java [194:290]
public void prepareForSharedUse(@Nullable PersistMode persistMode, HighAvailabilityMode haMode) {
if (mgmt==null) throw new NullPointerException("Must inject ManagementContext before preparing "+this);
if (persistMode==null || persistMode==PersistMode.DISABLED) {
// TODO is this check needed? shouldn't come here now without persistence on.
prepared = true;
return;
}
@SuppressWarnings("deprecation")
Boolean backups = mgmt.getConfig().getConfig(BrooklynServerConfig.PERSISTENCE_BACKUPS_REQUIRED);
if (Boolean.TRUE.equals(backups)) {
log.warn("Using legacy backup for "+this+"; functionality will be removed in future versions, in favor of promotion/demotion-specific backups to a configurable backup location.");
}
// default backups behaviour here changed to false, Nov 2014, because these backups are now legacy;
// we prefer the made when persistence is enabled, using routines in BrooklynPersistenceUtils
if (backups==null) backups = false;
File dir = getBaseDir();
try {
String persistencePath = dir.getAbsolutePath();
switch (persistMode) {
case CLEAN:
if (dir.exists()) {
checkPersistenceDirAccessible(dir);
try {
if (backups) {
File old = backupDirByMoving(dir);
log.info("Persistence mode CLEAN, directory "+persistencePath+" backed up to "+old.getAbsolutePath());
} else {
deleteCompletely();
log.info("Persistence mode CLEAN, directory "+persistencePath+" deleted");
}
} catch (IOException e) {
throw new FatalConfigurationRuntimeException("Error using existing persistence directory "+dir.getAbsolutePath(), e);
}
} else {
log.debug("Persistence mode CLEAN, directory "+persistencePath+", no previous state");
}
break;
case REBIND:
checkPersistenceDirAccessible(dir);
checkPersistenceDirNonEmpty(dir);
try {
if (backups) {
if (haMode==HighAvailabilityMode.MASTER) {
File backup = backupDirByCopying(dir);
log.info("Persistence mode REBIND, directory "+persistencePath+" backed up to "+backup.getAbsolutePath());
} else {
deferredBackupNeeded = true;
}
}
} catch (IOException e) {
throw new FatalConfigurationRuntimeException("Error backing up persistence directory "+dir.getAbsolutePath(), e);
}
break;
case AUTO:
if (dir.exists()) {
checkPersistenceDirAccessible(dir);
}
if (dir.exists() && !isMementoDirExistButEmpty(dir)) {
try {
if (backups) {
if (haMode==HighAvailabilityMode.MASTER) {
File backup = backupDirByCopying(dir);
log.info("Persistence mode REBIND, directory "+persistencePath+" backed up to "+backup.getAbsolutePath());
} else {
deferredBackupNeeded = true;
}
}
} catch (IOException e) {
throw new FatalConfigurationRuntimeException("Error backing up persistence directory "+dir.getAbsolutePath(), e);
}
} else {
log.debug("Persistence mode AUTO, directory "+persistencePath+", no previous state");
}
break;
default:
throw new FatalConfigurationRuntimeException("Unexpected persist mode "+persistMode+"; modified during initialization?!");
};
if (!dir.exists()) {
boolean success = dir.mkdirs();
if (success) {
FileUtil.setFilePermissionsTo700(dir);
} else {
throw new FatalConfigurationRuntimeException("Failed to create persistence directory "+dir);
}
}
} catch (Exception e) {
throw Exceptions.propagate(e);
}
prepared = true;
}