Use PersistenceManager for StoreService (not yet supported for subclasses)

This commit is contained in:
chimp1984 2020-10-01 17:20:50 -05:00
parent 3a348d5a0f
commit 2e55251bcf
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3

View file

@ -19,13 +19,12 @@ package bisq.network.p2p.storage.persistence;
import bisq.common.file.FileUtil; import bisq.common.file.FileUtil;
import bisq.common.file.ResourceNotFoundException; import bisq.common.file.ResourceNotFoundException;
import bisq.common.persistence.PersistenceManager;
import bisq.common.proto.persistable.PersistableEnvelope; import bisq.common.proto.persistable.PersistableEnvelope;
import bisq.common.storage.Storage;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.io.File; import java.io.File;
import java.io.IOException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -43,7 +42,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public abstract class StoreService<T extends PersistableEnvelope> { public abstract class StoreService<T extends PersistableEnvelope> {
protected final Storage<T> storage; protected final PersistenceManager<T> persistenceManager;
protected final String absolutePathOfStorageDir; protected final String absolutePathOfStorageDir;
protected T store; protected T store;
@ -52,12 +51,9 @@ public abstract class StoreService<T extends PersistableEnvelope> {
// Constructor // Constructor
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
public StoreService(File storageDir, public StoreService(File storageDir, PersistenceManager<T> persistenceManager) {
Storage<T> storage) { this.persistenceManager = persistenceManager;
this.storage = storage;
absolutePathOfStorageDir = storageDir.getAbsolutePath(); absolutePathOfStorageDir = storageDir.getAbsolutePath();
storage.setNumMaxBackupFiles(1);
} }
@ -65,8 +61,8 @@ public abstract class StoreService<T extends PersistableEnvelope> {
// API // API
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
protected void persist() { protected void requestPersistence() {
storage.queueUpForSave(store, 200); persistenceManager.requestPersistence();
} }
protected T getStore() { protected T getStore() {
@ -86,11 +82,6 @@ public abstract class StoreService<T extends PersistableEnvelope> {
try { try {
readStore(); readStore();
} catch (Throwable t) { } catch (Throwable t) {
try {
storage.removeAndBackupFile(fileName);
} catch (IOException e) {
log.error(e.toString());
}
makeFileFromResourceFile(fileName, postFix); makeFileFromResourceFile(fileName, postFix);
readStore(); readStore();
} }
@ -122,11 +113,16 @@ public abstract class StoreService<T extends PersistableEnvelope> {
} }
protected T getStore(String fileName) { protected T getStore(String fileName) {
T store = storage.initAndGetPersistedWithFileName(fileName, 100); T store;
if (store != null) { T persisted = persistenceManager.getPersisted(fileName);
log.info("{}: size of {}: {} MB", this.getClass().getSimpleName(), if (persisted != null) {
storage.getClass().getSimpleName(), store = persisted;
store.toProtoMessage().toByteArray().length / 1_000_000D);
int length = store.toProtoMessage().toByteArray().length;
double size = length > 1_000_000D ? length / 1_000_000D : length / 1_000D;
String unit = length > 1_000_000D ? "MB" : "KB";
log.info("{}: size of {}: {} {}", this.getClass().getSimpleName(),
persisted.getClass().getSimpleName(), size, unit);
} else { } else {
store = createStore(); store = createStore();
} }
@ -135,6 +131,11 @@ public abstract class StoreService<T extends PersistableEnvelope> {
protected void readStore() { protected void readStore() {
store = getStore(getFileName()); store = getStore(getFileName());
initializePersistenceManager();
}
protected void initializePersistenceManager() {
persistenceManager.initialize(store);
} }
protected abstract T createStore(); protected abstract T createStore();