Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

inject CorruptedDataFilesHandler instead of making it static #3107

Merged
merged 7 commits into from
Aug 20, 2019
9 changes: 3 additions & 6 deletions common/src/main/java/bisq/common/storage/Storage.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,7 @@ public class Storage<T extends PersistableEnvelope> {
private static final Logger log = LoggerFactory.getLogger(Storage.class);
public static final String STORAGE_DIR = "storageDir";

private static CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler;

public static void setCorruptedDatabaseFilesHandler(CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
Storage.corruptedDatabaseFilesHandler = corruptedDatabaseFilesHandler;
}
private final CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler;

private final File dir;
private FileManager<T> fileManager;
Expand All @@ -72,9 +68,10 @@ public static void setCorruptedDatabaseFilesHandler(CorruptedDatabaseFilesHandle
///////////////////////////////////////////////////////////////////////////////////////////

@Inject
public Storage(@Named(STORAGE_DIR) File dir, PersistenceProtoResolver persistenceProtoResolver) {
public Storage(@Named(STORAGE_DIR) File dir, PersistenceProtoResolver persistenceProtoResolver, CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
this.dir = dir;
this.persistenceProtoResolver = persistenceProtoResolver;
this.corruptedDatabaseFilesHandler = corruptedDatabaseFilesHandler;
}

@Nullable
Expand Down
9 changes: 0 additions & 9 deletions core/src/main/java/bisq/core/app/BisqExecutable.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@
import bisq.common.handlers.ResultHandler;
import bisq.common.proto.persistable.PersistedDataHost;
import bisq.common.setup.GracefulShutDownHandler;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;

import org.springframework.core.env.JOptCommandLinePropertySource;

Expand Down Expand Up @@ -232,8 +230,6 @@ protected Injector getInjector() {
protected void applyInjector() {
setupDevEnv();

setCorruptedDataBaseFilesHandler();

setupPersistedDataHosts(injector);
}

Expand All @@ -242,11 +238,6 @@ protected void setupDevEnv() {
DevEnv.setDaoActivated(BisqEnvironment.isDaoActivated(bisqEnvironment));
}

private void setCorruptedDataBaseFilesHandler() {
CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler = injector.getInstance(CorruptedDatabaseFilesHandler.class);
Storage.setCorruptedDatabaseFilesHandler(corruptedDatabaseFilesHandler);
}

protected void setupPersistedDataHosts(Injector injector) {
try {
PersistedDataHost.apply(CorePersistedDataHost.getPersistedDataHosts(injector));
Expand Down
5 changes: 3 additions & 2 deletions core/src/main/java/bisq/core/arbitration/DisputeManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
import bisq.common.proto.network.NetworkEnvelope;
import bisq.common.proto.persistable.PersistedDataHost;
import bisq.common.proto.persistable.PersistenceProtoResolver;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;
import bisq.common.util.Tuple2;

Expand Down Expand Up @@ -137,7 +138,7 @@ public DisputeManager(P2PService p2PService,
OpenOfferManager openOfferManager,
KeyRing keyRing,
PersistenceProtoResolver persistenceProtoResolver,
@Named(Storage.STORAGE_DIR) File storageDir) {
@Named(Storage.STORAGE_DIR) File storageDir, CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a line break. So params are better separated/readable?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure, i wonder if there is a way to make idea do it automatically.

this.p2PService = p2PService;
this.tradeWalletService = tradeWalletService;
this.walletService = walletService;
Expand All @@ -147,7 +148,7 @@ public DisputeManager(P2PService p2PService,
this.openOfferManager = openOfferManager;
this.keyRing = keyRing;

disputeStorage = new Storage<>(storageDir, persistenceProtoResolver);
disputeStorage = new Storage<>(storageDir, persistenceProtoResolver, corruptedDatabaseFilesHandler);

openDisputes = new HashMap<>();
closedDisputes = new HashMap<>();
Expand Down
5 changes: 3 additions & 2 deletions core/src/main/java/bisq/core/offer/OpenOfferManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
import bisq.common.proto.network.NetworkEnvelope;
import bisq.common.proto.persistable.PersistedDataHost;
import bisq.common.proto.persistable.PersistenceProtoResolver;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;

import org.bitcoinj.core.Coin;
Expand Down Expand Up @@ -130,7 +131,7 @@ public OpenOfferManager(KeyRing keyRing,
PersistenceProtoResolver persistenceProtoResolver,
TradeStatisticsManager tradeStatisticsManager,
ArbitratorManager arbitratorManager,
@Named(Storage.STORAGE_DIR) File storageDir) {
@Named(Storage.STORAGE_DIR) File storageDir, CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
this.keyRing = keyRing;
this.user = user;
this.p2PService = p2PService;
Expand All @@ -144,7 +145,7 @@ public OpenOfferManager(KeyRing keyRing,
this.tradeStatisticsManager = tradeStatisticsManager;
this.arbitratorManager = arbitratorManager;

openOfferTradableListStorage = new Storage<>(storageDir, persistenceProtoResolver);
openOfferTradableListStorage = new Storage<>(storageDir, persistenceProtoResolver, corruptedDatabaseFilesHandler);

// In case the app did get killed the shutDown from the modules is not called, so we use a shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import bisq.common.proto.persistable.NavigationPath;
import bisq.common.proto.persistable.PersistableEnvelope;
import bisq.common.proto.persistable.PersistenceProtoResolver;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;

import com.google.inject.Provider;
Expand All @@ -69,15 +70,18 @@ public class CorePersistenceProtoResolver extends CoreProtoResolver implements P
private final Provider<BtcWalletService> btcWalletService;
private final NetworkProtoResolver networkProtoResolver;
private final File storageDir;
private final CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler;

@Inject
public CorePersistenceProtoResolver(Provider<BtcWalletService> btcWalletService,
NetworkProtoResolver networkProtoResolver,
@Named(Storage.STORAGE_DIR) File storageDir) {
@Named(Storage.STORAGE_DIR) File storageDir,
CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
this.btcWalletService = btcWalletService;
this.networkProtoResolver = networkProtoResolver;
this.storageDir = storageDir;

this.corruptedDatabaseFilesHandler = corruptedDatabaseFilesHandler;
}

@Override
Expand All @@ -93,14 +97,14 @@ public PersistableEnvelope fromProto(protobuf.PersistableEnvelope proto) {
case TRADABLE_LIST:
return TradableList.fromProto(proto.getTradableList(),
this,
new Storage<>(storageDir, this),
new Storage<>(storageDir, this, corruptedDatabaseFilesHandler),
btcWalletService.get());
case TRADE_STATISTICS_LIST:
throw new ProtobufferRuntimeException("TRADE_STATISTICS_LIST is not used anymore");
case DISPUTE_LIST:
return DisputeList.fromProto(proto.getDisputeList(),
this,
new Storage<>(storageDir, this));
new Storage<>(storageDir, this, corruptedDatabaseFilesHandler));
case PREFERENCES_PAYLOAD:
return PreferencesPayload.fromProto(proto.getPreferencesPayload(), this);
case USER_PAYLOAD:
Expand Down
5 changes: 3 additions & 2 deletions core/src/main/java/bisq/core/trade/TradeManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import bisq.common.proto.network.NetworkEnvelope;
import bisq.common.proto.persistable.PersistedDataHost;
import bisq.common.proto.persistable.PersistenceProtoResolver;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;

import org.bitcoinj.core.AddressFormatException;
Expand Down Expand Up @@ -152,7 +153,7 @@ public TradeManager(User user,
AccountAgeWitnessService accountAgeWitnessService,
ArbitratorManager arbitratorManager,
ClockWatcher clockWatcher,
@Named(Storage.STORAGE_DIR) File storageDir) {
@Named(Storage.STORAGE_DIR) File storageDir, CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
this.user = user;
this.keyRing = keyRing;
this.btcWalletService = btcWalletService;
Expand All @@ -170,7 +171,7 @@ public TradeManager(User user,
this.arbitratorManager = arbitratorManager;
this.clockWatcher = clockWatcher;

tradableListStorage = new Storage<>(storageDir, persistenceProtoResolver);
tradableListStorage = new Storage<>(storageDir, persistenceProtoResolver, corruptedDatabaseFilesHandler);

p2PService.addDecryptedDirectMessageListener((decryptedMessageWithPubKey, peerNodeAddress) -> {
NetworkEnvelope networkEnvelope = decryptedMessageWithPubKey.getNetworkEnvelope();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import bisq.common.crypto.KeyRing;
import bisq.common.proto.persistable.PersistedDataHost;
import bisq.common.proto.persistable.PersistenceProtoResolver;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;

import com.google.inject.Inject;
Expand Down Expand Up @@ -55,11 +56,11 @@ public class ClosedTradableManager implements PersistedDataHost {
public ClosedTradableManager(KeyRing keyRing, PriceFeedService priceFeedService,
PersistenceProtoResolver persistenceProtoResolver,
BtcWalletService btcWalletService,
@Named(Storage.STORAGE_DIR) File storageDir) {
@Named(Storage.STORAGE_DIR) File storageDir, CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
this.keyRing = keyRing;
this.priceFeedService = priceFeedService;
this.btcWalletService = btcWalletService;
tradableListStorage = new Storage<>(storageDir, persistenceProtoResolver);
tradableListStorage = new Storage<>(storageDir, persistenceProtoResolver, corruptedDatabaseFilesHandler);
// The ClosedTrades object can become a few MB so we don't keep so many backups
tradableListStorage.setNumMaxBackupFiles(3);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import bisq.common.crypto.KeyRing;
import bisq.common.proto.persistable.PersistedDataHost;
import bisq.common.proto.persistable.PersistenceProtoResolver;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;

import com.google.inject.Inject;
Expand Down Expand Up @@ -54,11 +55,11 @@ public class FailedTradesManager implements PersistedDataHost {
public FailedTradesManager(KeyRing keyRing, PriceFeedService priceFeedService,
PersistenceProtoResolver persistenceProtoResolver,
BtcWalletService btcWalletService,
@Named(Storage.STORAGE_DIR) File storageDir) {
@Named(Storage.STORAGE_DIR) File storageDir, CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
this.keyRing = keyRing;
this.priceFeedService = priceFeedService;
this.btcWalletService = btcWalletService;
tradableListStorage = new Storage<>(storageDir, persistenceProtoResolver);
tradableListStorage = new Storage<>(storageDir, persistenceProtoResolver, corruptedDatabaseFilesHandler);

}

Expand Down
15 changes: 12 additions & 3 deletions core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@

import bisq.common.handlers.ErrorMessageHandler;
import bisq.common.handlers.ResultHandler;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;

import java.util.concurrent.atomic.AtomicBoolean;

import org.junit.Before;
import org.junit.Test;

import static bisq.core.offer.OfferMaker.btcUsdOffer;
Expand All @@ -19,6 +21,13 @@

public class OpenOfferManagerTest {

private CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler;

@Before
public void setUp() throws Exception {
corruptedDatabaseFilesHandler = mock(CorruptedDatabaseFilesHandler.class);
}

@Test
public void testStartEditOfferForActiveOffer() {
P2PService p2PService = mock(P2PService.class);
Expand All @@ -29,7 +38,7 @@ public void testStartEditOfferForActiveOffer() {
final OpenOfferManager manager = new OpenOfferManager(null, null, p2PService,
null, null, null, offerBookService,
null, null, null, null,
null, null, null);
null, null, null, corruptedDatabaseFilesHandler);

AtomicBoolean startEditOfferSuccessful = new AtomicBoolean(false);

Expand Down Expand Up @@ -64,7 +73,7 @@ public void testStartEditOfferForDeactivatedOffer() {
final OpenOfferManager manager = new OpenOfferManager(null, null, p2PService,
null, null, null, offerBookService,
null, null, null, null,
null, null, null);
null, null, null, corruptedDatabaseFilesHandler);

AtomicBoolean startEditOfferSuccessful = new AtomicBoolean(false);

Expand All @@ -91,7 +100,7 @@ public void testStartEditOfferForOfferThatIsCurrentlyEdited() {
final OpenOfferManager manager = new OpenOfferManager(null, null, p2PService,
null, null, null, offerBookService,
null, null, null, null,
null, null, null);
null, null, null, corruptedDatabaseFilesHandler);

AtomicBoolean startEditOfferSuccessful = new AtomicBoolean(false);

Expand Down
3 changes: 2 additions & 1 deletion core/src/test/java/bisq/core/trade/TradableListTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import bisq.core.offer.OfferPayload;
import bisq.core.offer.OpenOffer;

import bisq.common.storage.CorruptedDatabaseFilesHandler;
import bisq.common.storage.Storage;

import org.junit.Test;
Expand All @@ -36,7 +37,7 @@ public class TradableListTest {
@Test
public void protoTesting() {
OfferPayload offerPayload = mock(OfferPayload.class, RETURNS_DEEP_STUBS);
Storage<TradableList<OpenOffer>> storage = new Storage<>(null, null);
Storage<TradableList<OpenOffer>> storage = new Storage<>(null, null, mock(CorruptedDatabaseFilesHandler.class));
TradableList<OpenOffer> openOfferTradableList = new TradableList<>(storage, "filename");
protobuf.PersistableEnvelope message = (protobuf.PersistableEnvelope) openOfferTradableList.toProtoMessage();
assertTrue(message.getMessageCase().equals(TRADABLE_LIST));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import bisq.core.user.User;

import bisq.common.proto.persistable.PersistenceProtoResolver;
import bisq.common.storage.CorruptedDatabaseFilesHandler;

import com.google.inject.Inject;

Expand All @@ -56,20 +57,23 @@ class AltCoinAccountsDataModel extends ActivatableDataModel {
private final SetChangeListener<PaymentAccount> setChangeListener;
private final String accountsFileName = "AltcoinPaymentAccounts";
private final PersistenceProtoResolver persistenceProtoResolver;
private final CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler;

@Inject
public AltCoinAccountsDataModel(User user,
Preferences preferences,
OpenOfferManager openOfferManager,
TradeManager tradeManager,
AccountAgeWitnessService accountAgeWitnessService,
PersistenceProtoResolver persistenceProtoResolver) {
PersistenceProtoResolver persistenceProtoResolver,
CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
this.user = user;
this.preferences = preferences;
this.openOfferManager = openOfferManager;
this.tradeManager = tradeManager;
this.accountAgeWitnessService = accountAgeWitnessService;
this.persistenceProtoResolver = persistenceProtoResolver;
this.corruptedDatabaseFilesHandler = corruptedDatabaseFilesHandler;
setChangeListener = change -> fillAndSortPaymentAccounts();
}

Expand Down Expand Up @@ -144,11 +148,11 @@ public void exportAccounts(Stage stage) {
ArrayList<PaymentAccount> accounts = new ArrayList<>(user.getPaymentAccounts().stream()
.filter(paymentAccount -> paymentAccount instanceof AssetAccount)
.collect(Collectors.toList()));
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage, persistenceProtoResolver);
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage, persistenceProtoResolver, corruptedDatabaseFilesHandler);
}
}

public void importAccounts(Stage stage) {
GUIUtil.importAccounts(user, accountsFileName, preferences, stage, persistenceProtoResolver);
GUIUtil.importAccounts(user, accountsFileName, preferences, stage, persistenceProtoResolver, corruptedDatabaseFilesHandler);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import bisq.core.user.User;

import bisq.common.proto.persistable.PersistenceProtoResolver;
import bisq.common.storage.CorruptedDatabaseFilesHandler;

import com.google.inject.Inject;

Expand All @@ -58,20 +59,23 @@ class FiatAccountsDataModel extends ActivatableDataModel {
private final SetChangeListener<PaymentAccount> setChangeListener;
private final String accountsFileName = "FiatPaymentAccounts";
private final PersistenceProtoResolver persistenceProtoResolver;
private final CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler;

@Inject
public FiatAccountsDataModel(User user,
Preferences preferences,
OpenOfferManager openOfferManager,
TradeManager tradeManager,
AccountAgeWitnessService accountAgeWitnessService,
PersistenceProtoResolver persistenceProtoResolver) {
PersistenceProtoResolver persistenceProtoResolver,
CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler) {
this.user = user;
this.preferences = preferences;
this.openOfferManager = openOfferManager;
this.tradeManager = tradeManager;
this.accountAgeWitnessService = accountAgeWitnessService;
this.persistenceProtoResolver = persistenceProtoResolver;
this.corruptedDatabaseFilesHandler = corruptedDatabaseFilesHandler;
setChangeListener = change -> fillAndSortPaymentAccounts();
}

Expand Down Expand Up @@ -147,11 +151,11 @@ public void exportAccounts(Stage stage) {
ArrayList<PaymentAccount> accounts = new ArrayList<>(user.getPaymentAccounts().stream()
.filter(paymentAccount -> !(paymentAccount instanceof AssetAccount))
.collect(Collectors.toList()));
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage, persistenceProtoResolver);
GUIUtil.exportAccounts(accounts, accountsFileName, preferences, stage, persistenceProtoResolver, corruptedDatabaseFilesHandler);
}
}

public void importAccounts(Stage stage) {
GUIUtil.importAccounts(user, accountsFileName, preferences, stage, persistenceProtoResolver);
GUIUtil.importAccounts(user, accountsFileName, preferences, stage, persistenceProtoResolver, corruptedDatabaseFilesHandler);
}
}
Loading