Commit a51c00bd10c6b254c85b47e320824d9854696143
Committed by
Andrew Shvayka
1 parent
327607e8
Session Activity reporting is isolated and supports short-lived sessions
Showing
13 changed files
with
123 additions
and
69 deletions
@@ -638,20 +638,22 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | @@ -638,20 +638,22 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { | ||
638 | UUID sessionId = getSessionId(sessionInfoProto); | 638 | UUID sessionId = getSessionId(sessionInfoProto); |
639 | Objects.requireNonNull(sessionId); | 639 | Objects.requireNonNull(sessionId); |
640 | 640 | ||
641 | - SessionInfoMetaData sessionMD = sessions.computeIfAbsent(sessionId, | ||
642 | - id -> new SessionInfoMetaData(new SessionInfo(SessionType.ASYNC, sessionInfoProto.getNodeId()), subscriptionInfo.getLastActivityTime())); | ||
643 | - | ||
644 | - sessionMD.setLastActivityTime(subscriptionInfo.getLastActivityTime()); | ||
645 | - sessionMD.setSubscribedToAttributes(subscriptionInfo.getAttributeSubscription()); | ||
646 | - sessionMD.setSubscribedToRPC(subscriptionInfo.getRpcSubscription()); | ||
647 | - if (subscriptionInfo.getAttributeSubscription()) { | ||
648 | - attributeSubscriptions.putIfAbsent(sessionId, sessionMD.getSessionInfo()); | ||
649 | - } | ||
650 | - if (subscriptionInfo.getRpcSubscription()) { | ||
651 | - rpcSubscriptions.putIfAbsent(sessionId, sessionMD.getSessionInfo()); | 641 | + SessionInfoMetaData sessionMD = sessions.get(sessionId); |
642 | + if (sessionMD != null) { | ||
643 | + sessionMD.setLastActivityTime(subscriptionInfo.getLastActivityTime()); | ||
644 | + sessionMD.setSubscribedToAttributes(subscriptionInfo.getAttributeSubscription()); | ||
645 | + sessionMD.setSubscribedToRPC(subscriptionInfo.getRpcSubscription()); | ||
646 | + if (subscriptionInfo.getAttributeSubscription()) { | ||
647 | + attributeSubscriptions.putIfAbsent(sessionId, sessionMD.getSessionInfo()); | ||
648 | + } | ||
649 | + if (subscriptionInfo.getRpcSubscription()) { | ||
650 | + rpcSubscriptions.putIfAbsent(sessionId, sessionMD.getSessionInfo()); | ||
651 | + } | ||
652 | } | 652 | } |
653 | systemContext.getDeviceStateService().onDeviceActivity(tenantId, deviceId, subscriptionInfo.getLastActivityTime()); | 653 | systemContext.getDeviceStateService().onDeviceActivity(tenantId, deviceId, subscriptionInfo.getLastActivityTime()); |
654 | - dumpSessions(); | 654 | + if (sessionMD != null) { |
655 | + dumpSessions(); | ||
656 | + } | ||
655 | } | 657 | } |
656 | 658 | ||
657 | void processCredentialsUpdate(TbActorMsg msg) { | 659 | void processCredentialsUpdate(TbActorMsg msg) { |
@@ -563,7 +563,7 @@ js: | @@ -563,7 +563,7 @@ js: | ||
563 | transport: | 563 | transport: |
564 | sessions: | 564 | sessions: |
565 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" | 565 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" |
566 | - report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:30000}" | 566 | + report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:3000}" |
567 | json: | 567 | json: |
568 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON | 568 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON |
569 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" | 569 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" |
@@ -115,7 +115,6 @@ public class DeviceApiController implements TbTransportService { | @@ -115,7 +115,6 @@ public class DeviceApiController implements TbTransportService { | ||
115 | TransportService transportService = transportContext.getTransportService(); | 115 | TransportService transportService = transportContext.getTransportService(); |
116 | transportService.process(sessionInfo, JsonConverter.convertToAttributesProto(new JsonParser().parse(json)), | 116 | transportService.process(sessionInfo, JsonConverter.convertToAttributesProto(new JsonParser().parse(json)), |
117 | new HttpOkCallback(responseWriter)); | 117 | new HttpOkCallback(responseWriter)); |
118 | - reportActivity(sessionInfo); | ||
119 | })); | 118 | })); |
120 | return responseWriter; | 119 | return responseWriter; |
121 | } | 120 | } |
@@ -129,7 +128,6 @@ public class DeviceApiController implements TbTransportService { | @@ -129,7 +128,6 @@ public class DeviceApiController implements TbTransportService { | ||
129 | TransportService transportService = transportContext.getTransportService(); | 128 | TransportService transportService = transportContext.getTransportService(); |
130 | transportService.process(sessionInfo, JsonConverter.convertToTelemetryProto(new JsonParser().parse(json)), | 129 | transportService.process(sessionInfo, JsonConverter.convertToTelemetryProto(new JsonParser().parse(json)), |
131 | new HttpOkCallback(responseWriter)); | 130 | new HttpOkCallback(responseWriter)); |
132 | - reportActivity(sessionInfo); | ||
133 | })); | 131 | })); |
134 | return responseWriter; | 132 | return responseWriter; |
135 | } | 133 | } |
@@ -419,14 +417,6 @@ public class DeviceApiController implements TbTransportService { | @@ -419,14 +417,6 @@ public class DeviceApiController implements TbTransportService { | ||
419 | 417 | ||
420 | } | 418 | } |
421 | 419 | ||
422 | - private void reportActivity(SessionInfoProto sessionInfo) { | ||
423 | - transportContext.getTransportService().process(sessionInfo, TransportProtos.SubscriptionInfoProto.newBuilder() | ||
424 | - .setAttributeSubscription(false) | ||
425 | - .setRpcSubscription(false) | ||
426 | - .setLastActivityTime(System.currentTimeMillis()) | ||
427 | - .build(), TransportServiceCallback.EMPTY); | ||
428 | - } | ||
429 | - | ||
430 | private static MediaType parseMediaType(String contentType) { | 420 | private static MediaType parseMediaType(String contentType) { |
431 | try { | 421 | try { |
432 | return MediaType.parseMediaType(contentType); | 422 | return MediaType.parseMediaType(contentType); |
@@ -908,7 +908,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl | @@ -908,7 +908,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl | ||
908 | * @param sessionInfo - | 908 | * @param sessionInfo - |
909 | */ | 909 | */ |
910 | private void reportActivityAndRegister(SessionInfoProto sessionInfo) { | 910 | private void reportActivityAndRegister(SessionInfoProto sessionInfo) { |
911 | - if (sessionInfo != null && transportService.reportActivity(sessionInfo) == null) { | 911 | + if (sessionInfo != null && !transportService.hasSession(sessionInfo)) { |
912 | sessionManager.register(sessionInfo); | 912 | sessionManager.register(sessionInfo); |
913 | this.reportActivitySubscription(sessionInfo); | 913 | this.reportActivitySubscription(sessionInfo); |
914 | } | 914 | } |
@@ -126,7 +126,7 @@ public interface TransportService { | @@ -126,7 +126,7 @@ public interface TransportService { | ||
126 | 126 | ||
127 | SessionMetaData registerSyncSession(SessionInfoProto sessionInfo, SessionMsgListener listener, long timeout); | 127 | SessionMetaData registerSyncSession(SessionInfoProto sessionInfo, SessionMsgListener listener, long timeout); |
128 | 128 | ||
129 | - SessionMetaData reportActivity(SessionInfoProto sessionInfo); | 129 | + void reportActivity(SessionInfoProto sessionInfo); |
130 | 130 | ||
131 | void deregisterSession(SessionInfoProto sessionInfo); | 131 | void deregisterSession(SessionInfoProto sessionInfo); |
132 | 132 | ||
@@ -135,4 +135,6 @@ public interface TransportService { | @@ -135,4 +135,6 @@ public interface TransportService { | ||
135 | void notifyAboutUplink(SessionInfoProto sessionInfo, TransportProtos.UplinkNotificationMsg build, TransportServiceCallback<Void> empty); | 135 | void notifyAboutUplink(SessionInfoProto sessionInfo, TransportProtos.UplinkNotificationMsg build, TransportServiceCallback<Void> empty); |
136 | 136 | ||
137 | ExecutorService getCallbackExecutor(); | 137 | ExecutorService getCallbackExecutor(); |
138 | + | ||
139 | + boolean hasSession(SessionInfoProto sessionInfo); | ||
138 | } | 140 | } |
@@ -95,10 +95,12 @@ import org.thingsboard.server.queue.util.TbTransportComponent; | @@ -95,10 +95,12 @@ import org.thingsboard.server.queue.util.TbTransportComponent; | ||
95 | import javax.annotation.PostConstruct; | 95 | import javax.annotation.PostConstruct; |
96 | import javax.annotation.PreDestroy; | 96 | import javax.annotation.PreDestroy; |
97 | import java.util.Collections; | 97 | import java.util.Collections; |
98 | +import java.util.HashSet; | ||
98 | import java.util.List; | 99 | import java.util.List; |
99 | import java.util.Map; | 100 | import java.util.Map; |
100 | import java.util.Optional; | 101 | import java.util.Optional; |
101 | import java.util.Random; | 102 | import java.util.Random; |
103 | +import java.util.Set; | ||
102 | import java.util.UUID; | 104 | import java.util.UUID; |
103 | import java.util.concurrent.ConcurrentHashMap; | 105 | import java.util.concurrent.ConcurrentHashMap; |
104 | import java.util.concurrent.ConcurrentMap; | 106 | import java.util.concurrent.ConcurrentMap; |
@@ -162,6 +164,7 @@ public class DefaultTransportService implements TransportService { | @@ -162,6 +164,7 @@ public class DefaultTransportService implements TransportService { | ||
162 | private ExecutorService mainConsumerExecutor; | 164 | private ExecutorService mainConsumerExecutor; |
163 | 165 | ||
164 | private final ConcurrentMap<UUID, SessionMetaData> sessions = new ConcurrentHashMap<>(); | 166 | private final ConcurrentMap<UUID, SessionMetaData> sessions = new ConcurrentHashMap<>(); |
167 | + private final ConcurrentMap<UUID, SessionActivityData> sessionsActivity = new ConcurrentHashMap<>(); | ||
165 | private final Map<String, RpcRequestMetadata> toServerRpcPendingMap = new ConcurrentHashMap<>(); | 168 | private final Map<String, RpcRequestMetadata> toServerRpcPendingMap = new ConcurrentHashMap<>(); |
166 | 169 | ||
167 | private volatile boolean stopped = false; | 170 | private volatile boolean stopped = false; |
@@ -545,8 +548,11 @@ public class DefaultTransportService implements TransportService { | @@ -545,8 +548,11 @@ public class DefaultTransportService implements TransportService { | ||
545 | @Override | 548 | @Override |
546 | public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.SubscribeToAttributeUpdatesMsg msg, TransportServiceCallback<Void> callback) { | 549 | public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.SubscribeToAttributeUpdatesMsg msg, TransportServiceCallback<Void> callback) { |
547 | if (checkLimits(sessionInfo, msg, callback)) { | 550 | if (checkLimits(sessionInfo, msg, callback)) { |
548 | - SessionMetaData sessionMetaData = reportActivityInternal(sessionInfo); | ||
549 | - sessionMetaData.setSubscribedToAttributes(!msg.getUnsubscribe()); | 551 | + SessionMetaData sessionMetaData = sessions.get(toSessionId(sessionInfo)); |
552 | + if (sessionMetaData != null) { | ||
553 | + sessionMetaData.setSubscribedToAttributes(!msg.getUnsubscribe()); | ||
554 | + } | ||
555 | + reportActivityInternal(sessionInfo); | ||
550 | sendToDeviceActor(sessionInfo, TransportToDeviceActorMsg.newBuilder().setSessionInfo(sessionInfo).setSubscribeToAttributes(msg).build(), | 556 | sendToDeviceActor(sessionInfo, TransportToDeviceActorMsg.newBuilder().setSessionInfo(sessionInfo).setSubscribeToAttributes(msg).build(), |
551 | new ApiStatsProxyCallback<>(getTenantId(sessionInfo), getCustomerId(sessionInfo), 1, callback)); | 557 | new ApiStatsProxyCallback<>(getTenantId(sessionInfo), getCustomerId(sessionInfo), 1, callback)); |
552 | } | 558 | } |
@@ -555,8 +561,11 @@ public class DefaultTransportService implements TransportService { | @@ -555,8 +561,11 @@ public class DefaultTransportService implements TransportService { | ||
555 | @Override | 561 | @Override |
556 | public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.SubscribeToRPCMsg msg, TransportServiceCallback<Void> callback) { | 562 | public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.SubscribeToRPCMsg msg, TransportServiceCallback<Void> callback) { |
557 | if (checkLimits(sessionInfo, msg, callback)) { | 563 | if (checkLimits(sessionInfo, msg, callback)) { |
558 | - SessionMetaData sessionMetaData = reportActivityInternal(sessionInfo); | ||
559 | - sessionMetaData.setSubscribedToRPC(!msg.getUnsubscribe()); | 564 | + SessionMetaData sessionMetaData = sessions.get(toSessionId(sessionInfo)); |
565 | + if (sessionMetaData != null) { | ||
566 | + sessionMetaData.setSubscribedToRPC(!msg.getUnsubscribe()); | ||
567 | + } | ||
568 | + reportActivityInternal(sessionInfo); | ||
560 | sendToDeviceActor(sessionInfo, TransportToDeviceActorMsg.newBuilder().setSessionInfo(sessionInfo).setSubscribeToRPC(msg).build(), | 569 | sendToDeviceActor(sessionInfo, TransportToDeviceActorMsg.newBuilder().setSessionInfo(sessionInfo).setSubscribeToRPC(msg).build(), |
561 | new ApiStatsProxyCallback<>(getTenantId(sessionInfo), getCustomerId(sessionInfo), 1, callback)); | 570 | new ApiStatsProxyCallback<>(getTenantId(sessionInfo), getCustomerId(sessionInfo), 1, callback)); |
562 | } | 571 | } |
@@ -668,52 +677,61 @@ public class DefaultTransportService implements TransportService { | @@ -668,52 +677,61 @@ public class DefaultTransportService implements TransportService { | ||
668 | } | 677 | } |
669 | 678 | ||
670 | @Override | 679 | @Override |
671 | - public SessionMetaData reportActivity(TransportProtos.SessionInfoProto sessionInfo) { | ||
672 | - return reportActivityInternal(sessionInfo); | 680 | + public void reportActivity(TransportProtos.SessionInfoProto sessionInfo) { |
681 | + reportActivityInternal(sessionInfo); | ||
673 | } | 682 | } |
674 | 683 | ||
675 | - private SessionMetaData reportActivityInternal(TransportProtos.SessionInfoProto sessionInfo) { | 684 | + private void reportActivityInternal(TransportProtos.SessionInfoProto sessionInfo) { |
676 | UUID sessionId = toSessionId(sessionInfo); | 685 | UUID sessionId = toSessionId(sessionInfo); |
677 | - SessionMetaData sessionMetaData = sessions.get(sessionId); | ||
678 | - if (sessionMetaData != null) { | ||
679 | - sessionMetaData.updateLastActivityTime(); | ||
680 | - } | ||
681 | - return sessionMetaData; | 686 | + SessionActivityData sessionMetaData = sessionsActivity.computeIfAbsent(sessionId, id -> new SessionActivityData(sessionInfo)); |
687 | + sessionMetaData.updateLastActivityTime(); | ||
682 | } | 688 | } |
683 | 689 | ||
684 | private void checkInactivityAndReportActivity() { | 690 | private void checkInactivityAndReportActivity() { |
685 | long expTime = System.currentTimeMillis() - sessionInactivityTimeout; | 691 | long expTime = System.currentTimeMillis() - sessionInactivityTimeout; |
686 | - sessions.forEach((uuid, sessionMD) -> { | ||
687 | - long lastActivityTime = sessionMD.getLastActivityTime(); | ||
688 | - TransportProtos.SessionInfoProto sessionInfo = sessionMD.getSessionInfo(); | ||
689 | - if (sessionInfo.getGwSessionIdMSB() != 0 && | ||
690 | - sessionInfo.getGwSessionIdLSB() != 0) { | ||
691 | - SessionMetaData gwMetaData = sessions.get(new UUID(sessionInfo.getGwSessionIdMSB(), sessionInfo.getGwSessionIdLSB())); | 692 | + Set<UUID> sessionsToRemove = new HashSet<>(); |
693 | + sessionsActivity.forEach((uuid, sessionAD) -> { | ||
694 | + long lastActivityTime = sessionAD.getLastActivityTime(); | ||
695 | + SessionMetaData sessionMD = sessions.get(uuid); | ||
696 | + if (sessionMD != null) { | ||
697 | + sessionAD.setSessionInfo(sessionMD.getSessionInfo()); | ||
698 | + } else { | ||
699 | + sessionsToRemove.add(uuid); | ||
700 | + } | ||
701 | + TransportProtos.SessionInfoProto sessionInfo = sessionAD.getSessionInfo(); | ||
702 | + | ||
703 | + if (sessionInfo.getGwSessionIdMSB() != 0 && sessionInfo.getGwSessionIdLSB() != 0) { | ||
704 | + var gwSessionId = new UUID(sessionInfo.getGwSessionIdMSB(), sessionInfo.getGwSessionIdLSB()); | ||
705 | + SessionMetaData gwMetaData = sessions.get(gwSessionId); | ||
706 | + SessionActivityData gwActivityData = sessionsActivity.get(gwSessionId); | ||
692 | if (gwMetaData != null && gwMetaData.isOverwriteActivityTime()) { | 707 | if (gwMetaData != null && gwMetaData.isOverwriteActivityTime()) { |
693 | - lastActivityTime = Math.max(gwMetaData.getLastActivityTime(), lastActivityTime); | 708 | + lastActivityTime = Math.max(gwActivityData.getLastActivityTime(), lastActivityTime); |
694 | } | 709 | } |
695 | } | 710 | } |
696 | if (lastActivityTime < expTime) { | 711 | if (lastActivityTime < expTime) { |
697 | - if (log.isDebugEnabled()) { | ||
698 | - log.debug("[{}] Session has expired due to last activity time: {}", toSessionId(sessionInfo), lastActivityTime); | 712 | + if (sessionMD != null) { |
713 | + if (log.isDebugEnabled()) { | ||
714 | + log.debug("[{}] Session has expired due to last activity time: {}", toSessionId(sessionInfo), lastActivityTime); | ||
715 | + } | ||
716 | + sessions.remove(uuid); | ||
717 | + sessionsToRemove.add(uuid); | ||
718 | + process(sessionInfo, getSessionEventMsg(TransportProtos.SessionEvent.CLOSED), null); | ||
719 | + TransportProtos.SessionCloseNotificationProto sessionCloseNotificationProto = TransportProtos.SessionCloseNotificationProto | ||
720 | + .newBuilder() | ||
721 | + .setMessage("Session has expired due to last activity time!") | ||
722 | + .build(); | ||
723 | + sessionMD.getListener().onRemoteSessionCloseCommand(uuid, sessionCloseNotificationProto); | ||
699 | } | 724 | } |
700 | - process(sessionInfo, getSessionEventMsg(TransportProtos.SessionEvent.CLOSED), null); | ||
701 | - sessions.remove(uuid); | ||
702 | - TransportProtos.SessionCloseNotificationProto sessionCloseNotificationProto = TransportProtos.SessionCloseNotificationProto | ||
703 | - .newBuilder() | ||
704 | - .setMessage("session has expired due to last activity time!") | ||
705 | - .build(); | ||
706 | - sessionMD.getListener().onRemoteSessionCloseCommand(uuid, sessionCloseNotificationProto); | ||
707 | } else { | 725 | } else { |
708 | - if (lastActivityTime > sessionMD.getLastReportedActivityTime()) { | 726 | + if (lastActivityTime > sessionAD.getLastReportedActivityTime()) { |
709 | final long lastActivityTimeFinal = lastActivityTime; | 727 | final long lastActivityTimeFinal = lastActivityTime; |
710 | process(sessionInfo, TransportProtos.SubscriptionInfoProto.newBuilder() | 728 | process(sessionInfo, TransportProtos.SubscriptionInfoProto.newBuilder() |
711 | - .setAttributeSubscription(sessionMD.isSubscribedToAttributes()) | ||
712 | - .setRpcSubscription(sessionMD.isSubscribedToRPC()) | 729 | + .setAttributeSubscription(sessionMD != null && sessionMD.isSubscribedToAttributes()) |
730 | + .setRpcSubscription(sessionMD != null && sessionMD.isSubscribedToRPC()) | ||
713 | .setLastActivityTime(lastActivityTime).build(), new TransportServiceCallback<Void>() { | 731 | .setLastActivityTime(lastActivityTime).build(), new TransportServiceCallback<Void>() { |
714 | @Override | 732 | @Override |
715 | public void onSuccess(Void msg) { | 733 | public void onSuccess(Void msg) { |
716 | - sessionMD.setLastReportedActivityTime(lastActivityTimeFinal); | 734 | + sessionAD.setLastReportedActivityTime(lastActivityTimeFinal); |
717 | } | 735 | } |
718 | 736 | ||
719 | @Override | 737 | @Override |
@@ -724,6 +742,8 @@ public class DefaultTransportService implements TransportService { | @@ -724,6 +742,8 @@ public class DefaultTransportService implements TransportService { | ||
724 | } | 742 | } |
725 | } | 743 | } |
726 | }); | 744 | }); |
745 | + // Removes all closed or short-lived sessions. | ||
746 | + sessionsToRemove.forEach(sessionsActivity::remove); | ||
727 | } | 747 | } |
728 | 748 | ||
729 | @Override | 749 | @Override |
@@ -1146,4 +1166,9 @@ public class DefaultTransportService implements TransportService { | @@ -1146,4 +1166,9 @@ public class DefaultTransportService implements TransportService { | ||
1146 | public ExecutorService getCallbackExecutor() { | 1166 | public ExecutorService getCallbackExecutor() { |
1147 | return transportCallbackExecutor; | 1167 | return transportCallbackExecutor; |
1148 | } | 1168 | } |
1169 | + | ||
1170 | + @Override | ||
1171 | + public boolean hasSession(TransportProtos.SessionInfoProto sessionInfo) { | ||
1172 | + return sessions.containsKey(toSessionId(sessionInfo)); | ||
1173 | + } | ||
1149 | } | 1174 | } |
1 | +/** | ||
2 | + * Copyright © 2016-2021 The Thingsboard Authors | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.thingsboard.server.common.transport.service; | ||
17 | + | ||
18 | +import lombok.Data; | ||
19 | +import org.thingsboard.server.common.transport.SessionMsgListener; | ||
20 | +import org.thingsboard.server.gen.transport.TransportProtos; | ||
21 | + | ||
22 | +import java.util.concurrent.ScheduledFuture; | ||
23 | + | ||
24 | +/** | ||
25 | + * Created by ashvayka on 15.10.18. | ||
26 | + */ | ||
27 | +@Data | ||
28 | +public class SessionActivityData { | ||
29 | + | ||
30 | + private volatile TransportProtos.SessionInfoProto sessionInfo; | ||
31 | + private volatile long lastActivityTime; | ||
32 | + private volatile long lastReportedActivityTime; | ||
33 | + | ||
34 | + SessionActivityData(TransportProtos.SessionInfoProto sessionInfo) { | ||
35 | + this.sessionInfo = sessionInfo; | ||
36 | + } | ||
37 | + | ||
38 | + void updateLastActivityTime() { | ||
39 | + this.lastActivityTime = System.currentTimeMillis(); | ||
40 | + } | ||
41 | + | ||
42 | +} |
@@ -32,8 +32,6 @@ public class SessionMetaData { | @@ -32,8 +32,6 @@ public class SessionMetaData { | ||
32 | private final SessionMsgListener listener; | 32 | private final SessionMsgListener listener; |
33 | 33 | ||
34 | private volatile ScheduledFuture scheduledFuture; | 34 | private volatile ScheduledFuture scheduledFuture; |
35 | - private volatile long lastActivityTime; | ||
36 | - private volatile long lastReportedActivityTime; | ||
37 | private volatile boolean subscribedToAttributes; | 35 | private volatile boolean subscribedToAttributes; |
38 | private volatile boolean subscribedToRPC; | 36 | private volatile boolean subscribedToRPC; |
39 | private volatile boolean overwriteActivityTime; | 37 | private volatile boolean overwriteActivityTime; |
@@ -42,14 +40,9 @@ public class SessionMetaData { | @@ -42,14 +40,9 @@ public class SessionMetaData { | ||
42 | this.sessionInfo = sessionInfo; | 40 | this.sessionInfo = sessionInfo; |
43 | this.sessionType = sessionType; | 41 | this.sessionType = sessionType; |
44 | this.listener = listener; | 42 | this.listener = listener; |
45 | - this.lastActivityTime = System.currentTimeMillis(); | ||
46 | this.scheduledFuture = null; | 43 | this.scheduledFuture = null; |
47 | } | 44 | } |
48 | 45 | ||
49 | - void updateLastActivityTime() { | ||
50 | - this.lastActivityTime = System.currentTimeMillis(); | ||
51 | - } | ||
52 | - | ||
53 | void setScheduledFuture(ScheduledFuture scheduledFuture) { | 46 | void setScheduledFuture(ScheduledFuture scheduledFuture) { |
54 | this.scheduledFuture = scheduledFuture; | 47 | this.scheduledFuture = scheduledFuture; |
55 | } | 48 | } |
@@ -113,7 +113,7 @@ transport: | @@ -113,7 +113,7 @@ transport: | ||
113 | dtls_session_report_timeout: "${TB_COAP_X509_DTLS_SESSION_REPORT_TIMEOUT:1800000}" | 113 | dtls_session_report_timeout: "${TB_COAP_X509_DTLS_SESSION_REPORT_TIMEOUT:1800000}" |
114 | sessions: | 114 | sessions: |
115 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" | 115 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" |
116 | - report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:30000}" | 116 | + report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:3000}" |
117 | json: | 117 | json: |
118 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON | 118 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON |
119 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" | 119 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" |
@@ -85,7 +85,7 @@ transport: | @@ -85,7 +85,7 @@ transport: | ||
85 | max_request_timeout: "${HTTP_MAX_REQUEST_TIMEOUT:300000}" | 85 | max_request_timeout: "${HTTP_MAX_REQUEST_TIMEOUT:300000}" |
86 | sessions: | 86 | sessions: |
87 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" | 87 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" |
88 | - report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:30000}" | 88 | + report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:3000}" |
89 | json: | 89 | json: |
90 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON | 90 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON |
91 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" | 91 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" |
@@ -87,7 +87,7 @@ redis: | @@ -87,7 +87,7 @@ redis: | ||
87 | transport: | 87 | transport: |
88 | sessions: | 88 | sessions: |
89 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" | 89 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" |
90 | - report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:30000}" | 90 | + report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:3000}" |
91 | json: | 91 | json: |
92 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON | 92 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON |
93 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:false}" | 93 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:false}" |
@@ -118,7 +118,7 @@ transport: | @@ -118,7 +118,7 @@ transport: | ||
118 | skip_validity_check_for_client_cert: "${MQTT_SSL_SKIP_VALIDITY_CHECK_FOR_CLIENT_CERT:false}" | 118 | skip_validity_check_for_client_cert: "${MQTT_SSL_SKIP_VALIDITY_CHECK_FOR_CLIENT_CERT:false}" |
119 | sessions: | 119 | sessions: |
120 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" | 120 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" |
121 | - report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:30000}" | 121 | + report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:3000}" |
122 | json: | 122 | json: |
123 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON | 123 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON |
124 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" | 124 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" |
@@ -50,7 +50,7 @@ transport: | @@ -50,7 +50,7 @@ transport: | ||
50 | underlying_protocol: "${SNMP_UNDERLYING_PROTOCOL:udp}" | 50 | underlying_protocol: "${SNMP_UNDERLYING_PROTOCOL:udp}" |
51 | sessions: | 51 | sessions: |
52 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" | 52 | inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}" |
53 | - report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:30000}" | 53 | + report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:3000}" |
54 | json: | 54 | json: |
55 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON | 55 | # Cast String data types to Numeric if possible when processing Telemetry/Attributes JSON |
56 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" | 56 | type_cast_enabled: "${JSON_TYPE_CAST_ENABLED:true}" |