Author: davide
Date: Thu Dec 17 20:32:36 2015
New Revision: 1720645
URL: http://svn.apache.org/viewvc?rev=1720645&view=rev
Log:
OAK-3529 - NodeStore API should expose an Instance ID
- Added Clusterable interface
- DocumentNodeStore implements Clusterable
- DocumentNodeStoreService registers itself as Clusterable
- Oak/Jcr allow registering of Clusterable objects
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/Clusterable.java
- copied, changed from r1720618,
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/package-info.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1720645&r1=1720644&r2=1720645&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
Thu Dec 17 20:32:36 2015
@@ -95,6 +95,7 @@ import org.apache.jackrabbit.oak.spi.que
import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.jackrabbit.oak.spi.security.SecurityConfiguration;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.apache.jackrabbit.oak.spi.state.Clusterable;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -150,6 +151,8 @@ public class Oak {
private final Closer closer = Closer.create();
private ContentRepository contentRepository;
+
+ private Clusterable clusterable;
/**
* Default {@code ScheduledExecutorService} used for scheduling background
tasks.
@@ -338,7 +341,19 @@ public class Oak {
// this(new DocumentMK.Builder().open());
// this(new LogWrapper(new DocumentMK.Builder().open()));
}
-
+
+ /**
+ * Define the current repository as being a {@link Clusterable} one.
+ *
+ * @param c
+ * @return
+ */
+ @Nonnull
+ public Oak with(@Nonnull Clusterable c) {
+ this.clusterable = checkNotNull(c);
+ return this;
+ }
+
/**
* Sets the default workspace name that should be used in case of login
* with {@code null} workspace name. If this method has not been called
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/package-info.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/package-info.java?rev=1720645&r1=1720644&r2=1720645&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/package-info.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/package-info.java
Thu Dec 17 20:32:36 2015
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@Version("1.1.0")
+@Version("1.2.0")
@Export(optional = "provide:=true")
package org.apache.jackrabbit.oak;
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1720645&r1=1720644&r2=1720645&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
Thu Dec 17 20:32:36 2015
@@ -108,6 +108,7 @@ import org.apache.jackrabbit.oak.spi.com
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.state.AbstractNodeState;
+import org.apache.jackrabbit.oak.spi.state.Clusterable;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
@@ -121,7 +122,7 @@ import org.slf4j.LoggerFactory;
* Implementation of a NodeStore on {@link DocumentStore}.
*/
public final class DocumentNodeStore
- implements NodeStore, RevisionContext, Observable {
+ implements NodeStore, RevisionContext, Observable, Clusterable {
private static final Logger LOG =
LoggerFactory.getLogger(DocumentNodeStore.class);
@@ -2728,4 +2729,9 @@ public final class DocumentNodeStore
public void setPersistentCache(PersistentCache persistentCache) {
this.persistentCache = persistentCache;
}
+
+ @Override
+ public String getInstanceId() {
+ return String.valueOf(getClusterId());
+ }
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java?rev=1720645&r1=1720644&r2=1720645&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
Thu Dec 17 20:32:36 2015
@@ -70,6 +70,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.spi.blob.BlobStoreWrapper;
import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
+import org.apache.jackrabbit.oak.spi.state.Clusterable;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.state.RevisionGC;
import org.apache.jackrabbit.oak.spi.state.RevisionGCMBean;
@@ -488,7 +489,13 @@ public class DocumentNodeStoreService {
// OAK-2844: in order to allow DocumentDiscoveryLiteService to directly
// require a service DocumentNodeStore (instead of having to do an
'instanceof')
// the registration is now done for both NodeStore and
DocumentNodeStore here.
- reg = context.getBundleContext().registerService(new
String[]{NodeStore.class.getName(), DocumentNodeStore.class.getName()}, store,
props);
+ reg = context.getBundleContext().registerService(
+ new String[]{
+ NodeStore.class.getName(),
+ DocumentNodeStore.class.getName(),
+ Clusterable.class.getName()
+ },
+ store, props);
}
@Deactivate
Copied:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/Clusterable.java
(from r1720618,
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java)
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/Clusterable.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/Clusterable.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java&r1=1720618&r2=1720645&rev=1720645&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/Clusterable.java
Thu Dec 17 20:32:36 2015
@@ -6,7 +6,7 @@
* (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
+ * 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,
@@ -14,9 +14,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@Version("1.2.0")
-@Export(optional = "provide:=true")
package org.apache.jackrabbit.oak.spi.state;
-import aQute.bnd.annotation.Version;
-import aQute.bnd.annotation.Export;
\ No newline at end of file
+import javax.annotation.Nonnull;
+
+/**
+ * Interface for bearing cluster node specific information.
+ */
+public interface Clusterable {
+ /**
+ * <p>
+ * Will return a unique number per instance across the cluster. It will
only make its best
+ * effort to preserve the same number across restarts but it must be
unique across the cluster.
+ * </p>
+ *
+ * @return Cannot be null or empty.
+ */
+ @Nonnull
+ String getInstanceId();
+}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java?rev=1720645&r1=1720644&r2=1720645&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/package-info.java
Thu Dec 17 20:32:36 2015
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@Version("1.2.0")
+@Version("1.3.0")
@Export(optional = "provide:=true")
package org.apache.jackrabbit.oak.spi.state;
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java?rev=1720645&r1=1720644&r2=1720645&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
Thu Dec 17 20:32:36 2015
@@ -60,6 +60,7 @@ import org.apache.jackrabbit.oak.spi.com
import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.apache.jackrabbit.oak.spi.state.Clusterable;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
@@ -103,6 +104,8 @@ public class Jcr {
private ContentRepository contentRepository;
private Repository repository;
+
+ private Clusterable clusterable;
public Jcr(Oak oak) {
this.oak = oak;
@@ -140,6 +143,13 @@ public class Jcr {
}
@Nonnull
+ public Jcr with(@Nonnull Clusterable c) {
+ ensureRepositoryIsNotCreated();
+ this.clusterable = checkNotNull(c);
+ return this;
+ }
+
+ @Nonnull
public final Jcr with(@Nonnull RepositoryInitializer initializer) {
ensureRepositoryIsNotCreated();
repositoryInitializers.add(checkNotNull(initializer));
@@ -339,7 +349,10 @@ public class Jcr {
if (defaultWorkspaceName != null) {
oak.with(defaultWorkspaceName);
}
-
+
+ if (clusterable != null) {
+ oak.with(clusterable);
+ }
}
@Nonnull
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java?rev=1720645&r1=1720644&r2=1720645&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/package-info.java
Thu Dec 17 20:32:36 2015
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@Version("1.1.0")
+@Version("1.2.0")
@Export(optional = "provide:=true")
package org.apache.jackrabbit.oak.jcr;