From a4dc62ee854985a453d69f19b911011d2e56957f Mon Sep 17 00:00:00 2001 From: alainbodiguel Date: Fri, 21 Jun 2024 17:00:36 +0200 Subject: [PATCH] Add isDateField to cache --- .../core/impl/cache/HazelcastCacheManager.java | 12 ++++++++++++ .../server/core/impl/cache/LocalCacheManager.java | 12 ++++++++++++ .../arlas/server/core/impl/cache/NoCacheManager.java | 10 ++++++++++ .../services/ElasticCollectionReferenceService.java | 10 ++++++++-- .../io/arlas/server/core/managers/CacheManager.java | 3 +++ .../core/services/CollectionReferenceService.java | 5 +++-- .../arlas/server/core/services/ExploreService.java | 2 +- .../server/core/services/FluidSearchService.java | 3 +-- 8 files changed, 50 insertions(+), 7 deletions(-) diff --git a/arlas-core/src/main/java/io/arlas/server/core/impl/cache/HazelcastCacheManager.java b/arlas-core/src/main/java/io/arlas/server/core/impl/cache/HazelcastCacheManager.java index f66e21443..8f9d6b934 100644 --- a/arlas-core/src/main/java/io/arlas/server/core/impl/cache/HazelcastCacheManager.java +++ b/arlas-core/src/main/java/io/arlas/server/core/impl/cache/HazelcastCacheManager.java @@ -49,6 +49,7 @@ public void putCollectionReference(String ref, CollectionReference col) { putObject("collections", ref, col); LOGGER.debug("Clearing field types of collection '" + ref + "' from cache"); this.instance.getReplicatedMap(ref).clear(); + this.instance.getReplicatedMap(ref+"-datefield").clear(); } @Override @@ -56,6 +57,7 @@ public void removeCollectionReference(String ref) { removeObject("collections", ref); LOGGER.debug("Clearing field types of collection '" + ref + "' from cache"); this.instance.getReplicatedMap(ref).clear(); + this.instance.getReplicatedMap(ref+"-datefield").clear(); } @Override @@ -68,6 +70,16 @@ public void putFieldType(String ref, String name, FieldType type) { putObject(ref, name, type); } + @Override + public Boolean getIsDateField(String ref, String name) { + return (Boolean) getObject(ref+"-datefield", name); + } + + @Override + public void putIsDateField(String ref, String name, Boolean value) { + putObject(ref+"-datefield", name, value); + } + @Override public void putMapping(String indexName, Map> mapping) { putObject("mappings", indexName, mapping); diff --git a/arlas-core/src/main/java/io/arlas/server/core/impl/cache/LocalCacheManager.java b/arlas-core/src/main/java/io/arlas/server/core/impl/cache/LocalCacheManager.java index ea2559b09..d641398ce 100644 --- a/arlas-core/src/main/java/io/arlas/server/core/impl/cache/LocalCacheManager.java +++ b/arlas-core/src/main/java/io/arlas/server/core/impl/cache/LocalCacheManager.java @@ -50,6 +50,7 @@ public void putCollectionReference(String ref, CollectionReference col) { putObject("collections", ref, col); LOGGER.debug("Clearing field types of collection '" + ref + "' from cache"); this.cache.computeIfAbsent(ref, k -> new SelfExpiringHashMap<>()).clear(); + this.cache.computeIfAbsent(ref+"-datefield", k -> new SelfExpiringHashMap<>()).clear(); } @Override @@ -57,6 +58,7 @@ public void removeCollectionReference(String ref) { removeObject("collections", ref); LOGGER.debug("Clearing field types of collection '" + ref + "' from cache"); this.cache.computeIfAbsent(ref, k -> new SelfExpiringHashMap<>()).clear(); + this.cache.computeIfAbsent(ref+"-datefield", k -> new SelfExpiringHashMap<>()).clear(); } @Override @@ -69,6 +71,16 @@ public void putFieldType(String ref, String name, FieldType type) { putObject(ref, name, type); } + @Override + public Boolean getIsDateField(String ref, String name) { + return (Boolean) getObject(ref+"-datefield", name); + } + + @Override + public void putIsDateField(String ref, String name, Boolean value) { + putObject(ref+"-datefield", name, value); + } + @Override public void putMapping(String indexName, Map> mapping) { putObject("mappings", indexName, mapping); diff --git a/arlas-core/src/main/java/io/arlas/server/core/impl/cache/NoCacheManager.java b/arlas-core/src/main/java/io/arlas/server/core/impl/cache/NoCacheManager.java index 472c1aef1..a674fa5c5 100644 --- a/arlas-core/src/main/java/io/arlas/server/core/impl/cache/NoCacheManager.java +++ b/arlas-core/src/main/java/io/arlas/server/core/impl/cache/NoCacheManager.java @@ -71,6 +71,16 @@ public FieldType getFieldType(String ref, String name) { public void putFieldType(String ref, String name, FieldType type) { } + @Override + public Boolean getIsDateField(String ref, String name) { + return null; + } + + @Override + public void putIsDateField(String ref, String name, Boolean value) { + + } + @Override public void putMapping(String indexName, Map> exists) { } diff --git a/arlas-core/src/main/java/io/arlas/server/core/impl/elastic/services/ElasticCollectionReferenceService.java b/arlas-core/src/main/java/io/arlas/server/core/impl/elastic/services/ElasticCollectionReferenceService.java index b910c328d..3e6655085 100644 --- a/arlas-core/src/main/java/io/arlas/server/core/impl/elastic/services/ElasticCollectionReferenceService.java +++ b/arlas-core/src/main/java/io/arlas/server/core/impl/elastic/services/ElasticCollectionReferenceService.java @@ -157,7 +157,13 @@ protected void putCollectionReferenceWithDao(CollectionReference collectionRefer } @Override - public boolean isDateField(String field, String index) throws ArlasException { - return client.isDateField(field, index); + public boolean isDateField(String field, CollectionReference ref) throws ArlasException { + Boolean isDateField = cacheManager.getIsDateField(ref.collectionName, field); + if (isDateField == null) { + isDateField = client.isDateField(field, ref.params.indexName); + cacheManager.putIsDateField(ref.collectionName, field, isDateField); + } + + return isDateField; } } diff --git a/arlas-core/src/main/java/io/arlas/server/core/managers/CacheManager.java b/arlas-core/src/main/java/io/arlas/server/core/managers/CacheManager.java index 39bb65f13..993a3da9b 100644 --- a/arlas-core/src/main/java/io/arlas/server/core/managers/CacheManager.java +++ b/arlas-core/src/main/java/io/arlas/server/core/managers/CacheManager.java @@ -35,6 +35,9 @@ public interface CacheManager extends BaseCacheManager { FieldType getFieldType(String ref, String name); void putFieldType(String ref, String name, FieldType type); + Boolean getIsDateField(String ref, String name); + void putIsDateField(String ref, String name, Boolean value); + void putMapping(String indexName, Map> exists); Map> getMapping(String indexName); void removeMapping(String indexName); diff --git a/arlas-core/src/main/java/io/arlas/server/core/services/CollectionReferenceService.java b/arlas-core/src/main/java/io/arlas/server/core/services/CollectionReferenceService.java index 5aa1d9ab5..988ccb59c 100644 --- a/arlas-core/src/main/java/io/arlas/server/core/services/CollectionReferenceService.java +++ b/arlas-core/src/main/java/io/arlas/server/core/services/CollectionReferenceService.java @@ -353,9 +353,10 @@ private FieldType getUnknownType(String parentField, String collectionName, bool } } - public boolean isDateField(String field, String index) throws ArlasException { - return getFieldType(field, index).isDateField(); + public boolean isDateField(String field, CollectionReference ref) throws ArlasException { + return getFieldType(field, ref.params.indexName).isDateField(); } + public boolean isTextField(String field, String index) throws ArlasException { return getFieldType(field, index).isTextField(); } diff --git a/arlas-core/src/main/java/io/arlas/server/core/services/ExploreService.java b/arlas-core/src/main/java/io/arlas/server/core/services/ExploreService.java index 10fb2a137..bbf8a1a74 100644 --- a/arlas-core/src/main/java/io/arlas/server/core/services/ExploreService.java +++ b/arlas-core/src/main/java/io/arlas/server/core/services/ExploreService.java @@ -170,7 +170,7 @@ private boolean filterFHasDateQuery(Filter filter, CollectionReference collectio try { return collectionReferenceService.isDateField( ParamsParser.getFieldFromFieldAliases(expression.field, collectionReference), - collectionReference.params.indexName); + collectionReference); } catch (ArlasException e) { throw new RuntimeException(e); } diff --git a/arlas-core/src/main/java/io/arlas/server/core/services/FluidSearchService.java b/arlas-core/src/main/java/io/arlas/server/core/services/FluidSearchService.java index 25a3f2de7..05418086b 100644 --- a/arlas-core/src/main/java/io/arlas/server/core/services/FluidSearchService.java +++ b/arlas-core/src/main/java/io/arlas/server/core/services/FluidSearchService.java @@ -20,7 +20,6 @@ import io.arlas.commons.exceptions.ArlasException; import io.arlas.commons.utils.StringUtil; -import io.arlas.server.core.app.ArlasServerConfiguration; import io.arlas.server.core.managers.CollectionReferenceManager; import io.arlas.server.core.model.CollectionReference; import io.arlas.server.core.model.enumerations.AggregationTypeEnum; @@ -154,7 +153,7 @@ public FluidSearchService include(String include) { } public boolean isDateField(String field) throws ArlasException { - return collectionReferenceManager.getCollectionReferenceService().isDateField(field, collectionReference.params.indexName); + return collectionReferenceManager.getCollectionReferenceService().isDateField(field, collectionReference); } public boolean isTextField(String field) throws ArlasException {