This is an automated email from the ASF dual-hosted git repository.

zhouxj pushed a commit to branch feature/GEODE-QueryProvider
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/GEODE-QueryProvider by 
this push:
     new 49190d1  use computeIfAbsent to calculate pointsConfigMap for 
PdxLuceneSerializer
49190d1 is described below

commit 49190d13a9ed8fb0424114149199aeb699be5acb
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Thu Jun 21 11:48:13 2018 -0700

    use computeIfAbsent to calculate pointsConfigMap for PdxLuceneSerializer
---
 .../geode/cache/lucene/internal/StringQueryProvider.java  | 14 +++++++++++++-
 .../serializer/HeterogeneousLuceneSerializer.java         |  6 +++---
 .../repository/serializer/PdxLuceneSerializer.java        | 15 +++++++--------
 .../repository/serializer/ReflectionLuceneSerializer.java |  7 ++++---
 4 files changed, 27 insertions(+), 15 deletions(-)

diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/StringQueryProvider.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/StringQueryProvider.java
index 3dc16be..6f479e1 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/StringQueryProvider.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/StringQueryProvider.java
@@ -84,8 +84,20 @@ public class StringQueryProvider implements 
LuceneQueryProvider, DataSerializabl
       // pointsConfigMap.put("revenue", new 
PointsConfig(NumberFormat.getInstance(),
       // Integer.class));
       parser.setPointsConfigMap(pointsConfigMap);
-      // TODO: is DateTools.Resolution optional?
+      // TODO1: is DateTools.Resolution optional?
       // parser.setDateResolution(DateTools.Resolution.MILLISECOND);
+
+      // TODO2: HeterogeneousLuceneSerializer.getPointsConfigMap() calls 
putAll too often?
+      // TODO3: PdxLuceneSerializer.toDocuments().saveNumericFields's if (...) 
then
+      // computeIfAbsent(). Is it too expensive?
+      // TODO4: PdxLuceneSerializer and FlatFormatSerializer are using
+      // toDucuments().saveNumericFields() to get meta data, is it possible
+      // to move it to higher level for a generic method?
+      // TODO5: if a member is down, its meta data will be lost. How to 
recover it?
+      // TODO6: Short.class is not supported yet
+      // TODO7: Does PdxLuceneSerializer support nested field?
+      // TODO8: add example: numeric query __REGION_VALUE_FIELD:123
+      // TODO9: Can FlatFormatSerializer support pdx since it does not contain 
PdxLuceneSerializer
       parser.setAllowLeadingWildcard(true);
       try {
         luceneQuery = parser.parse(query, defaultField);
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/HeterogeneousLuceneSerializer.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/HeterogeneousLuceneSerializer.java
index 6fbb675..74f05af 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/HeterogeneousLuceneSerializer.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/HeterogeneousLuceneSerializer.java
@@ -16,8 +16,9 @@ package 
org.apache.geode.cache.lucene.internal.repository.serializer;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.lucene.document.Document;
@@ -47,7 +48,7 @@ public class HeterogeneousLuceneSerializer implements 
LuceneSerializer {
   private Map<Class<?>, LuceneSerializer> mappers =
       new CopyOnWriteWeakHashMap<Class<?>, LuceneSerializer>();
 
-  private Map<String, PointsConfig> pointsConfigMap = new HashMap();
+  private ConcurrentMap<String, PointsConfig> pointsConfigMap = new 
ConcurrentHashMap();
 
   private static final Logger logger = LogService.getLogger();
 
@@ -93,7 +94,6 @@ public class HeterogeneousLuceneSerializer implements 
LuceneSerializer {
     }
   }
 
-  // TODO need a compute method to recalculate pointsConfigMap
   public Map<String, PointsConfig> getPointsConfigMap() {
     PdxLuceneSerializer pdxSerializer = (PdxLuceneSerializer) pdxMapper;
     pointsConfigMap.putAll(pdxSerializer.getPointsConfigMap());
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/PdxLuceneSerializer.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/PdxLuceneSerializer.java
index 11308b1..b62a05c 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/PdxLuceneSerializer.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/PdxLuceneSerializer.java
@@ -18,8 +18,9 @@ package 
org.apache.geode.cache.lucene.internal.repository.serializer;
 import java.text.NumberFormat;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.lucene.document.Document;
@@ -36,18 +37,16 @@ import org.apache.geode.pdx.PdxInstance;
 class PdxLuceneSerializer implements LuceneSerializer {
 
   private static final Logger logger = LogService.getLogger();
-  private Map<String, PointsConfig> pointsConfigMap = new HashMap();
+  private ConcurrentMap<String, PointsConfig> pointsConfigMap = new 
ConcurrentHashMap();
 
   public PdxLuceneSerializer() {}
 
   private void saveNumericFields(String fieldName, Object fieldValue) {
     Class<?> clazz = fieldValue.getClass();
-    if (pointsConfigMap.get(fieldName) == null) {
-      if (clazz == Long.class || clazz == Integer.class || clazz == Float.class
-          || clazz == Double.class) {
-        pointsConfigMap.put(fieldName,
-            new PointsConfig(NumberFormat.getInstance(), (Class<? extends 
Number>) clazz));
-      }
+    if (clazz == Integer.class || clazz == Long.class || clazz == Float.class
+        || clazz == Double.class) {
+      pointsConfigMap.computeIfAbsent(fieldName,
+          field -> new PointsConfig(NumberFormat.getInstance(), (Class<? 
extends Number>) clazz));
     }
   }
 
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/ReflectionLuceneSerializer.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/ReflectionLuceneSerializer.java
index ea14f12..6f55251 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/ReflectionLuceneSerializer.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/serializer/ReflectionLuceneSerializer.java
@@ -21,10 +21,11 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.lucene.document.Document;
@@ -41,7 +42,7 @@ import org.apache.geode.internal.logging.LogService;
 class ReflectionLuceneSerializer implements LuceneSerializer {
 
   private Field[] fields;
-  private Map<String, PointsConfig> pointsConfigMap = new HashMap();
+  private ConcurrentMap<String, PointsConfig> pointsConfigMap = new 
ConcurrentHashMap();
 
   private static final Logger logger = LogService.getLogger();
 
@@ -60,7 +61,7 @@ class ReflectionLuceneSerializer implements LuceneSerializer {
           field.setAccessible(true);
           foundFields.add(field);
 
-          if (type == Long.class || type == Integer.class || type == 
Float.class
+          if (type == Integer.class || type == Long.class || type == 
Float.class
               || type == Double.class) {
             pointsConfigMap.put(field.getName(),
                 new PointsConfig(NumberFormat.getInstance(), (Class<? extends 
Number>) type));

Reply via email to