You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by as...@apache.org on 2015/09/22 01:46:37 UTC

[3/3] incubator-geode git commit: GEODE-11: Make Lucene Entry objects DataSerializable

GEODE-11: Make Lucene Entry objects DataSerializable

All Entry related objects (EntryScore, TopEntries, TopEntriesCollector and
CollectorManager) will be sent on wire and need to serialzed.

https://reviews.apache.org/r/38581/


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/74d293d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/74d293d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/74d293d1

Branch: refs/heads/feature/GEODE-11
Commit: 74d293d17c79968d98f2bd28066bcd2a56898946
Parents: 5970670
Author: Ashvin Agrawal <as...@apache.org>
Authored: Mon Sep 21 16:40:18 2015 -0700
Committer: Ashvin Agrawal <as...@apache.org>
Committed: Mon Sep 21 16:45:51 2015 -0700

----------------------------------------------------------------------
 .../internal/DataSerializableFixedID.java       |  3 ++
 .../lucene/internal/LuceneServiceImpl.java      | 15 +++++++
 .../lucene/internal/distributed/EntryScore.java | 47 ++++++++++++++++++--
 .../lucene/internal/distributed/TopEntries.java | 44 ++++++++++++++++--
 .../distributed/TopEntriesCollector.java        | 41 +++++++++++++++--
 .../distributed/TopEntriesCollectorManager.java |  2 +-
 .../distributed/EntryScoreJUnitTest.java        | 21 +++++++++
 .../distributed/LuceneFunctionJUnitTest.java    | 32 ++++++-------
 .../TopEntriesCollectorJUnitTest.java           | 26 +++++++----
 .../distributed/TopEntriesJUnitTest.java        | 29 ++++++++++--
 10 files changed, 219 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java
