You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/02/01 21:55:48 UTC
[31/50] [abbrv] incubator-geode git commit: GEODE-795: Changed
RegionEntryFactory code from complex nested if-else block to more
maintainable bit masking.
GEODE-795: Changed RegionEntryFactory code from complex nested if-else block to more maintainable bit masking.
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/02c67e25
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/02c67e25
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/02c67e25
Branch: refs/heads/feature/GEODE-773-2
Commit: 02c67e2578b31c8e3babb654e55fb97f688ef0b4
Parents: 554ecae
Author: Udo Kohlmeyer <uk...@pivotal.io>
Authored: Thu Jan 28 08:54:29 2016 +1100
Committer: Udo Kohlmeyer <uk...@pivotal.io>
Committed: Mon Feb 1 14:14:40 2016 +1100
----------------------------------------------------------------------
.../internal/cache/AbstractRegionMap.java | 133 +------------------
.../region/entry/RegionEntryFactoryBuilder.java | 103 ++++++++++++++
.../RegionEntryFactoryBuilderJUnitTest.java | 85 ++++++++++++
3 files changed, 190 insertions(+), 131 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/02c67e25/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java
index 096bd0a..3679519 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java
@@ -28,6 +28,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
+import com.gemstone.gemfire.internal.cache.region.entry.RegionEntryFactoryBuilder;
import org.apache.logging.log4j.Logger;
import com.gemstone.gemfire.GemFireIOException;
@@ -193,137 +194,7 @@ abstract class AbstractRegionMap implements RegionMap {
}
}
else {
- final RegionEntryFactory factory;
- if (attr.statisticsEnabled) {
- if (isLRU) {
- if (isDisk) {
- if (withVersioning) {
- if (offHeap) {
- factory = VersionedStatsDiskLRURegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VersionedStatsDiskLRURegionEntryHeap.getEntryFactory();
- }
- } else {
- if (offHeap) {
- factory = VMStatsDiskLRURegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VMStatsDiskLRURegionEntryHeap.getEntryFactory();
- }
- }
- } else {
- if (withVersioning) {
- if (offHeap) {
- factory = VersionedStatsLRURegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VersionedStatsLRURegionEntryHeap.getEntryFactory();
- }
- } else {
- if (offHeap) {
- factory = VMStatsLRURegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VMStatsLRURegionEntryHeap.getEntryFactory();
- }
- }
- }
- } else { // !isLRU
- if (isDisk) {
- if (withVersioning) {
- if (offHeap) {
- factory = VersionedStatsDiskRegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VersionedStatsDiskRegionEntryHeap.getEntryFactory();
- }
- } else {
- if (offHeap) {
- factory = VMStatsDiskRegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VMStatsDiskRegionEntryHeap.getEntryFactory();
- }
- }
- } else {
- if (withVersioning) {
- if (offHeap) {
- factory = VersionedStatsRegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VersionedStatsRegionEntryHeap.getEntryFactory();
- }
- } else {
- if (offHeap) {
- factory = VMStatsRegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VMStatsRegionEntryHeap.getEntryFactory();
- }
- }
- }
- }
- }
- else { // !statistics enabled
- if (isLRU) {
- if (isDisk) {
- if (withVersioning) {
- if (offHeap) {
- factory = VersionedThinDiskLRURegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VersionedThinDiskLRURegionEntryHeap.getEntryFactory();
- }
- } else {
- if (offHeap) {
- factory = VMThinDiskLRURegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VMThinDiskLRURegionEntryHeap.getEntryFactory();
- }
- }
- }
- else {
- if (withVersioning) {
- if (offHeap) {
- factory = VersionedThinLRURegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VersionedThinLRURegionEntryHeap.getEntryFactory();
- }
- } else {
- if (offHeap) {
- factory = VMThinLRURegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VMThinLRURegionEntryHeap.getEntryFactory();
- }
- }
- }
- }
- else { // !isLRU
- if (isDisk) {
- if (withVersioning) {
- if (offHeap) {
- factory = VersionedThinDiskRegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VersionedThinDiskRegionEntryHeap.getEntryFactory();
- }
- } else {
- if (offHeap) {
- factory = VMThinDiskRegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VMThinDiskRegionEntryHeap.getEntryFactory();
- }
- }
- }
- else {
- if (withVersioning) {
- if (offHeap) {
- factory = VersionedThinRegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VersionedThinRegionEntryHeap.getEntryFactory();
- }
- } else {
- if (offHeap) {
- factory = VMThinRegionEntryOffHeap.getEntryFactory();
- } else {
- factory = VMThinRegionEntryHeap.getEntryFactory();
- }
- }
- }
- }
- }
- setEntryFactory(factory);
+ setEntryFactory(new RegionEntryFactoryBuilder().getRegionEntryFactoryOrNull(attr.statisticsEnabled,isLRU,isDisk,withVersioning,offHeap));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/02c67e25/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/region/entry/RegionEntryFactoryBuilder.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/region/entry/RegionEntryFactoryBuilder.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/region/entry/RegionEntryFactoryBuilder.java
new file mode 100644
index 0000000..f4e55ed
--- /dev/null
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/region/entry/RegionEntryFactoryBuilder.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.internal.cache.region.entry;
+
+import com.gemstone.gemfire.internal.cache.*;
+
+public class RegionEntryFactoryBuilder {
+ public RegionEntryFactory getRegionEntryFactoryOrNull(boolean statsEnabled, boolean isLRU, boolean isDisk, boolean withVersioning, boolean offHeap) {
+ int bitRepresentation = 0;
+ bitRepresentation |= statsEnabled ? 1 : 0;
+ bitRepresentation |= isLRU ? 2 : 0;
+ bitRepresentation |= isDisk ? 4 : 0;
+ bitRepresentation |= withVersioning ? 8 : 0;
+ bitRepresentation |= offHeap ? 16 : 0;
+
+ /**
+ * The bits represent all options
+ * |offHeap|versioning|disk|lru|stats|
+ */
+ switch (bitRepresentation) {
+ case (0):
+ return VMThinRegionEntryHeap.getEntryFactory(); // Bits: 00000
+ case (1):
+ return VMStatsRegionEntryHeap.getEntryFactory(); // Bits: 00001
+ case (2):
+ return VMThinLRURegionEntryHeap.getEntryFactory(); // Bits: 00010
+ case (3):
+ return VMStatsLRURegionEntryHeap.getEntryFactory(); // Bits: 00011
+ case (4):
+ return VMThinDiskRegionEntryHeap.getEntryFactory(); // Bits: 00100
+ case (5):
+ return VMStatsDiskRegionEntryHeap.getEntryFactory(); // Bits: 00101
+ case (6):
+ return VMThinDiskLRURegionEntryHeap.getEntryFactory(); // Bits: 00110
+ case (7):
+ return VMStatsDiskLRURegionEntryHeap.getEntryFactory(); // Bits: 00111
+ case (8):
+ return VersionedThinRegionEntryHeap.getEntryFactory(); // Bits: 01000
+ case (9):
+ return VersionedStatsRegionEntryHeap.getEntryFactory(); // Bits: 01001
+ case (10):
+ return VersionedThinLRURegionEntryHeap.getEntryFactory(); // Bits: 01010
+ case (11):
+ return VersionedStatsLRURegionEntryHeap.getEntryFactory(); // Bits: 01011
+ case (12):
+ return VersionedThinDiskRegionEntryHeap.getEntryFactory(); // Bits: 01100
+ case (13):
+ return VersionedStatsDiskRegionEntryHeap.getEntryFactory(); // Bits: 01101
+ case (14):
+ return VersionedThinDiskLRURegionEntryHeap.getEntryFactory(); // Bits: 01110
+ case (15):
+ return VersionedStatsDiskLRURegionEntryHeap.getEntryFactory(); // Bits: 01111
+ case (16):
+ return VMThinRegionEntryOffHeap.getEntryFactory(); // Bits: 10000
+ case (17):
+ return VMStatsRegionEntryOffHeap.getEntryFactory(); // Bits: 10001
+ case (18):
+ return VMThinLRURegionEntryOffHeap.getEntryFactory(); // Bits: 10010
+ case (19):
+ return VMStatsLRURegionEntryOffHeap.getEntryFactory(); // Bits: 10011
+ case (20):
+ return VMThinDiskRegionEntryOffHeap.getEntryFactory(); // Bits: 10100
+ case (21):
+ return VMStatsDiskRegionEntryOffHeap.getEntryFactory(); // Bits: 10101
+ case (22):
+ return VMThinDiskLRURegionEntryOffHeap.getEntryFactory(); // Bits: 10110
+ case (23):
+ return VMStatsDiskLRURegionEntryOffHeap.getEntryFactory(); // Bits: 10111
+ case (24):
+ return VersionedThinRegionEntryOffHeap.getEntryFactory(); // Bits: 11000
+ case (25):
+ return VersionedStatsRegionEntryOffHeap.getEntryFactory(); // Bits: 11001
+ case (26):
+ return VersionedThinLRURegionEntryOffHeap.getEntryFactory(); // Bits: 11010
+ case (27):
+ return VersionedStatsLRURegionEntryOffHeap.getEntryFactory(); // Bits: 11011
+ case (28):
+ return VersionedThinDiskRegionEntryOffHeap.getEntryFactory(); // Bits: 11100
+ case (29):
+ return VersionedStatsDiskRegionEntryOffHeap.getEntryFactory(); // Bits: 11101
+ case (30):
+ return VersionedThinDiskLRURegionEntryOffHeap.getEntryFactory(); // Bits: 11110
+ case (31):
+ return VersionedStatsDiskLRURegionEntryOffHeap.getEntryFactory(); // Bits: 11111
+ default:
+ return null;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/02c67e25/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/region/entry/RegionEntryFactoryBuilderJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/region/entry/RegionEntryFactoryBuilderJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/region/entry/RegionEntryFactoryBuilderJUnitTest.java
new file mode 100644
index 0000000..09fde8a
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/region/entry/RegionEntryFactoryBuilderJUnitTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.internal.cache.region.entry;
+
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.assertEquals;
+
+@Category(UnitTest.class)
+@RunWith(JUnitParamsRunner.class)
+public class RegionEntryFactoryBuilderJUnitTest {
+
+ private RegionEntryFactoryBuilder regionEntryFactoryBuilder;
+
+ @Before
+ public void setup() {
+ regionEntryFactoryBuilder = new RegionEntryFactoryBuilder();
+ }
+
+ /**
+ * This method will test that the correct RegionEntryFactory is created
+ * dependent on the 5 conditionals:
+ * enableStats, enableLRU, enableDisk, enableVersion, enableOffHeap
+ */
+ @Test
+ @Parameters({
+ "VMThinRegionEntryHeapFactory,false,false,false,false,false",
+ "VMThinRegionEntryOffHeapFactory,false,false,false,false,true",
+ "VersionedThinRegionEntryHeapFactory,false,false,false,true,false",
+ "VersionedThinRegionEntryOffHeapFactory,false,false,false,true,true",
+ "VMThinDiskRegionEntryHeapFactory,false,false,true,false,false",
+ "VMThinDiskRegionEntryOffHeapFactory,false,false,true,false,true",
+ "VersionedThinDiskRegionEntryHeapFactory,false,false,true,true,false",
+ "VersionedThinDiskRegionEntryOffHeapFactory,false,false,true,true,true",
+ "VMThinLRURegionEntryHeapFactory,false,true,false,false,false",
+ "VMThinLRURegionEntryOffHeapFactory,false,true,false,false,true",
+ "VersionedThinLRURegionEntryHeapFactory,false,true,false,true,false",
+ "VersionedThinLRURegionEntryOffHeapFactory,false,true,false,true,true",
+ "VMThinDiskLRURegionEntryHeapFactory,false,true,true,false,false",
+ "VMThinDiskLRURegionEntryOffHeapFactory,false,true,true,false,true",
+ "VersionedThinDiskLRURegionEntryHeapFactory,false,true,true,true,false",
+ "VersionedThinDiskLRURegionEntryOffHeapFactory,false,true,true,true,true",
+ "VMStatsRegionEntryHeapFactory,true,false,false,false,false",
+ "VMStatsRegionEntryOffHeapFactory,true,false,false,false,true",
+ "VersionedStatsRegionEntryHeapFactory,true,false,false,true,false",
+ "VersionedStatsRegionEntryOffHeapFactory,true,false,false,true,true",
+ "VMStatsDiskRegionEntryHeapFactory,true,false,true,false,false",
+ "VMStatsDiskRegionEntryOffHeapFactory,true,false,true,false,true",
+ "VersionedStatsDiskRegionEntryHeapFactory,true,false,true,true,false",
+ "VersionedStatsDiskRegionEntryOffHeapFactory,true,false,true,true,true",
+ "VMStatsLRURegionEntryHeapFactory,true,true,false,false,false",
+ "VMStatsLRURegionEntryOffHeapFactory,true,true,false,false,true",
+ "VersionedStatsLRURegionEntryHeapFactory,true,true,false,true,false",
+ "VersionedStatsLRURegionEntryOffHeapFactory,true,true,false,true,true",
+ "VMStatsDiskLRURegionEntryHeapFactory,true,true,true,false,false",
+ "VMStatsDiskLRURegionEntryOffHeapFactory,true,true,true,false,true",
+ "VersionedStatsDiskLRURegionEntryHeapFactory,true,true,true,true,false",
+ "VersionedStatsDiskLRURegionEntryOffHeapFactory,true,true,true,true,true"
+ })
+ public void testRegionEntryFactoryUnitTest(String factoryName, boolean enableStats, boolean enableLRU, boolean enableDisk,
+ boolean enableVersioning, boolean enableOffHeap) {
+ assertEquals(factoryName,
+ regionEntryFactoryBuilder.getRegionEntryFactoryOrNull(enableStats, enableLRU, enableDisk, enableVersioning, enableOffHeap).getClass().getSimpleName());
+ }
+}
\ No newline at end of file