You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by up...@apache.org on 2015/09/18 22:24:41 UTC
incubator-geode git commit: Making File and ChunkKey
DataSerializableFixedId
Repository: incubator-geode
Updated Branches:
refs/heads/feature/GEODE-11 e14b2e083 -> 37bbebb92
Making File and ChunkKey DataSerializableFixedId
These classes should implement DataSerializableFixedId for efficient
serialization. As part of this change, I also added a section to
LuceneServiceImpl's constructor to register all DataSerializableFixedId
classes in the lucene service.
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/37bbebb9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/37bbebb9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/37bbebb9
Branch: refs/heads/feature/GEODE-11
Commit: 37bbebb92fbb5a125eec9f3b7b17e8f566aa28c0
Parents: e14b2e0
Author: Dan Smith <up...@apache.org>
Authored: Fri Sep 18 12:14:36 2015 -0700
Committer: Dan Smith <up...@apache.org>
Committed: Fri Sep 18 12:21:34 2015 -0700
----------------------------------------------------------------------
.../internal/DataSerializableFixedID.java | 3 ++
.../lucene/internal/LuceneServiceImpl.java | 19 ++++++-
.../lucene/internal/filesystem/ChunkKey.java | 44 +++++++++++++++--
.../cache/lucene/internal/filesystem/File.java | 52 +++++++++++++++++++-
.../internal/LuceneServiceImplJUnitTest.java | 2 +-
.../internal/filesystem/ChunkKeyJUnitTest.java | 29 +++++++++++
.../internal/filesystem/FileJUnitTest.java | 34 +++++++++++++
7 files changed, 173 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/37bbebb9/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 a8a1715..98efb3e 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
@@ -809,6 +809,9 @@ public interface DataSerializableFixedID extends SerializationVersions {
public static final short DIST_TX_PRE_COMMIT_RESPONSE = 2167;
public static final short DIST_TX_THIN_ENTRY_STATE = 2168;
+ public static final short LUCENE_CHUNK_KEY = 2169;
+ public static final short LUCENE_FILE = 2170;
+
// NOTE, codes > 65535 will take 4 bytes to serialize
/**
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/37bbebb9/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 245287c..cee9dc9 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
@@ -7,13 +7,16 @@ import java.util.Map;
import org.apache.lucene.analysis.Analyzer;
import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.cache.execute.FunctionService;
-import com.gemstone.gemfire.cache.GemFireCache;
import com.gemstone.gemfire.cache.Region;
+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.LuceneFunction;
+import com.gemstone.gemfire.cache.lucene.internal.filesystem.ChunkKey;
+import com.gemstone.gemfire.cache.lucene.internal.filesystem.File;
+import com.gemstone.gemfire.internal.DSFIDFactory;
+import com.gemstone.gemfire.internal.DataSerializableFixedID;
import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
import com.gemstone.gemfire.internal.cache.PartitionedRegion;
import com.gemstone.gemfire.internal.cache.extension.Extensible;
@@ -43,6 +46,7 @@ public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
this.cache = gfc;
FunctionService.registerFunction(new LuceneFunction());
+ registerDataSerializables();
// Initialize the Map which maintains indexes
this.indexMap = new HashMap<String, LuceneIndex>();
@@ -128,4 +132,15 @@ public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
if( indexMap.containsKey( region )) indexMap.remove( region );
}
+ /**Public for test purposes */
+ public static void registerDataSerializables() {
+ DSFIDFactory.registerDSFID(
+ DataSerializableFixedID.LUCENE_CHUNK_KEY,
+ ChunkKey.class);
+
+ DSFIDFactory.registerDSFID(
+ DataSerializableFixedID.LUCENE_FILE,
+ File.class);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/37bbebb9/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKey.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKey.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKey.java
index ada0382..d13f3f5 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKey.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKey.java
@@ -1,17 +1,25 @@
package com.gemstone.gemfire.cache.lucene.internal.filesystem;
-import java.io.Serializable;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
import java.util.UUID;
+import com.gemstone.gemfire.internal.DataSerializableFixedID;
+import com.gemstone.gemfire.internal.Version;
+
/**
* The key for a single chunk on a file stored within a region.
*/
-public class ChunkKey implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
+public class ChunkKey implements DataSerializableFixedID {
UUID fileId;
int chunkId;
+
+ /**
+ * Constructor used for serialization only.
+ */
+ public ChunkKey() {
+ }
ChunkKey(UUID fileName, int chunkId) {
this.fileId = fileName;
@@ -66,5 +74,31 @@ public class ChunkKey implements Serializable {
return true;
}
+ @Override
+ public Version[] getSerializationVersions() {
+ return null;
+ }
+
+ @Override
+ public int getDSFID() {
+ return LUCENE_CHUNK_KEY;
+ }
+
+ @Override
+ public void toData(DataOutput out) throws IOException {
+ out.writeInt(chunkId);
+ out.writeLong(fileId.getMostSignificantBits());
+ out.writeLong(fileId.getLeastSignificantBits());
+ }
+
+ @Override
+ public void fromData(DataInput in)
+ throws IOException, ClassNotFoundException {
+ chunkId = in.readInt();
+ long high = in.readLong();
+ long low = in.readLong();
+ fileId = new UUID(high, low);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/37bbebb9/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/File.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/File.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/File.java
index 894ef4c..1ad0808 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/File.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/File.java
@@ -1,15 +1,21 @@
package com.gemstone.gemfire.cache.lucene.internal.filesystem;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.UUID;
+import com.gemstone.gemfire.DataSerializer;
+import com.gemstone.gemfire.internal.DataSerializableFixedID;
+import com.gemstone.gemfire.internal.Version;
+
/**
* A file that is stored in a gemfire region.
*/
-public class File implements Serializable {
- private static final long serialVersionUID = 1L;
+public class File implements DataSerializableFixedID {
private transient FileSystem fileSystem;
private transient int chunkSize;
@@ -20,6 +26,12 @@ public class File implements Serializable {
long created = System.currentTimeMillis();
long modified = created;
UUID id = UUID.randomUUID();
+
+ /**
+ * Constructor for serialization only
+ */
+ public File() {
+ }
File(final FileSystem fileSystem, final String name) {
setFileSystem(fileSystem);
@@ -85,4 +97,40 @@ public class File implements Serializable {
public FileSystem getFileSystem() {
return fileSystem;
}
+
+ @Override
+ public Version[] getSerializationVersions() {
+ return null;
+ }
+
+ @Override
+ public int getDSFID() {
+ return LUCENE_FILE;
+ }
+
+ @Override
+ public void toData(DataOutput out) throws IOException {
+ DataSerializer.writeString(name, out);
+ out.writeLong(length);
+ out.writeInt(chunks);
+ out.writeLong(created);
+ out.writeLong(modified);
+ out.writeLong(id.getMostSignificantBits());
+ out.writeLong(id.getLeastSignificantBits());
+ }
+
+ @Override
+ public void fromData(DataInput in)
+ throws IOException, ClassNotFoundException {
+ name = DataSerializer.readString(in);
+ length = in.readLong();
+ chunks = in.readInt();
+ created = in.readLong();
+ modified = in.readLong();
+ long high = in.readLong();
+ long low = in.readLong();
+ id = new UUID(high, low);
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/37bbebb9/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java
index 14929b5..2b890db 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java
@@ -31,7 +31,7 @@ public class LuceneServiceImplJUnitTest {
function = FunctionService.getFunction(LuceneFunction.ID);
assertNotNull(function);
}
-
+
private GemFireCacheImpl createBasicCache() {
return (GemFireCacheImpl) new CacheFactory().set("mcast-port", "0").create();
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/37bbebb9/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKeyJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKeyJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKeyJUnitTest.java
new file mode 100644
index 0000000..90cfca0
--- /dev/null
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/ChunkKeyJUnitTest.java
@@ -0,0 +1,29 @@
+package com.gemstone.gemfire.cache.lucene.internal.filesystem;
+
+import static org.junit.Assert.*;
+
+import java.util.UUID;
+
+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 ChunkKeyJUnitTest {
+
+ @Test
+ public void testSerialization() {
+ LuceneServiceImpl.registerDataSerializables();
+ ChunkKey key = new ChunkKey(UUID.randomUUID(), 5);
+ ChunkKey copy = CopyHelper.deepCopy(key);
+
+ assertEquals(key, copy);
+ assertEquals(key.hashCode(), copy.hashCode());
+ assertEquals(key.getFileId(), copy.getFileId());
+ assertEquals(key.getChunkId(), copy.getChunkId());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/37bbebb9/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/FileJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/FileJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/FileJUnitTest.java
new file mode 100644
index 0000000..a30e69b
--- /dev/null
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/filesystem/FileJUnitTest.java
@@ -0,0 +1,34 @@
+package com.gemstone.gemfire.cache.lucene.internal.filesystem;
+
+import static org.junit.Assert.*;
+
+import java.util.UUID;
+
+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 FileJUnitTest {
+
+ @Test
+ public void testSerialization() {
+ LuceneServiceImpl.registerDataSerializables();
+ File file = new File(null, "fileName");
+ file.modified = -10;
+ file.length = 5;
+ file.chunks = 7;
+ File copy = CopyHelper.deepCopy(file);
+
+ assertEquals(file.chunks, copy.chunks);
+ assertEquals(file.created, copy.created);
+ assertEquals(file.modified, copy.modified);
+ assertEquals(file.getName(), copy.getName());
+ assertEquals(file.length, copy.length);
+ assertEquals(file.id, copy.id);
+ }
+
+}