public AcornBackupProvider() {
this.client = AcornSessionManagerImpl.getInstance().getClient();
}
-
- private static Path getAcornMetadataFile(Path dbFolder) {
+
+ public static Path getAcornMetadataFile(Path dbFolder) {
return dbFolder.getParent().resolve(IDENTIFIER);
}
-
+
@Override
public void lock() throws BackupException {
try {
boolean releaseLock = true;
try {
lock.acquire();
-
- client.makeSnapshot(true);
-
- Path dbDir = client.getDbFolder();
- int newestFolder = client.clusters.mainState.headDir - 1;
- int latestFolder = -2;
- Path AcornMetadataFile = getAcornMetadataFile(dbDir);
- if (Files.exists(AcornMetadataFile)) {
- try (BufferedReader br = Files.newBufferedReader(AcornMetadataFile)) {
- latestFolder = Integer.parseInt( br.readLine() );
- }
- }
-
- AcornBackupRunnable r = new AcornBackupRunnable(
- lock, targetPath, revision, dbDir, latestFolder, newestFolder);
- new Thread(r, "Acorn backup thread").start();
-
- releaseLock = false;
- return r;
+ Future<BackupException> r = client.getBackupRunnable(lock, targetPath, revision);
+ releaseLock = false;
+ return r;
} catch (InterruptedException e) {
releaseLock = false;
throw new BackupException("Failed to lock Acorn for backup.", e);
if (dbRoot != restorePath) {
FileUtils.deleteAll(dbRoot.toFile());
Files.move(restorePath, dbRoot);
- }
+ }
} catch (IOException e) {
e.printStackTrace();
}
}
}
- private static class AcornBackupRunnable implements Runnable, Future<BackupException> {
+ public static class AcornBackupRunnable implements Runnable, Future<BackupException> {
private final Semaphore lock;
private final Path targetPath;