clear duplicated attribute keys before loading them from cache to avoid NPE
This commit is contained in:
parent
34e923422a
commit
672c05d9b7
@ -21,6 +21,7 @@ import org.thingsboard.server.dao.exception.IncorrectParameterException;
|
|||||||
import org.thingsboard.server.dao.service.Validator;
|
import org.thingsboard.server.dao.service.Validator;
|
||||||
|
|
||||||
public class AttributeUtils {
|
public class AttributeUtils {
|
||||||
|
|
||||||
public static void validate(EntityId id, String scope) {
|
public static void validate(EntityId id, String scope) {
|
||||||
Validator.validateId(id.getId(), "Incorrect id " + id);
|
Validator.validateId(id.getId(), "Incorrect id " + id);
|
||||||
Validator.validateString(scope, "Incorrect scope " + scope);
|
Validator.validateString(scope, "Incorrect scope " + scope);
|
||||||
|
|||||||
@ -42,6 +42,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -123,6 +124,7 @@ public class CachedAttributesService implements AttributesService {
|
|||||||
return result;
|
return result;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
cacheTransaction.rollback();
|
cacheTransaction.rollback();
|
||||||
|
log.debug("Could not find attribute from cache: [{}] [{}] [{}]", entityId, scope, attributeKey, e);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -132,6 +134,7 @@ public class CachedAttributesService implements AttributesService {
|
|||||||
@Override
|
@Override
|
||||||
public ListenableFuture<List<AttributeKvEntry>> find(TenantId tenantId, EntityId entityId, String scope, Collection<String> attributeKeys) {
|
public ListenableFuture<List<AttributeKvEntry>> find(TenantId tenantId, EntityId entityId, String scope, Collection<String> attributeKeys) {
|
||||||
validate(entityId, scope);
|
validate(entityId, scope);
|
||||||
|
attributeKeys = new LinkedHashSet<>(attributeKeys); // deduplicate the attributes
|
||||||
attributeKeys.forEach(attributeKey -> Validator.validateString(attributeKey, "Incorrect attribute key " + attributeKey));
|
attributeKeys.forEach(attributeKey -> Validator.validateString(attributeKey, "Incorrect attribute key " + attributeKey));
|
||||||
|
|
||||||
Map<String, TbCacheValueWrapper<AttributeKvEntry>> wrappedCachedAttributes = findCachedAttributes(entityId, scope, attributeKeys);
|
Map<String, TbCacheValueWrapper<AttributeKvEntry>> wrappedCachedAttributes = findCachedAttributes(entityId, scope, attributeKeys);
|
||||||
@ -170,6 +173,7 @@ public class CachedAttributesService implements AttributesService {
|
|||||||
return mergedAttributes;
|
return mergedAttributes;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
cacheTransaction.rollback();
|
cacheTransaction.rollback();
|
||||||
|
log.debug("Could not find attributes from cache: [{}] [{}] [{}]", entityId, scope, notFoundAttributeKeys, e);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user