index 645b0af..3a56920 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java
@@ -814,6 +814,9 @@ public interface DataSerializableFixedID extends SerializationVersions {
   public static final short LUCENE_FUNCTION_CONTEXT = 2171;
   public static final short LUCENE_STRING_QUERY_PROVIDER = 2172;
   public static final short LUCENE_TOP_ENTRIES_COLLECTOR_MANAGER = 2173;
+  public static final short LUCENE_ENTRY_SCORE = 2174;
+  public static final short LUCENE_TOP_ENTRIES = 2175;
+  public static final short LUCENE_TOP_ENTRIES_COLLECTOR = 2176;
   
   // NOTE, codes > 65535 will take 4 bytes to serialize
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
index b6cd492..0f10dac 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
@@ -12,8 +12,11 @@ import com.gemstone.gemfire.cache.execute.FunctionService;
 import com.gemstone.gemfire.cache.lucene.LuceneIndex;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
 import com.gemstone.gemfire.cache.lucene.LuceneService;
+import com.gemstone.gemfire.cache.lucene.internal.distributed.EntryScore;
 import com.gemstone.gemfire.cache.lucene.internal.distributed.LuceneFunction;
 import com.gemstone.gemfire.cache.lucene.internal.distributed.LuceneFunctionContext;
+import com.gemstone.gemfire.cache.lucene.internal.distributed.TopEntries;
+import com.gemstone.gemfire.cache.lucene.internal.distributed.TopEntriesCollector;
 import com.gemstone.gemfire.cache.lucene.internal.distributed.TopEntriesCollectorManager;
 import com.gemstone.gemfire.cache.lucene.internal.filesystem.ChunkKey;
 import com.gemstone.gemfire.cache.lucene.internal.filesystem.File;
@@ -155,5 +158,17 @@ public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
     DSFIDFactory.registerDSFID(
         DataSerializableFixedID.LUCENE_TOP_ENTRIES_COLLECTOR_MANAGER,
         TopEntriesCollectorManager.class);
+    
+    DSFIDFactory.registerDSFID(
+        DataSerializableFixedID.LUCENE_ENTRY_SCORE,
+        EntryScore.class);
+    
+    DSFIDFactory.registerDSFID(
+        DataSerializableFixedID.LUCENE_TOP_ENTRIES,
+        TopEntries.class);
+    
+    DSFIDFactory.registerDSFID(
+        DataSerializableFixedID.LUCENE_TOP_ENTRIES_COLLECTOR,
+        TopEntriesCollector.class);
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScore.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScore.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScore.java
index 6903dce..1c80204 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScore.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScore.java
@@ -1,22 +1,63 @@
 package com.gemstone.gemfire.cache.lucene.internal.distributed;
 
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import com.gemstone.gemfire.DataSerializer;
+import com.gemstone.gemfire.internal.DataSerializableFixedID;
+import com.gemstone.gemfire.internal.Version;
+
 /**
  * Holds one entry matching search query and its metadata
  */
-public class EntryScore {
+public class EntryScore implements DataSerializableFixedID {
   // Key of the entry matching search query
-  final Object key;
+  private Object key;
 
   // The score of this document for the query.
-  final float score;
+  private float score;
+
+  public EntryScore() {
+  }
 
   public EntryScore(Object key, float score) {
     this.key = key;
     this.score = score;
   }
 
+  public Object getKey() {
+    return key;
+  }
+
+  public float getScore() {
+    return score;
+  }
+
   @Override
   public String toString() {
     return "key=" + key + " score=" + score;
   }
+
+  @Override
+  public Version[] getSerializationVersions() {
+    return null;
+  }
+
+  @Override
+  public int getDSFID() {
+    return LUCENE_ENTRY_SCORE;
+  }
+
+  @Override
+  public void toData(DataOutput out) throws IOException {
+    DataSerializer.writeObject(key, out);
+    out.writeFloat(score);
+  }
+
+  @Override
+  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    key = DataSerializer.readObject(in);
+    score = in.readFloat();
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntries.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntries.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntries.java
index 3a07d3f..3417615 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntries.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntries.java
@@ -1,20 +1,26 @@
 package com.gemstone.gemfire.cache.lucene.internal.distributed;
 
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 
+import com.gemstone.gemfire.DataSerializer;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
+import com.gemstone.gemfire.internal.DataSerializableFixedID;
+import com.gemstone.gemfire.internal.Version;
 
 /**
  * Holds a ordered collection of entries matching a search query.
  */
-public class TopEntries {
+public class TopEntries implements DataSerializableFixedID {
   // ordered collection of entries
-  final private List<EntryScore> hits = new ArrayList<>();
+  private List<EntryScore> hits = new ArrayList<>();
 
   // the maximum number of entries stored in this
-  final int limit;
+  private int limit;
 
   // comparator to order entryScore instances
   final Comparator<EntryScore> comparator = new EntryScoreComparator();
@@ -66,13 +72,43 @@ public class TopEntries {
   }
 
   /**
+   * @return The maximum capacity of this collection
+   */
+  public int getLimit() {
+    return limit;
+  }
+
+  /**
    * Compares scores of two entries using natural ordering. I.e. it returns -1 if the first entry's score is less than
    * the second one.
    */
   class EntryScoreComparator implements Comparator<EntryScore> {
     @Override
     public int compare(EntryScore o1, EntryScore o2) {
-      return Float.compare(o1.score, o2.score);
+      return Float.compare(o1.getScore(), o2.getScore());
     }
+  }
+
+  @Override
+  public Version[] getSerializationVersions() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public int getDSFID() {
+    return LUCENE_TOP_ENTRIES;
+  }
+
+  @Override
+  public void toData(DataOutput out) throws IOException {
+    out.writeInt(limit);
+    DataSerializer.writeObject(hits, out);
+  }
+
+  @Override
+  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    limit = in.readInt();
+    hits = DataSerializer.readObject(in);
   };
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollector.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollector.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollector.java
index a4b5144..37797d9 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollector.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollector.java
@@ -1,16 +1,27 @@
 package com.gemstone.gemfire.cache.lucene.internal.distributed;
 
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import com.gemstone.gemfire.DataSerializer;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexResultCollector;
+import com.gemstone.gemfire.internal.DataSerializableFixedID;
+import com.gemstone.gemfire.internal.Version;
 
 /**
  * An implementation of {@link IndexResultCollector} to collect {@link EntryScore}. It is expected that the results will
  * be ordered by score of the entry.
  */
-public class TopEntriesCollector implements IndexResultCollector {
-  final String name;
+public class TopEntriesCollector implements IndexResultCollector, DataSerializableFixedID {
+  private String name;
+
+  private TopEntries entries;
 
-  private final TopEntries entries;
+  public TopEntriesCollector() {
+    this(null);
+  }
 
   public TopEntriesCollector(String name) {
     this(name, LuceneQueryFactory.DEFAULT_LIMIT);
@@ -25,7 +36,7 @@ public class TopEntriesCollector implements IndexResultCollector {
   public void collect(Object key, float score) {
     collect(new EntryScore(key, score));
   }
-  
+
   public void collect(EntryScore entry) {
     entries.addHit(entry);
   }
@@ -47,4 +58,26 @@ public class TopEntriesCollector implements IndexResultCollector {
   public TopEntries getEntries() {
     return entries;
   }
+
+  @Override
+  public Version[] getSerializationVersions() {
+    return null;
+  }
+
+  @Override
+  public int getDSFID() {
+    return LUCENE_TOP_ENTRIES_COLLECTOR;
+  }
+
+  @Override
+  public void toData(DataOutput out) throws IOException {
+    DataSerializer.writeString(name, out);
+    DataSerializer.writeObject(entries, out);
+  }
+
+  @Override
+  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    name = DataSerializer.readString(in);
+    entries = DataSerializer.readObject(in);
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
index 24e75a7..a0a209a 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
@@ -88,7 +88,7 @@ public class TopEntriesCollectorManager implements CollectorManager<TopEntriesCo
       }
     }
 
-    logger.debug("Reduced size of {} is {}", mergedResult.name, mergedResult.size());
+    logger.debug("Reduced size of {} is {}", mergedResult.getName(), mergedResult.size());
     return mergedResult;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScoreJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScoreJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScoreJUnitTest.java
new file mode 100644
index 0000000..c05fb61
--- /dev/null
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/EntryScoreJUnitTest.java
@@ -0,0 +1,21 @@
+package com.gemstone.gemfire.cache.lucene.internal.distributed;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import com.gemstone.gemfire.CopyHelper;
+import com.gemstone.gemfire.cache.lucene.internal.LuceneServiceImpl;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class EntryScoreJUnitTest {
+  @Test
+  public void testSerialization() {
+    LuceneServiceImpl.registerDataSerializables();
+    EntryScore entry = new EntryScore("entry", .1f);
+    EntryScore copy = CopyHelper.deepCopy(entry);
+    Assert.assertEquals("entry", copy.getKey());
+    Assert.assertEquals(.1f, copy.getScore(), 0f);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
index d4d632d..1fcd663 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
@@ -77,9 +77,9 @@ public class LuceneFunctionJUnitTest {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
             IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r1_1.key, r1_1.score);
-            collector.collect(r1_2.key, r1_2.score);
-            collector.collect(r1_3.key, r1_3.score);
+            collector.collect(r1_1.getKey(), r1_1.getScore());
+            collector.collect(r1_2.getKey(), r1_2.getScore());
+            collector.collect(r1_3.getKey(), r1_3.getScore());
             return null;
           }
         });
@@ -89,8 +89,8 @@ public class LuceneFunctionJUnitTest {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
             IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r2_1.key, r2_1.score);
-            collector.collect(r2_2.key, r2_2.score);
+            collector.collect(r2_1.getKey(), r2_1.getScore());
+            collector.collect(r2_2.getKey(), r2_2.getScore());
             return null;
           }
         });
@@ -139,9 +139,9 @@ public class LuceneFunctionJUnitTest {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
             IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r1_1.key, r1_1.score);
-            collector.collect(r1_2.key, r1_2.score);
-            collector.collect(r1_3.key, r1_3.score);
+            collector.collect(r1_1.getKey(), r1_1.getScore());
+            collector.collect(r1_2.getKey(), r1_2.getScore());
+            collector.collect(r1_3.getKey(), r1_3.getScore());
             return null;
           }
         });
