Skip to content

Commit 70c858e

Browse files
Merge pull request #3286 from HenrikJannsen/use-mailbox-message-if-node-is-not-initialized
Use mailbox message if node is not initialized
2 parents 015e563 + f4f9e96 commit 70c858e

File tree

6 files changed

+34
-30
lines changed

6 files changed

+34
-30
lines changed

chat/src/main/java/bisq/chat/ChatChannelService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public void addMessage(M message, C channel) {
8383
protected boolean isValid(M message) {
8484
String authorUserProfileId = message.getAuthorUserProfileId();
8585
if (bannedUserService.isUserProfileBanned(authorUserProfileId)) {
86-
log.warn("Message invalid as sender is banned. AuthorUserProfileId={}", authorUserProfileId);
86+
//log.warn("Message invalid as sender is banned. AuthorUserProfileId={}", authorUserProfileId);
8787
return false;
8888
}
8989
if (bannedUserService.isRateLimitExceeding(authorUserProfileId)) {

identity/src/main/java/bisq/identity/IdentityService.java

+4-22
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import java.util.Optional;
4343
import java.util.Set;
4444
import java.util.concurrent.CompletableFuture;
45-
import java.util.concurrent.atomic.AtomicInteger;
4645
import java.util.stream.Stream;
4746

4847
@Slf4j
@@ -89,30 +88,13 @@ public CompletableFuture<Boolean> initialize() {
8988
return CompletableFuture.completedFuture(true);
9089
}
9190

92-
CompletableFuture<Boolean> resultFuture = new CompletableFuture<>();
93-
AtomicInteger numFailures = new AtomicInteger();
9491
// We get called after networkService with the default node is already initialized.
9592
// We publish now all onion services of our active identities.
96-
networkService.getSupportedTransportTypes()
97-
.forEach(transportType -> {
98-
initializeAllActiveIdentities(transportType)
99-
.whenComplete((list, throwable) -> {
100-
if (throwable == null) {
101-
// We complete if one transport has published all identities
102-
if (!resultFuture.isDone()) {
103-
resultFuture.complete(true);
104-
}
105-
} else {
106-
numFailures.incrementAndGet();
107-
// If all transports fail we let the result fail.
108-
if (!resultFuture.isDone() && numFailures.get() >= networkService.getSupportedTransportTypes().size()) {
109-
resultFuture.completeExceptionally(throwable);
110-
}
111-
}
112-
});
113-
});
93+
// We do not wait for them to be completed as with many identities and in case tor is slow that could
94+
// trigger startup timeouts.
95+
networkService.getSupportedTransportTypes().forEach(this::initializeAllActiveIdentities);
11496

115-
return resultFuture;
97+
return CompletableFuture.completedFuture(true);
11698
}
11799

118100
@Override

network/network/src/main/java/bisq/network/NetworkService.java

+20-1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@
7474
import java.util.*;
7575
import java.util.concurrent.CompletableFuture;
7676
import java.util.concurrent.ExecutorService;
77+
import java.util.concurrent.TimeUnit;
78+
import java.util.concurrent.TimeoutException;
7779
import java.util.function.Predicate;
7880
import java.util.stream.Collectors;
7981

@@ -281,7 +283,24 @@ public CompletableFuture<SendMessageResult> confidentialSend(EnvelopePayloadMess
281283
senderKeyPair,
282284
senderNetworkId);
283285
},
284-
NETWORK_IO_POOL));
286+
NETWORK_IO_POOL))
287+
.orTimeout(2, TimeUnit.SECONDS)
288+
.whenComplete((result, throwable) -> {
289+
if (throwable != null) {
290+
if (throwable instanceof TimeoutException) {
291+
log.warn("TimeoutException at confidentialSend. Node for give networkId is not initialized. " +
292+
"We send the message as mailbox message");
293+
supplyAsync(() -> {
294+
ThreadName.set(this, "confidentialSend");
295+
return serviceNodesByTransport.confidentialSend(envelopePayloadMessage,
296+
receiverNetworkId,
297+
senderKeyPair,
298+
senderNetworkId);
299+
},
300+
NETWORK_IO_POOL);
301+
}
302+
}
303+
});
285304
}
286305

287306
// TODO (low prio): Not used. Consider to remove it so it wont get used accidentally.

network/network/src/main/java/bisq/network/p2p/services/confidential/ConfidentialMessageService.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,11 @@ public SendConfidentialMessageResult send(EnvelopePayloadMessage envelopePayload
159159
SendConfidentialMessageResult result;
160160
String receiverAddress = receiverNetworkId.getAddresses();
161161
long start = System.currentTimeMillis();
162-
163-
// Node gets initialized at higher level services
164-
nodesById.assertNodeIsInitialized(senderNetworkId);
165-
166162
try {
163+
// Node gets initialized at higher level services.
164+
// In case it is not yet initialized, we let it fail and send the message as mailbox messsage
165+
nodesById.assertNodeIsInitialized(senderNetworkId);
166+
167167
CountDownLatch countDownLatch = new CountDownLatch(1);
168168
AtomicBoolean peerDetectedOffline = new AtomicBoolean();
169169
runAsync(() -> {

network/network/src/main/java/bisq/network/p2p/services/data/inventory/InventoryHandler.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,11 @@ private void printReceivedInventory(InventoryResponse response) {
138138
: "All data received from peer";
139139
String size = ByteUnit.BYTE.toKB((double) inventory.getCachedSerializedSize().orElse(0)) + " KB";
140140
String passed = MathUtils.roundDouble((System.currentTimeMillis() - requestTs) / 1000d, 2) + " sec.";
141-
log.info("\n##########################################################################################\nReceived {} of inventory data from: {} after {}; \n{}\n##########################################################################################\n{}\n##########################################################################################", size, connection.getPeerAddress().getFullAddress(), passed, maxSizeReached, report);
141+
log.info("\n##########################################################################################\n" +
142+
"Received {} of inventory data from: {} after {}; \n{}" +
143+
"\n##########################################################################################\n{}" +
144+
"\n##########################################################################################",
145+
size, connection.getPeerAddress().getFullAddress(), passed, maxSizeReached, report);
142146
}
143147

144148
@Override

network/network/src/main/java/bisq/network/p2p/services/data/inventory/InventoryRequest.java

-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ public final class InventoryRequest implements BroadcastMessage, Request {
3939
private final InventoryFilter inventoryFilter;
4040
private final int nonce;
4141

42-
4342
public InventoryRequest(InventoryFilter inventoryFilter, int nonce) {
4443
this(VERSION, inventoryFilter, nonce);
4544
}

0 commit comments

Comments
 (0)