From d917c72d5198f4223fcf52b1e0e0a0f8904d74e6 Mon Sep 17 00:00:00 2001 From: Dmytro Skarzhynets Date: Fri, 6 Jun 2025 18:58:14 +0300 Subject: [PATCH] Use a callback to log errors on failure for improved error reporting --- .../state/DefaultDeviceStateService.java | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java index f46323f702..13745ae6ab 100644 --- a/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java @@ -604,19 +604,27 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService { - stateData.getState().setActive(active); - pushRuleEngineMessage(stateData, active ? TbMsgType.ACTIVITY_EVENT : TbMsgType.INACTIVITY_EVENT); - TbMsgMetaData metaData = stateData.getMetaData(); - notificationRuleProcessor.process(DeviceActivityTrigger.builder() - .tenantId(tenantId) - .customerId(stateData.getCustomerId()) - .deviceId(deviceId) - .active(active) - .deviceName(metaData.getValue("deviceName")) - .deviceType(metaData.getValue("deviceType")) - .deviceLabel(metaData.getValue("deviceLabel")) - .build()); + Futures.addCallback(save(tenantId, deviceId, ACTIVITY_STATE, active), new FutureCallback<>() { + @Override + public void onSuccess(Void success) { + stateData.getState().setActive(active); + pushRuleEngineMessage(stateData, active ? TbMsgType.ACTIVITY_EVENT : TbMsgType.INACTIVITY_EVENT); + TbMsgMetaData metaData = stateData.getMetaData(); + notificationRuleProcessor.process(DeviceActivityTrigger.builder() + .tenantId(tenantId) + .customerId(stateData.getCustomerId()) + .deviceId(deviceId) + .active(active) + .deviceName(metaData.getValue("deviceName")) + .deviceType(metaData.getValue("deviceType")) + .deviceLabel(metaData.getValue("deviceLabel")) + .build()); + } + + @Override + public void onFailure(@NonNull Throwable t) { + log.error("[{}][{}] Failed to change device activity status to '{}'. Device state data: {}", tenantId, deviceId, active, stateData, t); + } }, deviceStateCallbackExecutor); }