From ce6620a291a667bad31ca1dcde1f47b40d6f56f4 Mon Sep 17 00:00:00 2001 From: Mike Rosseel Date: Fri, 31 Mar 2017 16:44:36 +0200 Subject: [PATCH] AddressEntryList save/load cycle works --- .../java/io/bisq/common/persistance}/Msg.java | 2 +- .../persistance}/ProtobufferResolver.java | 4 +- .../io/bisq/common/storage/FileManager.java | 32 ++++--- .../java/io/bisq/common/storage/Storage.java | 24 ++++-- common/src/main/proto/pb.proto | 6 +- common/src/main/resources/logback.xml | 4 +- .../alert/PrivateNotificationManager.java | 1 + .../core/alert/PrivateNotificationMsg.java | 2 +- .../bisq/core/arbitration/DisputeManager.java | 15 ++-- .../messages/DisputeCommunicationMsg.java | 4 +- .../messages/DisputeResultMsg.java | 2 +- .../messages/OpenNewDisputeMsg.java | 2 +- .../messages/PeerOpenedDisputeMsg.java | 2 +- .../messages/PeerPublishedPayoutTxMsg.java | 2 +- .../java/io/bisq/core/btc/AddressEntry.java | 4 +- .../io/bisq/core/btc/AddressEntryList.java | 6 +- .../java/io/bisq/core/btc/BitcoinModule.java | 6 +- .../core/btc/wallet/BtcWalletService.java | 6 +- .../core/btc/wallet/TradeWalletService.java | 71 ++++++++-------- .../io/bisq/core/btc/wallet/WalletsSetup.java | 24 +++--- ...CompensationRequestVoteItemCollection.java | 8 +- .../io/bisq/core/offer/OpenOfferManager.java | 15 ++-- .../OfferAvailabilityProtocol.java | 2 +- .../messages/OfferAvailabilityResponse.java | 2 +- .../p2p/network/CoreProtobufferResolver.java | 84 +++++++++++++------ .../java/io/bisq/core/trade/TradeManager.java | 9 +- .../trade/closed/ClosedTradableManager.java | 7 +- .../trade/failed/FailedTradesManager.java | 7 +- .../trade/messages/DepositTxPublishedMsg.java | 2 +- .../messages/FiatTransferStartedMsg.java | 2 +- .../messages/FinalizePayoutTxRequest.java | 2 +- .../trade/messages/PayDepositRequest.java | 2 +- .../trade/messages/PayoutTxPublishedMsg.java | 2 +- .../messages/PublishDepositTxRequest.java | 2 +- .../trade/protocol/BuyerAsMakerProtocol.java | 2 +- .../trade/protocol/BuyerAsTakerProtocol.java | 2 +- .../core/trade/protocol/ProcessModel.java | 63 +------------- .../trade/protocol/SellerAsMakerProtocol.java | 2 +- .../trade/protocol/SellerAsTakerProtocol.java | 2 +- .../core/trade/protocol/TradeProtocol.java | 2 +- .../java/io/bisq/gui/app/BisqAppModule.java | 2 +- .../AltCoinAccountsDataModel.java | 9 +- .../fiataccounts/FiatAccountsDataModel.java | 9 +- .../content/password/PasswordView.java | 3 +- .../windows/WalletPasswordWindow.java | 2 +- .../main/java/io/bisq/gui/util/GUIUtil.java | 11 ++- .../network/crypto/DecryptedDataTuple.java | 2 +- .../network/crypto/EncryptionService.java | 4 +- .../io/bisq/network/p2p/AnonymousMsg.java | 2 + .../bisq/network/p2p/CloseConnectionMsg.java | 1 + .../network/p2p/DecryptedMsgWithPubKey.java | 1 + .../java/io/bisq/network/p2p/DirectMsg.java | 2 + .../java/io/bisq/network/p2p/P2PService.java | 12 +-- .../network/p2p/SendersNodeAddressMsg.java | 2 + .../network/p2p/SupportedCapabilitiesMsg.java | 2 + .../bisq/network/p2p/network/Connection.java | 2 + .../p2p/network/InboundConnection.java | 2 + .../p2p/network/LocalhostNetworkNode.java | 1 + .../network/p2p/network/MessageListener.java | 2 +- .../bisq/network/p2p/network/NetworkNode.java | 3 +- .../p2p/network/OutboundConnection.java | 1 + .../io/bisq/network/p2p/network/Server.java | 1 + .../bisq/network/p2p/network/Statistic.java | 2 +- .../network/p2p/network/TorNetworkNode.java | 1 + .../bisq/network/p2p/peers/PeerManager.java | 5 +- .../p2p/peers/getdata/RequestDataHandler.java | 2 +- .../p2p/peers/getdata/RequestDataManager.java | 2 +- .../getdata/messages/GetDataRequest.java | 2 +- .../p2p/peers/keepalive/KeepAliveHandler.java | 2 +- .../p2p/peers/keepalive/KeepAliveManager.java | 2 +- .../keepalive/messages/KeepAliveMsg.java | 2 +- .../p2p/peers/keepalive/messages/Ping.java | 2 +- .../p2p/peers/keepalive/messages/Pong.java | 2 +- .../peerexchange/PeerExchangeHandler.java | 2 +- .../peerexchange/PeerExchangeManager.java | 2 +- .../messages/PeerExchangeMsg.java | 2 +- .../network/p2p/storage/P2PDataStorage.java | 35 ++++---- .../p2p/storage/messages/AddDataMsg.java | 2 +- .../p2p/storage/messages/BroadcastMsg.java | 2 +- .../p2p/storage/messages/RemoveDataMsg.java | 2 +- .../messages/RemoveMailboxDataMsg.java | 2 +- .../crypto/EncryptionServiceTests.java | 2 +- .../java/io/bisq/network/p2p/TestUtils.java | 9 +- .../bisq/network/p2p/mocks/MockPayload.java | 2 +- .../p2p/storage/P2PDataStorageTest.java | 15 ++-- pom.xml | 10 ++- .../java/io/bisq/seednode/SeedNodeModule.java | 2 +- .../io/bisq/statistics/StatisticsModule.java | 2 +- 88 files changed, 348 insertions(+), 281 deletions(-) rename {network/src/main/java/io/bisq/network/p2p => common/src/main/java/io/bisq/common/persistance}/Msg.java (90%) rename {network/src/main/java/io/bisq/network/p2p/network => common/src/main/java/io/bisq/common/persistance}/ProtobufferResolver.java (89%) diff --git a/network/src/main/java/io/bisq/network/p2p/Msg.java b/common/src/main/java/io/bisq/common/persistance/Msg.java similarity index 90% rename from network/src/main/java/io/bisq/network/p2p/Msg.java rename to common/src/main/java/io/bisq/common/persistance/Msg.java index 16932acf0c..c2e9965e57 100644 --- a/network/src/main/java/io/bisq/network/p2p/Msg.java +++ b/common/src/main/java/io/bisq/common/persistance/Msg.java @@ -1,4 +1,4 @@ -package io.bisq.network.p2p; +package io.bisq.common.persistance; import io.bisq.common.Marshaller; diff --git a/network/src/main/java/io/bisq/network/p2p/network/ProtobufferResolver.java b/common/src/main/java/io/bisq/common/persistance/ProtobufferResolver.java similarity index 89% rename from network/src/main/java/io/bisq/network/p2p/network/ProtobufferResolver.java rename to common/src/main/java/io/bisq/common/persistance/ProtobufferResolver.java index 71c813f2a3..942fa98585 100644 --- a/network/src/main/java/io/bisq/network/p2p/network/ProtobufferResolver.java +++ b/common/src/main/java/io/bisq/common/persistance/ProtobufferResolver.java @@ -15,13 +15,13 @@ * along with Bitsquare. If not, see . */ -package io.bisq.network.p2p.network; +package io.bisq.common.persistance; import io.bisq.generated.protobuffer.PB; -import io.bisq.network.p2p.Msg; import java.util.Optional; public interface ProtobufferResolver { Optional fromProto(PB.Envelope envelope); + Optional fromProto(PB.DiskEnvelope envelope); } diff --git a/common/src/main/java/io/bisq/common/storage/FileManager.java b/common/src/main/java/io/bisq/common/storage/FileManager.java index 54f3133c70..00c0fcedf5 100644 --- a/common/src/main/java/io/bisq/common/storage/FileManager.java +++ b/common/src/main/java/io/bisq/common/storage/FileManager.java @@ -17,16 +17,20 @@ package io.bisq.common.storage; +import com.google.inject.Inject; import com.google.protobuf.Message; import io.bisq.common.UserThread; import io.bisq.common.io.LookAheadObjectInputStream; import io.bisq.common.persistance.Persistable; +import io.bisq.common.persistance.ProtobufferResolver; import io.bisq.common.util.Utilities; +import io.bisq.generated.protobuffer.PB; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.nio.file.Paths; +import java.util.Optional; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -43,17 +47,17 @@ public class FileManager { private final long delay; private final Callable saveFileTask; private T serializable; - private boolean proto; - + private ProtobufferResolver protobufferResolver; /////////////////////////////////////////////////////////////////////////////////////////// // Constructor /////////////////////////////////////////////////////////////////////////////////////////// - public FileManager(File dir, File storageFile, long delay) { + @Inject + public FileManager(File dir, File storageFile, long delay, ProtobufferResolver protobufferResolver) { this.dir = dir; this.storageFile = storageFile; - proto = serializable instanceof Persistable; + this.protobufferResolver = protobufferResolver; executor = Utilities.getScheduledThreadPoolExecutor("FileManager", 1, 10, 5); @@ -106,13 +110,17 @@ public class FileManager { public synchronized T read(File file) throws IOException, ClassNotFoundException { log.debug("read" + file); - if (proto) { - log.info("it's proto"); - try (final FileInputStream fileInputStream = new FileInputStream(file)) { - return (T) ((Persistable) serializable).getParser().parseFrom(fileInputStream); - } catch (Throwable t) { - log.error("Exception at proto read: " + t.getMessage()); - } + Optional persistable = Optional.empty(); + + try (final FileInputStream fileInputStream = new FileInputStream(file)) { + persistable = protobufferResolver.fromProto(PB.DiskEnvelope.parseFrom(fileInputStream)); + } catch (Throwable t) { + log.error("Exception at proto read: " + t.getMessage() + " " + file.getName()); + } + + if(persistable.isPresent()) { + log.error("Persistable found"); + return (T) persistable.get(); } try (final FileInputStream fileInputStream = new FileInputStream(file); @@ -192,7 +200,7 @@ public class FileManager { try { message = ((Persistable) serializable).toProtobuf(); } catch (Throwable e) { - log.info("Not protobufferable: {} {}", serializable.getClass().getSimpleName(), e.getMessage()); + log.info("Not protobufferable: {}, {}, {}", serializable.getClass().getSimpleName(), storageFile, e.getMessage()); } try { diff --git a/common/src/main/java/io/bisq/common/storage/Storage.java b/common/src/main/java/io/bisq/common/storage/Storage.java index 33e69c265b..909bef3f4f 100644 --- a/common/src/main/java/io/bisq/common/storage/Storage.java +++ b/common/src/main/java/io/bisq/common/storage/Storage.java @@ -17,11 +17,12 @@ package io.bisq.common.storage; +import com.google.inject.Inject; +import io.bisq.common.persistance.ProtobufferResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Nullable; -import javax.inject.Inject; import javax.inject.Named; import java.io.File; import java.io.IOException; @@ -66,6 +67,8 @@ public class Storage { private T serializable; private String fileName; private int numMaxBackupFiles = 10; + @com.google.inject.Inject + private ProtobufferResolver protobufferResolver; /////////////////////////////////////////////////////////////////////////////////////////// @@ -73,21 +76,28 @@ public class Storage { /////////////////////////////////////////////////////////////////////////////////////////// @Inject - public Storage(@Named(DIR_KEY) File dir) { + public Storage(@Named(DIR_KEY) File dir, ProtobufferResolver protobufferResolver) { this.dir = dir; + this.protobufferResolver = protobufferResolver; } + /* + public Storage(@Named(DIR_KEY) File dir) { + this.dir = dir; + this.protobufferResolver = protobufferResolver; + } +*/ public void initWithFileName(String fileName) { this.fileName = fileName; storageFile = new File(dir, fileName); - fileManager = new FileManager<>(dir, storageFile, 300); + fileManager = new FileManager<>(dir, storageFile, 300, protobufferResolver); } @Nullable public T initAndGetPersistedWithFileName(String fileName) { this.fileName = fileName; storageFile = new File(dir, fileName); - fileManager = new FileManager<>(dir, storageFile, 300); + fileManager = new FileManager<>(dir, storageFile, 300, protobufferResolver); return getPersisted(); } @@ -102,7 +112,7 @@ public class Storage { this.serializable = serializable; this.fileName = fileName; storageFile = new File(dir, fileName); - fileManager = new FileManager<>(dir, storageFile, 600); + fileManager = new FileManager<>(dir, storageFile, 600, protobufferResolver); return getPersisted(); } @@ -151,7 +161,7 @@ public class Storage { // Private /////////////////////////////////////////////////////////////////////////////////////////// - // We do the file read on the UI thread to avoid problems from multi threading. + // We do the file read on the UI thread to avoid problems from multi threading. // Data are small and read is done only at startup, so it is no performance issue. @Nullable private T getPersisted() { @@ -161,7 +171,7 @@ public class Storage { T persistedObject = fileManager.read(storageFile); log.trace("Read {} completed in {}msec", storageFile, System.currentTimeMillis() - now); - // If we did not get any exception we can be sure the data are consistent so we make a backup + // If we did not get any exception we can be sure the data are consistent so we make a backup now = System.currentTimeMillis(); fileManager.backupFile(fileName, numMaxBackupFiles); log.trace("Backup {} completed in {}msec", storageFile, System.currentTimeMillis() - now); diff --git a/common/src/main/proto/pb.proto b/common/src/main/proto/pb.proto index 4c4496c2e8..4cf08a1246 100644 --- a/common/src/main/proto/pb.proto +++ b/common/src/main/proto/pb.proto @@ -776,12 +776,16 @@ message AddressEntry { string offer_id = 7; Context context = 8; - bytes pubkey = 9; + bytes pub_key = 9; bytes pub_key_hash = 10; string param_id = 11; Coin coin_locked_in_multi_sig = 12; } +message DeterministicKey { + bytes serialized = 1; +} + message AddressEntryList { repeated AddressEntry address_entry = 1; } diff --git a/common/src/main/resources/logback.xml b/common/src/main/resources/logback.xml index 947dcea773..6ccd337d3e 100644 --- a/common/src/main/resources/logback.xml +++ b/common/src/main/resources/logback.xml @@ -10,8 +10,8 @@ - - + + @@ -165,7 +165,7 @@ com.google.guava guava - 18.0 + 19.0 org.fxmisc.easybind @@ -239,6 +239,12 @@ com.google.protobuf protobuf-java-util 3.2.0 + + + com.google.guava + guava + + test diff --git a/seednode/src/main/java/io/bisq/seednode/SeedNodeModule.java b/seednode/src/main/java/io/bisq/seednode/SeedNodeModule.java index 0d42d641b2..330760a442 100644 --- a/seednode/src/main/java/io/bisq/seednode/SeedNodeModule.java +++ b/seednode/src/main/java/io/bisq/seednode/SeedNodeModule.java @@ -36,7 +36,7 @@ import io.bisq.core.user.Preferences; import io.bisq.core.user.User; import io.bisq.network.crypto.EncryptionServiceModule; import io.bisq.network.p2p.P2PModule; -import io.bisq.network.p2p.network.ProtobufferResolver; +import io.bisq.common.persistance.ProtobufferResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; diff --git a/statistics/src/main/java/io/bisq/statistics/StatisticsModule.java b/statistics/src/main/java/io/bisq/statistics/StatisticsModule.java index 5eaefd5661..b8557daa40 100644 --- a/statistics/src/main/java/io/bisq/statistics/StatisticsModule.java +++ b/statistics/src/main/java/io/bisq/statistics/StatisticsModule.java @@ -36,7 +36,7 @@ import io.bisq.core.user.Preferences; import io.bisq.core.user.User; import io.bisq.network.crypto.EncryptionServiceModule; import io.bisq.network.p2p.P2PModule; -import io.bisq.network.p2p.network.ProtobufferResolver; +import io.bisq.common.persistance.ProtobufferResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment;