diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/FieldsUtil.java b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/FieldsUtil.java index 9ba6c20188..77ef4fe5a2 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/FieldsUtil.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edqs/fields/FieldsUtil.java @@ -289,7 +289,7 @@ public class FieldsUtil { } public static String getText(JsonNode node) { - return node != null ? node.toString() : ""; + return node != null && !node.isNull() ? node.toString() : ""; } private static UUID getCustomerId(CustomerId customerId) { diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/CompressedStringDataPoint.java b/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/CompressedStringDataPoint.java index 634b63e012..f63abbbeb7 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/CompressedStringDataPoint.java +++ b/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/CompressedStringDataPoint.java @@ -18,7 +18,7 @@ package org.thingsboard.server.edqs.data.dp; import lombok.Getter; import lombok.SneakyThrows; import org.thingsboard.server.common.data.kv.DataType; -import org.thingsboard.server.edqs.util.TbBytePool; +import org.thingsboard.common.util.TbBytePool; import org.xerial.snappy.Snappy; public class CompressedStringDataPoint extends AbstractDataPoint { diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/JsonDataPoint.java b/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/JsonDataPoint.java index 3a8d570f43..593a74e3c8 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/JsonDataPoint.java +++ b/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/JsonDataPoint.java @@ -17,7 +17,7 @@ package org.thingsboard.server.edqs.data.dp; import lombok.Getter; import org.thingsboard.server.common.data.kv.DataType; -import org.thingsboard.server.edqs.util.TbStringPool; +import org.thingsboard.common.util.TbStringPool; public class JsonDataPoint extends AbstractDataPoint { diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/StringDataPoint.java b/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/StringDataPoint.java index 54156500fe..52205e2f72 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/StringDataPoint.java +++ b/common/edqs/src/main/java/org/thingsboard/server/edqs/data/dp/StringDataPoint.java @@ -17,7 +17,7 @@ package org.thingsboard.server.edqs.data.dp; import lombok.Getter; import org.thingsboard.server.common.data.kv.DataType; -import org.thingsboard.server.edqs.util.TbStringPool; +import org.thingsboard.common.util.TbStringPool; public class StringDataPoint extends AbstractDataPoint { diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/repo/TenantRepo.java b/common/edqs/src/main/java/org/thingsboard/server/edqs/repo/TenantRepo.java index b9f3589280..5fdc820ecc 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/repo/TenantRepo.java +++ b/common/edqs/src/main/java/org/thingsboard/server/edqs/repo/TenantRepo.java @@ -25,7 +25,6 @@ import org.thingsboard.server.common.data.edqs.EdqsEventType; import org.thingsboard.server.common.data.edqs.EdqsObject; import org.thingsboard.server.common.data.edqs.Entity; import org.thingsboard.server.common.data.edqs.LatestTsKv; -import org.thingsboard.server.common.data.edqs.fields.AssetFields; import org.thingsboard.server.common.data.edqs.fields.EntityFields; import org.thingsboard.server.common.data.edqs.query.QueryResult; import org.thingsboard.server.common.data.id.CustomerId; @@ -57,7 +56,6 @@ import org.thingsboard.server.edqs.query.processor.EntityQueryProcessor; import org.thingsboard.server.edqs.query.processor.EntityQueryProcessorFactory; import org.thingsboard.server.edqs.stats.EdqsStatsService; import org.thingsboard.server.edqs.util.RepositoryUtils; -import org.thingsboard.server.edqs.util.TbStringPool; import java.util.ArrayList; import java.util.Collections; @@ -144,7 +142,7 @@ public class TenantRepo { RelationsRepo repo = relations.computeIfAbsent(entity.getTypeGroup(), tg -> new RelationsRepo()); EntityData from = getOrCreate(entity.getFrom()); EntityData to = getOrCreate(entity.getTo()); - boolean added = repo.add(from, to, TbStringPool.intern(entity.getType())); + boolean added = repo.add(from, to, entity.getType()); if (added) { edqsStatsService.ifPresent(statService -> statService.reportEvent(tenantId, ObjectType.RELATION, EdqsEventType.UPDATED)); } @@ -188,7 +186,6 @@ public class TenantRepo { EntityType entityType = entity.getType(); EntityData entityData = getOrCreate(entityType, entityId); - processFields(fields); EntityFields oldFields = entityData.getFields(); entityData.setFields(fields); if (oldFields == null) { @@ -282,12 +279,6 @@ public class TenantRepo { } } - public void processFields(EntityFields fields) { - if (fields instanceof AssetFields assetFields) { - assetFields.setType(TbStringPool.intern(assetFields.getType())); - } - } - public ConcurrentMap> getEntityMap(EntityType entityType) { return entityMapByType.computeIfAbsent(entityType, et -> new ConcurrentHashMap<>()); } diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/util/EdqsConverter.java b/common/edqs/src/main/java/org/thingsboard/server/edqs/util/EdqsConverter.java index 5b4cd7ac4a..bb79e0b8df 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/util/EdqsConverter.java +++ b/common/edqs/src/main/java/org/thingsboard/server/edqs/util/EdqsConverter.java @@ -17,13 +17,18 @@ package org.thingsboard.server.edqs.util; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; import com.google.protobuf.ByteString; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.thingsboard.common.util.TbStringPool; import org.thingsboard.server.common.data.AttributeScope; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.ObjectType; @@ -49,6 +54,7 @@ import org.thingsboard.server.gen.transport.TransportProtos; import org.thingsboard.server.gen.transport.TransportProtos.DataPointProto; import org.xerial.snappy.Snappy; +import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -188,14 +194,6 @@ public class EdqsConverter { return edqsEntity; } - public EdqsObject check(ObjectType type, Object object) { - if (object instanceof EdqsObject edqsObject) { - return edqsObject; - } else { - return toEntity(type.toEntityType(), object); - } - } - @SuppressWarnings("unchecked") @SneakyThrows public byte[] serialize(ObjectType type, T value) { @@ -220,12 +218,18 @@ public class EdqsConverter { @RequiredArgsConstructor private static class JsonConverter implements Converter { + private static final SimpleModule module = new SimpleModule(); private static final ObjectMapper mapper = JsonMapper.builder() .visibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY) .visibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE) .visibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE) .build(); + static { + module.addDeserializer(String.class, new InterningStringDeserializer()); + mapper.registerModule(module); + } + private final Class type; @SneakyThrows @@ -250,4 +254,17 @@ public class EdqsConverter { } + public static class InterningStringDeserializer extends StdDeserializer { + + public InterningStringDeserializer() { + super(String.class); + } + + @Override + public String deserialize(JsonParser p, DeserializationContext ctx) throws IOException { + return TbStringPool.intern(p.getText()); + } + + } + } diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/util/TbBytePool.java b/common/util/src/main/java/org/thingsboard/common/util/TbBytePool.java similarity index 96% rename from common/edqs/src/main/java/org/thingsboard/server/edqs/util/TbBytePool.java rename to common/util/src/main/java/org/thingsboard/common/util/TbBytePool.java index 3b135be59c..fe16a14e7c 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/util/TbBytePool.java +++ b/common/util/src/main/java/org/thingsboard/common/util/TbBytePool.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.edqs.util; +package org.thingsboard.common.util; import com.google.common.hash.Hashing; import org.springframework.util.ConcurrentReferenceHashMap; diff --git a/common/edqs/src/main/java/org/thingsboard/server/edqs/util/TbStringPool.java b/common/util/src/main/java/org/thingsboard/common/util/TbStringPool.java similarity index 96% rename from common/edqs/src/main/java/org/thingsboard/server/edqs/util/TbStringPool.java rename to common/util/src/main/java/org/thingsboard/common/util/TbStringPool.java index 9c9c3b5b13..38c010fbd3 100644 --- a/common/edqs/src/main/java/org/thingsboard/server/edqs/util/TbStringPool.java +++ b/common/util/src/main/java/org/thingsboard/common/util/TbStringPool.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.edqs.util; +package org.thingsboard.common.util; import org.springframework.util.ConcurrentReferenceHashMap;