Commit 0ce509e8e6c52d8331566c0ca53dc60418163bb6

Authored by Volodymyr Babak
2 parents 5557406f 1539e455

Merge remote-tracking branch 'upstream/master' into handle-null-values-in-proto

@@ -166,7 +166,7 @@ public class LwM2mClientContextImpl implements LwM2mClientContext { @@ -166,7 +166,7 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
166 this.lwM2mClientsByRegistrationId.put(registration.getId(), client); 166 this.lwM2mClientsByRegistrationId.put(registration.getId(), client);
167 client.setState(LwM2MClientState.REGISTERED); 167 client.setState(LwM2MClientState.REGISTERED);
168 onUplink(client); 168 onUplink(client);
169 - if(!compareAndSetSleepFlag(client, false)){ 169 + if (!compareAndSetSleepFlag(client, false)) {
170 clientStore.put(client); 170 clientStore.put(client);
171 } 171 }
172 } finally { 172 } finally {
@@ -316,7 +316,11 @@ public class LwM2mClientContextImpl implements LwM2mClientContext { @@ -316,7 +316,11 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
316 public void update(LwM2mClient client) { 316 public void update(LwM2mClient client) {
317 client.lock(); 317 client.lock();
318 try { 318 try {
319 - clientStore.put(client); 319 + if (client.getState().equals(LwM2MClientState.REGISTERED)) {
  320 + clientStore.put(client);
  321 + } else {
  322 + log.error("[{}] Client is in invalid state: {}!", client.getEndpoint(), client.getState());
  323 + }
320 } finally { 324 } finally {
321 client.unlock(); 325 client.unlock();
322 } 326 }
@@ -106,6 +106,7 @@ public abstract class LwM2MClientOtaInfo<Strategy, State, Result> { @@ -106,6 +106,7 @@ public abstract class LwM2MClientOtaInfo<Strategy, State, Result> {
106 106
107 public abstract OtaPackageType getType(); 107 public abstract OtaPackageType getType();
108 108
  109 + @JsonIgnore
109 public String getTargetPackageId() { 110 public String getTargetPackageId() {
110 return getPackageId(targetName, targetVersion); 111 return getPackageId(targetName, targetVersion);
111 } 112 }
@@ -15,11 +15,13 @@ @@ -15,11 +15,13 @@
15 */ 15 */
16 package org.thingsboard.server.transport.lwm2m.server.store; 16 package org.thingsboard.server.transport.lwm2m.server.store;
17 17
  18 +import lombok.extern.slf4j.Slf4j;
18 import org.nustaq.serialization.FSTConfiguration; 19 import org.nustaq.serialization.FSTConfiguration;
19 import org.springframework.data.redis.connection.RedisClusterConnection; 20 import org.springframework.data.redis.connection.RedisClusterConnection;
20 import org.springframework.data.redis.connection.RedisConnectionFactory; 21 import org.springframework.data.redis.connection.RedisConnectionFactory;
21 import org.springframework.data.redis.core.Cursor; 22 import org.springframework.data.redis.core.Cursor;
22 import org.springframework.data.redis.core.ScanOptions; 23 import org.springframework.data.redis.core.ScanOptions;
  24 +import org.thingsboard.server.transport.lwm2m.server.client.LwM2MClientState;
23 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient; 25 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient;
24 26
25 import java.util.ArrayList; 27 import java.util.ArrayList;
@@ -27,6 +29,7 @@ import java.util.HashSet; @@ -27,6 +29,7 @@ import java.util.HashSet;
27 import java.util.List; 29 import java.util.List;
28 import java.util.Set; 30 import java.util.Set;
29 31
  32 +@Slf4j
30 public class TbRedisLwM2MClientStore implements TbLwM2MClientStore { 33 public class TbRedisLwM2MClientStore implements TbLwM2MClientStore {
31 34
32 private static final String CLIENT_EP = "CLIENT#EP#"; 35 private static final String CLIENT_EP = "CLIENT#EP#";
@@ -76,9 +79,13 @@ public class TbRedisLwM2MClientStore implements TbLwM2MClientStore { @@ -76,9 +79,13 @@ public class TbRedisLwM2MClientStore implements TbLwM2MClientStore {
76 79
77 @Override 80 @Override
78 public void put(LwM2mClient client) { 81 public void put(LwM2mClient client) {
79 - byte[] clientSerialized = serializer.asByteArray(client);  
80 - try (var connection = connectionFactory.getConnection()) {  
81 - connection.getSet(getKey(client.getEndpoint()), clientSerialized); 82 + if (client.getState().equals(LwM2MClientState.UNREGISTERED)) {
  83 + log.error("[{}] Client is in invalid state: {}!", client.getEndpoint(), client.getState(), new Exception());
  84 + } else {
  85 + byte[] clientSerialized = serializer.asByteArray(client);
  86 + try (var connection = connectionFactory.getConnection()) {
  87 + connection.getSet(getKey(client.getEndpoint()), clientSerialized);
  88 + }
82 } 89 }
83 } 90 }
84 91
@@ -196,7 +196,7 @@ public class TbDeviceProfileNodeTest { @@ -196,7 +196,7 @@ public class TbDeviceProfileNodeTest {
196 TbMsgDataType.JSON, mapper.writeValueAsString(data), null, null); 196 TbMsgDataType.JSON, mapper.writeValueAsString(data), null, null);
197 node.onMsg(ctx, msg); 197 node.onMsg(ctx, msg);
198 verify(ctx).tellSuccess(msg); 198 verify(ctx).tellSuccess(msg);
199 - verify(ctx).tellNext(theMsg, "Alarm Created"); 199 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
200 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 200 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
201 201
202 TbMsg theMsg2 = TbMsg.newMsg("ALARM", deviceId, new TbMsgMetaData(), "2"); 202 TbMsg theMsg2 = TbMsg.newMsg("ALARM", deviceId, new TbMsgMetaData(), "2");
@@ -207,7 +207,7 @@ public class TbDeviceProfileNodeTest { @@ -207,7 +207,7 @@ public class TbDeviceProfileNodeTest {
207 TbMsgDataType.JSON, mapper.writeValueAsString(data), null, null); 207 TbMsgDataType.JSON, mapper.writeValueAsString(data), null, null);
208 node.onMsg(ctx, msg2); 208 node.onMsg(ctx, msg2);
209 verify(ctx).tellSuccess(msg2); 209 verify(ctx).tellSuccess(msg2);
210 - verify(ctx).tellNext(theMsg2, "Alarm Updated"); 210 + verify(ctx).enqueueForTellNext(theMsg2, "Alarm Updated");
211 211
212 } 212 }
213 213
@@ -289,7 +289,7 @@ public class TbDeviceProfileNodeTest { @@ -289,7 +289,7 @@ public class TbDeviceProfileNodeTest {
289 289
290 node.onMsg(ctx, msg); 290 node.onMsg(ctx, msg);
291 verify(ctx).tellSuccess(msg); 291 verify(ctx).tellSuccess(msg);
292 - verify(ctx).tellNext(theMsg, "Alarm Created"); 292 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
293 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 293 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
294 } 294 }
295 295
@@ -376,7 +376,7 @@ public class TbDeviceProfileNodeTest { @@ -376,7 +376,7 @@ public class TbDeviceProfileNodeTest {
376 376
377 node.onMsg(ctx, msg); 377 node.onMsg(ctx, msg);
378 verify(ctx).tellSuccess(msg); 378 verify(ctx).tellSuccess(msg);
379 - verify(ctx).tellNext(theMsg, "Alarm Created"); 379 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
380 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 380 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
381 } 381 }
382 382
@@ -445,7 +445,7 @@ public class TbDeviceProfileNodeTest { @@ -445,7 +445,7 @@ public class TbDeviceProfileNodeTest {
445 445
446 node.onMsg(ctx, msg); 446 node.onMsg(ctx, msg);
447 verify(ctx).tellSuccess(msg); 447 verify(ctx).tellSuccess(msg);
448 - verify(ctx).tellNext(theMsg, "Alarm Created"); 448 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
449 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 449 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
450 } 450 }
451 451
@@ -554,7 +554,7 @@ public class TbDeviceProfileNodeTest { @@ -554,7 +554,7 @@ public class TbDeviceProfileNodeTest {
554 554
555 node.onMsg(ctx, msg2); 555 node.onMsg(ctx, msg2);
556 verify(ctx).tellSuccess(msg2); 556 verify(ctx).tellSuccess(msg2);
557 - verify(ctx).tellNext(theMsg, "Alarm Created"); 557 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
558 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 558 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
559 } 559 }
560 560
@@ -678,7 +678,7 @@ public class TbDeviceProfileNodeTest { @@ -678,7 +678,7 @@ public class TbDeviceProfileNodeTest {
678 678
679 node.onMsg(ctx, msg2); 679 node.onMsg(ctx, msg2);
680 verify(ctx).tellSuccess(msg2); 680 verify(ctx).tellSuccess(msg2);
681 - verify(ctx).tellNext(theMsg, "Alarm Created"); 681 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
682 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 682 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
683 } 683 }
684 684
@@ -781,7 +781,7 @@ public class TbDeviceProfileNodeTest { @@ -781,7 +781,7 @@ public class TbDeviceProfileNodeTest {
781 781
782 node.onMsg(ctx, msg2); 782 node.onMsg(ctx, msg2);
783 verify(ctx).tellSuccess(msg2); 783 verify(ctx).tellSuccess(msg2);
784 - verify(ctx).tellNext(theMsg, "Alarm Created"); 784 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
785 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 785 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
786 } 786 }
787 787
@@ -897,7 +897,7 @@ public class TbDeviceProfileNodeTest { @@ -897,7 +897,7 @@ public class TbDeviceProfileNodeTest {
897 897
898 node.onMsg(ctx, msg2); 898 node.onMsg(ctx, msg2);
899 verify(ctx).tellSuccess(msg2); 899 verify(ctx).tellSuccess(msg2);
900 - verify(ctx).tellNext(theMsg, "Alarm Created"); 900 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
901 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 901 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
902 } 902 }
903 903
@@ -999,7 +999,7 @@ public class TbDeviceProfileNodeTest { @@ -999,7 +999,7 @@ public class TbDeviceProfileNodeTest {
999 999
1000 node.onMsg(ctx, msg2); 1000 node.onMsg(ctx, msg2);
1001 verify(ctx).tellSuccess(msg2); 1001 verify(ctx).tellSuccess(msg2);
1002 - verify(ctx).tellNext(theMsg, "Alarm Created"); 1002 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
1003 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 1003 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
1004 } 1004 }
1005 1005
@@ -1082,7 +1082,7 @@ public class TbDeviceProfileNodeTest { @@ -1082,7 +1082,7 @@ public class TbDeviceProfileNodeTest {
1082 1082
1083 node.onMsg(ctx, msg); 1083 node.onMsg(ctx, msg);
1084 verify(ctx).tellSuccess(msg); 1084 verify(ctx).tellSuccess(msg);
1085 - verify(ctx).tellNext(theMsg, "Alarm Created"); 1085 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
1086 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 1086 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
1087 } 1087 }
1088 1088
@@ -1163,7 +1163,7 @@ public class TbDeviceProfileNodeTest { @@ -1163,7 +1163,7 @@ public class TbDeviceProfileNodeTest {
1163 1163
1164 node.onMsg(ctx, msg); 1164 node.onMsg(ctx, msg);
1165 verify(ctx).tellSuccess(msg); 1165 verify(ctx).tellSuccess(msg);
1166 - verify(ctx).tellNext(theMsg, "Alarm Created"); 1166 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
1167 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 1167 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
1168 } 1168 }
1169 1169
@@ -1237,7 +1237,7 @@ public class TbDeviceProfileNodeTest { @@ -1237,7 +1237,7 @@ public class TbDeviceProfileNodeTest {
1237 1237
1238 node.onMsg(ctx, msg); 1238 node.onMsg(ctx, msg);
1239 verify(ctx).tellSuccess(msg); 1239 verify(ctx).tellSuccess(msg);
1240 - verify(ctx).tellNext(theMsg, "Alarm Created"); 1240 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
1241 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 1241 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
1242 } 1242 }
1243 1243
@@ -1321,7 +1321,7 @@ public class TbDeviceProfileNodeTest { @@ -1321,7 +1321,7 @@ public class TbDeviceProfileNodeTest {
1321 1321
1322 node.onMsg(ctx, msg); 1322 node.onMsg(ctx, msg);
1323 verify(ctx).tellSuccess(msg); 1323 verify(ctx).tellSuccess(msg);
1324 - verify(ctx).tellNext(theMsg, "Alarm Created"); 1324 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
1325 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 1325 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
1326 1326
1327 } 1327 }
@@ -1407,7 +1407,7 @@ public class TbDeviceProfileNodeTest { @@ -1407,7 +1407,7 @@ public class TbDeviceProfileNodeTest {
1407 1407
1408 node.onMsg(ctx, msg); 1408 node.onMsg(ctx, msg);
1409 verify(ctx).tellSuccess(msg); 1409 verify(ctx).tellSuccess(msg);
1410 - verify(ctx).tellNext(theMsg, "Alarm Created"); 1410 + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created");
1411 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); 1411 verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any());
1412 } 1412 }
1413 1413