DeviceStateService: Add protection to skip devices with non existent tenant on added partitions.

This commit is contained in:
Igor Kulikov 2022-08-04 17:48:28 +03:00
parent 086168a758
commit a6aba737d4

View File

@ -349,7 +349,14 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService<Dev
Map<TopicPartitionInfo, List<DeviceIdInfo>> tpiDeviceMap = new HashMap<>(); Map<TopicPartitionInfo, List<DeviceIdInfo>> tpiDeviceMap = new HashMap<>();
for (DeviceIdInfo idInfo : deviceIdInfos) { for (DeviceIdInfo idInfo : deviceIdInfos) {
TopicPartitionInfo tpi = partitionService.resolve(ServiceType.TB_CORE, idInfo.getTenantId(), idInfo.getDeviceId()); TopicPartitionInfo tpi;
try {
tpi = partitionService.resolve(ServiceType.TB_CORE, idInfo.getTenantId(), idInfo.getDeviceId());
} catch (Exception e) {
log.warn("Failed to resolve partition for device with id [{}], tenant id [{}], customer id [{}]. Reason: {}",
idInfo.getDeviceId(), idInfo.getTenantId(), idInfo.getCustomerId(), e.getMessage());
continue;
}
if (addedPartitions.contains(tpi) && !deviceStates.containsKey(idInfo.getDeviceId())) { if (addedPartitions.contains(tpi) && !deviceStates.containsKey(idInfo.getDeviceId())) {
tpiDeviceMap.computeIfAbsent(tpi, tmp -> new ArrayList<>()).add(idInfo); tpiDeviceMap.computeIfAbsent(tpi, tmp -> new ArrayList<>()).add(idInfo);
} }