@@ -151,8 +151,8 @@ public class LuceneFunctionJUnitTest {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
             IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r2_1.key, r2_1.score);
-            collector.collect(r2_2.key, r2_2.score);
+            collector.collect(r2_1.getKey(), r2_1.getScore());
+            collector.collect(r2_2.getKey(), r2_2.getScore());
             return null;
           }
         });
@@ -214,7 +214,7 @@ public class LuceneFunctionJUnitTest {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
             IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r2_1.key, r2_1.score);
+            collector.collect(r2_1.getKey(), r2_1.getScore());
             return null;
           }
         });
@@ -325,20 +325,20 @@ public class LuceneFunctionJUnitTest {
         will(returnValue(mockResultSender));
         oneOf(mockContext).getArguments();
         will(returnValue(searchArgs));
-        
+
         oneOf(queryProvider).getQuery();
         will(throwException(new QueryException()));
-        
+
         oneOf(mockResultSender).sendException(with(any(QueryException.class)));
       }
     });
-    
+
     LuceneFunction function = new LuceneFunction();
     function.setRepositoryManager(mockRepoManager);
-    
+
     function.execute(mockContext);
   }
-  
+
   @Test
   public void testQueryFunctionId() {
     String id = new LuceneFunction().getId();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorJUnitTest.java
index 05a20de..50c9f92 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorJUnitTest.java
@@ -10,7 +10,6 @@ import org.junit.experimental.categories.Category;
 
 import com.gemstone.gemfire.CopyHelper;
 import com.gemstone.gemfire.cache.lucene.internal.LuceneServiceImpl;
-import com.gemstone.gemfire.cache.lucene.internal.StringQueryProvider;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
 @Category(UnitTest.class)
@@ -32,18 +31,18 @@ public class TopEntriesCollectorJUnitTest {
     TopEntriesCollectorManager manager = new TopEntriesCollectorManager();
 
     TopEntriesCollector c1 = manager.newCollector("c1");
-    c1.collect(r1_1.key, r1_1.score);
-    c1.collect(r1_2.key, r1_2.score);
-    c1.collect(r1_3.key, r1_3.score);
+    c1.collect(r1_1.getKey(), r1_1.getScore());
+    c1.collect(r1_2.getKey(), r1_2.getScore());
+    c1.collect(r1_3.getKey(), r1_3.getScore());
 
     TopEntriesCollector c2 = manager.newCollector("c2");
-    c2.collect(r2_1.key, r2_1.score);
-    c2.collect(r2_2.key, r2_2.score);
+    c2.collect(r2_1.getKey(), r2_1.getScore());
+    c2.collect(r2_2.getKey(), r2_2.getScore());
 
     TopEntriesCollector c3 = manager.newCollector("c3");
-    c3.collect(r3_1.key, r3_1.score);
-    c3.collect(r3_2.key, r3_2.score);
-    c3.collect(r3_3.key, r3_3.score);
+    c3.collect(r3_1.getKey(), r3_1.getScore());
+    c3.collect(r3_2.getKey(), r3_2.getScore());
+    c3.collect(r3_3.getKey(), r3_3.getScore());
 
     List<TopEntriesCollector> collectors = new ArrayList<>();
     collectors.add(c1);
@@ -70,4 +69,13 @@ public class TopEntriesCollectorJUnitTest {
     assertEquals("id", copy.getId());
     assertEquals(213, copy.getLimit());
   }
+  
+  @Test
+  public void testCollectorSerialization() {
+    LuceneServiceImpl.registerDataSerializables();
+    TopEntriesCollector collector = new TopEntriesCollector("collector", 345);
+    TopEntriesCollector copy = CopyHelper.deepCopy(collector);
+    assertEquals("collector", copy.getName());
+    assertEquals(345, copy.getEntries().getLimit());
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/74d293d1/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesJUnitTest.java
index b799a00..6c2e08b 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesJUnitTest.java
@@ -14,7 +14,9 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import com.gemstone.gemfire.CopyHelper;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
+import com.gemstone.gemfire.cache.lucene.internal.LuceneServiceImpl;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
 @Category(UnitTest.class)
@@ -53,10 +55,10 @@ public class TopEntriesJUnitTest {
   @Test
   public void testInitialization() {
     TopEntries hits = new TopEntries();
-    assertEquals(LuceneQueryFactory.DEFAULT_LIMIT, hits.limit);
+    assertEquals(LuceneQueryFactory.DEFAULT_LIMIT, hits.getLimit());
 
     hits = new TopEntries(123);
-    assertEquals(123, hits.limit);
+    assertEquals(123, hits.getLimit());
   }
 
   @Test(expected = IllegalArgumentException.class)
@@ -76,6 +78,25 @@ public class TopEntriesJUnitTest {
     verifyResultOrder(hits.getHits(), r1_1, r2_1, r1_2);
   }
 
+  @Test
+  public void testSerialization() {
+    LuceneServiceImpl.registerDataSerializables();
+    TopEntries hits = new TopEntries(3);
+    
+    TopEntries copy = CopyHelper.deepCopy(hits);
+    assertEquals(3, copy.getLimit());
+    assertEquals(0, copy.getHits().size());
+    
+    hits = new TopEntries(3);
+    hits.addHit(r1_1);
+    hits.addHit(r2_1);
+    hits.addHit(r1_2);
+    
+    copy = CopyHelper.deepCopy(hits);
+    assertEquals(3, copy.size());
+    verifyResultOrder(copy.getHits(), r1_1, r2_1, r1_2);
+  }
+  
   public static void verifyResultOrder(Collection<EntryScore> list, EntryScore... expectedEntries) {
     Iterator<EntryScore> iter = list.iterator();
     for (EntryScore expectedEntry : expectedEntries) {
@@ -83,8 +104,8 @@ public class TopEntriesJUnitTest {
         fail();
       }
       EntryScore toVerify = iter.next();
-      assertEquals(expectedEntry.key, toVerify.key);
-      assertEquals(expectedEntry.score, toVerify.score, .0f);
+      assertEquals(expectedEntry.getKey(), toVerify.getKey());
+      assertEquals(expectedEntry.getScore(), toVerify.getScore(), .0f);
     }
   }