Browse Source

Fix NPE in transport rate limit service on tenant update

pull/10157/head
ViacheslavKlimov 3 years ago
parent
commit
f878df58a9
  1. 11
      common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/limits/DefaultTransportRateLimitService.java

11
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<DeviceId> getTenantDevices(TenantId tenantId) {
return tenantDevices.computeIfAbsent(tenantId, id -> ConcurrentHashMap.newKeySet());
}
}

Loading…
Cancel
Save