Change polling from 1 sec to 3 sec, refactorings

This commit is contained in:
Manfred Karrer 2014-11-05 22:00:55 +01:00
parent 4fb8030a43
commit df3a507066
5 changed files with 45 additions and 40 deletions

View file

@ -17,6 +17,8 @@
package io.bitsquare.app; package io.bitsquare.app;
import io.bitsquare.network.BootstrapNode;
import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Namespace;
@ -24,7 +26,7 @@ import net.sourceforge.argparse4j.inf.Namespace;
/* /*
optional arguments: optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
-d PEERID, --peerid PEERID Seed peer ID. (default: digitalocean1.bitsquare.io) -d PEER_ID, --peerid PEER Seed peer ID (default: "digitalocean1.bitsquare.io")
-p PORT, --port PORT IP port to listen on. (default: 5000) -p PORT, --port PORT IP port to listen on. (default: 5000)
-i INTERFACE, --interface INTERFACE Network interface to listen on. -i INTERFACE, --interface INTERFACE Network interface to listen on.
-n NAME, --name NAME Append name to application name. -n NAME, --name NAME Append name to application name.
@ -33,10 +35,12 @@ public class ArgumentParser {
public static String PEER_ID_FLAG = "peerid"; public static String PEER_ID_FLAG = "peerid";
public static String PORT_FLAG = "port"; public static String PORT_FLAG = "port";
public static Integer PORT_DEFAULT = 5000; public static String INTERFACE_HINT_FLAG = "interface";
public static String INFHINT_FLAG = "interface";
public static String NAME_FLAG = "name"; public static String NAME_FLAG = "name";
public static Integer PORT_DEFAULT = 5000;
public static String PEER_ID_DEFAULT = BootstrapNode.DIGITAL_OCEAN1.getId();
private final net.sourceforge.argparse4j.inf.ArgumentParser parser; private final net.sourceforge.argparse4j.inf.ArgumentParser parser;
public ArgumentParser() { public ArgumentParser() {
@ -44,11 +48,12 @@ public class ArgumentParser {
.defaultHelp(true) .defaultHelp(true)
.description("Bitsquare - The decentralized bitcoin exchange."); .description("Bitsquare - The decentralized bitcoin exchange.");
parser.addArgument("-d", "--" + PEER_ID_FLAG) parser.addArgument("-d", "--" + PEER_ID_FLAG)
.setDefault(PEER_ID_DEFAULT)
.help("Seed peer ID."); .help("Seed peer ID.");
parser.addArgument("-p", "--" + PORT_FLAG) parser.addArgument("-p", "--" + PORT_FLAG)
.setDefault(PORT_DEFAULT) .setDefault(PORT_DEFAULT)
.help("IP port to listen on."); .help("IP port to listen on.");
parser.addArgument("-i", "--" + INFHINT_FLAG) parser.addArgument("-i", "--" + INTERFACE_HINT_FLAG)
.help("Network interface to listen on."); .help("Network interface to listen on.");
parser.addArgument("-n", "--" + NAME_FLAG) parser.addArgument("-n", "--" + NAME_FLAG)
.help("Append name to application name."); .help("Append name to application name.");

View file

@ -52,16 +52,11 @@ public class SeedNode {
ArgumentParser parser = new ArgumentParser(); ArgumentParser parser = new ArgumentParser();
Namespace namespace = parser.parseArgs(args); Namespace namespace = parser.parseArgs(args);
if (namespace.getString(ArgumentParser.INFHINT_FLAG) != null) { if (namespace.getString(ArgumentParser.INTERFACE_HINT_FLAG) != null)
interfaceHint = namespace.getString(ArgumentParser.INFHINT_FLAG); interfaceHint = namespace.getString(ArgumentParser.INTERFACE_HINT_FLAG);
}
int serverPort = Integer.valueOf(namespace.getString(ArgumentParser.PORT_FLAG)); int serverPort = Integer.valueOf(namespace.getString(ArgumentParser.PORT_FLAG));
String seedID = namespace.getString(ArgumentParser.PEER_ID_FLAG);
String seedID = BootstrapNode.LOCAL_HOST.getId();
if (namespace.getString(ArgumentParser.PEER_ID_FLAG) != null) {
seedID = namespace.getString(ArgumentParser.PEER_ID_FLAG);
}
final Set<PeerAddress> peerAddresses = new HashSet<>(); final Set<PeerAddress> peerAddresses = new HashSet<>();
for (Node node : BootstrapNode.values()) { for (Node node : BootstrapNode.values()) {
@ -81,14 +76,15 @@ public class SeedNode {
inbox.send(seedNode, new InitializePeer(Number160.createHash(seedID), serverPort, interfaceHint, inbox.send(seedNode, new InitializePeer(Number160.createHash(seedID), serverPort, interfaceHint,
peerAddresses)); peerAddresses));
final String _seedID = seedID;
Thread seedNodeThread = new Thread(() -> { Thread seedNodeThread = new Thread(() -> {
Boolean quit = false; Boolean quit = false;
while (!quit) { while (!quit) {
try { try {
Object m = inbox.receive(FiniteDuration.create(5L, "seconds")); Object m = inbox.receive(FiniteDuration.create(5L, "seconds"));
if (m instanceof PeerInitialized) { if (m instanceof PeerInitialized) {
log.debug("Seed Peer Initialized on port " + ((PeerInitialized) m).getPort log.debug("Seed Peer with ID " + _seedID +
()); " initialized on port " + ((PeerInitialized) m).getPort());
} }
} catch (Exception e) { } catch (Exception e) {
if (!(e instanceof TimeoutException)) { if (!(e instanceof TimeoutException)) {

View file

@ -173,7 +173,7 @@ public class OfferBook {
private void startPolling() { private void startPolling() {
addListeners(); addListeners();
setBankAccount(user.getCurrentBankAccount()); setBankAccount(user.getCurrentBankAccount());
pollingTimer = Utilities.setInterval(1000, (animationTimer) -> { pollingTimer = Utilities.setInterval(3000, (animationTimer) -> {
messageFacade.requestInvalidationTimeStampFromDHT(fiatCode); messageFacade.requestInvalidationTimeStampFromDHT(fiatCode);
return null; return null;
}); });

View file

@ -77,6 +77,8 @@ public class BootstrappedPeerFactory {
private final SettableFuture<PeerDHT> settableFuture = SettableFuture.create(); private final SettableFuture<PeerDHT> settableFuture = SettableFuture.create();
public final StringProperty connectionState = new SimpleStringProperty(); public final StringProperty connectionState = new SimpleStringProperty();
private Peer peer;
private PeerDHT peerDHT;
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
@ -109,8 +111,8 @@ public class BootstrappedPeerFactory {
public ListenableFuture<PeerDHT> start(int port) { public ListenableFuture<PeerDHT> start(int port) {
try { try {
Peer peer = new PeerBuilder(keyPair).ports(port).behindFirewall().start(); peer = new PeerBuilder(keyPair).ports(port).start();
PeerDHT peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start(); peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start();
peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() { peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() {
@Override @Override
@ -154,18 +156,14 @@ public class BootstrappedPeerFactory {
switch (lastSuccessfulBootstrap) { switch (lastSuccessfulBootstrap) {
case "relay": case "relay":
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); bootstrapWithRelay();
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
break; break;
case "portForwarding": case "portForwarding":
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); tryPortForwarding();
tryPortForwarding(peerDHT, futureDiscover);
break; break;
case "default": case "default":
default: default:
discover(peerDHT); discover();
break; break;
} }
} catch (IOException e) { } catch (IOException e) {
@ -177,13 +175,13 @@ public class BootstrappedPeerFactory {
} }
// 1. Attempt: Try to discover our outside visible address // 1. Attempt: Try to discover our outside visible address
private void discover(PeerDHT peerDHT) { private void discover() {
FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() { futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
@Override @Override
public void operationComplete(BaseFuture future) throws Exception { public void operationComplete(BaseFuture future) throws Exception {
if (future.isSuccess()) { if (future.isSuccess()) {
setState("We are visible to other peers: My address visible to " + setState("We are directly connected and visible to other peers: My address visible to " +
"the outside is " + futureDiscover.peerAddress()); "the outside is " + futureDiscover.peerAddress());
persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default"); persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default");
settableFuture.set(peerDHT); settableFuture.set(peerDHT);
@ -192,7 +190,7 @@ public class BootstrappedPeerFactory {
setState("We are probably behind a NAT and not reachable to other peers. " + setState("We are probably behind a NAT and not reachable to other peers. " +
"We try port forwarding as next step."); "We try port forwarding as next step.");
tryPortForwarding(peerDHT, futureDiscover); tryPortForwarding();
} }
} }
@ -206,20 +204,22 @@ public class BootstrappedPeerFactory {
} }
// 2. Attempt: Try to set up port forwarding with UPNP and NAT-PMP // 2. Attempt: Try to set up port forwarding with UPNP and NAT-PMP
private void tryPortForwarding(PeerDHT peerDHT, FutureDiscover futureDiscover) { private void tryPortForwarding() {
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start(); FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover); FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
futureNAT.addListener(new BaseFutureListener<BaseFuture>() { futureNAT.addListener(new BaseFutureListener<BaseFuture>() {
@Override @Override
public void operationComplete(BaseFuture future) throws Exception { public void operationComplete(BaseFuture future) throws Exception {
if (future.isSuccess()) { if (future.isSuccess()) {
setState("Automatic port forwarding is setup. Address = " + futureNAT.peerAddress()); setState("Automatic port forwarding is setup. We need to run a discover again. Address = " +
futureNAT.peerAddress());
// we need a second discover process // we need a second discover process
discoverAfterPortForwarding(peerDHT); discoverAfterPortForwarding();
} }
else { else {
setState("Port forwarding has failed. We try to use a relay as next step."); setState("Port forwarding has failed. We try to use a relay as next step.");
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT); bootstrapWithRelay();
} }
} }
@ -233,8 +233,8 @@ public class BootstrappedPeerFactory {
} }
// Try to determine our outside visible address after port forwarding is setup // Try to determine our outside visible address after port forwarding is setup
private void discoverAfterPortForwarding(PeerDHT peerDHT) { private void discoverAfterPortForwarding() {
FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() { futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
@Override @Override
public void operationComplete(BaseFuture future) throws Exception { public void operationComplete(BaseFuture future) throws Exception {
@ -265,8 +265,10 @@ public class BootstrappedPeerFactory {
} }
// 3. Attempt: We try to use another peer as relay // 3. Attempt: We try to use another peer as relay
private void bootstrapWithRelay(PeerDHT peerDHT, PeerNAT peerNAT, FutureDiscover futureDiscover, private void bootstrapWithRelay() {
FutureNAT futureNAT) { FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
FutureRelayNAT futureRelayNAT = peerNAT.startRelay(futureDiscover, futureNAT); FutureRelayNAT futureRelayNAT = peerNAT.startRelay(futureDiscover, futureNAT);
futureRelayNAT.addListener(new BaseFutureListener<BaseFuture>() { futureRelayNAT.addListener(new BaseFutureListener<BaseFuture>() {
@Override @Override

View file

@ -79,6 +79,10 @@ public class DHTManager extends AbstractActor {
peer = new PeerBuilder(initializePeer.getPeerId()).ports(initializePeer.getPort()).bindings(bindings) peer = new PeerBuilder(initializePeer.getPeerId()).ports(initializePeer.getPort()).bindings(bindings)
.start(); .start();
peer.objectDataReply((sender, request) -> {
log.debug("received request: ", request.toString());
return "pong";
});
// For the moment we want not to bootstrap to other seed nodes to keep test scenarios // For the moment we want not to bootstrap to other seed nodes to keep test scenarios
// simple // simple
@ -110,9 +114,7 @@ public class DHTManager extends AbstractActor {
sender().tell(new PeerInitialized(peer.peerID(), initializePeer.getPort()), self()); sender().tell(new PeerInitialized(peer.peerID(), initializePeer.getPort()), self());
} catch (Throwable t) { } catch (Throwable t) {
log.info("The second instance has been started. If that happens at the first instance" + log.error(t.getMessage());
" we are in trouble... " + t.getMessage());
sender().tell(new PeerInitialized(null, null), self());
} }
} }