Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove address prefix for mailbox messages #4609

Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
e84a4cd
Add NO_ADDRESS_PRE_FIX capability.
chimp1984 Oct 7, 2020
61d7bd1
Cleanups
chimp1984 Oct 7, 2020
e81bdbd
Make onRemoved default in interface
chimp1984 Oct 7, 2020
916fc34
Add methods for getting peers capabilities
chimp1984 Oct 7, 2020
bfaa4b7
Remove verification for address prefix
chimp1984 Oct 7, 2020
8b35f8a
Clear capabilitiesListeners at shutdown
chimp1984 Oct 7, 2020
9bfd9a4
Refactor: move SupportedCapabilitiesMessage handling code out to a me…
chimp1984 Oct 7, 2020
9aad745
Use only node address for equals and hashcode
chimp1984 Oct 7, 2020
fcd3454
Pass supportedCapabilities to PeerManager. Not further processed yet,…
chimp1984 Oct 7, 2020
fc0082a
Use getSingleThreadListeningExecutor, cleanups
chimp1984 Oct 7, 2020
885e99d
Apply code inspection suggestions
chimp1984 Oct 7, 2020
c8b241e
Add findPeersCapabilities method
chimp1984 Oct 7, 2020
b1e23ad
Add getDateAsLong method, add setter for capabilities
chimp1984 Oct 7, 2020
5ecde7a
Add findPeersCapabilities method
chimp1984 Oct 7, 2020
c399fc2
Replace persistedPeers with peerList
chimp1984 Oct 7, 2020
fd44d05
Use getPersistedPeers for peerList.getList() calls
chimp1984 Oct 7, 2020
c110c43
Update common/src/main/java/bisq/common/app/Capability.java
chimp1984 Oct 7, 2020
fcc660e
Update p2p/src/main/java/bisq/network/p2p/network/Connection.java
chimp1984 Oct 7, 2020
b76de42
Fix incorrect handling of decryptedEntries size
chimp1984 Oct 7, 2020
3b68b8d
Refactor: Return early
chimp1984 Oct 7, 2020
3c4638b
Refactor: Rearrange code, remove unused methods, renamings (no functi…
chimp1984 Oct 7, 2020
4d17fe9
Refactor: Rename method
chimp1984 Oct 7, 2020
1f24240
Use connection.getPeersNodeAddressOptional().isPresent() instead of c…
chimp1984 Oct 7, 2020
e02f549
Fix tests
chimp1984 Oct 8, 2020
cf8125e
Use a hashset instead of list to avoid duplicates. Filter out my own …
chimp1984 Oct 8, 2020
c09e55f
Decrease failedConnectionAttempts onConnection
chimp1984 Oct 8, 2020
af88a97
Fix incorrect collection used in == 1 check
chimp1984 Oct 8, 2020
caf3ac6
Add isPresent check
chimp1984 Oct 8, 2020
8e2e783
Do not log size as we don't want to call potentially expensive toProt…
chimp1984 Oct 8, 2020
b66812a
Copy peers in a new hashset to avoid concurrent modification exc at s…
chimp1984 Oct 8, 2020
61e50ae
Dont reassign param
chimp1984 Oct 8, 2020
892f760
Use custom class MailboxItem instead of Tuple
chimp1984 Oct 8, 2020
d111279
Apply code review suggestions
chimp1984 Oct 8, 2020
5b51e60
When updating the capability from a reported peer we check if the rep…
chimp1984 Oct 8, 2020
611a247
Apply codacy suggestions
chimp1984 Oct 8, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 14 additions & 0 deletions common/src/main/java/bisq/common/app/Capabilities.java
Expand Up @@ -184,4 +184,18 @@ public String prettyPrint() {
public int size() {
return capabilities.size();
}

// We return true if our capabilities have less capabilities than the parameter value
public boolean hasLess(Capabilities other) {
return findHighestCapability(this) < findHighestCapability(other);
}

// We use the sum of all capabilities. Alternatively we could use the highest entry.
// Neither would support removal of past capabilities, a use case we never had so far and which might have
// backward compatibility issues, so we should treat capabilities as an append-only data structure.
public int findHighestCapability(Capabilities capabilities) {
return (int) capabilities.capabilities.stream()
.mapToLong(e -> (long) e.ordinal())
.sum();
}
}
42 changes: 42 additions & 0 deletions common/src/test/java/bisq/common/app/CapabilitiesTest.java
Expand Up @@ -23,6 +23,7 @@

import org.junit.Test;

import static bisq.common.app.Capability.DAO_FULL_NODE;
import static bisq.common.app.Capability.SEED_NODE;
import static bisq.common.app.Capability.TRADE_STATISTICS;
import static bisq.common.app.Capability.TRADE_STATISTICS_2;
Expand All @@ -40,6 +41,47 @@ public void testNoCapabilitiesAvailable() {
assertFalse(DUT.containsAll(new Capabilities(SEED_NODE)));
}

@Test
public void testHasLess() {
assertTrue(new Capabilities().hasLess(new Capabilities(SEED_NODE)));
assertFalse(new Capabilities().hasLess(new Capabilities()));
assertFalse(new Capabilities(SEED_NODE).hasLess(new Capabilities()));
assertTrue(new Capabilities(SEED_NODE).hasLess(new Capabilities(DAO_FULL_NODE)));
assertFalse(new Capabilities(DAO_FULL_NODE).hasLess(new Capabilities(SEED_NODE)));

Capabilities all = new Capabilities(
Capability.TRADE_STATISTICS,
Capability.TRADE_STATISTICS_2,
Capability.ACCOUNT_AGE_WITNESS,
Capability.ACK_MSG,
Capability.PROPOSAL,
Capability.BLIND_VOTE,
Capability.DAO_STATE,
Capability.BUNDLE_OF_ENVELOPES,
Capability.MEDIATION,
Capability.SIGNED_ACCOUNT_AGE_WITNESS,
Capability.REFUND_AGENT,
Capability.TRADE_STATISTICS_HASH_UPDATE
);
Capabilities other = new Capabilities(
Capability.TRADE_STATISTICS,
Capability.TRADE_STATISTICS_2,
Capability.ACCOUNT_AGE_WITNESS,
Capability.ACK_MSG,
Capability.PROPOSAL,
Capability.BLIND_VOTE,
Capability.DAO_STATE,
Capability.BUNDLE_OF_ENVELOPES,
Capability.MEDIATION,
Capability.SIGNED_ACCOUNT_AGE_WITNESS,
Capability.REFUND_AGENT,
Capability.TRADE_STATISTICS_HASH_UPDATE,
Capability.NO_ADDRESS_PRE_FIX
);

assertTrue(all.hasLess(other));
}

@Test
public void testO() {
Capabilities DUT = new Capabilities(TRADE_STATISTICS);
Expand Down
7 changes: 4 additions & 3 deletions p2p/src/main/java/bisq/network/p2p/peers/PeerManager.java
Expand Up @@ -417,15 +417,16 @@ public Optional<Capabilities> findPeersCapabilities(NodeAddress nodeAddress) {
.map(Peer::getCapabilities);
}

private void applyCapabilities(Connection connection, Capabilities capabilities) {
if (capabilities == null || capabilities.isEmpty()) {
private void applyCapabilities(Connection connection, Capabilities newCapabilities) {
if (newCapabilities == null || newCapabilities.isEmpty()) {
return;
}

connection.getPeersNodeAddressOptional().ifPresent(nodeAddress -> {
getAllPeers().stream()
.filter(peer -> peer.getNodeAddress().equals(nodeAddress))
.forEach(peer -> peer.setCapabilities(capabilities));
.filter(peer -> peer.getCapabilities().hasLess(newCapabilities))
.forEach(peer -> peer.setCapabilities(newCapabilities));
});
requestPersistence();
}
Expand Down