import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import org.simantics.acorn.AcornSessionManagerImpl;
import org.simantics.acorn.GraphClientImpl2;
+import org.simantics.acorn.exception.IllegalAcornStateException;
import org.simantics.backup.BackupException;
import org.simantics.backup.IBackupProvider;
import org.simantics.db.server.ProCoreException;
private static final String IDENTIFIER = "AcornBackupProvider";
private long trId = -1;
private final Semaphore lock = new Semaphore(1);
+ private final GraphClientImpl2 client;
+ public AcornBackupProvider() {
+ this.client = AcornSessionManagerImpl.getInstance().getClient();
+ }
+
private static Path getAcornMetadataFile(Path dbFolder) {
return dbFolder.getParent().resolve(IDENTIFIER);
}
try {
if (trId != -1)
throw new IllegalStateException(this + " backup provider is already locked");
- trId = GraphClientImpl2.getInstance().askWriteTransaction(-1)
- .getTransactionId();
+ trId = client.askWriteTransaction(-1).getTransactionId();
} catch (ProCoreException e) {
e.printStackTrace();
}
try {
lock.acquire();
- GraphClientImpl2 client = GraphClientImpl2.getInstance();
client.makeSnapshot(true);
Path dbDir = client.getDbFolder();
throw new BackupException("Failed to lock Acorn for backup.", e);
} catch (NumberFormatException e) {
throw new BackupException("Failed to read Acorn head state file.", e);
- } catch (IOException e) {
+ } catch (IllegalAcornStateException | IOException e) {
throw new BackupException("I/O problem during Acorn backup.", e);
} finally {
if (releaseLock)
try {
if (trId == -1)
throw new BackupException(this + " backup provider is not locked");
- GraphClientImpl2.getInstance().endTransaction(trId);
+ client.endTransaction(trId);
trId = -1;
} catch (ProCoreException e) {
throw new BackupException(e);
// 1. Resolve initial backup restore target.
// This can be DB directory directly or a temporary directory that
// will replace the DB directory.
- Path dbRoot = GraphClientImpl2.getInstance().getDbFolder();
+ Path dbRoot = client.getDbFolder();
Path restorePath = dbRoot;
if (!Files.exists(dbRoot, LinkOption.NOFOLLOW_LINKS)) {
Files.createDirectories(dbRoot);