diff --git a/broker/src/main/java/io/moquette/broker/metrics/BytesMetricsHandler.java b/broker/src/main/java/io/moquette/broker/metrics/BytesMetricsHandler.java index 9c0f95e3d..462f8b180 100644 --- a/broker/src/main/java/io/moquette/broker/metrics/BytesMetricsHandler.java +++ b/broker/src/main/java/io/moquette/broker/metrics/BytesMetricsHandler.java @@ -54,7 +54,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { BytesMetrics metrics = ctx.channel().attr(ATTR_KEY_METRICS).get(); - metrics.incrementWrote(((ByteBuf) msg).writableBytes()); + metrics.incrementWrote(((ByteBuf) msg).readableBytes()); ctx.write(msg, promise).addListener(CLOSE_ON_FAILURE); } diff --git a/broker/src/main/java/io/moquette/broker/subscriptions/CTrie.java b/broker/src/main/java/io/moquette/broker/subscriptions/CTrie.java index 70e279f0b..f40eddd47 100644 --- a/broker/src/main/java/io/moquette/broker/subscriptions/CTrie.java +++ b/broker/src/main/java/io/moquette/broker/subscriptions/CTrie.java @@ -14,7 +14,7 @@ interface IVisitor { T getResult(); } - private static final Token ROOT = new Token("root"); + private static final Token ROOT = new Token("+root"); private static final INode NO_PARENT = null; private enum Action { diff --git a/broker/src/test/java/io/moquette/broker/subscriptions/CTrieSubscriptionDirectoryMatchingTest.java b/broker/src/test/java/io/moquette/broker/subscriptions/CTrieSubscriptionDirectoryMatchingTest.java index 558efd165..8658a5473 100644 --- a/broker/src/test/java/io/moquette/broker/subscriptions/CTrieSubscriptionDirectoryMatchingTest.java +++ b/broker/src/test/java/io/moquette/broker/subscriptions/CTrieSubscriptionDirectoryMatchingTest.java @@ -56,6 +56,10 @@ public void testMatchSimple() { assertThat(sut.matchWithoutQosSharpening(asTopic("/finance"))).contains(slashFinanceSub); assertThat(sut.matchWithoutQosSharpening(asTopic("/"))).contains(slashSub); + + Subscription rootSub = clientSubOnTopic("TempSensor1", "root"); + sut.add(rootSub); + assertThat(sut.matchWithoutQosSharpening(asTopic("root"))).contains(rootSub); } @Test @@ -67,6 +71,10 @@ public void testMatchSimpleMulti() { Subscription financeAnySub = clientSubOnTopic("TempSensor1", "finance/#"); sut.add(financeAnySub); assertThat(sut.matchWithoutQosSharpening(asTopic("finance"))).containsExactlyInAnyOrder(financeAnySub, anySub); + + Subscription rootSub = clientSubOnTopic("TempSensor1", "root/#"); + sut.add(rootSub); + assertThat(sut.matchWithoutQosSharpening(asTopic("root/test"))).contains(rootSub); } @Test @@ -168,6 +176,11 @@ public void rogerLightTopicMatches() { assertMatch("foo//+", "foo//bar"); assertMatch("foo/+/+/baz", "foo///baz"); assertMatch("foo/bar/+", "foo/bar/"); + + assertMatch("root//bar", "root//bar"); + assertMatch("root//+", "root//bar"); + assertMatch("foo/+/+/root", "foo///root"); + assertMatch("foo/root/+", "foo/root/"); } private void assertMatch(String s, String t) { diff --git a/distribution/src/main/scripts/moquette.sh b/distribution/src/main/scripts/moquette.sh index dd54622fe..bfb5bb3a7 100644 --- a/distribution/src/main/scripts/moquette.sh +++ b/distribution/src/main/scripts/moquette.sh @@ -13,11 +13,9 @@ echo " \_| |_/\___/ \__, |\__,_|\___|\__|\__\___| \_| |_/\_/\_\ \_/ \_/ " echo " | | " echo " |_| " echo " " -echo " version: 0..13-SNAPSHOT " +echo " version: 0.13-SNAPSHOT " -cd "$(dirname "$0")" - # resolve links - $0 may be a softlink PRG="$0" @@ -39,7 +37,7 @@ PRGDIR=`dirname "$PRG"` export MOQUETTE_HOME # Set JavaHome if it exists -if [ -f "${JAVA_HOME}/bin/java" ]; then +if [ -f "${JAVA_HOME}/bin/java" ]; then JAVA=${JAVA_HOME}/bin/java else JAVA=java