From f878df58a9027d9f47f0eec1ede2c867465e2882 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Wed, 14 Feb 2024 12:17:19 +0200 Subject: [PATCH] Fix NPE in transport rate limit service on tenant update --- .../limits/DefaultTransportRateLimitService.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/limits/DefaultTransportRateLimitService.java b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/limits/DefaultTransportRateLimitService.java index 58f94b0b00..473ecc39af 100644 --- a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/limits/DefaultTransportRateLimitService.java +++ b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/limits/DefaultTransportRateLimitService.java @@ -93,7 +93,7 @@ public class DefaultTransportRateLimitService implements TransportRateLimitServi EntityTransportRateLimits deviceRateLimitPrototype = createRateLimits(update.getProfile(), false); for (TenantId tenantId : update.getAffectedTenants()) { mergeLimits(tenantId, tenantRateLimitPrototype, perTenantLimits::get, perTenantLimits::put); - tenantDevices.get(tenantId).forEach(deviceId -> { + getTenantDevices(tenantId).forEach(deviceId -> { mergeLimits(deviceId, deviceRateLimitPrototype, perDeviceLimits::get, perDeviceLimits::put); }); } @@ -104,7 +104,7 @@ public class DefaultTransportRateLimitService implements TransportRateLimitServi EntityTransportRateLimits tenantRateLimitPrototype = createRateLimits(tenantProfileCache.get(tenantId), true); EntityTransportRateLimits deviceRateLimitPrototype = createRateLimits(tenantProfileCache.get(tenantId), false); mergeLimits(tenantId, tenantRateLimitPrototype, perTenantLimits::get, perTenantLimits::put); - tenantDevices.get(tenantId).forEach(deviceId -> { + getTenantDevices(tenantId).forEach(deviceId -> { mergeLimits(deviceId, deviceRateLimitPrototype, perDeviceLimits::get, perDeviceLimits::put); }); } @@ -259,8 +259,13 @@ public class DefaultTransportRateLimitService implements TransportRateLimitServi private EntityTransportRateLimits getDeviceRateLimits(TenantId tenantId, DeviceId deviceId) { return perDeviceLimits.computeIfAbsent(deviceId, k -> { EntityTransportRateLimits limits = createRateLimits(tenantProfileCache.get(tenantId), false); - tenantDevices.computeIfAbsent(tenantId, id -> ConcurrentHashMap.newKeySet()).add(deviceId); + getTenantDevices(tenantId).add(deviceId); return limits; }); } + + private Set getTenantDevices(TenantId tenantId) { + return tenantDevices.computeIfAbsent(tenantId, id -> ConcurrentHashMap.newKeySet()); + } + }