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;
import io.bitsquare.network.BootstrapNode;
import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;
@ -24,7 +26,7 @@ import net.sourceforge.argparse4j.inf.Namespace;
/*
optional arguments:
-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)
-i INTERFACE, --interface INTERFACE Network interface to listen on.
-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 PORT_FLAG = "port";
public static Integer PORT_DEFAULT = 5000;
public static String INFHINT_FLAG = "interface";
public static String INTERFACE_HINT_FLAG = "interface";
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;
public ArgumentParser() {
@ -44,11 +48,12 @@ public class ArgumentParser {
.defaultHelp(true)
.description("Bitsquare - The decentralized bitcoin exchange.");
parser.addArgument("-d", "--" + PEER_ID_FLAG)
.setDefault(PEER_ID_DEFAULT)
.help("Seed peer ID.");
parser.addArgument("-p", "--" + PORT_FLAG)
.setDefault(PORT_DEFAULT)
.help("IP port to listen on.");
parser.addArgument("-i", "--" + INFHINT_FLAG)
parser.addArgument("-i", "--" + INTERFACE_HINT_FLAG)
.help("Network interface to listen on.");
parser.addArgument("-n", "--" + NAME_FLAG)
.help("Append name to application name.");

View File

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

View File

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

View File

@ -77,6 +77,8 @@ public class BootstrappedPeerFactory {
private final SettableFuture<PeerDHT> settableFuture = SettableFuture.create();
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) {
try {
Peer peer = new PeerBuilder(keyPair).ports(port).behindFirewall().start();
PeerDHT peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start();
peer = new PeerBuilder(keyPair).ports(port).start();
peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start();
peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() {
@Override
@ -154,18 +156,14 @@ public class BootstrappedPeerFactory {
switch (lastSuccessfulBootstrap) {
case "relay":
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
bootstrapWithRelay();
break;
case "portForwarding":
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
tryPortForwarding(peerDHT, futureDiscover);
tryPortForwarding();
break;
case "default":
default:
discover(peerDHT);
discover();
break;
}
} catch (IOException e) {
@ -177,13 +175,13 @@ public class BootstrappedPeerFactory {
}
// 1. Attempt: Try to discover our outside visible address
private void discover(PeerDHT peerDHT) {
FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
private void discover() {
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
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());
persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default");
settableFuture.set(peerDHT);
@ -192,7 +190,7 @@ public class BootstrappedPeerFactory {
setState("We are probably behind a NAT and not reachable to other peers. " +
"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
private void tryPortForwarding(PeerDHT peerDHT, FutureDiscover futureDiscover) {
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
private void tryPortForwarding() {
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
futureNAT.addListener(new BaseFutureListener<BaseFuture>() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
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
discoverAfterPortForwarding(peerDHT);
discoverAfterPortForwarding();
}
else {
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
private void discoverAfterPortForwarding(PeerDHT peerDHT) {
FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
private void discoverAfterPortForwarding() {
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
@Override
public void operationComplete(BaseFuture future) throws Exception {
@ -265,8 +265,10 @@ public class BootstrappedPeerFactory {
}
// 3. Attempt: We try to use another peer as relay
private void bootstrapWithRelay(PeerDHT peerDHT, PeerNAT peerNAT, FutureDiscover futureDiscover,
FutureNAT futureNAT) {
private void bootstrapWithRelay() {
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.addListener(new BaseFutureListener<BaseFuture>() {
@Override

View File

@ -79,6 +79,10 @@ public class DHTManager extends AbstractActor {
peer = new PeerBuilder(initializePeer.getPeerId()).ports(initializePeer.getPort()).bindings(bindings)
.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
// simple
@ -110,9 +114,7 @@ public class DHTManager extends AbstractActor {
sender().tell(new PeerInitialized(peer.peerID(), initializePeer.getPort()), self());
} catch (Throwable t) {
log.info("The second instance has been started. If that happens at the first instance" +
" we are in trouble... " + t.getMessage());
sender().tell(new PeerInitialized(null, null), self());
log.error(t.getMessage());
}
}