From bee9d2c610658887931db969635016e3fb081349 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Mon, 1 Feb 2016 13:26:41 +0100 Subject: [PATCH] Cleanups, improve loggings --- .../io/bitsquare/common/util/Utilities.java | 2 +- .../main/java/io/bitsquare/alert/Alert.java | 3 +- .../io/bitsquare/arbitration/Arbitrator.java | 3 +- .../java/io/bitsquare/btc/WalletService.java | 2 +- .../io/bitsquare/payment/PaymentAccount.java | 8 ++ .../java/io/bitsquare/trade/offer/Offer.java | 3 +- .../java/io/bitsquare/user/Preferences.java | 3 + .../components/paymentmethods/SepaForm.java | 1 + .../PaymentAccountDataModel.java | 1 + .../pendingtrades/steps/StartPaymentView.java | 2 +- .../settings/preferences/PreferencesView.java | 2 +- .../preferences/PreferencesViewModel.java | 9 +- .../io/bitsquare/gui/util/BSFormatter.java | 3 +- .../toronionproxy/OnionProxyManager.java | 10 +- .../src/main/java/io/nucleo/net/Node.java | 2 +- .../io/bitsquare/p2p/network/Connection.java | 20 ++-- .../p2p/peers/PeerExchangeHandshake.java | 78 ++++++------ .../p2p/peers/PeerExchangeManager.java | 25 ++-- .../io/bitsquare/p2p/peers/PeerManager.java | 8 +- .../io/bitsquare/p2p/peers/ReportedPeer.java | 3 +- .../p2p/peers/RequestDataHandshake.java | 112 +++++++++--------- .../p2p/peers/RequestDataManager.java | 19 ++- .../p2p/peers/messages/data/DataRequest.java | 5 - .../peers/messages/data/GetDataRequest.java | 7 ++ ...DataResponse.java => GetDataResponse.java} | 10 +- ...equest.java => GetUpdatedDataRequest.java} | 6 +- ...st.java => PreliminaryGetDataRequest.java} | 6 +- .../bitsquare/p2p/storage/P2PDataStorage.java | 2 +- .../storage/data/ExpirableMailboxPayload.java | 3 +- .../p2p/storage/ProtectedDataStorageTest.java | 3 +- 30 files changed, 200 insertions(+), 161 deletions(-) delete mode 100644 network/src/main/java/io/bitsquare/p2p/peers/messages/data/DataRequest.java create mode 100644 network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetDataRequest.java rename network/src/main/java/io/bitsquare/p2p/peers/messages/data/{DataResponse.java => GetDataResponse.java} (80%) rename network/src/main/java/io/bitsquare/p2p/peers/messages/data/{UpdateDataRequest.java => GetUpdatedDataRequest.java} (82%) rename network/src/main/java/io/bitsquare/p2p/peers/messages/data/{PreliminaryDataRequest.java => PreliminaryGetDataRequest.java} (79%) diff --git a/common/src/main/java/io/bitsquare/common/util/Utilities.java b/common/src/main/java/io/bitsquare/common/util/Utilities.java index e02b75b352..785ca2d5e6 100644 --- a/common/src/main/java/io/bitsquare/common/util/Utilities.java +++ b/common/src/main/java/io/bitsquare/common/util/Utilities.java @@ -354,7 +354,7 @@ public class Utilities { URLConnection connection = URI.create(url).toURL().openConnection(); connection.setDoOutput(true); connection.setUseCaches(false); - connection.setConnectTimeout(10 * 1000); + connection.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(10)); connection.addRequestProperty("User-Agent", userAgent); connection.connect(); try (InputStream inputStream = connection.getInputStream()) { diff --git a/core/src/main/java/io/bitsquare/alert/Alert.java b/core/src/main/java/io/bitsquare/alert/Alert.java index c075e36d67..b0a89f2122 100644 --- a/core/src/main/java/io/bitsquare/alert/Alert.java +++ b/core/src/main/java/io/bitsquare/alert/Alert.java @@ -21,12 +21,13 @@ import io.bitsquare.app.Version; import io.bitsquare.p2p.storage.data.PubKeyProtectedExpirablePayload; import java.security.PublicKey; +import java.util.concurrent.TimeUnit; public final class Alert implements PubKeyProtectedExpirablePayload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.NETWORK_PROTOCOL_VERSION; - private static final long TTL = 10 * 24 * 60 * 60 * 1000; // 10 days + private static final long TTL = TimeUnit.DAYS.toMillis(10); public final String message; private String signatureAsBase64; diff --git a/core/src/main/java/io/bitsquare/arbitration/Arbitrator.java b/core/src/main/java/io/bitsquare/arbitration/Arbitrator.java index 90c89290e6..0b729457e0 100644 --- a/core/src/main/java/io/bitsquare/arbitration/Arbitrator.java +++ b/core/src/main/java/io/bitsquare/arbitration/Arbitrator.java @@ -26,12 +26,13 @@ import java.security.PublicKey; import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.concurrent.TimeUnit; public final class Arbitrator implements PubKeyProtectedExpirablePayload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.NETWORK_PROTOCOL_VERSION; - public static final long TTL = 10 * 24 * 60 * 60 * 1000; // 10 days + public static final long TTL = TimeUnit.DAYS.toMillis(10); // Persisted fields private final byte[] btcPubKey; diff --git a/core/src/main/java/io/bitsquare/btc/WalletService.java b/core/src/main/java/io/bitsquare/btc/WalletService.java index 70454e62a3..2e65ac3555 100644 --- a/core/src/main/java/io/bitsquare/btc/WalletService.java +++ b/core/src/main/java/io/bitsquare/btc/WalletService.java @@ -117,7 +117,7 @@ public class WalletService { Threading.USER_THREAD = UserThread.getExecutor(); Timer timeoutTimer = UserThread.runAfter(() -> { - exceptionHandler.handleException(new TimeoutException("Wallet did not initialize in " + STARTUP_TIMEOUT_SEC / 1000 + " seconds.")); + exceptionHandler.handleException(new TimeoutException("Wallet did not initialize in " + STARTUP_TIMEOUT_SEC + " seconds.")); }, STARTUP_TIMEOUT_SEC); // If seed is non-null it means we are restoring from backup. diff --git a/core/src/main/java/io/bitsquare/payment/PaymentAccount.java b/core/src/main/java/io/bitsquare/payment/PaymentAccount.java index ee9f68efcd..3b921de2f8 100644 --- a/core/src/main/java/io/bitsquare/payment/PaymentAccount.java +++ b/core/src/main/java/io/bitsquare/payment/PaymentAccount.java @@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory; import javax.annotation.Nullable; import java.io.Serializable; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.UUID; @@ -36,6 +37,7 @@ public class PaymentAccount implements Serializable { private static final Logger log = LoggerFactory.getLogger(PaymentAccount.class); protected final String id; + protected final Date creationDate; protected final PaymentMethod paymentMethod; protected String accountName; protected final List tradeCurrencies = new ArrayList<>(); @@ -53,6 +55,7 @@ public class PaymentAccount implements Serializable { public PaymentAccount(PaymentMethod paymentMethod) { this.paymentMethod = paymentMethod; id = UUID.randomUUID().toString(); + creationDate = new Date(); } @@ -147,6 +150,10 @@ public class PaymentAccount implements Serializable { return contractData.getMaxTradePeriod(); } + public Date getCreationDate() { + return creationDate; + } + /////////////////////////////////////////////////////////////////////////////////////////// // Util @@ -157,6 +164,7 @@ public class PaymentAccount implements Serializable { return contractData.toString() + '\'' + "PaymentAccount{" + "id='" + id + '\'' + + ", creationDate=" + creationDate + ", paymentMethod=" + paymentMethod + ", accountName='" + accountName + '\'' + ", tradeCurrencies=" + tradeCurrencies + diff --git a/core/src/main/java/io/bitsquare/trade/offer/Offer.java b/core/src/main/java/io/bitsquare/trade/offer/Offer.java index 61950ac916..e0d72bf574 100644 --- a/core/src/main/java/io/bitsquare/trade/offer/Offer.java +++ b/core/src/main/java/io/bitsquare/trade/offer/Offer.java @@ -41,6 +41,7 @@ import java.io.IOException; import java.security.PublicKey; import java.util.Date; import java.util.List; +import java.util.concurrent.TimeUnit; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; @@ -52,7 +53,7 @@ public final class Offer implements PubKeyProtectedExpirablePayload { @JsonExclude private static final Logger log = LoggerFactory.getLogger(Offer.class); - public static final long TTL = 10 * 60 * 1000; // 10 min. + public static final long TTL = TimeUnit.MINUTES.toMillis(10); public final static String TAC_OFFERER = "When placing that offer I accept that anyone who fulfills my conditions can " + "take that offer."; public static final String TAC_TAKER = "With taking the offer I commit to the trade conditions as defined."; diff --git a/core/src/main/java/io/bitsquare/user/Preferences.java b/core/src/main/java/io/bitsquare/user/Preferences.java index 0c763ff3e1..a15493a0df 100644 --- a/core/src/main/java/io/bitsquare/user/Preferences.java +++ b/core/src/main/java/io/bitsquare/user/Preferences.java @@ -286,6 +286,9 @@ public class Preferences implements Serializable { if (txFeePerKB < Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.value) throw new Exception("Transaction fee must be at least 5 satoshi/byte"); + if (txFeePerKB < Transaction.REFERENCE_DEFAULT_MIN_TX_FEE.value) + throw new Exception("Transaction fee must be at least 5 satoshi/byte"); + this.txFeePerKB = txFeePerKB; FeePolicy.setFeePerKb(Coin.valueOf(txFeePerKB)); storage.queueUpForSave(); diff --git a/gui/src/main/java/io/bitsquare/gui/components/paymentmethods/SepaForm.java b/gui/src/main/java/io/bitsquare/gui/components/paymentmethods/SepaForm.java index bf8f0a1c84..87c3dd400b 100644 --- a/gui/src/main/java/io/bitsquare/gui/components/paymentmethods/SepaForm.java +++ b/gui/src/main/java/io/bitsquare/gui/components/paymentmethods/SepaForm.java @@ -59,6 +59,7 @@ public class SepaForm extends PaymentMethodForm { public static int addFormForBuyer(GridPane gridPane, int gridRow, PaymentAccountContractData paymentAccountContractData) { addLabelTextField(gridPane, ++gridRow, "Payment method:", BSResources.get(paymentAccountContractData.getPaymentMethodName())); addLabelTextFieldWithCopyIcon(gridPane, ++gridRow, "Account holder name:", ((SepaAccountContractData) paymentAccountContractData).getHolderName()); + addLabelTextFieldWithCopyIcon(gridPane, ++gridRow, "Country of bank:", CountryUtil.getNameByCode(paymentAccountContractData.getCountryCode())); addLabelTextFieldWithCopyIcon(gridPane, ++gridRow, "IBAN:", ((SepaAccountContractData) paymentAccountContractData).getIban()); addLabelTextFieldWithCopyIcon(gridPane, ++gridRow, "BIC/SWIFT:", ((SepaAccountContractData) paymentAccountContractData).getBic()); addAllowedPeriod(gridPane, ++gridRow, paymentAccountContractData); diff --git a/gui/src/main/java/io/bitsquare/gui/main/account/content/paymentsaccount/PaymentAccountDataModel.java b/gui/src/main/java/io/bitsquare/gui/main/account/content/paymentsaccount/PaymentAccountDataModel.java index 9022b2b5a7..b8a3702e41 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/account/content/paymentsaccount/PaymentAccountDataModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/account/content/paymentsaccount/PaymentAccountDataModel.java @@ -45,6 +45,7 @@ class PaymentAccountDataModel extends ActivatableDataModel { private void fillAndSortPaymentAccounts() { paymentAccounts.setAll(user.getPaymentAccounts()); + paymentAccounts.sort((o1, o2) -> o1.getCreationDate().compareTo(o2.getCreationDate())); } @Override diff --git a/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/steps/StartPaymentView.java b/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/steps/StartPaymentView.java index 3924132d8b..6a8a061917 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/steps/StartPaymentView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/steps/StartPaymentView.java @@ -169,7 +169,7 @@ public class StartPaymentView extends TradeStepDetailsView { statusProgressIndicator.setProgress(-1); statusLabel.setWrapText(true); - statusLabel.setPrefWidth(220); + statusLabel.setPrefWidth(160); statusLabel.setText("Sending message to your trading partner.\n" + "Please wait until you get the confirmation that the message has arrived."); diff --git a/gui/src/main/java/io/bitsquare/gui/main/settings/preferences/PreferencesView.java b/gui/src/main/java/io/bitsquare/gui/main/settings/preferences/PreferencesView.java index f4377fa25a..63fa444398 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/settings/preferences/PreferencesView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/settings/preferences/PreferencesView.java @@ -63,7 +63,7 @@ public class PreferencesView extends ActivatableViewAndModel { - model.onFocusOutTransactionFeeTextField(oldValue, newValue, transactionFeeInputTextField.getText()); + model.onFocusOutTransactionFeeTextField(oldValue, newValue); }; addTitledGroupBg(root, ++gridRow, 5, "Display options", Layout.GROUP_DISTANCE); diff --git a/gui/src/main/java/io/bitsquare/gui/main/settings/preferences/PreferencesViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/settings/preferences/PreferencesViewModel.java index a20a8bbdd4..1dd21560ce 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/settings/preferences/PreferencesViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/settings/preferences/PreferencesViewModel.java @@ -58,7 +58,7 @@ class PreferencesViewModel extends ActivatableViewModel { @Override protected void activate() { - transactionFeePerByte.set(String.valueOf(preferences.getTxFeePerKB() / 1000)); + transactionFeePerByte.set(String.valueOf(preferences.getTxFeePerKB() / 1024)); } @Override @@ -105,14 +105,15 @@ class PreferencesViewModel extends ActivatableViewModel { preferences.setPreferredLocale(new Locale(code, preferences.getPreferredLocale().getCountry())); } - public void onFocusOutTransactionFeeTextField(Boolean oldValue, Boolean newValue, String text) { + public void onFocusOutTransactionFeeTextField(Boolean oldValue, Boolean newValue) { if (oldValue && !newValue) { try { - preferences.setTxFeePerKB(Long.valueOf(transactionFeePerByte.get()) * 1000); + preferences.setTxFeePerKB(Long.parseLong(transactionFeePerByte.get()) * 1024); } catch (Exception e) { + log.warn("Error at onFocusOutTransactionFeeTextField: " + e.getMessage()); new Popup().warning(e.getMessage()) .onClose(() -> UserThread.runAfter( - () -> transactionFeePerByte.set(String.valueOf(preferences.getTxFeePerKB() / 1000)), + () -> transactionFeePerByte.set(String.valueOf(preferences.getTxFeePerKB() / 1024)), 100, TimeUnit.MILLISECONDS)) .show(); } diff --git a/gui/src/main/java/io/bitsquare/gui/util/BSFormatter.java b/gui/src/main/java/io/bitsquare/gui/util/BSFormatter.java index 52296d8dc2..1ee42e0b74 100644 --- a/gui/src/main/java/io/bitsquare/gui/util/BSFormatter.java +++ b/gui/src/main/java/io/bitsquare/gui/util/BSFormatter.java @@ -36,6 +36,7 @@ import java.text.DecimalFormat; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; public class BSFormatter { @@ -340,7 +341,7 @@ public class BSFormatter { public String getDateFromBlocks(long blocks) { DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, locale); DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT, locale); - Date date = new Date(new Date().getTime() + blocks * 10 * 60 * 1000); + Date date = new Date(new Date().getTime() + blocks * TimeUnit.MINUTES.toMillis(10)); return dateFormatter.format(date) + " " + timeFormatter.format(date); } diff --git a/jtorproxy/src/main/java/com/msopentech/thali/toronionproxy/OnionProxyManager.java b/jtorproxy/src/main/java/com/msopentech/thali/toronionproxy/OnionProxyManager.java index cc5a41e1b8..5d43d97cce 100644 --- a/jtorproxy/src/main/java/com/msopentech/thali/toronionproxy/OnionProxyManager.java +++ b/jtorproxy/src/main/java/com/msopentech/thali/toronionproxy/OnionProxyManager.java @@ -43,7 +43,7 @@ import java.nio.file.attribute.PosixFilePermission; import java.util.*; import java.util.concurrent.CountDownLatch; -import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.util.concurrent.TimeUnit.SECONDS; /** * This is where all the fun is, this is the class that handles the heavy work. @@ -62,8 +62,8 @@ public abstract class OnionProxyManager { private static final String[] EVENTS_HS = {"EXTENDED", "CIRC", "ORCONN", "INFO", "NOTICE", "WARN", "ERR", "HS_DESC"}; private static final String OWNER = "__OwningControllerProcess"; - private static final int COOKIE_TIMEOUT = 3 * 1000; // Milliseconds - private static final int HOSTNAME_TIMEOUT = 30 * 1000; // Milliseconds + private static final long COOKIE_TIMEOUT_IN_SEC = 10; + private static final long HOSTNAME_TIMEOUT_IN_SEC = 30; private static final Logger LOG = LoggerFactory.getLogger(OnionProxyManager.class); protected final OnionProxyContext onionProxyContext; @@ -247,7 +247,7 @@ public abstract class OnionProxyManager { controlConnection.setConf(config); controlConnection.saveConf(); // Wait for the hostname file to be created/updated - if (!hostNameFileObserver.poll(HOSTNAME_TIMEOUT, MILLISECONDS)) { + if (!hostNameFileObserver.poll(HOSTNAME_TIMEOUT_IN_SEC, SECONDS)) { FileUtilities.listFilesToLog(hostnameFile.getParentFile()); throw new RuntimeException("Wait for hidden service hostname file to be created expired."); } @@ -455,7 +455,7 @@ public abstract class OnionProxyManager { } // Wait for the auth cookie file to be created/updated - if (!cookieObserver.poll(COOKIE_TIMEOUT, MILLISECONDS)) { + if (!cookieObserver.poll(COOKIE_TIMEOUT_IN_SEC, SECONDS)) { LOG.warn("Auth cookie not created"); FileUtilities.listFilesToLog(workingDirectory); return false; diff --git a/jtorproxy/src/main/java/io/nucleo/net/Node.java b/jtorproxy/src/main/java/io/nucleo/net/Node.java index 01b92343ba..26e9afb564 100644 --- a/jtorproxy/src/main/java/io/nucleo/net/Node.java +++ b/jtorproxy/src/main/java/io/nucleo/net/Node.java @@ -219,7 +219,7 @@ public class Node { public void run() { { try { - socket.setSoTimeout(60 * 1000); + socket.setSoTimeout((int) TimeUnit.SECONDS.toMillis(60)); } catch (SocketException e2) { e2.printStackTrace(); try { diff --git a/network/src/main/java/io/bitsquare/p2p/network/Connection.java b/network/src/main/java/io/bitsquare/p2p/network/Connection.java index 25ce057f98..7bc331ca1b 100644 --- a/network/src/main/java/io/bitsquare/p2p/network/Connection.java +++ b/network/src/main/java/io/bitsquare/p2p/network/Connection.java @@ -39,7 +39,7 @@ public class Connection implements MessageListener { private static final int MSG_THROTTLE_PER_SEC = 10; // With MAX_MSG_SIZE of 100kb results in bandwidth of 10 mbit/sec private static final int MSG_THROTTLE_PER_10SEC = 50; // With MAX_MSG_SIZE of 100kb results in bandwidth of 5 mbit/sec for 10 sec //timeout on blocking Socket operations like ServerSocket.accept() or SocketInputStream.read() - private static final int SOCKET_TIMEOUT = 30 * 60 * 1000; // 30 min. + private static final int SOCKET_TIMEOUT = (int) TimeUnit.MINUTES.toMillis(30); public static int getMaxMsgSize() { return MAX_MSG_SIZE; @@ -205,16 +205,20 @@ public class Connection implements MessageListener { long now = System.currentTimeMillis(); boolean violated = false; if (messageTimeStamps.size() >= MSG_THROTTLE_PER_SEC) { - // check if we got more than 10 msg per sec. - long compareTo = messageTimeStamps.get(messageTimeStamps.size() - MSG_THROTTLE_PER_SEC); - violated = now - compareTo < 1000; + // check if we got more than 10 (MSG_THROTTLE_PER_SEC) msg per sec. + long compareValue = messageTimeStamps.get(messageTimeStamps.size() - MSG_THROTTLE_PER_SEC); + // if duration < 1 sec we received too much messages + violated = now - compareValue < TimeUnit.SECONDS.toMillis(1); } if (messageTimeStamps.size() >= MSG_THROTTLE_PER_10SEC) { - // check if we got more than 50 msg per 10 sec. - long compareTo = messageTimeStamps.get(messageTimeStamps.size() - MSG_THROTTLE_PER_10SEC); - violated = violated || now - compareTo < 10000; - // we limit to max 50 entries + if (!violated) { + // check if we got more than 50 msg per 10 sec. + long compareValue = messageTimeStamps.get(messageTimeStamps.size() - MSG_THROTTLE_PER_10SEC); + // if duration < 10 sec we received too much messages + violated = now - compareValue < TimeUnit.SECONDS.toMillis(10); + } + // we limit to max 50 (MSG_THROTTLE_PER_10SEC) entries messageTimeStamps.remove(0); } diff --git a/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeHandshake.java b/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeHandshake.java index 324d89afe0..5c38c9da10 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeHandshake.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeHandshake.java @@ -17,7 +17,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashSet; -import java.util.List; import java.util.Random; import java.util.Timer; import java.util.concurrent.TimeUnit; @@ -73,24 +72,12 @@ public class PeerExchangeHandshake implements MessageListener { // API /////////////////////////////////////////////////////////////////////////////////////////// - public void requestReportedPeers(NodeAddress nodeAddress, List remainingNodeAddresses) { - Log.traceCall("nodeAddress=" + nodeAddress); - Log.traceCall("this=" + this); - checkNotNull(networkNode.getNodeAddress(), "My node address must not be null at requestReportedPeers"); - checkArgument(timeoutTimer == null, "requestData must not be called twice."); - - timeoutTimer = UserThread.runAfter(() -> { - log.info("timeoutTimer called on " + this); - peerManager.shutDownConnection(nodeAddress); - shutDown(); - listener.onFault("A timeout occurred"); - }, - 20, TimeUnit.SECONDS); - - GetPeersRequest getPeersRequest = new GetPeersRequest(networkNode.getNodeAddress(), nonce, - getReportedPeers(nodeAddress)); - SettableFuture future = networkNode.sendMessage(nodeAddress, - getPeersRequest); + public void requestReportedPeers(NodeAddress nodeAddress) { + Log.traceCall("nodeAddress=" + nodeAddress + " / this=" + this); + checkNotNull(networkNode.getNodeAddress(), "PeerExchangeHandshake.requestReportedPeers: My node address must " + + "not be null at requestReportedPeers"); + GetPeersRequest getPeersRequest = new GetPeersRequest(networkNode.getNodeAddress(), nonce, getReportedPeers(nodeAddress)); + SettableFuture future = networkNode.sendMessage(nodeAddress, getPeersRequest); Futures.addCallback(future, new FutureCallback() { @Override public void onSuccess(Connection connection) { @@ -100,8 +87,8 @@ public class PeerExchangeHandshake implements MessageListener { @Override public void onFailure(@NotNull Throwable throwable) { String errorMessage = "Sending getPeersRequest to " + nodeAddress + - " failed. That is expected if the peer is offline. getPeersRequest=" + getPeersRequest + "." + - "Exception: " + throwable.getMessage(); + " failed. That is expected if the peer is offline.\ngetPeersRequest=" + getPeersRequest + + ".\nException=" + throwable.getMessage(); log.info(errorMessage); peerManager.shutDownConnection(nodeAddress); @@ -109,31 +96,37 @@ public class PeerExchangeHandshake implements MessageListener { listener.onFault(errorMessage); } }); - } - public void onGetPeersRequest(GetPeersRequest message, final Connection connection) { - Log.traceCall("message=" + message); - Log.traceCall("this=" + this); - checkArgument(timeoutTimer == null, "requestData must not be called twice."); + checkArgument(timeoutTimer == null, "requestReportedPeers must not be called twice."); timeoutTimer = UserThread.runAfter(() -> { + String errorMessage = "A timeout occurred at sending getPeersRequest:" + getPeersRequest + " for nodeAddress:" + nodeAddress; + log.info(errorMessage + " / PeerExchangeHandshake=" + + PeerExchangeHandshake.this); + log.info("timeoutTimer called on " + this); - peerManager.shutDownConnection(connection); + peerManager.shutDownConnection(nodeAddress); shutDown(); - listener.onFault("A timeout occurred"); + listener.onFault(errorMessage); }, 20, TimeUnit.SECONDS); + } + + public void onGetPeersRequest(GetPeersRequest getPeersRequest, final Connection connection) { + Log.traceCall("getPeersRequest=" + getPeersRequest + " / connection=" + connection + " / this=" + this); - GetPeersRequest getPeersRequest = message; HashSet reportedPeers = getPeersRequest.reportedPeers; - StringBuilder result = new StringBuilder("Received peers:"); + + /* StringBuilder result = new StringBuilder("Received peers:"); reportedPeers.stream().forEach(e -> result.append("\n").append(e)); - log.trace(result.toString()); + log.trace(result.toString());*/ + log.trace("reportedPeers.size=" + reportedPeers.size()); checkArgument(connection.getPeersNodeAddressOptional().isPresent(), "The peers address must have been already set at the moment"); + GetPeersResponse getPeersResponse = new GetPeersResponse(getPeersRequest.nonce, + getReportedPeers(connection.getPeersNodeAddressOptional().get())); SettableFuture future = networkNode.sendMessage(connection, - new GetPeersResponse(getPeersRequest.nonce, - getReportedPeers(connection.getPeersNodeAddressOptional().get()))); + getPeersResponse); Futures.addCallback(future, new FutureCallback() { @Override public void onSuccess(Connection connection) { @@ -154,6 +147,20 @@ public class PeerExchangeHandshake implements MessageListener { listener.onFault(errorMessage); } }); + + checkArgument(timeoutTimer == null, "onGetPeersRequest must not be called twice."); + timeoutTimer = UserThread.runAfter(() -> { + String errorMessage = "A timeout occurred at sending getPeersResponse:" + getPeersResponse + " on connection:" + connection; + log.info(errorMessage + " / PeerExchangeHandshake=" + + PeerExchangeHandshake.this); + + log.info("timeoutTimer called. this=" + this); + peerManager.shutDownConnection(connection); + shutDown(); + listener.onFault(errorMessage); + }, + 20, TimeUnit.SECONDS); + peerManager.addToReportedPeers(reportedPeers, connection); } @@ -180,8 +187,9 @@ public class PeerExchangeHandshake implements MessageListener { shutDown(); listener.onComplete(); } else { - log.debug("Nonce not matching. That happens if we get a response after a canceled handshake " + - "(timeout). We drop that message. nonce={} / requestNonce={}", + log.debug("Nonce not matching. That can happen rarely if we get a response after a canceled handshake " + + "(timeout causes connection close but peer might have sent a msg before connection " + + "was closed).\nWe drop that message. nonce={} / requestNonce={}", nonce, getPeersResponse.requestNonce); } } diff --git a/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeManager.java b/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeManager.java index 018802fa53..4b0c215ef2 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeManager.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeManager.java @@ -108,14 +108,13 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener new PeerExchangeHandshake.Listener() { @Override public void onComplete() { - log.trace("PeerExchangeHandshake of inbound connection complete. Connection= {}", - connection); + log.trace("PeerExchangeHandshake of inbound connection complete. Connection={}", connection); } @Override public void onFault(String errorMessage) { - log.trace("PeerExchangeHandshake of outbound connection failed. {} connection= {}", - errorMessage, connection); + log.trace("PeerExchangeHandshake of outbound connection failed.\nerrorMessage={}\n" + + "connection={}", errorMessage, connection); peerManager.penalizeUnreachablePeer(connection); } }); @@ -136,16 +135,15 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener new PeerExchangeHandshake.Listener() { @Override public void onComplete() { - log.trace("PeerExchangeHandshake of outbound connection complete. nodeAddress= {}", - nodeAddress); + log.trace("PeerExchangeHandshake of outbound connection complete. nodeAddress={}", nodeAddress); peerExchangeHandshakeMap.remove(nodeAddress); connectToMorePeers(); } @Override public void onFault(String errorMessage) { - log.trace("PeerExchangeHandshake of outbound connection failed. {} nodeAddress= {}", - errorMessage, nodeAddress); + log.trace("PeerExchangeHandshake of outbound connection failed.\nerrorMessage={}\n" + + "nodeAddress={}", errorMessage, nodeAddress); peerExchangeHandshakeMap.remove(nodeAddress); peerManager.penalizeUnreachablePeer(nodeAddress); @@ -164,10 +162,11 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener } }); peerExchangeHandshakeMap.put(nodeAddress, peerExchangeHandshake); - peerExchangeHandshake.requestReportedPeers(nodeAddress, remainingNodeAddresses); + peerExchangeHandshake.requestReportedPeers(nodeAddress); } else { - log.trace("We have started already a peerExchangeHandshake to peer. " + - "That can happen by the timers calls. We ignore that call. " + + //TODO check when that happens + log.warn("We have started already a peerExchangeHandshake. " + + "We ignore that call. " + "nodeAddress=" + nodeAddress); } } @@ -204,9 +203,9 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener confirmedConnections.stream() .filter(c -> c.getPeersNodeAddressOptional().isPresent() && c instanceof OutboundConnection && - new Date().getTime() - c.getLastActivityDate().getTime() > 10 * 60 * 1000) + new Date().getTime() - c.getLastActivityDate().getTime() > TimeUnit.MINUTES.toMillis(10)) .forEach(c -> { - log.trace("Call requestReportedPeers from maintainConnections"); + log.trace("Call requestReportedPeers on a confirmedConnection by the maintainConnections call"); requestReportedPeers(c.getPeersNodeAddressOptional().get(), new ArrayList<>()); }); } diff --git a/network/src/main/java/io/bitsquare/p2p/peers/PeerManager.java b/network/src/main/java/io/bitsquare/p2p/peers/PeerManager.java index aec1a374ba..9beaeffbac 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/PeerManager.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/PeerManager.java @@ -5,7 +5,7 @@ import io.bitsquare.common.UserThread; import io.bitsquare.p2p.Message; import io.bitsquare.p2p.NodeAddress; import io.bitsquare.p2p.network.*; -import io.bitsquare.p2p.peers.messages.data.UpdateDataRequest; +import io.bitsquare.p2p.peers.messages.data.GetUpdatedDataRequest; import io.bitsquare.storage.Storage; import javafx.beans.value.ChangeListener; import org.slf4j.Logger; @@ -13,6 +13,7 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -43,8 +44,7 @@ public class PeerManager implements ConnectionListener, MessageListener { private static final int MAX_REPORTED_PEERS = 1000; private static final int MAX_PERSISTED_PEERS = 500; - private static final long DAY = 24 * 60 * 60 * 1000; // max age for reported peers is 14 days - private static final long MAX_AGE = 14 * DAY; // max age for reported peers is 14 days + private static final long MAX_AGE = TimeUnit.DAYS.toMillis(14); // max age for reported peers is 14 days private final NetworkNode networkNode; @@ -138,7 +138,7 @@ public class PeerManager implements ConnectionListener, MessageListener { public void onMessage(Message message, Connection connection) { // In case a seed node connects to another seed node we get his address at the DataRequest triggered from // RequestDataManager.updateDataFromConnectedSeedNode - if (message instanceof UpdateDataRequest) { + if (message instanceof GetUpdatedDataRequest) { Optional peersNodeAddressOptional = connection.getPeersNodeAddressOptional(); if (peersNodeAddressOptional.isPresent() && seedNodeAddresses.contains(peersNodeAddressOptional.get())) diff --git a/network/src/main/java/io/bitsquare/p2p/peers/ReportedPeer.java b/network/src/main/java/io/bitsquare/p2p/peers/ReportedPeer.java index a81478da41..e21da1b311 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/ReportedPeer.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/ReportedPeer.java @@ -5,6 +5,7 @@ import io.bitsquare.p2p.NodeAddress; import java.io.Serializable; import java.util.Date; +import java.util.concurrent.TimeUnit; public class ReportedPeer implements Serializable { // That object is sent over the wire, so we need to take care of version compatibility. @@ -21,7 +22,7 @@ public class ReportedPeer implements Serializable { public void penalizeLastActivityDate() { if (lastActivityDate != null) { long now = new Date().getTime(); - long diff = Math.max(24 * 60 * 60 * 1000, now - lastActivityDate.getTime()); + long diff = Math.max(TimeUnit.DAYS.toMillis(1), now - lastActivityDate.getTime()); long reduced = now - diff * 2; lastActivityDate = new Date(reduced); } diff --git a/network/src/main/java/io/bitsquare/p2p/peers/RequestDataHandshake.java b/network/src/main/java/io/bitsquare/p2p/peers/RequestDataHandshake.java index ee71870aff..c4fdef3c9d 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/RequestDataHandshake.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/RequestDataHandshake.java @@ -10,10 +10,10 @@ import io.bitsquare.p2p.NodeAddress; import io.bitsquare.p2p.network.Connection; import io.bitsquare.p2p.network.MessageListener; import io.bitsquare.p2p.network.NetworkNode; -import io.bitsquare.p2p.peers.messages.data.DataRequest; -import io.bitsquare.p2p.peers.messages.data.DataResponse; -import io.bitsquare.p2p.peers.messages.data.PreliminaryDataRequest; -import io.bitsquare.p2p.peers.messages.data.UpdateDataRequest; +import io.bitsquare.p2p.peers.messages.data.GetDataRequest; +import io.bitsquare.p2p.peers.messages.data.GetDataResponse; +import io.bitsquare.p2p.peers.messages.data.GetUpdatedDataRequest; +import io.bitsquare.p2p.peers.messages.data.PreliminaryGetDataRequest; import io.bitsquare.p2p.storage.P2PDataStorage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -80,73 +80,66 @@ public class RequestDataHandshake implements MessageListener { public void requestData(NodeAddress nodeAddress) { Log.traceCall("nodeAddress=" + nodeAddress); - checkArgument(timeoutTimer == null, "requestData must not be called twice."); - - timeoutTimer = UserThread.runAfter(() -> { - log.info("timeoutTimer called"); - peerManager.shutDownConnection(nodeAddress); - shutDown(); - listener.onFault("A timeout occurred"); - }, - 10, TimeUnit.SECONDS); - - Message dataRequest; + GetDataRequest getDataRequest; if (networkNode.getNodeAddress() == null) - dataRequest = new PreliminaryDataRequest(nonce); + getDataRequest = new PreliminaryGetDataRequest(nonce); else - dataRequest = new UpdateDataRequest(networkNode.getNodeAddress(), nonce); + getDataRequest = new GetUpdatedDataRequest(networkNode.getNodeAddress(), nonce); - log.info("We send a {} to peer {}. ", dataRequest.getClass().getSimpleName(), nodeAddress); + log.info("We send a {} to peer {}. ", getDataRequest.getClass().getSimpleName(), nodeAddress); - SettableFuture future = networkNode.sendMessage(nodeAddress, dataRequest); + SettableFuture future = networkNode.sendMessage(nodeAddress, getDataRequest); Futures.addCallback(future, new FutureCallback() { @Override public void onSuccess(@Nullable Connection connection) { - log.trace("Send " + dataRequest + " to " + nodeAddress + " succeeded."); + log.trace("Send " + getDataRequest + " to " + nodeAddress + " succeeded."); } @Override public void onFailure(@NotNull Throwable throwable) { - String errorMessage = "Sending dataRequest to " + nodeAddress + - " failed. That is expected if the peer is offline. dataRequest=" + dataRequest + "." + - "Exception: " + throwable.getMessage(); + String errorMessage = "Sending getDataRequest to " + nodeAddress + + " failed. That is expected if the peer is offline.\n" + + "getDataRequest=" + getDataRequest + "." + + "\nException=" + throwable.getMessage(); log.info(errorMessage); - peerManager.shutDownConnection(nodeAddress); shutDown(); listener.onFault(errorMessage); } }); + + checkArgument(timeoutTimer == null, "requestData must not be called twice."); + timeoutTimer = UserThread.runAfter(() -> { + String errorMessage = "A timeout occurred at sending getDataRequest:" + getDataRequest + + " on nodeAddress:" + nodeAddress; + log.info(errorMessage + " / RequestDataHandshake=" + + RequestDataHandshake.this); + peerManager.shutDownConnection(nodeAddress); + shutDown(); + listener.onFault(errorMessage); + }, + 10, TimeUnit.SECONDS); } public void onDataRequest(Message message, final Connection connection) { Log.traceCall(message.toString() + " / connection=" + connection); - checkArgument(timeoutTimer == null, "requestData must not be called twice."); - timeoutTimer = UserThread.runAfter(() -> { - log.info("timeoutTimer called"); - peerManager.shutDownConnection(connection); - shutDown(); - listener.onFault("A timeout occurred"); - }, - 10, TimeUnit.SECONDS); - - DataRequest dataRequest = (DataRequest) message; - DataResponse dataResponse = new DataResponse(new HashSet<>(dataStorage.getMap().values()), dataRequest.getNonce()); - SettableFuture future = networkNode.sendMessage(connection, dataResponse); + GetDataResponse getDataResponse = new GetDataResponse(new HashSet<>(dataStorage.getMap().values()), + ((GetDataRequest) message).getNonce()); + SettableFuture future = networkNode.sendMessage(connection, getDataResponse); Futures.addCallback(future, new FutureCallback() { @Override public void onSuccess(Connection connection) { - log.trace("Send DataResponse to {} succeeded. dataResponse={}", - connection.getPeersNodeAddressOptional(), dataResponse); + log.trace("Send DataResponse to {} succeeded. getDataResponse={}", + connection.getPeersNodeAddressOptional(), getDataResponse); shutDown(); listener.onComplete(); } @Override public void onFailure(@NotNull Throwable throwable) { - String errorMessage = "Sending dataRequest to " + connection + - " failed. That is expected if the peer is offline. dataRequest=" + dataRequest + "." + + String errorMessage = "Sending getDataRequest to " + connection + + " failed. That is expected if the peer is offline. getDataResponse=" + getDataResponse + "." + "Exception: " + throwable.getMessage(); log.info(errorMessage); @@ -155,6 +148,18 @@ public class RequestDataHandshake implements MessageListener { listener.onFault(errorMessage); } }); + + checkArgument(timeoutTimer == null, "requestData must not be called twice."); + timeoutTimer = UserThread.runAfter(() -> { + String errorMessage = "A timeout occurred for getDataResponse:" + getDataResponse + + " on connection:" + connection; + log.info(errorMessage + " / RequestDataHandshake=" + + RequestDataHandshake.this); + peerManager.shutDownConnection(connection); + shutDown(); + listener.onFault(errorMessage); + }, + 10, TimeUnit.SECONDS); } /////////////////////////////////////////////////////////////////////////////////////////// @@ -163,25 +168,26 @@ public class RequestDataHandshake implements MessageListener { @Override public void onMessage(Message message, Connection connection) { - if (message instanceof DataResponse) { + if (message instanceof GetDataResponse) { Log.traceCall(message.toString() + " / connection=" + connection); - DataResponse dataResponse = (DataResponse) message; - if (dataResponse.requestNonce == nonce) { + GetDataResponse getDataResponse = (GetDataResponse) message; + if (getDataResponse.requestNonce == nonce) { stopTimeoutTimer(); - - // connection.getPeersNodeAddressOptional() is not present at the first call - log.debug("connection.getPeersNodeAddressOptional() " + connection.getPeersNodeAddressOptional()); - connection.getPeersNodeAddressOptional().ifPresent(peersNodeAddress -> { - ((DataResponse) message).dataSet.stream() - .forEach(e -> dataStorage.add(e, peersNodeAddress)); - }); + checkArgument(connection.getPeersNodeAddressOptional().isPresent(), + "RequestDataHandshake.onMessage: connection.getPeersNodeAddressOptional() must be present " + + "at that moment"); + ((GetDataResponse) message).dataSet.stream() + .forEach(protectedData -> dataStorage.add(protectedData, + connection.getPeersNodeAddressOptional().get())); shutDown(); listener.onComplete(); } else { - log.debug("Nonce not matching. That happens if we get a response after a canceled handshake " + - "(timeout). We drop that message. nonce={} / requestNonce={}", - nonce, dataResponse.requestNonce); + log.debug("Nonce not matching. That can happen rarely if we get a response after a canceled " + + "handshake (timeout causes connection close but peer might have sent a msg before " + + "connection was closed).\n" + + "We drop that message. nonce={} / requestNonce={}", + nonce, getDataResponse.requestNonce); } } } diff --git a/network/src/main/java/io/bitsquare/p2p/peers/RequestDataManager.java b/network/src/main/java/io/bitsquare/p2p/peers/RequestDataManager.java index eceacf5402..0f68bf5941 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/RequestDataManager.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/RequestDataManager.java @@ -7,7 +7,7 @@ import io.bitsquare.p2p.NodeAddress; import io.bitsquare.p2p.network.Connection; import io.bitsquare.p2p.network.MessageListener; import io.bitsquare.p2p.network.NetworkNode; -import io.bitsquare.p2p.peers.messages.data.DataRequest; +import io.bitsquare.p2p.peers.messages.data.GetDataRequest; import io.bitsquare.p2p.storage.P2PDataStorage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -113,19 +113,19 @@ public class RequestDataManager implements MessageListener { @Override public void onMessage(Message message, Connection connection) { - if (message instanceof DataRequest) { + if (message instanceof GetDataRequest) { RequestDataHandshake requestDataHandshake = new RequestDataHandshake(networkNode, dataStorage, peerManager, new RequestDataHandshake.Listener() { @Override public void onComplete() { - log.trace("RequestDataHandshake of inbound connection complete. Connection= {}", + log.trace("requestDataHandshake of inbound connection complete. Connection={}", connection); } @Override public void onFault(String errorMessage) { - log.trace("RequestDataHandshake of inbound connection failed. {} Connection= {}", - errorMessage, connection); + log.trace("requestDataHandshake of inbound connection failed.\nConnection={}\n" + + "ErrorMessage={}", connection, errorMessage); peerManager.penalizeUnreachablePeer(connection); } }); @@ -145,7 +145,7 @@ public class RequestDataManager implements MessageListener { new RequestDataHandshake.Listener() { @Override public void onComplete() { - log.trace("RequestDataHandshake of outbound connection complete. nodeAddress= {}", + log.trace("RequestDataHandshake of outbound connection complete. nodeAddress={}", nodeAddress); stopRequestDataTimer(); @@ -169,8 +169,8 @@ public class RequestDataManager implements MessageListener { @Override public void onFault(String errorMessage) { - log.trace("RequestDataHandshake of outbound connection failed. {} nodeAddress= {}", - errorMessage, nodeAddress); + log.trace("requestDataHandshake of outbound connection failed.\nnodeAddress={}\n" + + "ErrorMessage={}", nodeAddress, errorMessage); peerManager.penalizeUnreachablePeer(nodeAddress); @@ -198,7 +198,6 @@ public class RequestDataManager implements MessageListener { Collections.shuffle(list); list.addAll(getFilteredAndSortedList(peerManager.getReportedPeers(), list)); list.addAll(getFilteredAndSortedList(peerManager.getPersistedPeers(), list)); - log.trace("Sorted and filtered list: list=" + list); checkArgument(!list.isEmpty(), "seedNodeAddresses must not be empty."); NodeAddress nextCandidate = list.get(0); list.remove(nextCandidate); @@ -221,7 +220,7 @@ public class RequestDataManager implements MessageListener { requestDataHandshakeMap.put(nodeAddress, requestDataHandshake); requestDataHandshake.requestData(nodeAddress); } else { - log.warn("We have started already a requestDataHandshake to peer. " + nodeAddress); + log.warn("We have started already a requestDataHandshake to peer. nodeAddress=" + nodeAddress); } } diff --git a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/DataRequest.java b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/DataRequest.java deleted file mode 100644 index 4c25ae3949..0000000000 --- a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/DataRequest.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.bitsquare.p2p.peers.messages.data; - -public interface DataRequest { - long getNonce(); -} diff --git a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetDataRequest.java b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetDataRequest.java new file mode 100644 index 0000000000..90b2b0e833 --- /dev/null +++ b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetDataRequest.java @@ -0,0 +1,7 @@ +package io.bitsquare.p2p.peers.messages.data; + +import io.bitsquare.p2p.Message; + +public interface GetDataRequest extends Message { + long getNonce(); +} diff --git a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/DataResponse.java b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetDataResponse.java similarity index 80% rename from network/src/main/java/io/bitsquare/p2p/peers/messages/data/DataResponse.java rename to network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetDataResponse.java index 63c3877c4c..758c53373e 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/DataResponse.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetDataResponse.java @@ -6,7 +6,7 @@ import io.bitsquare.p2p.storage.data.ProtectedData; import java.util.HashSet; -public final class DataResponse implements Message { +public final class GetDataResponse implements Message { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.NETWORK_PROTOCOL_VERSION; private final int networkId = Version.getNetworkId(); @@ -14,7 +14,7 @@ public final class DataResponse implements Message { public final HashSet dataSet; public final long requestNonce; - public DataResponse(HashSet dataSet, long requestNonce) { + public GetDataResponse(HashSet dataSet, long requestNonce) { this.dataSet = dataSet; this.requestNonce = requestNonce; } @@ -27,9 +27,9 @@ public final class DataResponse implements Message { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof DataResponse)) return false; + if (!(o instanceof GetDataResponse)) return false; - DataResponse that = (DataResponse) o; + GetDataResponse that = (GetDataResponse) o; return !(dataSet != null ? !dataSet.equals(that.dataSet) : that.dataSet != null); @@ -42,7 +42,7 @@ public final class DataResponse implements Message { @Override public String toString() { - return "DataResponse{" + + return "GetDataResponse{" + "networkId=" + networkId + ", dataSet=" + dataSet + ", requestNonce=" + requestNonce + diff --git a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/UpdateDataRequest.java b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetUpdatedDataRequest.java similarity index 82% rename from network/src/main/java/io/bitsquare/p2p/peers/messages/data/UpdateDataRequest.java rename to network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetUpdatedDataRequest.java index 5365ee8122..0c254ff2c5 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/UpdateDataRequest.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/GetUpdatedDataRequest.java @@ -4,7 +4,7 @@ import io.bitsquare.app.Version; import io.bitsquare.p2p.NodeAddress; import io.bitsquare.p2p.network.messages.SendersNodeAddressMessage; -public final class UpdateDataRequest implements SendersNodeAddressMessage, DataRequest { +public final class GetUpdatedDataRequest implements SendersNodeAddressMessage, GetDataRequest { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.NETWORK_PROTOCOL_VERSION; @@ -12,7 +12,7 @@ public final class UpdateDataRequest implements SendersNodeAddressMessage, DataR private final NodeAddress senderNodeAddress; private final long nonce; - public UpdateDataRequest(NodeAddress senderNodeAddress, long nonce) { + public GetUpdatedDataRequest(NodeAddress senderNodeAddress, long nonce) { this.senderNodeAddress = senderNodeAddress; this.nonce = nonce; } @@ -34,7 +34,7 @@ public final class UpdateDataRequest implements SendersNodeAddressMessage, DataR @Override public String toString() { - return "DataRequest{" + + return "GetUpdatedDataRequest{" + "senderNodeAddress=" + senderNodeAddress + ", networkId=" + networkId + ", nonce=" + nonce + diff --git a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/PreliminaryDataRequest.java b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/PreliminaryGetDataRequest.java similarity index 79% rename from network/src/main/java/io/bitsquare/p2p/peers/messages/data/PreliminaryDataRequest.java rename to network/src/main/java/io/bitsquare/p2p/peers/messages/data/PreliminaryGetDataRequest.java index 4841eb48e3..0049a01e5d 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/messages/data/PreliminaryDataRequest.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/messages/data/PreliminaryGetDataRequest.java @@ -3,14 +3,14 @@ package io.bitsquare.p2p.peers.messages.data; import io.bitsquare.app.Version; import io.bitsquare.p2p.network.messages.AnonymousMessage; -public final class PreliminaryDataRequest implements AnonymousMessage, DataRequest { +public final class PreliminaryGetDataRequest implements AnonymousMessage, GetDataRequest { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.NETWORK_PROTOCOL_VERSION; private final int networkId = Version.getNetworkId(); private final long nonce; - public PreliminaryDataRequest(long nonce) { + public PreliminaryGetDataRequest(long nonce) { this.nonce = nonce; } @@ -26,7 +26,7 @@ public final class PreliminaryDataRequest implements AnonymousMessage, DataReque @Override public String toString() { - return "PreliminaryDataRequest{" + + return "PreliminaryGetDataRequest{" + "networkId=" + networkId + ", nonce=" + nonce + '}'; diff --git a/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java b/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java index b0a5238a68..924b17599e 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java @@ -38,7 +38,7 @@ public class P2PDataStorage implements MessageListener { private static final Logger log = LoggerFactory.getLogger(P2PDataStorage.class); @VisibleForTesting - public static int CHECK_TTL_INTERVAL = new Random().nextInt(1000) + 10 * 60 * 1000; // 10-11 min. + public static int CHECK_TTL_INTERVAL = new Random().nextInt(1000) + (int) TimeUnit.MINUTES.toMillis(10); // 10-11 min. private final Broadcaster broadcaster; private final Map map = new HashMap<>(); diff --git a/network/src/main/java/io/bitsquare/p2p/storage/data/ExpirableMailboxPayload.java b/network/src/main/java/io/bitsquare/p2p/storage/data/ExpirableMailboxPayload.java index 536259a483..caf49d5f07 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/data/ExpirableMailboxPayload.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/data/ExpirableMailboxPayload.java @@ -4,12 +4,13 @@ import io.bitsquare.app.Version; import io.bitsquare.crypto.PrefixedSealedAndSignedMessage; import java.security.PublicKey; +import java.util.concurrent.TimeUnit; public final class ExpirableMailboxPayload implements ExpirablePayload { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.NETWORK_PROTOCOL_VERSION; - private static final long TTL = 10 * 24 * 60 * 60 * 1000; // 10 days + private static final long TTL = TimeUnit.DAYS.toMillis(10); public final PrefixedSealedAndSignedMessage prefixedSealedAndSignedMessage; public final PublicKey senderStoragePublicKey; diff --git a/network/src/test/java/io/bitsquare/p2p/storage/ProtectedDataStorageTest.java b/network/src/test/java/io/bitsquare/p2p/storage/ProtectedDataStorageTest.java index 0f70051928..45ebb3c092 100644 --- a/network/src/test/java/io/bitsquare/p2p/storage/ProtectedDataStorageTest.java +++ b/network/src/test/java/io/bitsquare/p2p/storage/ProtectedDataStorageTest.java @@ -30,6 +30,7 @@ import java.util.HashSet; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; //TODO P2P network tests are outdated @Ignore @@ -60,7 +61,7 @@ public class ProtectedDataStorageTest { dir2.mkdir(); UserThread.setExecutor(Executors.newSingleThreadExecutor()); - P2PDataStorage.CHECK_TTL_INTERVAL = 10 * 60 * 1000; + P2PDataStorage.CHECK_TTL_INTERVAL = (int) TimeUnit.MINUTES.toMillis(10); keyRing1 = new KeyRing(new KeyStorage(dir1));