diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2020-09-25 11:23:06 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2020-09-25 11:23:06 +0200 |
commit | 2cd240de82eedbad02868290c89036e91d3f8e7d (patch) | |
tree | 48f82af4bdf1c71f3037b05ef547bb1dbe095aba /container-core | |
parent | 17c6dc3a23badb17f468fe8b38bda57eab717a4c (diff) |
Move injectable lazy document access to top level and rename to VespaDocumentAccess
Diffstat (limited to 'container-core')
2 files changed, 105 insertions, 93 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/core/documentapi/DocumentAccessProvider.java b/container-core/src/main/java/com/yahoo/container/core/documentapi/DocumentAccessProvider.java index deabcbad9b4..6eb80ae1aaf 100644 --- a/container-core/src/main/java/com/yahoo/container/core/documentapi/DocumentAccessProvider.java +++ b/container-core/src/main/java/com/yahoo/container/core/documentapi/DocumentAccessProvider.java @@ -5,22 +5,6 @@ import com.yahoo.cloud.config.SlobroksConfig; import com.yahoo.component.AbstractComponent; import com.yahoo.container.di.componentgraph.Provider; import com.yahoo.document.config.DocumentmanagerConfig; -import com.yahoo.document.select.parser.ParseException; -import com.yahoo.documentapi.AsyncParameters; -import com.yahoo.documentapi.AsyncSession; -import com.yahoo.documentapi.DocumentAccess; -import com.yahoo.documentapi.DocumentAccessParams; -import com.yahoo.documentapi.SubscriptionParameters; -import com.yahoo.documentapi.SubscriptionSession; -import com.yahoo.documentapi.SyncParameters; -import com.yahoo.documentapi.SyncSession; -import com.yahoo.documentapi.VisitorDestinationParameters; -import com.yahoo.documentapi.VisitorDestinationSession; -import com.yahoo.documentapi.VisitorParameters; -import com.yahoo.documentapi.VisitorSession; -import com.yahoo.documentapi.messagebus.MessageBusDocumentAccess; -import com.yahoo.documentapi.messagebus.MessageBusParams; -import com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet; import com.yahoo.messagebus.MessagebusConfig; import com.yahoo.vespa.config.content.LoadTypeConfig; @@ -29,19 +13,19 @@ import com.yahoo.vespa.config.content.LoadTypeConfig; * * @author jonmv */ -public class DocumentAccessProvider extends AbstractComponent implements Provider<DocumentAccessProvider.LazyWrapper> { +public class DocumentAccessProvider extends AbstractComponent implements Provider<VespaDocumentAccess> { - private final DocumentAccessProvider.LazyWrapper access; + private final VespaDocumentAccess access; @Inject // TODO jonmv: Have Slobrok and RPC config injected as well. public DocumentAccessProvider(DocumentmanagerConfig documentmanagerConfig, LoadTypeConfig loadTypeConfig, SlobroksConfig slobroksConfig, MessagebusConfig messagebusConfig) { - this.access = new LazyWrapper(documentmanagerConfig, loadTypeConfig, slobroksConfig, messagebusConfig); + this.access = new VespaDocumentAccess(documentmanagerConfig, loadTypeConfig, slobroksConfig, messagebusConfig); } @Override - public DocumentAccessProvider.LazyWrapper get() { + public VespaDocumentAccess get() { return access; } @@ -51,77 +35,4 @@ public class DocumentAccessProvider extends AbstractComponent implements Provide } - public static class LazyWrapper extends DocumentAccess { - - private final MessageBusParams parameters; - private final Object monitor = new Object(); - - private DocumentAccess delegate = null; - private boolean shutDown = false; - - private LazyWrapper(DocumentmanagerConfig documentmanagerConfig, - LoadTypeConfig loadTypeConfig, - SlobroksConfig slobroksConfig, - MessagebusConfig messagebusConfig) { - super(new DocumentAccessParams().setDocumentmanagerConfig(documentmanagerConfig)); - this.parameters = new MessageBusParams(new LoadTypeSet(loadTypeConfig)); - this.parameters.setDocumentmanagerConfig(documentmanagerConfig); - this.parameters.getRPCNetworkParams().setSlobroksConfig(slobroksConfig); - this.parameters.getMessageBusParams().setMessageBusConfig(messagebusConfig); - } - - private DocumentAccess delegate() { - synchronized (monitor) { - if (delegate == null) { - if (shutDown) - throw new IllegalStateException("This document access has been shut down"); - - delegate = new MessageBusDocumentAccess(parameters); - } - return delegate; - } - } - - @Override - public void shutdown() { - synchronized (monitor) { - super.shutdown(); - shutDown = true; - if (delegate != null) - delegate.shutdown(); - } - } - - @Override - public SyncSession createSyncSession(SyncParameters parameters) { - return delegate().createSyncSession(parameters); - } - - @Override - public AsyncSession createAsyncSession(AsyncParameters parameters) { - return delegate().createAsyncSession(parameters); - } - - @Override - public VisitorSession createVisitorSession(VisitorParameters parameters) throws ParseException { - return delegate().createVisitorSession(parameters); - } - - @Override - public VisitorDestinationSession createVisitorDestinationSession(VisitorDestinationParameters parameters) { - return delegate().createVisitorDestinationSession(parameters); - } - - @Override - public SubscriptionSession createSubscription(SubscriptionParameters parameters) { - return delegate().createSubscription(parameters); - } - - @Override - public SubscriptionSession openSubscription(SubscriptionParameters parameters) { - return delegate().openSubscription(parameters); - } - - } - } diff --git a/container-core/src/main/java/com/yahoo/container/core/documentapi/VespaDocumentAccess.java b/container-core/src/main/java/com/yahoo/container/core/documentapi/VespaDocumentAccess.java new file mode 100644 index 00000000000..fffa915a840 --- /dev/null +++ b/container-core/src/main/java/com/yahoo/container/core/documentapi/VespaDocumentAccess.java @@ -0,0 +1,101 @@ +package com.yahoo.container.core.documentapi; + +import com.yahoo.cloud.config.SlobroksConfig; +import com.yahoo.document.config.DocumentmanagerConfig; +import com.yahoo.document.select.parser.ParseException; +import com.yahoo.documentapi.AsyncParameters; +import com.yahoo.documentapi.AsyncSession; +import com.yahoo.documentapi.DocumentAccess; +import com.yahoo.documentapi.DocumentAccessParams; +import com.yahoo.documentapi.SubscriptionParameters; +import com.yahoo.documentapi.SubscriptionSession; +import com.yahoo.documentapi.SyncParameters; +import com.yahoo.documentapi.SyncSession; +import com.yahoo.documentapi.VisitorDestinationParameters; +import com.yahoo.documentapi.VisitorDestinationSession; +import com.yahoo.documentapi.VisitorParameters; +import com.yahoo.documentapi.VisitorSession; +import com.yahoo.documentapi.messagebus.MessageBusDocumentAccess; +import com.yahoo.documentapi.messagebus.MessageBusParams; +import com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet; +import com.yahoo.messagebus.MessagebusConfig; +import com.yahoo.vespa.config.content.LoadTypeConfig; + +/** + * Wraps a lazily initialised MessageBusDocumentAccess. Lazy to allow it to always be set up. + * Inject this class directly (instead of DocumentAccess) for use in internal code. + * + * @author jonmv + */ +public class VespaDocumentAccess extends DocumentAccess { + + private final MessageBusParams parameters; + private final Object monitor = new Object(); + + private DocumentAccess delegate = null; + private boolean shutDown = false; + + VespaDocumentAccess(DocumentmanagerConfig documentmanagerConfig, + LoadTypeConfig loadTypeConfig, + SlobroksConfig slobroksConfig, + MessagebusConfig messagebusConfig) { + super(new DocumentAccessParams().setDocumentmanagerConfig(documentmanagerConfig)); + this.parameters = new MessageBusParams(new LoadTypeSet(loadTypeConfig)); + this.parameters.setDocumentmanagerConfig(documentmanagerConfig); + this.parameters.getRPCNetworkParams().setSlobroksConfig(slobroksConfig); + this.parameters.getMessageBusParams().setMessageBusConfig(messagebusConfig); + } + + private DocumentAccess delegate() { + synchronized (monitor) { + if (delegate == null) { + if (shutDown) + throw new IllegalStateException("This document access has been shut down"); + + delegate = new MessageBusDocumentAccess(parameters); + } + return delegate; + } + } + + @Override + public void shutdown() { + synchronized (monitor) { + super.shutdown(); + shutDown = true; + if (delegate != null) + delegate.shutdown(); + } + } + + @Override + public SyncSession createSyncSession(SyncParameters parameters) { + return delegate().createSyncSession(parameters); + } + + @Override + public AsyncSession createAsyncSession(AsyncParameters parameters) { + return delegate().createAsyncSession(parameters); + } + + @Override + public VisitorSession createVisitorSession(VisitorParameters parameters) throws ParseException { + return delegate().createVisitorSession(parameters); + } + + @Override + public VisitorDestinationSession createVisitorDestinationSession(VisitorDestinationParameters parameters) { + return delegate().createVisitorDestinationSession(parameters); + } + + @Override + public SubscriptionSession createSubscription(SubscriptionParameters parameters) { + return delegate().createSubscription(parameters); + } + + @Override + public SubscriptionSession openSubscription(SubscriptionParameters parameters) { + return delegate().openSubscription(parameters); + } + +} |