Author: tomekr
Date: Wed Sep 21 19:35:03 2016
New Revision: 1761799
URL: http://svn.apache.org/viewvc?rev=1761799&view=rev
Log:
OAK-4655: Enable configuring multiple segment nodestore instances in same setup
-added tests
-allow to configure customBlobStore (always enabled for 'secondary' role)
-default base directory name depends on the role
Added:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactoryTest.java
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactoryTest.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactory.java
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java?rev=1761799&r1=1761798&r2=1761799&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactory.java
Wed Sep 21 19:35:03 2016
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.segmen
import static com.google.common.base.Preconditions.checkState;
import static
org.apache.jackrabbit.oak.osgi.OsgiUtil.lookupConfigurationThenFramework;
import static
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
+import static
org.apache.jackrabbit.oak.spi.blob.osgi.SplitBlobStoreService.ONLY_STANDALONE_TARGET;
import static
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
import java.io.File;
@@ -32,12 +33,15 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.jackrabbit.oak.commons.PropertiesUtil;
import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
import org.apache.jackrabbit.oak.segment.file.FileStore;
import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
import org.apache.jackrabbit.oak.segment.file.FileStoreStatsMBean;
import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
import org.apache.jackrabbit.oak.spi.state.ProxyNodeStore;
@@ -62,8 +66,7 @@ import org.slf4j.LoggerFactory;
description = "Factory allowing configuration of adjacent instances of
" +
"NodeStore implementation based on Segment model besides
a default SegmentNodeStore in same setup."
)
-public class SegmentNodeStoreFactory extends ProxyNodeStore
- implements SegmentStoreProvider {
+public class SegmentNodeStoreFactory extends ProxyNodeStore {
public static final String NAME = "name";
@@ -101,6 +104,13 @@ public class SegmentNodeStoreFactory ext
)
public static final String CACHE = "cache";
+ @Property(boolValue = false,
+ label = "Custom BlobStore",
+ description = "Boolean value indicating that a custom BlobStore is
to be used. " +
+ "By default large binary content would be stored within
segment tar files"
+ )
+ public static final String CUSTOM_BLOB_STORE = "customBlobStore";
+
private final Logger log = LoggerFactory.getLogger(getClass());
private String name;
@@ -111,6 +121,10 @@ public class SegmentNodeStoreFactory ext
private ComponentContext context;
+ @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY,
+ policy = ReferencePolicy.DYNAMIC, target = ONLY_STANDALONE_TARGET)
+ private volatile BlobStore blobStore;
+
@Reference
private StatisticsProvider statisticsProvider = StatisticsProvider.NOOP;
@@ -118,25 +132,42 @@ public class SegmentNodeStoreFactory ext
private Registration fileStoreStatsMBean;
private WhiteboardExecutor executor;
+ private boolean customBlobStore;
+
+ private String role;
+
@Override
protected SegmentNodeStore getNodeStore() {
checkState(segmentNodeStore != null, "service must be activated when
used");
return segmentNodeStore;
}
-
- private String getRole() {
- String role = PropertiesUtil.toString(property(ROLE), null);
- return role;
- }
-
+
@Activate
public void activate(ComponentContext context) throws IOException {
this.context = context;
- log.info("activate: SegmentNodeStore '"+getRole()+"' starting.");
+ this.name = PropertiesUtil.toString(context.getProperties().get(NAME),
"SegmentNodeStore instance");
+ this.role = property(ROLE);
+ //In secondaryNodeStore mode customBlobStore is always enabled
+ this.customBlobStore =
Boolean.parseBoolean(property(CUSTOM_BLOB_STORE)) || isSecondaryStoreMode();
+ log.info("activate: SegmentNodeStore '"+role+"' starting.");
+
+ if (blobStore == null && customBlobStore) {
+ log.info("BlobStore use enabled. SegmentNodeStore would be
initialized when BlobStore would be available");
+ } else {
+ registerNodeStore();
+ }
+ }
+ protected void bindBlobStore(BlobStore blobStore) throws IOException {
+ this.blobStore = blobStore;
registerNodeStore();
}
+ protected void unbindBlobStore(BlobStore blobStore){
+ this.blobStore = null;
+ unregisterNodeStore();
+ }
+
@Deactivate
public void deactivate() {
unregisterNodeStore();
@@ -152,21 +183,20 @@ public class SegmentNodeStoreFactory ext
}
private synchronized void registerNodeStore() throws IOException {
- if (registerSegmentStore()) {
-
- if (getRole() != null) {
- registerNodeStoreProvider();
- return;
- }
-
+ if (registerSegmentStore() && role != null) {
+ registerNodeStoreProvider();
}
}
+ private boolean isSecondaryStoreMode() {
+ return "secondary".equals(role);
+ }
+
private void registerNodeStoreProvider() {
SegmentNodeStore.SegmentNodeStoreBuilder nodeStoreBuilder =
SegmentNodeStoreBuilders.builder(store);
segmentNodeStore = nodeStoreBuilder.build();
Dictionary<String, Object> props = new Hashtable<String, Object>();
- props.put(NodeStoreProvider.ROLE, getRole());
+ props.put(NodeStoreProvider.ROLE, role);
storeRegistration =
context.getBundleContext().registerService(NodeStoreProvider.class.getName(),
new NodeStoreProvider() {
@Override
public NodeStore getNodeStore() {
@@ -174,7 +204,7 @@ public class SegmentNodeStoreFactory ext
}
},
props);
- log.info("Registered NodeStoreProvider backed by SegmentNodeStore of
type '{}'", getRole());
+ log.info("Registered NodeStoreProvider backed by SegmentNodeStore of
type '{}'", role);
}
private boolean registerSegmentStore() throws IOException {
@@ -193,6 +223,11 @@ public class SegmentNodeStoreFactory ext
.withMemoryMapping(getMode().equals("64"))
.withStatisticsProvider(statisticsProvider);
+ if (customBlobStore) {
+ log.info("Initializing SegmentNodeStore with BlobStore [{}]",
blobStore);
+ builder.withBlobStore(blobStore);
+ }
+
try {
store = builder.build();
} catch (InvalidFileStoreVersionException e) {
@@ -212,7 +247,7 @@ public class SegmentNodeStoreFactory ext
FileStoreStatsMBean.class,
store.getStats(),
FileStoreStatsMBean.TYPE,
- "FileStore '" + getRole() + "' statistics"
+ "FileStore '" + role + "' statistics"
);
return true;
@@ -240,7 +275,11 @@ public class SegmentNodeStoreFactory ext
return new File(directory);
}
- return new File("tarmk");
+ if (role == null) {
+ return new File("tarmk");
+ } else {
+ return new File("tarmk-" + role);
+ }
}
private File getDirectory() {
@@ -289,20 +328,11 @@ public class SegmentNodeStoreFactory ext
return lookupConfigurationThenFramework(context, name);
}
- /**
- * needed for situations where you have to unwrap the
- * SegmentNodeStoreService, to get the SegmentStore, like the failover
- */
- @Override
- public SegmentStore getSegmentStore() {
- return store;
- }
-
//------------------------------------------------------------< Object >--
@Override
public String toString() {
- return name + ": " + segmentNodeStore + "[role:" + getRole() + "]";
+ return name + ": " + segmentNodeStore + "[role:" + role + "]";
}
}
Added:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactoryTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactoryTest.java?rev=1761799&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactoryTest.java
(added)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreFactoryTest.java
Wed Sep 21 19:35:03 2016
@@ -0,0 +1,66 @@
+/*
+ * 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 org.apache.jackrabbit.oak.segment;
+
+import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.util.Map;
+
+import static com.google.common.collect.Maps.newHashMap;
+import static org.apache.sling.testing.mock.osgi.MockOsgi.deactivate;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+public class SegmentNodeStoreFactoryTest extends SegmentNodeStoreServiceTest {
+
+ private SegmentNodeStoreFactory segmentNodeStoreFactory;
+
+ @Test
+ @Ignore
+ public void nodeStoreProvider() throws Exception {
+ }
+
+ @Override
+ protected void registerSegmentNodeStoreService(boolean customBlobStore) {
+ Map<String, Object> properties = newHashMap();
+
+ properties.put(SegmentNodeStoreFactory.ROLE, "some-role");
+ properties.put(SegmentNodeStoreFactory.CUSTOM_BLOB_STORE,
customBlobStore);
+ properties.put(SegmentNodeStoreFactory.DIRECTORY,
folder.getRoot().getAbsolutePath());
+
+ segmentNodeStoreFactory = context.registerInjectActivateService(new
SegmentNodeStoreFactory(), properties);
+ }
+
+ @Override
+ protected void unregisterSegmentNodeStoreService() {
+ deactivate(segmentNodeStoreFactory);
+ }
+
+ @Override
+ protected void assertServiceActivated() {
+ assertNotNull(context.getService(NodeStoreProvider.class));
+ }
+
+ @Override
+ protected void assertServiceNotActivated() {
+ assertNull(context.getService(NodeStoreProvider.class));
+ }
+}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java?rev=1761799&r1=1761798&r2=1761799&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreServiceTest.java
Wed Sep 21 19:35:03 2016
@@ -142,7 +142,7 @@ public class SegmentNodeStoreServiceTest
private SegmentNodeStoreService segmentNodeStoreService;
- private void registerSegmentNodeStoreService(boolean customBlobStore) {
+ protected void registerSegmentNodeStoreService(boolean customBlobStore) {
Map<String, Object> properties = newHashMap();
properties.put(SegmentNodeStoreService.CUSTOM_BLOB_STORE,
customBlobStore);
@@ -151,7 +151,7 @@ public class SegmentNodeStoreServiceTest
segmentNodeStoreService = context.registerInjectActivateService(new
SegmentNodeStoreService(), properties);
}
- private void unregisterSegmentNodeStoreService() {
+ protected void unregisterSegmentNodeStoreService() {
deactivate(segmentNodeStoreService);
}
@@ -165,12 +165,12 @@ public class SegmentNodeStoreServiceTest
blobStore.unregister();
}
- private void assertServiceActivated() {
+ protected void assertServiceActivated() {
assertNotNull(context.getService(NodeStore.class));
assertNotNull(context.getService(SegmentStoreProvider.class));
}
- private void assertServiceNotActivated() {
+ protected void assertServiceNotActivated() {
assertNull(context.getService(NodeStore.class));
assertNull(context.getService(SegmentStoreProvider.class));
}
Modified:
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactory.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactory.java?rev=1761799&r1=1761798&r2=1761799&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactory.java
(original)
+++
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactory.java
Wed Sep 21 19:35:03 2016
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
import static com.google.common.base.Preconditions.checkState;
import static
org.apache.jackrabbit.oak.osgi.OsgiUtil.lookupConfigurationThenFramework;
+import static
org.apache.jackrabbit.oak.spi.blob.osgi.SplitBlobStoreService.ONLY_STANDALONE_TARGET;
import static
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
import java.io.File;
@@ -31,12 +32,15 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.jackrabbit.oak.commons.PropertiesUtil;
import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
import org.apache.jackrabbit.oak.plugins.segment.file.FileStore.Builder;
import org.apache.jackrabbit.oak.plugins.segment.file.FileStoreStatsMBean;
import
org.apache.jackrabbit.oak.plugins.segment.file.InvalidFileStoreVersionException;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
import org.apache.jackrabbit.oak.spi.state.ProxyNodeStore;
@@ -61,8 +65,7 @@ import org.slf4j.LoggerFactory;
description = "Factory allowing configuration of adjacent instances of
" +
"NodeStore implementation based on Segment model besides
a default SegmentNodeStore in same setup."
)
-public class SegmentNodeStoreFactory extends ProxyNodeStore
- implements SegmentStoreProvider {
+public class SegmentNodeStoreFactory extends ProxyNodeStore {
public static final String NAME = "name";
@@ -99,7 +102,14 @@ public class SegmentNodeStoreFactory ext
description = "Cache size for storing most recently used Segments"
)
public static final String CACHE = "cache";
-
+
+ @Property(boolValue = false,
+ label = "Custom BlobStore",
+ description = "Boolean value indicating that a custom BlobStore is
to be used. " +
+ "By default large binary content would be stored within
segment tar files"
+ )
+ public static final String CUSTOM_BLOB_STORE = "customBlobStore";
+
private final Logger log = LoggerFactory.getLogger(getClass());
private String name;
@@ -110,6 +120,10 @@ public class SegmentNodeStoreFactory ext
private ComponentContext context;
+ @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY,
+ policy = ReferencePolicy.DYNAMIC, target = ONLY_STANDALONE_TARGET)
+ private volatile BlobStore blobStore;
+
@Reference
private StatisticsProvider statisticsProvider = StatisticsProvider.NOOP;
@@ -117,25 +131,42 @@ public class SegmentNodeStoreFactory ext
private Registration fileStoreStatsMBean;
private WhiteboardExecutor executor;
+ private boolean customBlobStore;
+
+ private String role;
+
@Override
protected SegmentNodeStore getNodeStore() {
checkState(segmentNodeStore != null, "service must be activated when
used");
return segmentNodeStore;
}
-
- private String getRole() {
- String role = PropertiesUtil.toString(property(ROLE), null);
- return role;
- }
-
+
@Activate
public void activate(ComponentContext context) throws IOException {
this.context = context;
- log.info("activate: SegmentNodeStore '"+getRole()+"' starting.");
+ this.name = PropertiesUtil.toString(context.getProperties().get(NAME),
"SegmentNodeStore instance");
+ this.role = property(ROLE);
+ //In secondaryNodeStore mode customBlobStore is always enabled
+ this.customBlobStore =
Boolean.parseBoolean(property(CUSTOM_BLOB_STORE)) || isSecondaryStoreMode();
+ log.info("activate: SegmentNodeStore '"+role+"' starting.");
+
+ if (blobStore == null && customBlobStore) {
+ log.info("BlobStore use enabled. SegmentNodeStore would be
initialized when BlobStore would be available");
+ } else {
+ registerNodeStore();
+ }
+ }
+ protected void bindBlobStore(BlobStore blobStore) throws IOException {
+ this.blobStore = blobStore;
registerNodeStore();
}
+ protected void unbindBlobStore(BlobStore blobStore){
+ this.blobStore = null;
+ unregisterNodeStore();
+ }
+
@Deactivate
public void deactivate() {
unregisterNodeStore();
@@ -151,21 +182,20 @@ public class SegmentNodeStoreFactory ext
}
private synchronized void registerNodeStore() throws IOException {
- if (registerSegmentStore()) {
-
- if (getRole() != null) {
- registerNodeStoreProvider();
- return;
- }
-
+ if (registerSegmentStore() && role != null) {
+ registerNodeStoreProvider();
}
}
+ private boolean isSecondaryStoreMode() {
+ return "secondary".equals(role);
+ }
+
private void registerNodeStoreProvider() {
SegmentNodeStore.SegmentNodeStoreBuilder nodeStoreBuilder =
SegmentNodeStore.builder(store);
segmentNodeStore = nodeStoreBuilder.build();
Dictionary<String, Object> props = new Hashtable<String, Object>();
- props.put(NodeStoreProvider.ROLE, getRole());
+ props.put(NodeStoreProvider.ROLE, role);
storeRegistration =
context.getBundleContext().registerService(NodeStoreProvider.class.getName(),
new NodeStoreProvider() {
@Override
public NodeStore getNodeStore() {
@@ -173,7 +203,7 @@ public class SegmentNodeStoreFactory ext
}
},
props);
- log.info("Registered NodeStoreProvider backed by SegmentNodeStore of
type '{}'", getRole());
+ log.info("Registered NodeStoreProvider backed by SegmentNodeStore of
type '{}'", role);
}
private boolean registerSegmentStore() throws IOException {
@@ -192,6 +222,11 @@ public class SegmentNodeStoreFactory ext
.withMemoryMapping(getMode().equals("64"))
.withStatisticsProvider(statisticsProvider);
+ if (customBlobStore) {
+ log.info("Initializing SegmentNodeStore with BlobStore [{}]",
blobStore);
+ builder.withBlobStore(blobStore);
+ }
+
try {
store = builder.build();
} catch (InvalidFileStoreVersionException e) {
@@ -211,7 +246,7 @@ public class SegmentNodeStoreFactory ext
FileStoreStatsMBean.class,
store.getStats(),
FileStoreStatsMBean.TYPE,
- "FileStore '" + getRole() + "' statistics"
+ "FileStore '" + role + "' statistics"
);
return true;
@@ -238,8 +273,11 @@ public class SegmentNodeStoreFactory ext
if (directory != null) {
return new File(directory);
}
-
- return new File("tarmk");
+ if (role == null) {
+ return new File("tarmk");
+ } else {
+ return new File("tarmk-" + role);
+ }
}
private File getDirectory() {
@@ -288,20 +326,10 @@ public class SegmentNodeStoreFactory ext
return lookupConfigurationThenFramework(context, name);
}
- /**
- * needed for situations where you have to unwrap the
- * SegmentNodeStoreService, to get the SegmentStore, like the failover
- */
- @Override
- public SegmentStore getSegmentStore() {
- return store;
- }
-
//------------------------------------------------------------< Object >--
@Override
public String toString() {
- return name + ": " + segmentNodeStore + "[role:" + getRole() + "]";
+ return name + ": " + segmentNodeStore + "[role:" + role + "]";
}
-
-}
+}
\ No newline at end of file
Added:
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactoryTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactoryTest.java?rev=1761799&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactoryTest.java
(added)
+++
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreFactoryTest.java
Wed Sep 21 19:35:03 2016
@@ -0,0 +1,66 @@
+/*
+ * 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 org.apache.jackrabbit.oak.plugins.segment;
+
+import org.apache.jackrabbit.oak.spi.state.NodeStoreProvider;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.util.Map;
+
+import static com.google.common.collect.Maps.newHashMap;
+import static org.apache.sling.testing.mock.osgi.MockOsgi.deactivate;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+public class SegmentNodeStoreFactoryTest extends SegmentNodeStoreServiceTest {
+
+ private SegmentNodeStoreFactory segmentNodeStoreFactory;
+
+ @Test
+ @Ignore
+ public void nodeStoreProvider() throws Exception {
+ }
+
+ @Override
+ protected void registerSegmentNodeStoreService(boolean customBlobStore) {
+ Map<String, Object> properties = newHashMap();
+
+ properties.put(SegmentNodeStoreFactory.ROLE, "some-role");
+ properties.put(SegmentNodeStoreFactory.CUSTOM_BLOB_STORE,
customBlobStore);
+ properties.put(SegmentNodeStoreFactory.DIRECTORY,
folder.getRoot().getAbsolutePath());
+
+ segmentNodeStoreFactory = context.registerInjectActivateService(new
SegmentNodeStoreFactory(), properties);
+ }
+
+ @Override
+ protected void unregisterSegmentNodeStoreService() {
+ deactivate(segmentNodeStoreFactory);
+ }
+
+ @Override
+ protected void assertServiceActivated() {
+ assertNotNull(context.getService(NodeStoreProvider.class));
+ }
+
+ @Override
+ protected void assertServiceNotActivated() {
+ assertNull(context.getService(NodeStoreProvider.class));
+ }
+}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java?rev=1761799&r1=1761798&r2=1761799&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreServiceTest.java
Wed Sep 21 19:35:03 2016
@@ -156,7 +156,7 @@ public class SegmentNodeStoreServiceTest
private SegmentNodeStoreService segmentNodeStoreService;
- private void registerSegmentNodeStoreService(boolean customBlobStore) {
+ protected void registerSegmentNodeStoreService(boolean customBlobStore) {
Map<String, Object> properties = newHashMap();
properties.put(SegmentNodeStoreService.CUSTOM_BLOB_STORE,
customBlobStore);
@@ -165,7 +165,7 @@ public class SegmentNodeStoreServiceTest
segmentNodeStoreService = context.registerInjectActivateService(new
SegmentNodeStoreService(), properties);
}
- private void unregisterSegmentNodeStoreService() {
+ protected void unregisterSegmentNodeStoreService() {
deactivate(segmentNodeStoreService);
}
@@ -179,12 +179,12 @@ public class SegmentNodeStoreServiceTest
blobStore.unregister();
}
- private void assertServiceActivated() {
+ protected void assertServiceActivated() {
assertNotNull(context.getService(NodeStore.class));
assertNotNull(context.getService(SegmentStoreProvider.class));
}
- private void assertServiceNotActivated() {
+ protected void assertServiceNotActivated() {
assertNull(context.getService(NodeStore.class));
assertNull(context.getService(SegmentStoreProvider.class));
}