Skip to content

Commit 755548f

Browse files
committed
Port PR 583 from community edition (max packet size evaluation)
1 parent ecdea06 commit 755548f

File tree

7 files changed

+385
-151
lines changed

7 files changed

+385
-151
lines changed

hivemq-edge/src/main/java/com/hivemq/bootstrap/ClientConnection.java

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,8 @@
1515
*/
1616
package com.hivemq.bootstrap;
1717

18-
import com.google.common.annotations.VisibleForTesting;
1918
import com.google.common.util.concurrent.SettableFuture;
2019
import com.hivemq.configuration.service.entity.Listener;
21-
import org.jetbrains.annotations.NotNull;
22-
import org.jetbrains.annotations.Nullable;
2320
import com.hivemq.extension.sdk.api.client.parameter.ClientInformation;
2421
import com.hivemq.extension.sdk.api.client.parameter.ConnectionInformation;
2522
import com.hivemq.extension.sdk.api.packets.auth.ModifiableDefaultPermissions;
@@ -37,6 +34,8 @@
3734
import com.hivemq.security.auth.SslClientCertificate;
3835
import io.netty.channel.Channel;
3936
import io.netty.util.AttributeKey;
37+
import org.jetbrains.annotations.NotNull;
38+
import org.jetbrains.annotations.Nullable;
4039

4140
import java.net.InetAddress;
4241
import java.net.InetSocketAddress;
@@ -47,21 +46,23 @@
4746
import java.util.Optional;
4847
import java.util.concurrent.ScheduledFuture;
4948
import java.util.concurrent.atomic.AtomicInteger;
49+
import java.util.concurrent.atomic.AtomicReference;
5050

