summaryrefslogtreecommitdiffstats
path: root/documentapi/src
diff options
context:
space:
mode:
Diffstat (limited to 'documentapi/src')
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java30
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/DocumentAccessParams.java37
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/local/LocalDocumentAccess.java8
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusDocumentAccess.java57
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/loadtypes/LoadTypeSet.java5
5 files changed, 74 insertions, 63 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java b/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java
index 0d781e4ca95..bad692f0a0d 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccess.java
@@ -41,13 +41,13 @@ import com.yahoo.config.subscription.ConfigSubscriber;
* <p>Access to this class is thread-safe.</p>
*
* @author bratseth
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar Rosenvinge</a>
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Einar Rosenvinge
+ * @author Simon Thoresen
*/
public abstract class DocumentAccess {
- protected DocumentTypeManager documentMgr;
- protected ConfigSubscriber documentTypeManagerConfig;
+ private final DocumentTypeManager documentTypeManager;
+ private final ConfigSubscriber documentTypeConfigSubscriber;
/**
* <p>This is a convenience method to return a document access object with
@@ -69,8 +69,14 @@ public abstract class DocumentAccess {
*/
protected DocumentAccess(DocumentAccessParams params) {
super();
- documentMgr = new DocumentTypeManager();
- documentTypeManagerConfig = DocumentTypeManagerConfigurer.configure(documentMgr, params.getDocumentManagerConfigId());
+ if (params.documentmanagerConfig().isPresent()) { // our config has been injected into the creator
+ documentTypeManager = new DocumentTypeManager(params.documentmanagerConfig().get());
+ documentTypeConfigSubscriber = null;
+ }
+ else { // fallback to old style subscription
+ documentTypeManager = new DocumentTypeManager();
+ documentTypeConfigSubscriber = DocumentTypeManagerConfigurer.configure(documentTypeManager, params.getDocumentManagerConfigId());
+ }
}
/**
@@ -154,11 +160,15 @@ public abstract class DocumentAccess {
public abstract SubscriptionSession openSubscription(SubscriptionParameters parameters);
/**
- * <p>Shuts down the underlying sessions used by this DocumentAccess;
+ * Shuts down the underlying sessions used by this DocumentAccess;
* subsequent use of this DocumentAccess will throw unspecified exceptions,
- * depending on implementation.</p>
+ * depending on implementation.
+ * Classes overriding this must call super.shutdown().
*/
- public abstract void shutdown();
+ public void shutdown() {
+ if (documentTypeConfigSubscriber != null)
+ documentTypeConfigSubscriber.close();
+ }
/**
* <p>Returns the {@link DocumentTypeManager} used by this
@@ -167,6 +177,6 @@ public abstract class DocumentAccess {
* @return The document type manager.
*/
public DocumentTypeManager getDocumentTypeManager() {
- return documentMgr;
+ return documentTypeManager;
}
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessParams.java b/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessParams.java
index 57cfdbd32e1..701fafbab06 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessParams.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessParams.java
@@ -1,6 +1,10 @@
-// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.documentapi;
+import com.yahoo.document.config.DocumentmanagerConfig;
+
+import java.util.Optional;
+
/**
* Superclass of the classes which contains the parameters for creating or opening a document access.
*
@@ -8,26 +12,27 @@ package com.yahoo.documentapi;
*/
public class DocumentAccessParams {
- // The id to resolve to document manager config.
+ /** The id to resolve to document manager config. Not needed if the config is passed here */
private String documentManagerConfigId = "client";
- /**
- * Returns the config id that the document manager should subscribe to.
- *
- * @return The config id.
- */
- public String getDocumentManagerConfigId() {
- return documentManagerConfigId;
- }
+ /** The document manager config, or empty if not provided (in which case a subscription must be created) */
+ private Optional<DocumentmanagerConfig> documentmanagerConfig = Optional.empty();
+
+ /** Returns the config id that the document manager should subscribe to. */
+ public String getDocumentManagerConfigId() { return documentManagerConfigId; }
+
+ /** Returns the document manager config to use, or empty if it it necessary to subscribe to get it */
+ public Optional<DocumentmanagerConfig> documentmanagerConfig() { return documentmanagerConfig; }
- /**
- * Sets the config id that the document manager should subscribe to.
- *
- * @param configId The config id.
- * @return This, to allow chaining.
- */
+ /** Sets the config id that the document manager should subscribe to. */
public DocumentAccessParams setDocumentManagerConfigId(String configId) {
documentManagerConfigId = configId;
return this;
}
+
+ public DocumentAccessParams setDocumentmanagerConfig(DocumentmanagerConfig documentmanagerConfig) {
+ this.documentmanagerConfig = Optional.of(documentmanagerConfig);
+ return this;
+ }
+
} \ No newline at end of file
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/local/LocalDocumentAccess.java b/documentapi/src/main/java/com/yahoo/documentapi/local/LocalDocumentAccess.java
index edcefe9447d..ab1b5e7cdd6 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/local/LocalDocumentAccess.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/local/LocalDocumentAccess.java
@@ -22,13 +22,6 @@ public class LocalDocumentAccess extends DocumentAccess {
}
@Override
- public void shutdown() {
- if (documentTypeManagerConfig != null) {
- documentTypeManagerConfig.close();
- }
- }
-
- @Override
public SyncSession createSyncSession(SyncParameters parameters) {
return new LocalSyncSession(this);
}
@@ -57,4 +50,5 @@ public class LocalDocumentAccess extends DocumentAccess {
public SubscriptionSession openSubscription(SubscriptionParameters parameters) {
throw new UnsupportedOperationException("Not supported yet");
}
+
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusDocumentAccess.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusDocumentAccess.java
index 818bc204784..0a57a700276 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusDocumentAccess.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusDocumentAccess.java
@@ -7,8 +7,11 @@ import com.yahoo.document.select.parser.ParseException;
import com.yahoo.documentapi.*;
import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
import com.yahoo.messagebus.MessageBus;
+import com.yahoo.messagebus.NetworkMessageBus;
import com.yahoo.messagebus.RPCMessageBus;
import com.yahoo.messagebus.network.Network;
+import com.yahoo.messagebus.network.local.LocalNetwork;
+import com.yahoo.messagebus.network.local.LocalWire;
import com.yahoo.messagebus.routing.RoutingTable;
import java.util.concurrent.Executors;
@@ -17,16 +20,18 @@ import java.util.concurrent.ScheduledExecutorService;
/**
* This class implements the {@link DocumentAccess} interface using message bus for communication.
*
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar Rosenvinge</a>
+ * @author Einar Rosenvinge
* @author bratseth
*/
public class MessageBusDocumentAccess extends DocumentAccess {
- private final RPCMessageBus bus;
+ private final NetworkMessageBus bus;
+
private final MessageBusParams params;
// TODO: make pool size configurable? ScheduledExecutorService is not dynamic
- private final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(
- Runtime.getRuntime().availableProcessors(), ThreadFactoryFactory.getDaemonThreadFactory("mbus.access.scheduler"));
+ private final ScheduledExecutorService scheduledExecutorService =
+ Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors(),
+ ThreadFactoryFactory.getDaemonThreadFactory("mbus.access.scheduler"));
/**
* Creates a new document access using default values for all parameters.
@@ -46,32 +51,38 @@ public class MessageBusDocumentAccess extends DocumentAccess {
try {
com.yahoo.messagebus.MessageBusParams mbusParams = new com.yahoo.messagebus.MessageBusParams(params.getMessageBusParams());
mbusParams.addProtocol(new DocumentProtocol(getDocumentTypeManager(), params.getProtocolConfigId(), params.getLoadTypes()));
- bus = new RPCMessageBus(mbusParams,
- params.getRPCNetworkParams(),
- params.getRoutingConfigId());
+ if (System.getProperty("vespa.local", "false").equals("true")) { // set by Application when running locally
+ LocalNetwork network = new LocalNetwork();
+ bus = new NetworkMessageBus(network, new MessageBus(network, mbusParams));
+ }
+ else {
+ bus = new RPCMessageBus(mbusParams, params.getRPCNetworkParams(), params.getRoutingConfigId());
+ }
}
catch (Exception e) {
throw new DocumentAccessException(e);
}
}
+
+ private MessageBus messageBus() {
+ return bus.getMessageBus();
+ }
@Override
public void shutdown() {
+ super.shutdown();
bus.destroy();
- if (documentTypeManagerConfig != null) {
- documentTypeManagerConfig.close();
- }
scheduledExecutorService.shutdownNow();
}
@Override
public MessageBusSyncSession createSyncSession(SyncParameters parameters) {
- return new MessageBusSyncSession(parameters, bus.getMessageBus(), this.params);
+ return new MessageBusSyncSession(parameters, messageBus(), this.params);
}
@Override
public MessageBusAsyncSession createAsyncSession(AsyncParameters parameters) {
- return new MessageBusAsyncSession(parameters, bus.getMessageBus(), this.params);
+ return new MessageBusAsyncSession(parameters, messageBus(), this.params);
}
@Override
@@ -101,34 +112,20 @@ public class MessageBusDocumentAccess extends DocumentAccess {
throw new UnsupportedOperationException("Subscriptions not supported.");
}
- /**
- * Returns the internal message bus object so that clients can use it directly.
- *
- * @return The internal message bus.
- */
- public MessageBus getMessageBus() {
- return bus.getMessageBus();
- }
+ /** Returns the internal message bus object so that clients can use it directly. */
+ public MessageBus getMessageBus() { return messageBus(); }
/**
* Returns the network layer of the internal message bus object so that clients can use it directly. This may seem
* abit arbitrary, but the fact is that the RPCNetwork actually implements the IMirror API as well as exposing the
* SystemState object.
- *
- * @return The network layer.
*/
- public Network getNetwork() {
- return bus.getRPCNetwork();
- }
+ public Network getNetwork() { return bus.getNetwork(); }
/**
* Returns the parameter object that controls the underlying message bus. Changes to these parameters do not affect
* previously created sessions.
- *
- * @return The parameter object.
*/
- public MessageBusParams getParams() {
- return params;
- }
+ public MessageBusParams getParams() { return params; }
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/loadtypes/LoadTypeSet.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/loadtypes/LoadTypeSet.java
index cb453559ab1..b9129bf3b85 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/loadtypes/LoadTypeSet.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/loadtypes/LoadTypeSet.java
@@ -23,6 +23,7 @@ import java.util.TreeMap;
* load types yourself with addType().
*/
public class LoadTypeSet {
+
class DualMap {
Map<String, LoadType> nameMap = new TreeMap<String, LoadType>();
Map<Integer, LoadType> idMap = new HashMap<Integer, LoadType>();
@@ -49,6 +50,10 @@ public class LoadTypeSet {
configure(new ConfigGetter<>(LoadTypeConfig.class).getConfig(configId));
}
+ public LoadTypeSet(LoadTypeConfig loadTypeConfig) {
+ configure(loadTypeConfig);
+ }
+
public Map<String, LoadType> getNameMap() {
return map.nameMap;
}