Skip to content

Commit

Permalink
[Skip CI] minor touches
Browse files Browse the repository at this point in the history
  • Loading branch information
andsel committed Dec 15, 2023
1 parent d21cd29 commit 98abd7b
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 17 deletions.
9 changes: 8 additions & 1 deletion broker/src/main/java/io/moquette/broker/PostOffice.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,14 @@
import org.slf4j.LoggerFactory;

import java.time.Clock;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
Expand Down
18 changes: 15 additions & 3 deletions broker/src/main/java/io/moquette/broker/subscriptions/CNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,24 @@
import io.moquette.broker.subscriptions.CTrie.SubscriptionRequest;

import java.security.SecureRandom;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Random;
import java.util.Set;

class CNode implements Comparable<CNode> {

public static final Random SECURE_RANDOM = new SecureRandom();
private final Token token;
private final List<INode> children;
// Sorted list of subscriptions. The sort is necessary for fast access, instead of linear scan.
//TODO move to private and add access read method
List<Subscription> subscriptions;
private List<Subscription> subscriptions;
// the list of SharedSubscription is sorted. The sort is necessary for fast access, instead of linear scan.
private Map<ShareName, List<SharedSubscription>> sharedSubscriptions;

Expand Down Expand Up @@ -105,6 +113,10 @@ private List<Subscription> sharedSubscriptions() {
return selectedSubscriptions;
}

List<Subscription> subscriptions() {
return subscriptions;
}

// Mutating operation
CNode addSubscription(SubscriptionRequest request) {
if (request.isShared()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,6 @@ public void add(String clientId, Topic filter, MqttQoS requestedQoS) {
public void addShared(String clientId, ShareName name, Topic topicFilter, MqttQoS requestedQoS) {
SubscriptionRequest shareSubRequest = SubscriptionRequest.buildShared(name, topicFilter, clientId, requestedQoS);
ctrie.addToTree(shareSubRequest);

// TODO Has to be stored? this has to refer also the share name?
// subscriptionsRepository.addNewSubscription(shareSubRequest.subscription());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,18 @@ private String prettySubscriptions(CNode node) {
if (node instanceof TNode) {
return "TNode";
}
if (node.subscriptions.isEmpty()) {
if (node.subscriptions().isEmpty()) {
return StringUtil.EMPTY_STRING;
}
StringBuilder subScriptionsStr = new StringBuilder(" ~~[");
int counter = 0;
for (Subscription couple : node.subscriptions) {
for (Subscription couple : node.subscriptions()) {
subScriptionsStr
.append("{filter=").append(couple.topicFilter).append(", ")
.append("qos=").append(couple.getRequestedQos()).append(", ")
.append("client='").append(couple.clientId).append("'}");
counter++;
if (counter < node.subscriptions.size()) {
if (counter < node.subscriptions().size()) {
subScriptionsStr.append(";");
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class SubscriptionCounterVisitor implements CTrie.IVisitor<Integer> {

@Override
public void visit(CNode node, int deep) {
accumulator.addAndGet(node.subscriptions.size());
accumulator.addAndGet(node.subscriptions().size());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ public void testAddOnSecondLayerWithEmptyTokenOnEmptyTree() {
final Optional<CNode> matchedNode = sut.lookup(asTopic("/"));
assertTrue(matchedNode.isPresent(), "Node on path / must be present");
//verify structure, only root INode and the first CNode should be present
assertThat(this.sut.root.mainNode().subscriptions).isEmpty();
assertThat(this.sut.root.mainNode().subscriptions()).isEmpty();
assertThat(this.sut.root.mainNode().allChildren()).isNotEmpty();

INode firstLayer = this.sut.root.mainNode().allChildren().get(0);
assertThat(firstLayer.mainNode().subscriptions).isEmpty();
assertThat(firstLayer.mainNode().subscriptions()).isEmpty();
assertThat(firstLayer.mainNode().allChildren()).isNotEmpty();

INode secondLayer = firstLayer.mainNode().allChildren().get(0);
assertThat(secondLayer.mainNode().subscriptions).isNotEmpty();
assertThat(secondLayer.mainNode().subscriptions()).isNotEmpty();
assertThat(secondLayer.mainNode().allChildren()).isEmpty();
}

Expand All @@ -71,7 +71,7 @@ public void testAddFirstLayerNodeOnEmptyTree() {
//Verify
final Optional<CNode> matchedNode = sut.lookup(asTopic("/temp"));
assertTrue(matchedNode.isPresent(), "Node on path /temp must be present");
assertFalse(matchedNode.get().subscriptions.isEmpty());
assertFalse(matchedNode.get().subscriptions().isEmpty());
}

@Test
Expand All @@ -98,7 +98,7 @@ public void testAddNewSubscriptionOnExistingNode() {
//Verify
final Optional<CNode> matchedNode = sut.lookup(asTopic("/temp"));
assertTrue(matchedNode.isPresent(), "Node on path /temp must be present");
final List<Subscription> subscriptions = matchedNode.get().subscriptions;
final List<Subscription> subscriptions = matchedNode.get().subscriptions();
assertTrue(subscriptions.contains(asSubscription("TempSensor2", "/temp")));
}

Expand All @@ -116,7 +116,7 @@ public void testAddNewDeepNodes() {
//Verify
final Optional<CNode> matchedNode = sut.lookup(asTopic("/italy/happiness"));
assertTrue(matchedNode.isPresent(), "Node on path /italy/happiness must be present");
final List<Subscription> subscriptions = matchedNode.get().subscriptions;
final List<Subscription> subscriptions = matchedNode.get().subscriptions();
assertTrue(subscriptions.contains(asSubscription("HappinessSensor", "/italy/happiness")));
}

Expand Down

0 comments on commit 98abd7b

Please sign in to comment.