summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java1
-rw-r--r--container-core/src/main/java/com/yahoo/container/core/documentapi/MessageBusDocumentAccessProvider.java55
-rw-r--r--container-core/src/main/java/com/yahoo/container/core/documentapi/package-info.java5
-rw-r--r--documentapi/abi-spec.json2
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java6
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java6
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java6
7 files changed, 76 insertions, 5 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java
index 87e8f16f88c..d63987f6c07 100755
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java
@@ -181,6 +181,7 @@ public abstract class ContainerCluster<CONTAINER extends Container>
addSimpleComponent(com.yahoo.metrics.simple.jdisc.JdiscMetricsFactory.class.getName(), null, MetricProperties.BUNDLE_SYMBOLIC_NAME);
addSimpleComponent("com.yahoo.container.jdisc.state.StateMonitor");
addSimpleComponent("com.yahoo.container.jdisc.ContainerThreadFactory");
+ addSimpleComponent(com.yahoo.container.core.documentapi.MessageBusDocumentAccessProvider.class.getName());
addSimpleComponent("com.yahoo.container.handler.VipStatus");
addSimpleComponent(com.yahoo.container.handler.ClustersStatus.class.getName());
addJaxProviders();
diff --git a/container-core/src/main/java/com/yahoo/container/core/documentapi/MessageBusDocumentAccessProvider.java b/container-core/src/main/java/com/yahoo/container/core/documentapi/MessageBusDocumentAccessProvider.java
new file mode 100644
index 00000000000..c3cd78e4da9
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/container/core/documentapi/MessageBusDocumentAccessProvider.java
@@ -0,0 +1,55 @@
+package com.yahoo.container.core.documentapi;
+
+import com.google.inject.Inject;
+import com.yahoo.component.AbstractComponent;
+import com.yahoo.container.di.componentgraph.Provider;
+import com.yahoo.document.config.DocumentmanagerConfig;
+import com.yahoo.documentapi.DocumentAccess;
+import com.yahoo.documentapi.messagebus.MessageBusDocumentAccess;
+import com.yahoo.documentapi.messagebus.MessageBusParams;
+import com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet;
+import com.yahoo.vespa.config.content.LoadTypeConfig;
+
+/**
+ * Has a lazily populated reference to a {@link MessageBusDocumentAccess}.
+ *
+ * @author jonmv
+ */
+public class MessageBusDocumentAccessProvider extends AbstractComponent implements Provider<DocumentAccess> {
+
+ private final DocumentmanagerConfig documentmanagerConfig;
+ private final LoadTypeConfig loadTypeConfig;
+ private final Object monitor = new Object();
+ private boolean shutDown = false;
+ private DocumentAccess access = null;
+
+ @Inject
+ public MessageBusDocumentAccessProvider(DocumentmanagerConfig documentmanagerConfig, LoadTypeConfig loadTypeConfig) {
+ this.documentmanagerConfig = documentmanagerConfig;
+ this.loadTypeConfig = loadTypeConfig;
+ }
+
+ @Override
+ public DocumentAccess get() {
+ synchronized (monitor) {
+ if (access == null) {
+ access = new MessageBusDocumentAccess((MessageBusParams) new MessageBusParams(new LoadTypeSet(loadTypeConfig)).setDocumentmanagerConfig(documentmanagerConfig));
+ if (shutDown)
+ access.shutdown();
+ }
+ return access;
+ }
+ }
+
+ @Override
+ public void deconstruct() {
+ synchronized (monitor) {
+ if ( ! shutDown) {
+ shutDown = true;
+ if (access != null)
+ access.shutdown();
+ }
+ }
+ }
+
+}
diff --git a/container-core/src/main/java/com/yahoo/container/core/documentapi/package-info.java b/container-core/src/main/java/com/yahoo/container/core/documentapi/package-info.java
new file mode 100644
index 00000000000..de524237499
--- /dev/null
+++ b/container-core/src/main/java/com/yahoo/container/core/documentapi/package-info.java
@@ -0,0 +1,5 @@
+// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage
+package com.yahoo.container.core.documentapi;
+
+import com.yahoo.osgi.annotation.ExportPackage;
diff --git a/documentapi/abi-spec.json b/documentapi/abi-spec.json
index a28ce1ee6db..6f5e6d66e2a 100644
--- a/documentapi/abi-spec.json
+++ b/documentapi/abi-spec.json
@@ -354,6 +354,7 @@
"methods": [
"public void <init>(long, boolean)",
"public boolean wasFound()",
+ "public boolean isSuccess()",
"public int hashCode()",
"public boolean equals(java.lang.Object)",
"public java.lang.String toString()"
@@ -561,6 +562,7 @@
"methods": [
"public void <init>(long, boolean)",
"public boolean wasFound()",
+ "public boolean isSuccess()",
"public int hashCode()",
"public boolean equals(java.lang.Object)",
"public java.lang.String toString()"
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java b/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java
index 308eafcd596..7a9818ba4fd 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java
@@ -27,9 +27,9 @@ import com.yahoo.config.subscription.ConfigSubscriber;
* <p>This class is the factory for creating the four session types mentioned above.</p>
*
* <p>There may be multiple implementations of the document api classes. If
- * default configuration is sufficient, use the {@link #createDefault} method to
- * return a running document access. Note that there are running threads within
- * an access object, so you must shut it down when done.</p>
+ * default configuration is sufficient, simply inject a {@code DocumentAccess} to
+ * obtain a running document access. If you instead create a concrete implementation, note that
+ * there are running threads within an access object, so you must shut it down when done.</p>
*
* <p>An implementation of the Document Api may support just a subset of the
* access types defined in this interface. For example, some document
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java b/documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java
index 502588a3d5f..2a7c6f45d95 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/RemoveResponse.java
@@ -12,7 +12,7 @@ public class RemoveResponse extends Response {
private final boolean wasFound;
public RemoveResponse(long requestId, boolean wasFound) {
- super(requestId);
+ super(requestId, null, wasFound ? Outcome.SUCCESS : Outcome.NOT_FOUND);
this.wasFound = wasFound;
}
@@ -21,6 +21,10 @@ public class RemoveResponse extends Response {
}
@Override
+ // TODO: fix this when/if NOT_FOUND is no longer a success.
+ public boolean isSuccess() { return super.isSuccess() || outcome() == Outcome.NOT_FOUND; }
+
+ @Override
public int hashCode() {
return super.hashCode() + Boolean.valueOf(wasFound).hashCode();
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java b/documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java
index 96bf58c1e64..aca34a92a30 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/UpdateResponse.java
@@ -12,7 +12,7 @@ public class UpdateResponse extends Response {
private final boolean wasFound;
public UpdateResponse(long requestId, boolean wasFound) {
- super(requestId);
+ super(requestId, null, wasFound ? Outcome.SUCCESS : Outcome.NOT_FOUND);
this.wasFound = wasFound;
}
@@ -21,6 +21,10 @@ public class UpdateResponse extends Response {
}
@Override
+ // TODO: fix this when/if NOT_FOUND is no longer a success.
+ public boolean isSuccess() { return super.isSuccess() || outcome() == Outcome.NOT_FOUND; }
+
+ @Override
public int hashCode() {
return super.hashCode() + Boolean.valueOf(wasFound).hashCode();
}