5151
public class ClientConnection {
5252

5353
/**
5454
* The name of the {@link Channel} attribute which the client connection information is stored in.
5555
*/
56-
public static final AttributeKey<ClientConnection> CHANNEL_ATTRIBUTE_NAME =
56+
public static final @NotNull AttributeKey<ClientConnection> CHANNEL_ATTRIBUTE_NAME =
5757
AttributeKey.valueOf("Client.Connection");
5858

5959
private final @NotNull Channel channel;
6060
private final @NotNull PublishFlushHandler publishFlushHandler;
61-
private volatile @NotNull ClientState clientState = ClientState.CONNECTING;
61+
private final @NotNull FreePacketIdRanges messageIDPool;
62+
private final @NotNull AtomicReference<ClientState> clientState;
63+
private final @NotNull HashMap<String, Object> additionalInformation;
6264
private @Nullable ProtocolVersion protocolVersion;
6365
private @Nullable String clientId;
64-
private boolean cleanStart;
6566
private @Nullable ModifiableDefaultPermissions authPermissions;
6667
private @Nullable Listener connectedListener;
6768
private @Nullable MqttWillPublish willPublish;
@@ -72,22 +73,19 @@ public class ClientConnection {
7273
private @Nullable Long clientSessionExpiryInterval;
7374
private @Nullable Long connectReceivedTimestamp;
7475
private @Nullable Long maxPacketSizeSend;
75-
private @Nullable String[] topicAliasMapping;
76+
private @Nullable String @Nullable [] topicAliasMapping;
77+
private @Nullable Boolean requestProblemInformation;
78+
private @Nullable SettableFuture<Void> disconnectFuture;
79+
private @Nullable ConnectionAttributes connectionAttributes;
7680
private boolean noSharedSubscription;
7781
private boolean clientIdAssigned;
7882
private boolean incomingPublishesSkipRest;
7983
private boolean incomingPublishesDefaultFailedSkipRest;
8084
private boolean requestResponseInformation;
81-
private @Nullable Boolean requestProblemInformation;
82-
private @Nullable SettableFuture<Void> disconnectFuture;
83-
private final @NotNull FreePacketIdRanges messageIDPool;
84-
85-
private @Nullable ConnectionAttributes connectionAttributes;
86-
87-
private boolean sendWill = true;
85+
private boolean cleanStart;
86+
private boolean sendWill;
8887
private boolean preventLwt;
8988
private boolean inFlightMessagesSent;
90-
9189
private @Nullable SslClientCertificate authCertificate;
9290
private @Nullable String authSniHostname;
9391
private @Nullable String authCipherSuite;
@@ -100,20 +98,24 @@ public class ClientConnection {
10098
private @Nullable Mqtt5UserProperties authUserProperties;
10199
private @Nullable ScheduledFuture<?> authFuture;
102100
private @Nullable Boolean clearPasswordAfterAuth;
103-
104101
private @Nullable ClientContextImpl extensionClientContext;
105102
private @Nullable ClientEventListeners extensionClientEventListeners;
106103
private @Nullable ClientAuthenticators extensionClientAuthenticators;
107104
private @Nullable ClientAuthorizers extensionClientAuthorizers;
108105
private @Nullable ClientInformation extensionClientInformation;
109106
private @Nullable ConnectionInformation extensionConnectionInformation;
110-
private @NotNull HashMap<String, Object> additionalInformation;
111107

112108
public ClientConnection(final @NotNull Channel channel, final @NotNull PublishFlushHandler publishFlushHandler) {
113109
this.channel = channel;
114110
this.publishFlushHandler = publishFlushHandler;
115-
messageIDPool = new FreePacketIdRanges();
111+
this.messageIDPool = new FreePacketIdRanges();
116112
this.additionalInformation = new HashMap<>();
113+
this.clientState = new AtomicReference<>(ClientState.CONNECTING);
114+
this.sendWill = true;
115+
}
116+
117+
public static @NotNull ClientConnection fromChannel(final @NotNull Channel channel) {
118+
return channel.attr(ClientConnection.CHANNEL_ATTRIBUTE_NAME).get();
117119
}
118120

119121
public @NotNull Channel getChannel() {
@@ -125,20 +127,11 @@ public ClientConnection(final @NotNull Channel channel, final @NotNull PublishFl
125127
}
126128

127129
public @NotNull ClientState getClientState() {
128-
return clientState;
130+
return clientState.get();
129131
}
130132

131-
public void proposeClientState(final @NotNull ClientState clientState) {
132-
if (!this.clientState.disconnected()) {
133-
this.clientState = clientState;
134-
}
135-
}
136-
137-
// ONLY VISIBLE FOR TESTING !!!
138-
// DO NOT USE IN PROD !!!
139-
@VisibleForTesting()
140-
public void setClientStateUnsafe(final @NotNull ClientState clientState) {
141-
this.clientState = clientState;
133+
public void proposeClientState(final @NotNull ClientState proposed) {
134+
clientState.updateAndGet(current -> current.disconnected() ? current : proposed);
142135
}
143136

144137
public @Nullable ProtocolVersion getProtocolVersion() {
@@ -255,7 +248,7 @@ public int incrementInFlightCount() {
255248
return inFlightMessageCount.incrementAndGet();
256249
}
257250

258-
public int incrementInFlightCount(int count) {
251+
public int incrementInFlightCount(final int count) {
259252
if (inFlightMessageCount == null) {
260253
inFlightMessageCount = new AtomicInteger(0);
261254
}
@@ -292,11 +285,11 @@ public void setMaxPacketSizeSend(final @Nullable Long maxPacketSizeSend) {
292285
this.maxPacketSizeSend = maxPacketSizeSend;
293286
}
294287

295-
public @Nullable String[] getTopicAliasMapping() {
288+
public @Nullable String @Nullable [] getTopicAliasMapping() {
296289
return topicAliasMapping;
297290
}
298291

299-
public void setTopicAliasMapping(final @Nullable String[] topicAliasMapping) {
292+
public void setTopicAliasMapping(final @Nullable String @Nullable [] topicAliasMapping) {
300293
this.topicAliasMapping = topicAliasMapping;
301294
}
302295

@@ -592,8 +585,8 @@ public void setClearPasswordAfterAuth(final @Nullable Boolean clearPasswordAfter
592585
return Optional.ofNullable(clearPasswordAfterAuth);
593586
}
594587

595-
public void clearPassword(){
596-
if(authPassword == null) {
588+
public void clearPassword() {
589+
if (authPassword == null) {
597590
return;
598591
}
599592
Arrays.fill(authPassword, (byte) 0);
@@ -603,8 +596,4 @@ public void clearPassword(){
603596
public @NotNull HashMap<String, Object> getAdditionalInformation() {
604597
return additionalInformation;
605598
}
606-
607-
public static @NotNull ClientConnection fromChannel(Channel channel) {
608-
return channel.attr(ClientConnection.CHANNEL_ATTRIBUTE_NAME).get();
609-
}
610599
}

hivemq-edge/src/main/java/com/hivemq/bootstrap/ClientState.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@
1919

2020
import java.util.EnumSet;
2121

22-
/**
23-
* @author Abdullah Imal
24-
*/
2522
public enum ClientState {
2623

2724
CONNECTING,

0 commit comments

Comments
 (0)