Commit 36f4fb03a4e88f5d147d1f7ea9d1891a54e87f00

Authored by Andrew Shvayka
1 parent e834dd36

Improvements to Cluster mode

Showing 31 changed files with 143 additions and 124 deletions
@@ -23,7 +23,6 @@ import com.google.common.util.concurrent.FutureCallback; @@ -23,7 +23,6 @@ import com.google.common.util.concurrent.FutureCallback;
23 import com.google.common.util.concurrent.Futures; 23 import com.google.common.util.concurrent.Futures;
24 import com.google.common.util.concurrent.ListenableFuture; 24 import com.google.common.util.concurrent.ListenableFuture;
25 import com.google.gson.Gson; 25 import com.google.gson.Gson;
26 -import com.google.gson.JsonArray;  
27 import com.google.gson.JsonObject; 26 import com.google.gson.JsonObject;
28 import com.google.gson.JsonParser; 27 import com.google.gson.JsonParser;
29 import org.thingsboard.server.actors.ActorSystemContext; 28 import org.thingsboard.server.actors.ActorSystemContext;
@@ -47,7 +46,7 @@ import org.thingsboard.server.common.msg.core.AttributesUpdateRequest; @@ -47,7 +46,7 @@ import org.thingsboard.server.common.msg.core.AttributesUpdateRequest;
47 import org.thingsboard.server.common.msg.core.BasicCommandAckResponse; 46 import org.thingsboard.server.common.msg.core.BasicCommandAckResponse;
48 import org.thingsboard.server.common.msg.core.BasicGetAttributesResponse; 47 import org.thingsboard.server.common.msg.core.BasicGetAttributesResponse;
49 import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse; 48 import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse;
50 -import org.thingsboard.server.common.msg.core.BasicToDeviceSessionActorMsg; 49 +import org.thingsboard.server.common.msg.core.BasicActorSystemToDeviceSessionActorMsg;
51 import org.thingsboard.server.common.msg.core.GetAttributesRequest; 50 import org.thingsboard.server.common.msg.core.GetAttributesRequest;
52 import org.thingsboard.server.common.msg.core.RuleEngineError; 51 import org.thingsboard.server.common.msg.core.RuleEngineError;
53 import org.thingsboard.server.common.msg.core.RuleEngineErrorMsg; 52 import org.thingsboard.server.common.msg.core.RuleEngineErrorMsg;
@@ -57,13 +56,12 @@ import org.thingsboard.server.common.msg.core.SessionOpenMsg; @@ -57,13 +56,12 @@ import org.thingsboard.server.common.msg.core.SessionOpenMsg;
57 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; 56 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
58 import org.thingsboard.server.common.msg.core.ToDeviceRpcRequestMsg; 57 import org.thingsboard.server.common.msg.core.ToDeviceRpcRequestMsg;
59 import org.thingsboard.server.common.msg.core.ToDeviceRpcResponseMsg; 58 import org.thingsboard.server.common.msg.core.ToDeviceRpcResponseMsg;
60 -import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; 59 +import org.thingsboard.server.common.msg.core.ActorSystemToDeviceSessionActorMsg;
61 import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg; 60 import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg;
62 import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; 61 import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
63 import org.thingsboard.server.common.msg.kv.BasicAttributeKVMsg; 62 import org.thingsboard.server.common.msg.kv.BasicAttributeKVMsg;
64 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 63 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
65 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 64 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
66 -import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;  
67 import org.thingsboard.server.common.msg.session.SessionMsgType; 65 import org.thingsboard.server.common.msg.session.SessionMsgType;
68 import org.thingsboard.server.common.msg.session.SessionType; 66 import org.thingsboard.server.common.msg.session.SessionType;
69 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 67 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
@@ -74,7 +72,6 @@ import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotific @@ -74,7 +72,6 @@ import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotific
74 import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg; 72 import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg;
75 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; 73 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
76 import org.thingsboard.server.extensions.api.plugins.msg.RpcError; 74 import org.thingsboard.server.extensions.api.plugins.msg.RpcError;
77 -import org.thingsboard.server.gen.cluster.ClusterAPIProtos;  
78 import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg; 75 import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg;
79 import org.thingsboard.server.service.rpc.ToServerRpcResponseActorMsg; 76 import org.thingsboard.server.service.rpc.ToServerRpcResponseActorMsg;
80 77
@@ -156,7 +153,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -156,7 +153,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
156 boolean sent = rpcSubscriptions.size() > 0; 153 boolean sent = rpcSubscriptions.size() > 0;
157 Set<SessionId> syncSessionSet = new HashSet<>(); 154 Set<SessionId> syncSessionSet = new HashSet<>();
158 rpcSubscriptions.entrySet().forEach(sub -> { 155 rpcSubscriptions.entrySet().forEach(sub -> {
159 - ToDeviceSessionActorMsg response = new BasicToDeviceSessionActorMsg(rpcRequest, sub.getKey()); 156 + ActorSystemToDeviceSessionActorMsg response = new BasicActorSystemToDeviceSessionActorMsg(rpcRequest, sub.getKey());
160 sendMsgToSessionActor(response, sub.getValue().getServer()); 157 sendMsgToSessionActor(response, sub.getValue().getServer());
161 if (SessionType.SYNC == sub.getValue().getType()) { 158 if (SessionType.SYNC == sub.getValue().getType()) {
162 syncSessionSet.add(sub.getKey()); 159 syncSessionSet.add(sub.getKey());
@@ -198,7 +195,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -198,7 +195,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
198 if (data != null) { 195 if (data != null) {
199 logger.debug("[{}] Queue put [{}] timeout detected!", deviceId, msg.getId()); 196 logger.debug("[{}] Queue put [{}] timeout detected!", deviceId, msg.getId());
200 ToDeviceMsg toDeviceMsg = new RuleEngineErrorMsg(data.getSessionMsgType(), RuleEngineError.QUEUE_PUT_TIMEOUT); 197 ToDeviceMsg toDeviceMsg = new RuleEngineErrorMsg(data.getSessionMsgType(), RuleEngineError.QUEUE_PUT_TIMEOUT);
201 - sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServerAddress()); 198 + sendMsgToSessionActor(new BasicActorSystemToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServerAddress());
202 } 199 }
203 } 200 }
204 201
@@ -210,7 +207,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -210,7 +207,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
210 logger.debug("[{}] Queue put [{}] ack detected. Remaining acks: {}!", deviceId, msg.getId(), remainingAcks); 207 logger.debug("[{}] Queue put [{}] ack detected. Remaining acks: {}!", deviceId, msg.getId(), remainingAcks);
211 if (remainingAcks == 0) { 208 if (remainingAcks == 0) {
212 ToDeviceMsg toDeviceMsg = BasicStatusCodeResponse.onSuccess(data.getSessionMsgType(), data.getRequestId()); 209 ToDeviceMsg toDeviceMsg = BasicStatusCodeResponse.onSuccess(data.getSessionMsgType(), data.getRequestId());
213 - sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServerAddress()); 210 + sendMsgToSessionActor(new BasicActorSystemToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServerAddress());
214 } 211 }
215 } 212 }
216 } 213 }
@@ -248,7 +245,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -248,7 +245,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
248 body.getMethod(), 245 body.getMethod(),
249 body.getParams() 246 body.getParams()
250 ); 247 );
251 - ToDeviceSessionActorMsg response = new BasicToDeviceSessionActorMsg(rpcRequest, sessionId); 248 + ActorSystemToDeviceSessionActorMsg response = new BasicActorSystemToDeviceSessionActorMsg(rpcRequest, sessionId);
252 sendMsgToSessionActor(response, server); 249 sendMsgToSessionActor(response, server);
253 }; 250 };
254 } 251 }
@@ -302,14 +299,14 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -302,14 +299,14 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
302 public void onSuccess(@Nullable List<List<AttributeKvEntry>> result) { 299 public void onSuccess(@Nullable List<List<AttributeKvEntry>> result) {
303 BasicGetAttributesResponse response = BasicGetAttributesResponse.onSuccess(request.getMsgType(), 300 BasicGetAttributesResponse response = BasicGetAttributesResponse.onSuccess(request.getMsgType(),
304 request.getRequestId(), BasicAttributeKVMsg.from(result.get(0), result.get(1))); 301 request.getRequestId(), BasicAttributeKVMsg.from(result.get(0), result.get(1)));
305 - sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(response, src.getSessionId()), src.getServerAddress()); 302 + sendMsgToSessionActor(new BasicActorSystemToDeviceSessionActorMsg(response, src.getSessionId()), src.getServerAddress());
306 } 303 }
307 304
308 @Override 305 @Override
309 public void onFailure(Throwable t) { 306 public void onFailure(Throwable t) {
310 if (t instanceof Exception) { 307 if (t instanceof Exception) {
311 ToDeviceMsg toDeviceMsg = BasicStatusCodeResponse.onError(SessionMsgType.GET_ATTRIBUTES_REQUEST, request.getRequestId(), (Exception) t); 308 ToDeviceMsg toDeviceMsg = BasicStatusCodeResponse.onError(SessionMsgType.GET_ATTRIBUTES_REQUEST, request.getRequestId(), (Exception) t);
312 - sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(toDeviceMsg, src.getSessionId()), src.getServerAddress()); 309 + sendMsgToSessionActor(new BasicActorSystemToDeviceSessionActorMsg(toDeviceMsg, src.getSessionId()), src.getServerAddress());
313 } else { 310 } else {
314 logger.error("[{}] Failed to process attributes request", deviceId, t); 311 logger.error("[{}] Failed to process attributes request", deviceId, t);
315 } 312 }
@@ -391,14 +388,14 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -391,14 +388,14 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
391 if (data != null) { 388 if (data != null) {
392 logger.debug("[{}] Client side RPC request [{}] timeout detected!", deviceId, msg.getId()); 389 logger.debug("[{}] Client side RPC request [{}] timeout detected!", deviceId, msg.getId());
393 ToDeviceMsg toDeviceMsg = new RuleEngineErrorMsg(SessionMsgType.TO_SERVER_RPC_REQUEST, RuleEngineError.TIMEOUT); 390 ToDeviceMsg toDeviceMsg = new RuleEngineErrorMsg(SessionMsgType.TO_SERVER_RPC_REQUEST, RuleEngineError.TIMEOUT);
394 - sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServer()); 391 + sendMsgToSessionActor(new BasicActorSystemToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServer());
395 } 392 }
396 } 393 }
397 394
398 void processToServerRPCResponse(ActorContext context, ToServerRpcResponseActorMsg msg) { 395 void processToServerRPCResponse(ActorContext context, ToServerRpcResponseActorMsg msg) {
399 ToServerRpcRequestMetadata data = toServerRpcPendingMap.remove(msg.getMsg().getRequestId()); 396 ToServerRpcRequestMetadata data = toServerRpcPendingMap.remove(msg.getMsg().getRequestId());
400 if (data != null) { 397 if (data != null) {
401 - sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(msg.getMsg(), data.getSessionId()), data.getServer()); 398 + sendMsgToSessionActor(new BasicActorSystemToDeviceSessionActorMsg(msg.getMsg(), data.getSessionId()), data.getServer());
402 } 399 }
403 } 400 }
404 401
@@ -409,7 +406,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -409,7 +406,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
409 pendingMsgs.put(tbMsg.getId(), pendingMsgData); 406 pendingMsgs.put(tbMsg.getId(), pendingMsgData);
410 scheduleMsgWithDelay(context, new DeviceActorQueueTimeoutMsg(tbMsg.getId(), systemContext.getQueuePersistenceTimeout()), systemContext.getQueuePersistenceTimeout()); 407 scheduleMsgWithDelay(context, new DeviceActorQueueTimeoutMsg(tbMsg.getId(), systemContext.getQueuePersistenceTimeout()), systemContext.getQueuePersistenceTimeout());
411 } else { 408 } else {
412 - ToDeviceSessionActorMsg response = new BasicToDeviceSessionActorMsg(BasicStatusCodeResponse.onSuccess(sessionMsgType, requestId), pendingMsgData.getSessionId()); 409 + ActorSystemToDeviceSessionActorMsg response = new BasicActorSystemToDeviceSessionActorMsg(BasicStatusCodeResponse.onSuccess(sessionMsgType, requestId), pendingMsgData.getSessionId());
413 sendMsgToSessionActor(response, pendingMsgData.getServerAddress()); 410 sendMsgToSessionActor(response, pendingMsgData.getServerAddress());
414 } 411 }
415 context.parent().tell(new DeviceActorToRuleEngineMsg(context.self(), tbMsg), context.self()); 412 context.parent().tell(new DeviceActorToRuleEngineMsg(context.self(), tbMsg), context.self());
@@ -436,7 +433,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -436,7 +433,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
436 if (notification != null) { 433 if (notification != null) {
437 ToDeviceMsg finalNotification = notification; 434 ToDeviceMsg finalNotification = notification;
438 attributeSubscriptions.entrySet().forEach(sub -> { 435 attributeSubscriptions.entrySet().forEach(sub -> {
439 - ToDeviceSessionActorMsg response = new BasicToDeviceSessionActorMsg(finalNotification, sub.getKey()); 436 + ActorSystemToDeviceSessionActorMsg response = new BasicActorSystemToDeviceSessionActorMsg(finalNotification, sub.getKey());
440 sendMsgToSessionActor(response, sub.getValue().getServer()); 437 sendMsgToSessionActor(response, sub.getValue().getServer());
441 }); 438 });
442 } 439 }
@@ -462,7 +459,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -462,7 +459,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
462 BasicCommandAckResponse response = success 459 BasicCommandAckResponse response = success
463 ? BasicCommandAckResponse.onSuccess(SessionMsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId()) 460 ? BasicCommandAckResponse.onSuccess(SessionMsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId())
464 : BasicCommandAckResponse.onError(SessionMsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId(), new TimeoutException()); 461 : BasicCommandAckResponse.onError(SessionMsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId(), new TimeoutException());
465 - sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(response, msg.getSessionId()), msg.getServerAddress()); 462 + sendMsgToSessionActor(new BasicActorSystemToDeviceSessionActorMsg(response, msg.getSessionId()), msg.getServerAddress());
466 } 463 }
467 } 464 }
468 } 465 }
@@ -517,7 +514,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -517,7 +514,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
517 } 514 }
518 } 515 }
519 516
520 - private void sendMsgToSessionActor(ToDeviceSessionActorMsg response, Optional<ServerAddress> sessionAddress) { 517 + private void sendMsgToSessionActor(ActorSystemToDeviceSessionActorMsg response, Optional<ServerAddress> sessionAddress) {
521 if (sessionAddress.isPresent()) { 518 if (sessionAddress.isPresent()) {
522 ServerAddress address = sessionAddress.get(); 519 ServerAddress address = sessionAddress.get();
523 logger.debug("{} Forwarding msg: {}", address, response); 520 logger.debug("{} Forwarding msg: {}", address, response);
@@ -530,7 +527,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -530,7 +527,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
530 527
531 void processCredentialsUpdate() { 528 void processCredentialsUpdate() {
532 sessions.forEach((k, v) -> { 529 sessions.forEach((k, v) -> {
533 - sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(new SessionCloseNotification(), k), v.getServer()); 530 + sendMsgToSessionActor(new BasicActorSystemToDeviceSessionActorMsg(new SessionCloseNotification(), k), v.getServer());
534 }); 531 });
535 attributeSubscriptions.clear(); 532 attributeSubscriptions.clear();
536 rpcSubscriptions.clear(); 533 rpcSubscriptions.clear();
@@ -43,6 +43,7 @@ import org.thingsboard.server.dao.user.UserService; @@ -43,6 +43,7 @@ import org.thingsboard.server.dao.user.UserService;
43 import org.thingsboard.server.service.script.NashornJsEngine; 43 import org.thingsboard.server.service.script.NashornJsEngine;
44 import scala.concurrent.duration.Duration; 44 import scala.concurrent.duration.Duration;
45 45
  46 +import java.util.Collections;
46 import java.util.List; 47 import java.util.List;
47 import java.util.Set; 48 import java.util.Set;
48 import java.util.concurrent.TimeUnit; 49 import java.util.concurrent.TimeUnit;
@@ -63,15 +64,24 @@ class DefaultTbContext implements TbContext { @@ -63,15 +64,24 @@ class DefaultTbContext implements TbContext {
63 64
64 @Override 65 @Override
65 public void tellNext(TbMsg msg, String relationType) { 66 public void tellNext(TbMsg msg, String relationType) {
66 - tellNext(msg, relationType, null); 67 + tellNext(msg, Collections.singleton(relationType), null);
  68 + }
  69 +
  70 + @Override
  71 + public void tellNext(TbMsg msg, Set<String> relationTypes) {
  72 + tellNext(msg, relationTypes, null);
67 } 73 }
68 74
69 @Override 75 @Override
70 public void tellNext(TbMsg msg, String relationType, Throwable th) { 76 public void tellNext(TbMsg msg, String relationType, Throwable th) {
  77 + tellNext(msg, Collections.singleton(relationType), th);
  78 + }
  79 +
  80 + private void tellNext(TbMsg msg, Set<String> relationTypes, Throwable th) {
71 if (nodeCtx.getSelf().isDebugMode()) { 81 if (nodeCtx.getSelf().isDebugMode()) {
72 - mainCtx.persistDebugOutput(nodeCtx.getTenantId(), nodeCtx.getSelf().getId(), msg, relationType, th); 82 + relationTypes.forEach(relationType -> mainCtx.persistDebugOutput(nodeCtx.getTenantId(), nodeCtx.getSelf().getId(), msg, relationType, th));
73 } 83 }
74 - nodeCtx.getChainActor().tell(new RuleNodeToRuleChainTellNextMsg(nodeCtx.getSelf().getId(), relationType, msg), nodeCtx.getSelfActor()); 84 + nodeCtx.getChainActor().tell(new RuleNodeToRuleChainTellNextMsg(nodeCtx.getSelf().getId(), relationTypes, msg), nodeCtx.getSelfActor());
75 } 85 }
76 86
77 @Override 87 @Override
@@ -118,12 +128,6 @@ class DefaultTbContext implements TbContext { @@ -118,12 +128,6 @@ class DefaultTbContext implements TbContext {
118 } 128 }
119 129
120 @Override 130 @Override
121 - public void tellNext(TbMsg msg, Set<String> relationTypes) {  
122 - //TODO: fix this to send set of relations instead of loop.  
123 - relationTypes.forEach(type -> tellNext(msg, type));  
124 - }  
125 -  
126 - @Override  
127 public ListeningExecutor getJsExecutor() { 131 public ListeningExecutor getJsExecutor() {
128 return mainCtx.getJsExecutor(); 132 return mainCtx.getJsExecutor();
129 } 133 }
@@ -54,6 +54,8 @@ public class RuleChainActor extends ComponentActor<RuleChainId, RuleChainActorMe @@ -54,6 +54,8 @@ public class RuleChainActor extends ComponentActor<RuleChainId, RuleChainActorMe
54 case RULE_CHAIN_TO_RULE_CHAIN_MSG: 54 case RULE_CHAIN_TO_RULE_CHAIN_MSG:
55 processor.onRuleChainToRuleChainMsg((RuleChainToRuleChainMsg) msg); 55 processor.onRuleChainToRuleChainMsg((RuleChainToRuleChainMsg) msg);
56 break; 56 break;
  57 + case CLUSTER_EVENT_MSG:
  58 + break;
57 default: 59 default:
58 return false; 60 return false;
59 } 61 }
@@ -206,9 +206,8 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh @@ -206,9 +206,8 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
206 void onTellNext(RuleNodeToRuleChainTellNextMsg envelope) { 206 void onTellNext(RuleNodeToRuleChainTellNextMsg envelope) {
207 checkActive(); 207 checkActive();
208 RuleNodeId originator = envelope.getOriginator(); 208 RuleNodeId originator = envelope.getOriginator();
209 - String targetRelationType = envelope.getRelationType();  
210 List<RuleNodeRelation> relations = nodeRoutes.get(originator).stream() 209 List<RuleNodeRelation> relations = nodeRoutes.get(originator).stream()
211 - .filter(r -> targetRelationType == null || targetRelationType.equalsIgnoreCase(r.getType())) 210 + .filter(r -> contains(envelope.getRelationTypes(), r.getType()))
212 .collect(Collectors.toList()); 211 .collect(Collectors.toList());
213 212
214 TbMsg msg = envelope.getMsg(); 213 TbMsg msg = envelope.getMsg();
@@ -237,6 +236,18 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh @@ -237,6 +236,18 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
237 } 236 }
238 } 237 }
239 238
  239 + private boolean contains(Set<String> relationTypes, String type) {
  240 + if (relationTypes == null) {
  241 + return true;
  242 + }
  243 + for (String relationType : relationTypes) {
  244 + if (relationType.equalsIgnoreCase(type)) {
  245 + return true;
  246 + }
  247 + }
  248 + return false;
  249 + }
  250 +
240 private void enqueueAndForwardMsgCopyToChain(TbMsg msg, EntityId target, String fromRelationType) { 251 private void enqueueAndForwardMsgCopyToChain(TbMsg msg, EntityId target, String fromRelationType) {
241 RuleChainId targetRCId = new RuleChainId(target.getId()); 252 RuleChainId targetRCId = new RuleChainId(target.getId());
242 TbMsg copyMsg = msg.copy(UUIDs.timeBased(), targetRCId, null, DEFAULT_CLUSTER_PARTITION); 253 TbMsg copyMsg = msg.copy(UUIDs.timeBased(), targetRCId, null, DEFAULT_CLUSTER_PARTITION);
@@ -21,6 +21,8 @@ import org.thingsboard.server.common.msg.MsgType; @@ -21,6 +21,8 @@ import org.thingsboard.server.common.msg.MsgType;
21 import org.thingsboard.server.common.msg.TbActorMsg; 21 import org.thingsboard.server.common.msg.TbActorMsg;
22 import org.thingsboard.server.common.msg.TbMsg; 22 import org.thingsboard.server.common.msg.TbMsg;
23 23
  24 +import java.util.Set;
  25 +
24 /** 26 /**
25 * Created by ashvayka on 19.03.18. 27 * Created by ashvayka on 19.03.18.
26 */ 28 */
@@ -28,7 +30,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -28,7 +30,7 @@ import org.thingsboard.server.common.msg.TbMsg;
28 final class RuleNodeToRuleChainTellNextMsg implements TbActorMsg { 30 final class RuleNodeToRuleChainTellNextMsg implements TbActorMsg {
29 31
30 private final RuleNodeId originator; 32 private final RuleNodeId originator;
31 - private final String relationType; 33 + private final Set<String> relationTypes;
32 private final TbMsg msg; 34 private final TbMsg msg;
33 35
34 @Override 36 @Override
@@ -39,8 +39,12 @@ public abstract class ContextAwareActor extends UntypedActor { @@ -39,8 +39,12 @@ public abstract class ContextAwareActor extends UntypedActor {
39 logger.debug("Processing msg: {}", msg); 39 logger.debug("Processing msg: {}", msg);
40 } 40 }
41 if (msg instanceof TbActorMsg) { 41 if (msg instanceof TbActorMsg) {
42 - if(!process((TbActorMsg) msg)){  
43 - logger.warning("Unknown message: {}!", msg); 42 + try {
  43 + if (!process((TbActorMsg) msg)) {
  44 + logger.warning("Unknown message: {}!", msg);
  45 + }
  46 + } catch (Exception e) {
  47 + throw e;
44 } 48 }
45 } else { 49 } else {
46 logger.warning("Unknown message: {}!", msg); 50 logger.warning("Unknown message: {}!", msg);
@@ -211,6 +211,10 @@ public class DefaultActorService implements ActorService { @@ -211,6 +211,10 @@ public class DefaultActorService implements ActorService {
211 @Override 211 @Override
212 public void onReceivedMsg(ServerAddress source, ClusterAPIProtos.ClusterMessage msg) { 212 public void onReceivedMsg(ServerAddress source, ClusterAPIProtos.ClusterMessage msg) {
213 ServerAddress serverAddress = new ServerAddress(source.getHost(), source.getPort()); 213 ServerAddress serverAddress = new ServerAddress(source.getHost(), source.getPort());
  214 + log.info("Received msg [{}] from [{}]", msg.getMessageType().name(), serverAddress);
  215 + if(log.isDebugEnabled()){
  216 + log.info("MSG: ", msg);
  217 + }
214 switch (msg.getMessageType()) { 218 switch (msg.getMessageType()) {
215 case CLUSTER_ACTOR_MESSAGE: 219 case CLUSTER_ACTOR_MESSAGE:
216 java.util.Optional<TbActorMsg> decodedMsg = actorContext.getEncodingService() 220 java.util.Optional<TbActorMsg> decodedMsg = actorContext.getEncodingService()
@@ -46,7 +46,7 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor { @@ -46,7 +46,7 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor {
46 } 46 }
47 47
48 @Override 48 @Override
49 - protected void processToDeviceActorMsg(ActorContext ctx, ToDeviceActorSessionMsg msg) { 49 + protected void processToDeviceActorMsg(ActorContext ctx, TransportToDeviceSessionActorMsg msg) {
50 updateSessionCtx(msg, SessionType.ASYNC); 50 updateSessionCtx(msg, SessionType.ASYNC);
51 if (firstMsg) { 51 if (firstMsg) {
52 toDeviceMsg(new SessionOpenMsg()).ifPresent(m -> forwardToAppActor(ctx, m)); 52 toDeviceMsg(new SessionOpenMsg()).ifPresent(m -> forwardToAppActor(ctx, m));
@@ -45,7 +45,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP @@ -45,7 +45,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
45 this.sessionId = sessionId; 45 this.sessionId = sessionId;
46 } 46 }
47 47
48 - protected abstract void processToDeviceActorMsg(ActorContext ctx, ToDeviceActorSessionMsg msg); 48 + protected abstract void processToDeviceActorMsg(ActorContext ctx, TransportToDeviceSessionActorMsg msg);
49 49
50 protected abstract void processTimeoutMsg(ActorContext context, SessionTimeoutMsg msg); 50 protected abstract void processTimeoutMsg(ActorContext context, SessionTimeoutMsg msg);
51 51
@@ -63,12 +63,12 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP @@ -63,12 +63,12 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
63 protected void cleanupSession(ActorContext ctx) { 63 protected void cleanupSession(ActorContext ctx) {
64 } 64 }
65 65
66 - protected void updateSessionCtx(ToDeviceActorSessionMsg msg, SessionType type) { 66 + protected void updateSessionCtx(TransportToDeviceSessionActorMsg msg, SessionType type) {
67 sessionCtx = msg.getSessionMsg().getSessionContext(); 67 sessionCtx = msg.getSessionMsg().getSessionContext();
68 deviceToDeviceActorMsgPrototype = new BasicDeviceToDeviceActorMsg(msg, type); 68 deviceToDeviceActorMsgPrototype = new BasicDeviceToDeviceActorMsg(msg, type);
69 } 69 }
70 70
71 - protected DeviceToDeviceActorMsg toDeviceMsg(ToDeviceActorSessionMsg msg) { 71 + protected DeviceToDeviceActorMsg toDeviceMsg(TransportToDeviceSessionActorMsg msg) {
72 AdaptorToSessionActorMsg adaptorMsg = msg.getSessionMsg(); 72 AdaptorToSessionActorMsg adaptorMsg = msg.getSessionMsg();
73 return new BasicDeviceToDeviceActorMsg(deviceToDeviceActorMsgPrototype, adaptorMsg.getMsg()); 73 return new BasicDeviceToDeviceActorMsg(deviceToDeviceActorMsgPrototype, adaptorMsg.getMsg());
74 } 74 }
@@ -17,7 +17,6 @@ package org.thingsboard.server.actors.session; @@ -17,7 +17,6 @@ package org.thingsboard.server.actors.session;
17 17
18 import akka.actor.OneForOneStrategy; 18 import akka.actor.OneForOneStrategy;
19 import akka.actor.SupervisorStrategy; 19 import akka.actor.SupervisorStrategy;
20 -import akka.japi.Function;  
21 import org.thingsboard.server.actors.ActorSystemContext; 20 import org.thingsboard.server.actors.ActorSystemContext;
22 import org.thingsboard.server.actors.service.ContextAwareActor; 21 import org.thingsboard.server.actors.service.ContextAwareActor;
23 import org.thingsboard.server.actors.service.ContextBasedCreator; 22 import org.thingsboard.server.actors.service.ContextBasedCreator;
@@ -25,8 +24,8 @@ import org.thingsboard.server.actors.shared.SessionTimeoutMsg; @@ -25,8 +24,8 @@ import org.thingsboard.server.actors.shared.SessionTimeoutMsg;
25 import org.thingsboard.server.common.data.id.SessionId; 24 import org.thingsboard.server.common.data.id.SessionId;
26 import org.thingsboard.server.common.msg.TbActorMsg; 25 import org.thingsboard.server.common.msg.TbActorMsg;
27 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; 26 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
28 -import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;  
29 -import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg; 27 +import org.thingsboard.server.common.msg.core.ActorSystemToDeviceSessionActorMsg;
  28 +import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
30 import org.thingsboard.server.common.msg.session.SessionCtrlMsg; 29 import org.thingsboard.server.common.msg.session.SessionCtrlMsg;
31 import org.thingsboard.server.common.msg.session.SessionMsg; 30 import org.thingsboard.server.common.msg.session.SessionMsg;
32 import org.thingsboard.server.common.msg.session.SessionType; 31 import org.thingsboard.server.common.msg.session.SessionType;
@@ -63,38 +62,37 @@ public class SessionActor extends ContextAwareActor { @@ -63,38 +62,37 @@ public class SessionActor extends ContextAwareActor {
63 62
64 @Override 63 @Override
65 protected boolean process(TbActorMsg msg) { 64 protected boolean process(TbActorMsg msg) {
66 - //TODO Move everything here, to work with TbActorMsg  
67 - return false;  
68 - }  
69 -  
70 - @Override  
71 - public void onReceive(Object msg) throws Exception {  
72 - logger.debug("[{}] Processing: {}.", sessionId, msg);  
73 - if (msg instanceof ToDeviceActorSessionMsg) {  
74 - processDeviceMsg((ToDeviceActorSessionMsg) msg);  
75 - } else if (msg instanceof ToDeviceSessionActorMsg) {  
76 - processToDeviceMsg((ToDeviceSessionActorMsg) msg);  
77 - } else if (msg instanceof SessionTimeoutMsg) {  
78 - processTimeoutMsg((SessionTimeoutMsg) msg);  
79 - } else if (msg instanceof SessionCtrlMsg) {  
80 - processSessionCtrlMsg((SessionCtrlMsg) msg);  
81 - } else if (msg instanceof ClusterEventMsg) {  
82 - processClusterEvent((ClusterEventMsg) msg);  
83 - } else {  
84 - logger.warning("[{}] Unknown msg: {}", sessionId, msg); 65 + switch (msg.getMsgType()) {
  66 + case TRANSPORT_TO_DEVICE_SESSION_ACTOR_MSG:
  67 + processTransportToSessionMsg((TransportToDeviceSessionActorMsg) msg);
  68 + break;
  69 + case ACTOR_SYSTEM_TO_DEVICE_SESSION_ACTOR_MSG:
  70 + processActorsToSessionMsg((ActorSystemToDeviceSessionActorMsg) msg);
  71 + break;
  72 + case SESSION_TIMEOUT_MSG:
  73 + processTimeoutMsg((SessionTimeoutMsg) msg);
  74 + break;
  75 + case SESSION_CTRL_MSG:
  76 + processSessionCloseMsg((SessionCtrlMsg) msg);
  77 + break;
  78 + case CLUSTER_EVENT_MSG:
  79 + processClusterEvent((ClusterEventMsg) msg);
  80 + break;
  81 + default: return false;
85 } 82 }
  83 + return true;
86 } 84 }
87 85
88 private void processClusterEvent(ClusterEventMsg msg) { 86 private void processClusterEvent(ClusterEventMsg msg) {
89 processor.processClusterEvent(context(), msg); 87 processor.processClusterEvent(context(), msg);
90 } 88 }
91 89
92 - private void processDeviceMsg(ToDeviceActorSessionMsg msg) { 90 + private void processTransportToSessionMsg(TransportToDeviceSessionActorMsg msg) {
93 initProcessor(msg); 91 initProcessor(msg);
94 processor.processToDeviceActorMsg(context(), msg); 92 processor.processToDeviceActorMsg(context(), msg);
95 } 93 }
96 94
97 - private void processToDeviceMsg(ToDeviceSessionActorMsg msg) { 95 + private void processActorsToSessionMsg(ActorSystemToDeviceSessionActorMsg msg) {
98 processor.processToDeviceMsg(context(), msg.getMsg()); 96 processor.processToDeviceMsg(context(), msg.getMsg());
99 } 97 }
100 98
@@ -106,7 +104,7 @@ public class SessionActor extends ContextAwareActor { @@ -106,7 +104,7 @@ public class SessionActor extends ContextAwareActor {
106 } 104 }
107 } 105 }
108 106
109 - private void processSessionCtrlMsg(SessionCtrlMsg msg) { 107 + private void processSessionCloseMsg(SessionCtrlMsg msg) {
110 if (processor != null) { 108 if (processor != null) {
111 processor.processSessionCtrlMsg(context(), msg); 109 processor.processSessionCtrlMsg(context(), msg);
112 } else if (msg instanceof SessionCloseMsg) { 110 } else if (msg instanceof SessionCloseMsg) {
@@ -116,7 +114,7 @@ public class SessionActor extends ContextAwareActor { @@ -116,7 +114,7 @@ public class SessionActor extends ContextAwareActor {
116 } 114 }
117 } 115 }
118 116
119 - private void initProcessor(ToDeviceActorSessionMsg msg) { 117 + private void initProcessor(TransportToDeviceSessionActorMsg msg) {
120 if (processor == null) { 118 if (processor == null) {
121 SessionMsg sessionMsg = (SessionMsg) msg.getSessionMsg(); 119 SessionMsg sessionMsg = (SessionMsg) msg.getSessionMsg();
122 if (sessionMsg.getSessionContext().getSessionType() == SessionType.SYNC) { 120 if (sessionMsg.getSessionContext().getSessionType() == SessionType.SYNC) {
@@ -17,7 +17,6 @@ package org.thingsboard.server.actors.session; @@ -17,7 +17,6 @@ package org.thingsboard.server.actors.session;
17 17
18 import java.util.HashMap; 18 import java.util.HashMap;
19 import java.util.Map; 19 import java.util.Map;
20 -import java.util.UUID;  
21 20
22 import akka.actor.*; 21 import akka.actor.*;
23 import org.thingsboard.server.actors.ActorSystemContext; 22 import org.thingsboard.server.actors.ActorSystemContext;
@@ -33,8 +32,9 @@ import akka.event.Logging; @@ -33,8 +32,9 @@ import akka.event.Logging;
33 import akka.event.LoggingAdapter; 32 import akka.event.LoggingAdapter;
34 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; 33 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
35 import org.thingsboard.server.common.msg.core.SessionCloseMsg; 34 import org.thingsboard.server.common.msg.core.SessionCloseMsg;
36 -import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; 35 +import org.thingsboard.server.common.msg.core.ActorSystemToDeviceSessionActorMsg;
37 import org.thingsboard.server.common.msg.session.SessionCtrlMsg; 36 import org.thingsboard.server.common.msg.session.SessionCtrlMsg;
  37 +import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
38 38
39 public class SessionManagerActor extends ContextAwareActor { 39 public class SessionManagerActor extends ContextAwareActor {
40 40
@@ -104,7 +104,7 @@ public class SessionManagerActor extends ContextAwareActor { @@ -104,7 +104,7 @@ public class SessionManagerActor extends ContextAwareActor {
104 } 104 }
105 105
106 private void forwardToSessionActor(SessionAwareMsg msg) { 106 private void forwardToSessionActor(SessionAwareMsg msg) {
107 - if (msg instanceof ToDeviceSessionActorMsg || msg instanceof SessionCloseMsg) { 107 + if (msg instanceof ActorSystemToDeviceSessionActorMsg || msg instanceof SessionCloseMsg) {
108 String sessionIdStr = msg.getSessionId().toUidStr(); 108 String sessionIdStr = msg.getSessionId().toUidStr();
109 ActorRef sessionActor = sessionActors.get(sessionIdStr); 109 ActorRef sessionActor = sessionActors.get(sessionIdStr);
110 if (sessionActor != null) { 110 if (sessionActor != null) {
@@ -22,7 +22,7 @@ import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; @@ -22,7 +22,7 @@ import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
22 import org.thingsboard.server.common.msg.cluster.ServerAddress; 22 import org.thingsboard.server.common.msg.cluster.ServerAddress;
23 import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; 23 import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
24 import org.thingsboard.server.common.msg.session.*; 24 import org.thingsboard.server.common.msg.session.*;
25 -import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg; 25 +import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
26 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg; 26 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
27 import org.thingsboard.server.common.msg.session.ex.SessionException; 27 import org.thingsboard.server.common.msg.session.ex.SessionException;
28 28
@@ -41,7 +41,7 @@ class SyncMsgProcessor extends AbstractSessionActorMsgProcessor { @@ -41,7 +41,7 @@ class SyncMsgProcessor extends AbstractSessionActorMsgProcessor {
41 } 41 }
42 42
43 @Override 43 @Override
44 - protected void processToDeviceActorMsg(ActorContext ctx, ToDeviceActorSessionMsg msg) { 44 + protected void processToDeviceActorMsg(ActorContext ctx, TransportToDeviceSessionActorMsg msg) {
45 updateSessionCtx(msg, SessionType.SYNC); 45 updateSessionCtx(msg, SessionType.SYNC);
46 pendingMsg = toDeviceMsg(msg); 46 pendingMsg = toDeviceMsg(msg);
47 pendingResponse = true; 47 pendingResponse = true;
@@ -17,13 +17,20 @@ package org.thingsboard.server.actors.shared; @@ -17,13 +17,20 @@ package org.thingsboard.server.actors.shared;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 import org.thingsboard.server.common.data.id.SessionId; 19 import org.thingsboard.server.common.data.id.SessionId;
  20 +import org.thingsboard.server.common.msg.MsgType;
  21 +import org.thingsboard.server.common.msg.TbActorMsg;
20 22
21 import java.io.Serializable; 23 import java.io.Serializable;
22 24
23 @Data 25 @Data
24 -public class SessionTimeoutMsg implements Serializable { 26 +public class SessionTimeoutMsg implements Serializable, TbActorMsg {
25 27
26 private static final long serialVersionUID = 1L; 28 private static final long serialVersionUID = 1L;
27 29
28 private final SessionId sessionId; 30 private final SessionId sessionId;
  31 +
  32 + @Override
  33 + public MsgType getMsgType() {
  34 + return MsgType.SESSION_TIMEOUT_MSG;
  35 + }
29 } 36 }
@@ -107,7 +107,7 @@ public class ConsistentClusterRoutingService implements ClusterRoutingService, D @@ -107,7 +107,7 @@ public class ConsistentClusterRoutingService implements ClusterRoutingService, D
107 107
108 @Override 108 @Override
109 public void onServerAdded(ServerInstance server) { 109 public void onServerAdded(ServerInstance server) {
110 - log.debug("On server added event: {}", server); 110 + log.info("On server added event: {}", server);
111 addNode(server); 111 addNode(server);
112 logCircle(); 112 logCircle();
113 } 113 }
@@ -119,7 +119,7 @@ public class ConsistentClusterRoutingService implements ClusterRoutingService, D @@ -119,7 +119,7 @@ public class ConsistentClusterRoutingService implements ClusterRoutingService, D
119 119
120 @Override 120 @Override
121 public void onServerRemoved(ServerInstance server) { 121 public void onServerRemoved(ServerInstance server) {
122 - log.debug("On server removed event: {}", server); 122 + log.info("On server removed event: {}", server);
123 removeNode(server); 123 removeNode(server);
124 logCircle(); 124 logCircle();
125 } 125 }
@@ -22,16 +22,11 @@ import io.grpc.stub.StreamObserver; @@ -22,16 +22,11 @@ import io.grpc.stub.StreamObserver;
22 import lombok.extern.slf4j.Slf4j; 22 import lombok.extern.slf4j.Slf4j;
23 import org.springframework.beans.factory.annotation.Autowired; 23 import org.springframework.beans.factory.annotation.Autowired;
24 import org.springframework.stereotype.Service; 24 import org.springframework.stereotype.Service;
25 -import org.springframework.util.SerializationUtils;  
26 import org.thingsboard.server.actors.rpc.RpcBroadcastMsg; 25 import org.thingsboard.server.actors.rpc.RpcBroadcastMsg;
27 import org.thingsboard.server.actors.rpc.RpcSessionCreateRequestMsg; 26 import org.thingsboard.server.actors.rpc.RpcSessionCreateRequestMsg;
28 -import org.thingsboard.server.common.data.id.EntityId;  
29 import org.thingsboard.server.common.msg.TbActorMsg; 27 import org.thingsboard.server.common.msg.TbActorMsg;
30 import org.thingsboard.server.common.msg.cluster.ServerAddress; 28 import org.thingsboard.server.common.msg.cluster.ServerAddress;
31 -import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;  
32 29
33 -import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;  
34 -import org.thingsboard.server.extensions.core.plugin.telemetry.sub.Subscription;  
35 import org.thingsboard.server.gen.cluster.ClusterAPIProtos; 30 import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
36 31
37 import org.thingsboard.server.gen.cluster.ClusterRpcServiceGrpc; 32 import org.thingsboard.server.gen.cluster.ClusterRpcServiceGrpc;
@@ -19,15 +19,7 @@ import io.grpc.stub.StreamObserver; @@ -19,15 +19,7 @@ import io.grpc.stub.StreamObserver;
19 import org.thingsboard.server.actors.rpc.RpcBroadcastMsg; 19 import org.thingsboard.server.actors.rpc.RpcBroadcastMsg;
20 import org.thingsboard.server.common.msg.TbActorMsg; 20 import org.thingsboard.server.common.msg.TbActorMsg;
21 import org.thingsboard.server.common.msg.cluster.ServerAddress; 21 import org.thingsboard.server.common.msg.cluster.ServerAddress;
22 -import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;  
23 -import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;  
24 -import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;  
25 -import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;  
26 -import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;  
27 -import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;  
28 -import org.thingsboard.server.extensions.core.plugin.telemetry.sub.Subscription;  
29 import org.thingsboard.server.gen.cluster.ClusterAPIProtos; 22 import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
30 -import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg;  
31 23
32 import java.util.UUID; 24 import java.util.UUID;
33 25
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 </encoder> 25 </encoder>
26 </appender> 26 </appender>
27 27
28 - <logger name="org.thingsboard.server" level="TRACE" /> 28 + <logger name="org.thingsboard.server" level="INFO" />
29 <logger name="akka" level="INFO" /> 29 <logger name="akka" level="INFO" />
30 30
31 <root level="INFO"> 31 <root level="INFO">
@@ -101,6 +101,6 @@ public enum MsgType { @@ -101,6 +101,6 @@ public enum MsgType {
101 /** 101 /**
102 * Message that is sent from Rule Engine to the Device Actor when message is successfully pushed to queue. 102 * Message that is sent from Rule Engine to the Device Actor when message is successfully pushed to queue.
103 */ 103 */
104 - RULE_ENGINE_QUEUE_PUT_ACK_MSG; 104 + RULE_ENGINE_QUEUE_PUT_ACK_MSG, ACTOR_SYSTEM_TO_DEVICE_SESSION_ACTOR_MSG, TRANSPORT_TO_DEVICE_SESSION_ACTOR_MSG, SESSION_TIMEOUT_MSG, SESSION_CTRL_MSG;
105 105
106 } 106 }
common/message/src/main/java/org/thingsboard/server/common/msg/core/ActorSystemToDeviceSessionActorMsg.java renamed from common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceSessionActorMsg.java
@@ -24,7 +24,7 @@ import java.io.Serializable; @@ -24,7 +24,7 @@ import java.io.Serializable;
24 /** 24 /**
25 * @author Andrew Shvayka 25 * @author Andrew Shvayka
26 */ 26 */
27 -public interface ToDeviceSessionActorMsg extends SessionAwareMsg, Serializable, TbActorMsg { 27 +public interface ActorSystemToDeviceSessionActorMsg extends SessionAwareMsg, Serializable, TbActorMsg {
28 28
29 ToDeviceMsg getMsg(); 29 ToDeviceMsg getMsg();
30 } 30 }
common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicActorSystemToDeviceSessionActorMsg.java renamed from common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicToDeviceSessionActorMsg.java
@@ -19,12 +19,12 @@ import org.thingsboard.server.common.data.id.SessionId; @@ -19,12 +19,12 @@ import org.thingsboard.server.common.data.id.SessionId;
19 import org.thingsboard.server.common.msg.MsgType; 19 import org.thingsboard.server.common.msg.MsgType;
20 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 20 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
21 21
22 -public class BasicToDeviceSessionActorMsg implements ToDeviceSessionActorMsg { 22 +public class BasicActorSystemToDeviceSessionActorMsg implements ActorSystemToDeviceSessionActorMsg {
23 23
24 private final ToDeviceMsg msg; 24 private final ToDeviceMsg msg;
25 private final SessionId sessionId; 25 private final SessionId sessionId;
26 26
27 - public BasicToDeviceSessionActorMsg(ToDeviceMsg msg, SessionId sessionId) { 27 + public BasicActorSystemToDeviceSessionActorMsg(ToDeviceMsg msg, SessionId sessionId) {
28 super(); 28 super();
29 this.msg = msg; 29 this.msg = msg;
30 this.sessionId = sessionId; 30 this.sessionId = sessionId;
@@ -47,6 +47,6 @@ public class BasicToDeviceSessionActorMsg implements ToDeviceSessionActorMsg { @@ -47,6 +47,6 @@ public class BasicToDeviceSessionActorMsg implements ToDeviceSessionActorMsg {
47 47
48 @Override 48 @Override
49 public MsgType getMsgType() { 49 public MsgType getMsgType() {
50 - return null; 50 + return MsgType.ACTOR_SYSTEM_TO_DEVICE_SESSION_ACTOR_MSG;
51 } 51 }
52 } 52 }
@@ -24,7 +24,7 @@ import org.thingsboard.server.common.msg.MsgType; @@ -24,7 +24,7 @@ import org.thingsboard.server.common.msg.MsgType;
24 import org.thingsboard.server.common.msg.cluster.ServerAddress; 24 import org.thingsboard.server.common.msg.cluster.ServerAddress;
25 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 25 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
26 import org.thingsboard.server.common.msg.session.SessionType; 26 import org.thingsboard.server.common.msg.session.SessionType;
27 -import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg; 27 +import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
28 28
29 import java.util.Optional; 29 import java.util.Optional;
30 30
@@ -45,7 +45,7 @@ public class BasicDeviceToDeviceActorMsg implements DeviceToDeviceActorMsg { @@ -45,7 +45,7 @@ public class BasicDeviceToDeviceActorMsg implements DeviceToDeviceActorMsg {
45 this(null, other.getTenantId(), other.getCustomerId(), other.getDeviceId(), other.getSessionId(), other.getSessionType(), msg); 45 this(null, other.getTenantId(), other.getCustomerId(), other.getDeviceId(), other.getSessionId(), other.getSessionType(), msg);
46 } 46 }
47 47
48 - public BasicDeviceToDeviceActorMsg(ToDeviceActorSessionMsg msg, SessionType sessionType) { 48 + public BasicDeviceToDeviceActorMsg(TransportToDeviceSessionActorMsg msg, SessionType sessionType) {
49 this(null, msg.getTenantId(), msg.getCustomerId(), msg.getDeviceId(), msg.getSessionId(), sessionType, msg.getSessionMsg().getMsg()); 49 this(null, msg.getTenantId(), msg.getCustomerId(), msg.getDeviceId(), msg.getSessionId(), sessionType, msg.getSessionMsg().getMsg());
50 } 50 }
51 51
common/message/src/main/java/org/thingsboard/server/common/msg/session/BasicTransportToDeviceSessionActorMsg.java renamed from common/message/src/main/java/org/thingsboard/server/common/msg/session/BasicToDeviceActorSessionMsg.java
@@ -20,15 +20,16 @@ import org.thingsboard.server.common.data.id.CustomerId; @@ -20,15 +20,16 @@ import org.thingsboard.server.common.data.id.CustomerId;
20 import org.thingsboard.server.common.data.id.DeviceId; 20 import org.thingsboard.server.common.data.id.DeviceId;
21 import org.thingsboard.server.common.data.id.SessionId; 21 import org.thingsboard.server.common.data.id.SessionId;
22 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
  23 +import org.thingsboard.server.common.msg.MsgType;
23 24
24 -public class BasicToDeviceActorSessionMsg implements ToDeviceActorSessionMsg { 25 +public class BasicTransportToDeviceSessionActorMsg implements TransportToDeviceSessionActorMsg {
25 26
26 private final TenantId tenantId; 27 private final TenantId tenantId;
27 private final CustomerId customerId; 28 private final CustomerId customerId;
28 private final DeviceId deviceId; 29 private final DeviceId deviceId;
29 private final AdaptorToSessionActorMsg msg; 30 private final AdaptorToSessionActorMsg msg;
30 31
31 - public BasicToDeviceActorSessionMsg(Device device, AdaptorToSessionActorMsg msg) { 32 + public BasicTransportToDeviceSessionActorMsg(Device device, AdaptorToSessionActorMsg msg) {
32 super(); 33 super();
33 this.tenantId = device.getTenantId(); 34 this.tenantId = device.getTenantId();
34 this.customerId = device.getCustomerId(); 35 this.customerId = device.getCustomerId();
@@ -36,13 +37,6 @@ public class BasicToDeviceActorSessionMsg implements ToDeviceActorSessionMsg { @@ -36,13 +37,6 @@ public class BasicToDeviceActorSessionMsg implements ToDeviceActorSessionMsg {
36 this.msg = msg; 37 this.msg = msg;
37 } 38 }
38 39
39 - public BasicToDeviceActorSessionMsg(ToDeviceActorSessionMsg deviceMsg) {  
40 - this.tenantId = deviceMsg.getTenantId();  
41 - this.customerId = deviceMsg.getCustomerId();  
42 - this.deviceId = deviceMsg.getDeviceId();  
43 - this.msg = deviceMsg.getSessionMsg();  
44 - }  
45 -  
46 @Override 40 @Override
47 public DeviceId getDeviceId() { 41 public DeviceId getDeviceId() {
48 return deviceId; 42 return deviceId;
@@ -69,8 +63,12 @@ public class BasicToDeviceActorSessionMsg implements ToDeviceActorSessionMsg { @@ -69,8 +63,12 @@ public class BasicToDeviceActorSessionMsg implements ToDeviceActorSessionMsg {
69 63
70 @Override 64 @Override
71 public String toString() { 65 public String toString() {
72 - return "BasicToDeviceActorSessionMsg [tenantId=" + tenantId + ", customerId=" + customerId + ", deviceId=" + deviceId + ", msg=" + msg 66 + return "BasicTransportToDeviceSessionActorMsg [tenantId=" + tenantId + ", customerId=" + customerId + ", deviceId=" + deviceId + ", msg=" + msg
73 + "]"; 67 + "]";
74 } 68 }
75 69
  70 + @Override
  71 + public MsgType getMsgType() {
  72 + return MsgType.TRANSPORT_TO_DEVICE_SESSION_ACTOR_MSG;
  73 + }
76 } 74 }
@@ -15,8 +15,9 @@ @@ -15,8 +15,9 @@
15 */ 15 */
16 package org.thingsboard.server.common.msg.session; 16 package org.thingsboard.server.common.msg.session;
17 17
  18 +import org.thingsboard.server.common.msg.TbActorMsg;
18 import org.thingsboard.server.common.msg.aware.SessionAwareMsg; 19 import org.thingsboard.server.common.msg.aware.SessionAwareMsg;
19 20
20 -public interface SessionCtrlMsg extends SessionAwareMsg { 21 +public interface SessionCtrlMsg extends SessionAwareMsg, TbActorMsg {
21 22
22 } 23 }
common/message/src/main/java/org/thingsboard/server/common/msg/session/TransportToDeviceSessionActorMsg.java renamed from common/message/src/main/java/org/thingsboard/server/common/msg/session/ToDeviceActorSessionMsg.java
@@ -15,12 +15,13 @@ @@ -15,12 +15,13 @@
15 */ 15 */
16 package org.thingsboard.server.common.msg.session; 16 package org.thingsboard.server.common.msg.session;
17 17
  18 +import org.thingsboard.server.common.msg.TbActorMsg;
18 import org.thingsboard.server.common.msg.aware.CustomerAwareMsg; 19 import org.thingsboard.server.common.msg.aware.CustomerAwareMsg;
19 import org.thingsboard.server.common.msg.aware.DeviceAwareMsg; 20 import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
20 import org.thingsboard.server.common.msg.aware.SessionAwareMsg; 21 import org.thingsboard.server.common.msg.aware.SessionAwareMsg;
21 import org.thingsboard.server.common.msg.aware.TenantAwareMsg; 22 import org.thingsboard.server.common.msg.aware.TenantAwareMsg;
22 23
23 -public interface ToDeviceActorSessionMsg extends DeviceAwareMsg, CustomerAwareMsg, TenantAwareMsg, SessionAwareMsg { 24 +public interface TransportToDeviceSessionActorMsg extends DeviceAwareMsg, CustomerAwareMsg, TenantAwareMsg, SessionAwareMsg, TbActorMsg {
24 25
25 AdaptorToSessionActorMsg getSessionMsg(); 26 AdaptorToSessionActorMsg getSessionMsg();
26 27
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
16 package org.thingsboard.server.common.msg.session.ctrl; 16 package org.thingsboard.server.common.msg.session.ctrl;
17 17
18 import org.thingsboard.server.common.data.id.SessionId; 18 import org.thingsboard.server.common.data.id.SessionId;
  19 +import org.thingsboard.server.common.msg.MsgType;
19 import org.thingsboard.server.common.msg.session.SessionCtrlMsg; 20 import org.thingsboard.server.common.msg.session.SessionCtrlMsg;
20 21
21 public class SessionCloseMsg implements SessionCtrlMsg { 22 public class SessionCloseMsg implements SessionCtrlMsg {
@@ -60,4 +61,8 @@ public class SessionCloseMsg implements SessionCtrlMsg { @@ -60,4 +61,8 @@ public class SessionCloseMsg implements SessionCtrlMsg {
60 return timeout; 61 return timeout;
61 } 62 }
62 63
  64 + @Override
  65 + public MsgType getMsgType() {
  66 + return MsgType.SESSION_CTRL_MSG;
  67 + }
63 } 68 }
@@ -59,7 +59,7 @@ @@ -59,7 +59,7 @@
59 <velocity.version>1.7</velocity.version> 59 <velocity.version>1.7</velocity.version>
60 <velocity-tools.version>2.0</velocity-tools.version> 60 <velocity-tools.version>2.0</velocity-tools.version>
61 <mail.version>1.4.3</mail.version> 61 <mail.version>1.4.3</mail.version>
62 - <curator.version>2.11.0</curator.version> 62 + <curator.version>4.0.1</curator.version>
63 <protobuf.version>3.0.2</protobuf.version> 63 <protobuf.version>3.0.2</protobuf.version>
64 <grpc.version>1.12.0</grpc.version> 64 <grpc.version>1.12.0</grpc.version>
65 <lombok.version>1.16.18</lombok.version> 65 <lombok.version>1.16.18</lombok.version>
@@ -38,8 +38,6 @@ import org.thingsboard.server.common.transport.quota.QuotaService; @@ -38,8 +38,6 @@ import org.thingsboard.server.common.transport.quota.QuotaService;
38 import org.thingsboard.server.transport.coap.adaptors.CoapTransportAdaptor; 38 import org.thingsboard.server.transport.coap.adaptors.CoapTransportAdaptor;
39 import org.thingsboard.server.transport.coap.session.CoapExchangeObserverProxy; 39 import org.thingsboard.server.transport.coap.session.CoapExchangeObserverProxy;
40 import org.thingsboard.server.transport.coap.session.CoapSessionCtx; 40 import org.thingsboard.server.transport.coap.session.CoapSessionCtx;
41 -import org.slf4j.Logger;  
42 -import org.slf4j.LoggerFactory;  
43 import org.springframework.util.ReflectionUtils; 41 import org.springframework.util.ReflectionUtils;
44 42
45 @Slf4j 43 @Slf4j
@@ -186,7 +184,7 @@ public class CoapTransportResource extends CoapResource { @@ -186,7 +184,7 @@ public class CoapTransportResource extends CoapResource {
186 throw new IllegalArgumentException("Unsupported msg type: " + type); 184 throw new IllegalArgumentException("Unsupported msg type: " + type);
187 } 185 }
188 log.trace("Processing msg: {}", msg); 186 log.trace("Processing msg: {}", msg);
189 - processor.process(new BasicToDeviceActorSessionMsg(ctx.getDevice(), msg)); 187 + processor.process(new BasicTransportToDeviceSessionActorMsg(ctx.getDevice(), msg));
190 } catch (AdaptorException e) { 188 } catch (AdaptorException e) {
191 log.debug("Failed to decode payload {}", e); 189 log.debug("Failed to decode payload {}", e);
192 exchange.respond(ResponseCode.BAD_REQUEST, e.getMessage()); 190 exchange.respond(ResponseCode.BAD_REQUEST, e.getMessage());
@@ -108,8 +108,8 @@ public class CoapServerTest { @@ -108,8 +108,8 @@ public class CoapServerTest {
108 108
109 @Override 109 @Override
110 public void process(SessionAwareMsg toActorMsg) { 110 public void process(SessionAwareMsg toActorMsg) {
111 - if (toActorMsg instanceof ToDeviceActorSessionMsg) {  
112 - AdaptorToSessionActorMsg sessionMsg = ((ToDeviceActorSessionMsg) toActorMsg).getSessionMsg(); 111 + if (toActorMsg instanceof TransportToDeviceSessionActorMsg) {
  112 + AdaptorToSessionActorMsg sessionMsg = ((TransportToDeviceSessionActorMsg) toActorMsg).getSessionMsg();
113 try { 113 try {
114 FromDeviceMsg deviceMsg = sessionMsg.getMsg(); 114 FromDeviceMsg deviceMsg = sessionMsg.getMsg();
115 ToDeviceMsg toDeviceMsg = null; 115 ToDeviceMsg toDeviceMsg = null;
@@ -30,7 +30,7 @@ import org.thingsboard.server.common.data.security.DeviceTokenCredentials; @@ -30,7 +30,7 @@ import org.thingsboard.server.common.data.security.DeviceTokenCredentials;
30 import org.thingsboard.server.common.msg.core.*; 30 import org.thingsboard.server.common.msg.core.*;
31 import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg; 31 import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg;
32 import org.thingsboard.server.common.msg.session.BasicAdaptorToSessionActorMsg; 32 import org.thingsboard.server.common.msg.session.BasicAdaptorToSessionActorMsg;
33 -import org.thingsboard.server.common.msg.session.BasicToDeviceActorSessionMsg; 33 +import org.thingsboard.server.common.msg.session.BasicTransportToDeviceSessionActorMsg;
34 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 34 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
35 import org.thingsboard.server.common.transport.SessionMsgProcessor; 35 import org.thingsboard.server.common.transport.SessionMsgProcessor;
36 import org.thingsboard.server.common.transport.adaptor.JsonConverter; 36 import org.thingsboard.server.common.transport.adaptor.JsonConverter;
@@ -219,7 +219,7 @@ public class DeviceApiController { @@ -219,7 +219,7 @@ public class DeviceApiController {
219 219
220 private void process(HttpSessionCtx ctx, FromDeviceMsg request) { 220 private void process(HttpSessionCtx ctx, FromDeviceMsg request) {
221 AdaptorToSessionActorMsg msg = new BasicAdaptorToSessionActorMsg(ctx, request); 221 AdaptorToSessionActorMsg msg = new BasicAdaptorToSessionActorMsg(ctx, request);
222 - processor.process(new BasicToDeviceActorSessionMsg(ctx.getDevice(), msg)); 222 + processor.process(new BasicTransportToDeviceSessionActorMsg(ctx.getDevice(), msg));
223 } 223 }
224 224
225 private boolean quotaExceeded(HttpServletRequest request, DeferredResult<ResponseEntity> responseWriter) { 225 private boolean quotaExceeded(HttpServletRequest request, DeferredResult<ResponseEntity> responseWriter) {
@@ -30,7 +30,7 @@ import org.thingsboard.server.common.data.Device; @@ -30,7 +30,7 @@ import org.thingsboard.server.common.data.Device;
30 import org.thingsboard.server.common.data.security.DeviceTokenCredentials; 30 import org.thingsboard.server.common.data.security.DeviceTokenCredentials;
31 import org.thingsboard.server.common.data.security.DeviceX509Credentials; 31 import org.thingsboard.server.common.data.security.DeviceX509Credentials;
32 import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg; 32 import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg;
33 -import org.thingsboard.server.common.msg.session.BasicToDeviceActorSessionMsg; 33 +import org.thingsboard.server.common.msg.session.BasicTransportToDeviceSessionActorMsg;
34 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg; 34 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
35 import org.thingsboard.server.common.transport.SessionMsgProcessor; 35 import org.thingsboard.server.common.transport.SessionMsgProcessor;
36 import org.thingsboard.server.common.transport.adaptor.AdaptorException; 36 import org.thingsboard.server.common.transport.adaptor.AdaptorException;
@@ -207,7 +207,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement @@ -207,7 +207,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
207 log.warn("[{}] Failed to process publish msg [{}][{}]", sessionId, topicName, msgId, e); 207 log.warn("[{}] Failed to process publish msg [{}][{}]", sessionId, topicName, msgId, e);
208 } 208 }
209 if (msg != null) { 209 if (msg != null) {
210 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), msg)); 210 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(), msg));
211 } else { 211 } else {
212 log.info("[{}] Closing current session due to invalid publish msg [{}][{}]", sessionId, topicName, msgId); 212 log.info("[{}] Closing current session due to invalid publish msg [{}][{}]", sessionId, topicName, msgId);
213 ctx.close(); 213 ctx.close();
@@ -227,11 +227,11 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement @@ -227,11 +227,11 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
227 try { 227 try {
228 if (topicName.equals(DEVICE_ATTRIBUTES_TOPIC)) { 228 if (topicName.equals(DEVICE_ATTRIBUTES_TOPIC)) {
229 AdaptorToSessionActorMsg msg = adaptor.convertToActorMsg(deviceSessionCtx, SUBSCRIBE_ATTRIBUTES_REQUEST, mqttMsg); 229 AdaptorToSessionActorMsg msg = adaptor.convertToActorMsg(deviceSessionCtx, SUBSCRIBE_ATTRIBUTES_REQUEST, mqttMsg);
230 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), msg)); 230 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(), msg));
231 grantedQoSList.add(getMinSupportedQos(reqQoS)); 231 grantedQoSList.add(getMinSupportedQos(reqQoS));
232 } else if (topicName.equals(DEVICE_RPC_REQUESTS_SUB_TOPIC)) { 232 } else if (topicName.equals(DEVICE_RPC_REQUESTS_SUB_TOPIC)) {
233 AdaptorToSessionActorMsg msg = adaptor.convertToActorMsg(deviceSessionCtx, SUBSCRIBE_RPC_COMMANDS_REQUEST, mqttMsg); 233 AdaptorToSessionActorMsg msg = adaptor.convertToActorMsg(deviceSessionCtx, SUBSCRIBE_RPC_COMMANDS_REQUEST, mqttMsg);
234 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), msg)); 234 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(), msg));
235 grantedQoSList.add(getMinSupportedQos(reqQoS)); 235 grantedQoSList.add(getMinSupportedQos(reqQoS));
236 } else if (topicName.equals(DEVICE_RPC_RESPONSE_SUB_TOPIC)) { 236 } else if (topicName.equals(DEVICE_RPC_RESPONSE_SUB_TOPIC)) {
237 grantedQoSList.add(getMinSupportedQos(reqQoS)); 237 grantedQoSList.add(getMinSupportedQos(reqQoS));
@@ -261,10 +261,10 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement @@ -261,10 +261,10 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
261 try { 261 try {
262 if (topicName.equals(DEVICE_ATTRIBUTES_TOPIC)) { 262 if (topicName.equals(DEVICE_ATTRIBUTES_TOPIC)) {
263 AdaptorToSessionActorMsg msg = adaptor.convertToActorMsg(deviceSessionCtx, UNSUBSCRIBE_ATTRIBUTES_REQUEST, mqttMsg); 263 AdaptorToSessionActorMsg msg = adaptor.convertToActorMsg(deviceSessionCtx, UNSUBSCRIBE_ATTRIBUTES_REQUEST, mqttMsg);
264 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), msg)); 264 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(), msg));
265 } else if (topicName.equals(DEVICE_RPC_REQUESTS_SUB_TOPIC)) { 265 } else if (topicName.equals(DEVICE_RPC_REQUESTS_SUB_TOPIC)) {
266 AdaptorToSessionActorMsg msg = adaptor.convertToActorMsg(deviceSessionCtx, UNSUBSCRIBE_RPC_COMMANDS_REQUEST, mqttMsg); 266 AdaptorToSessionActorMsg msg = adaptor.convertToActorMsg(deviceSessionCtx, UNSUBSCRIBE_RPC_COMMANDS_REQUEST, mqttMsg);
267 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), msg)); 267 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(), msg));
268 } else if (topicName.equals(DEVICE_ATTRIBUTES_RESPONSES_TOPIC)) { 268 } else if (topicName.equals(DEVICE_ATTRIBUTES_RESPONSES_TOPIC)) {
269 deviceSessionCtx.setDisallowAttributeResponses(); 269 deviceSessionCtx.setDisallowAttributeResponses();
270 } 270 }
@@ -30,7 +30,7 @@ import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry; @@ -30,7 +30,7 @@ import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
30 import org.thingsboard.server.common.data.relation.EntityRelation; 30 import org.thingsboard.server.common.data.relation.EntityRelation;
31 import org.thingsboard.server.common.msg.core.*; 31 import org.thingsboard.server.common.msg.core.*;
32 import org.thingsboard.server.common.msg.session.BasicAdaptorToSessionActorMsg; 32 import org.thingsboard.server.common.msg.session.BasicAdaptorToSessionActorMsg;
33 -import org.thingsboard.server.common.msg.session.BasicToDeviceActorSessionMsg; 33 +import org.thingsboard.server.common.msg.session.BasicTransportToDeviceSessionActorMsg;
34 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg; 34 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
35 import org.thingsboard.server.common.transport.SessionMsgProcessor; 35 import org.thingsboard.server.common.transport.SessionMsgProcessor;
36 import org.thingsboard.server.common.transport.adaptor.AdaptorException; 36 import org.thingsboard.server.common.transport.adaptor.AdaptorException;
@@ -96,8 +96,8 @@ public class GatewaySessionCtx { @@ -96,8 +96,8 @@ public class GatewaySessionCtx {
96 GatewayDeviceSessionCtx ctx = new GatewayDeviceSessionCtx(this, device); 96 GatewayDeviceSessionCtx ctx = new GatewayDeviceSessionCtx(this, device);
97 devices.put(deviceName, ctx); 97 devices.put(deviceName, ctx);
98 log.debug("[{}] Added device [{}] to the gateway session", gatewaySessionId, deviceName); 98 log.debug("[{}] Added device [{}] to the gateway session", gatewaySessionId, deviceName);
99 - processor.process(new BasicToDeviceActorSessionMsg(device, new BasicAdaptorToSessionActorMsg(ctx, new AttributesSubscribeMsg())));  
100 - processor.process(new BasicToDeviceActorSessionMsg(device, new BasicAdaptorToSessionActorMsg(ctx, new RpcSubscribeMsg()))); 99 + processor.process(new BasicTransportToDeviceSessionActorMsg(device, new BasicAdaptorToSessionActorMsg(ctx, new AttributesSubscribeMsg())));
  100 + processor.process(new BasicTransportToDeviceSessionActorMsg(device, new BasicAdaptorToSessionActorMsg(ctx, new RpcSubscribeMsg())));
101 } 101 }
102 } 102 }
103 103
@@ -136,7 +136,7 @@ public class GatewaySessionCtx { @@ -136,7 +136,7 @@ public class GatewaySessionCtx {
136 JsonConverter.parseWithTs(request, element.getAsJsonObject()); 136 JsonConverter.parseWithTs(request, element.getAsJsonObject());
137 } 137 }
138 GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName); 138 GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName);
139 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), 139 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(),
140 new BasicAdaptorToSessionActorMsg(deviceSessionCtx, request))); 140 new BasicAdaptorToSessionActorMsg(deviceSessionCtx, request)));
141 } 141 }
142 } else { 142 } else {
@@ -152,7 +152,7 @@ public class GatewaySessionCtx { @@ -152,7 +152,7 @@ public class GatewaySessionCtx {
152 Integer requestId = jsonObj.get("id").getAsInt(); 152 Integer requestId = jsonObj.get("id").getAsInt();
153 String data = jsonObj.get("data").toString(); 153 String data = jsonObj.get("data").toString();
154 GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName); 154 GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName);
155 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), 155 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(),
156 new BasicAdaptorToSessionActorMsg(deviceSessionCtx, new ToDeviceRpcResponseMsg(requestId, data)))); 156 new BasicAdaptorToSessionActorMsg(deviceSessionCtx, new ToDeviceRpcResponseMsg(requestId, data))));
157 } else { 157 } else {
158 throw new JsonSyntaxException(CAN_T_PARSE_VALUE + json); 158 throw new JsonSyntaxException(CAN_T_PARSE_VALUE + json);
@@ -174,7 +174,7 @@ public class GatewaySessionCtx { @@ -174,7 +174,7 @@ public class GatewaySessionCtx {
174 JsonObject deviceData = deviceEntry.getValue().getAsJsonObject(); 174 JsonObject deviceData = deviceEntry.getValue().getAsJsonObject();
175 request.add(JsonConverter.parseValues(deviceData).stream().map(kv -> new BaseAttributeKvEntry(kv, ts)).collect(Collectors.toList())); 175 request.add(JsonConverter.parseValues(deviceData).stream().map(kv -> new BaseAttributeKvEntry(kv, ts)).collect(Collectors.toList()));
176 GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName); 176 GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName);
177 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), 177 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(),
178 new BasicAdaptorToSessionActorMsg(deviceSessionCtx, request))); 178 new BasicAdaptorToSessionActorMsg(deviceSessionCtx, request)));
179 } 179 }
180 } else { 180 } else {
@@ -207,7 +207,7 @@ public class GatewaySessionCtx { @@ -207,7 +207,7 @@ public class GatewaySessionCtx {
207 request = new BasicGetAttributesRequest(requestId, null, keys); 207 request = new BasicGetAttributesRequest(requestId, null, keys);
208 } 208 }
209 GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName); 209 GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName);
210 - processor.process(new BasicToDeviceActorSessionMsg(deviceSessionCtx.getDevice(), 210 + processor.process(new BasicTransportToDeviceSessionActorMsg(deviceSessionCtx.getDevice(),
211 new BasicAdaptorToSessionActorMsg(deviceSessionCtx, request))); 211 new BasicAdaptorToSessionActorMsg(deviceSessionCtx, request)));
212 ack(msg); 212 ack(msg);
213 } else { 213 } else {