diff options
author | Harald Musum <musum@oath.com> | 2017-08-31 09:32:49 +0200 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2017-08-31 09:32:49 +0200 |
commit | 9f506465b36ef1b7a858211882fc3594d170b418 (patch) | |
tree | 5599ed86e4cee0fcb0dd696572b8d038b361b5c2 | |
parent | e4dc0493754618dd33ddf8985d0ddd23001a9d39 (diff) | |
parent | 0c7af1343cec5ca95e338ce83dda158f123e72dc (diff) |
Merge branch 'master' into revert-3275-revert-3260-hmusum/remove-version-from-def-files
135 files changed, 586 insertions, 401 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ddc316e5b9c..487d7fb8522 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,60 +1,42 @@ # Contributing to Vespa -We appreciate contributions to Vespa! -Below is a quick how-to. - - -## Reporting issues -Reporting a problem is a valuable contribution. -Use [GitHub issues](https://github.com/vespa-engine/vespa/issues) to report bugs. -Issues are evaluated daily. -If you read this, you are probably a developer who knows how to write good bug reports - -make it easy to for others to reproduce the problem (include a test case!), -include the Vespa version, -and make it easy for others to understand the importance of the problem. - - -## Check the ToDo list -Future features are kept on the [ToDo list](TODO.md) - -minor fixes better reported and tracked in [issues](https://github.com/vespa-engine/vespa/issues). - +Contributions to [Vespa](http://github.com/vespa-engine/vespa) +and the [Vespa documentation](http://github.com/vespa-engine/documentation) +are welcome. +This documents tells you what you need to know to contribute. + +##Â Open development +All work on Vespa happens directly on Github, +using the [Github flow model](https://guides.github.com/introduction/flow/). +We release the master branch a few times a week and you should expect it to almost always work. +In addition to the [public Travis build](https://travis-ci.org/vespa-engine/vespa) +we have a large acceptance and performance test suite which +is also run continuously. We plan to add this to the open source code base later. + +All pull requests are reviewed by a member of the +[Vespa committers](https://github.com/orgs/vespa-engine/teams/vespa/members) team, regardless +of who made it. If you want to become a committer, making some quality contributions is the way to start. ## Versioning -Vespa uses semantic versioning, -read [this guide](http://docs.vespa.ai/documentation/vespa-versions.html) to understand -deprecations and changes to APIs and stored data across releases. -Vespa releases more often than weekly, and the team does not write release notes or a changelog - -instead, track issues labeled _Feature_. +Vespa uses semantic versioning - see +[vespa versions](http://docs.vespa.ai/documentation/vespa-versions.html). +Notice in particular that any Java API in a package having a @PublicAPI +annotation in the package-info file cannot be changed in an incompatible way +between major versions: Existing types and method signatures must be preserved +(but can be marked deprecated). +## Issues +We track issues in [GitHub issues](https://github.com/vespa-engine/vespa/issues). +It is fine to submit issues also for feature requests and ideas, whether or not you intend to work on them. -## Build custom plugins -Vespa has great support for custom plugins - -you will often find that the best way to implement your application is by writing a plugin - -refer to the [APIs](http://docs.vespa.ai/documentation/api.html). - - -## Where to start contributing -Most features plug into the [Vespa Container](docs.vespa.ai/documentation/jdisc/index.html) - -this is the most likely place to write enhancements. -Discuss with the community if others have similar feature requests - make the feature generic. +There is also a [ToDo list](TODO.md) for larger things which nobody are working on yet. ### Getting started See [README](README.md) for how to build and test Vespa. -<!-- Do we have a link to code conventions - or just use below? --> -Java coding guidelines: -* 4 spaces indent <!-- Line width? --> -* Use Java coding standards -* No wildcard imports - -### Pull requests -The Vespa Team evaluates pull requests as fast as we can. -File an issue that you can refer to in the pull request - -The issue can be valid even though a pull request will not be merged. -Also add `Closes #XXX` or `Fixes #XXX` in commits - this will auto-close the issue. -The Vespa Team work on the master branch, and does not have branches for other major versions - -the current major version is the only active. -Submit unit tests with the changes and [update documentation](https://github.com/vespa-engine/documentation). -<!-- Do we need a Signed-off-by: Joe Smith <joe.smith@email.com> --> - - -## Community -List here - Slack channel? + +Vespa is large and getting an overview of the code can be a challenge. +It may help to read the READMEs of each module. + +## License and copyright +If you add new files you are welcome to use your own copyright. +In any case the code (or documentation) you submit will be licensed +under the Apache 2.0 license.
\ No newline at end of file diff --git a/application-deploy-plugin/src/main/java/com/yahoo/cloud/config/deploy/plugin/mojo/ApplicationDeployMojo.java b/application-deploy-plugin/src/main/java/com/yahoo/cloud/config/deploy/plugin/mojo/ApplicationDeployMojo.java index c001a935f5e..dc72f99eafd 100644 --- a/application-deploy-plugin/src/main/java/com/yahoo/cloud/config/deploy/plugin/mojo/ApplicationDeployMojo.java +++ b/application-deploy-plugin/src/main/java/com/yahoo/cloud/config/deploy/plugin/mojo/ApplicationDeployMojo.java @@ -17,7 +17,6 @@ import org.json.*; /** * @author hmusum - * @since 5.1.22 */ @org.apache.maven.plugins.annotations.Mojo(name = "deploy", defaultPhase = LifecyclePhase.GENERATE_SOURCES) public class ApplicationDeployMojo extends AbstractMojo { diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstance.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstance.java index aa8f551d5b8..d2796f600c6 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstance.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstance.java @@ -10,6 +10,7 @@ import java.util.Set; * @author bjorncs */ public class ApplicationInstance<STATUS> { + private final TenantId tenantId; private final ApplicationInstanceId applicationInstanceId; private final Set<ServiceCluster<STATUS>> serviceClusters; @@ -63,4 +64,5 @@ public class ApplicationInstance<STATUS> { ", serviceClusters=" + serviceClusters + '}'; } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java index b468b3dbd8c..df19f6cf275 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java @@ -10,6 +10,7 @@ import java.util.Objects; */ // TODO: Remove this and use ApplicationName/InstanceName instead (if you need it for the JSON stuff move it to that layer and don't let it leak) public class ApplicationInstanceId { + private final String id; public ApplicationInstanceId(String id) { @@ -41,4 +42,5 @@ public class ApplicationInstanceId { public int hashCode() { return Objects.hash(id); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java index d86bcb66014..e761e14caa4 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java @@ -11,6 +11,7 @@ import java.util.Objects; */ // TODO: Remove this and use ApplicationId instead (if you need it for the JSON stuff move it to that layer and don't let it leak) public class ApplicationInstanceReference { + private final TenantId tenantId; private final ApplicationInstanceId applicationInstanceId; @@ -54,4 +55,5 @@ public class ApplicationInstanceReference { public int hashCode() { return Objects.hash(tenantId, applicationInstanceId); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java index 91b326b1787..da5ea7f975d 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java @@ -41,4 +41,5 @@ public class ClusterId { public int hashCode() { return Objects.hash(id); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ConfigId.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ConfigId.java index c4eb531de73..3a9db7b84c0 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ConfigId.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ConfigId.java @@ -40,4 +40,5 @@ public class ConfigId { public int hashCode() { return Objects.hash(id); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/HostName.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/HostName.java index b5cb1518f3a..66e79917ccf 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/HostName.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/HostName.java @@ -46,4 +46,5 @@ public class HostName implements Comparable<HostName> { public int compareTo(HostName o) { return id.compareTo(o.id); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java index ee9ed11f9a4..84d1b44bbf2 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java @@ -12,6 +12,7 @@ import java.util.Set; * @author bjorncs */ public class ServiceCluster<STATUS> { + private final ClusterId clusterId; private final ServiceType serviceType; private final Set<ServiceInstance<STATUS>> serviceInstances; @@ -60,4 +61,5 @@ public class ServiceCluster<STATUS> { public int hashCode() { return Objects.hash(clusterId, serviceType, serviceInstances); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceClusterKey.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceClusterKey.java index 09208fab82c..843cbdd775b 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceClusterKey.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceClusterKey.java @@ -50,4 +50,5 @@ public class ServiceClusterKey { public int hashCode() { return Objects.hash(clusterId, serviceType); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java index 73e09476abc..cb3e6f5e077 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java @@ -9,6 +9,7 @@ import java.util.Objects; * @author bjorncs */ public class ServiceInstance<STATUS> { + private final ConfigId configId; private final HostName hostName; private final STATUS serviceStatus; @@ -57,4 +58,5 @@ public class ServiceInstance<STATUS> { public int hashCode() { return Objects.hash(configId, hostName, serviceStatus); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceType.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceType.java index cf867a893e6..784ff9d1e38 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceType.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceType.java @@ -41,4 +41,5 @@ public class ServiceType { public int hashCode() { return Objects.hash(id); } + } diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java index 31a34dc9d1b..ba9d6251569 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java @@ -10,6 +10,7 @@ import java.util.Objects; */ // TODO: Remove this and use TenantName instead (if you need it for the JSON stuff move it to that layer and don't let it leak) public class TenantId { + private final String id; public TenantId(String id) { @@ -41,4 +42,5 @@ public class TenantId { public int hashCode() { return Objects.hash(id); } + } diff --git a/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java b/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java index 5689b6ab1bc..e879acef3bb 100644 --- a/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java +++ b/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java @@ -18,10 +18,10 @@ import java.util.Optional; /** * Main entry for preprocessing an application package. * - * @author lulf - * @since 5.25 + * @author Ulf Lilleengen */ public class ApplicationPreprocessor { + private final File applicationDir; private final Optional<File> outputDir; private final Optional<Environment> environment; @@ -65,4 +65,5 @@ public class ApplicationPreprocessor { System.exit(1); } } + } diff --git a/application/pom.xml b/application/pom.xml index 2d9096e49f1..3fd9e8054e7 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -75,18 +75,6 @@ <version>${project.version}</version> <scope>test</scope> </dependency> - - <!-- All dependencies that should be visible in test classpath, but not compile classpath, - for user projects must be added in compile scope here. - These dependencies are explicitly excluded (or set to non-compile scope) in the container-dev module. --> - <dependency> - <groupId>org.antlr</groupId> - <artifactId>antlr-runtime</artifactId> - </dependency> - <dependency> - <groupId>org.antlr</groupId> - <artifactId>antlr4-runtime</artifactId> - </dependency> </dependencies> <build> diff --git a/application/src/main/java/com/yahoo/application/Application.java b/application/src/main/java/com/yahoo/application/Application.java index bb29ff05fb8..88140873b7b 100644 --- a/application/src/main/java/com/yahoo/application/Application.java +++ b/application/src/main/java/com/yahoo/application/Application.java @@ -35,10 +35,10 @@ import java.util.*; /** * Contains one or more containers built from services.xml. * Other services present in the services.xml file might be mocked in future versions. - * <p> + * * Currently, only a single top level JDisc Container is allowed. Other clusters are ignored. * - * @author tonytv + * @author Tony Vaagenes */ @Beta public final class Application implements AutoCloseable { @@ -666,4 +666,5 @@ public final class Application implements AutoCloseable { } } } + } diff --git a/application/src/main/java/com/yahoo/application/ApplicationBuilder.java b/application/src/main/java/com/yahoo/application/ApplicationBuilder.java index 1d288759d23..9d7cf2c8673 100644 --- a/application/src/main/java/com/yahoo/application/ApplicationBuilder.java +++ b/application/src/main/java/com/yahoo/application/ApplicationBuilder.java @@ -15,10 +15,11 @@ import static java.nio.file.Files.createTempDirectory; /** * Builds an application package on disk and returns a path to the result. * - * @author tonytv + * @author Tony Vaagenes */ @Beta public class ApplicationBuilder { + private Path applicationDir = createTempDirectory("application"); private Networking networking = Networking.disable; @@ -93,4 +94,5 @@ public class ApplicationBuilder { Path getPath() { return applicationDir; } + } diff --git a/application/src/main/java/com/yahoo/application/Networking.java b/application/src/main/java/com/yahoo/application/Networking.java index b23d2e58456..8dd77c6b0f6 100644 --- a/application/src/main/java/com/yahoo/application/Networking.java +++ b/application/src/main/java/com/yahoo/application/Networking.java @@ -1,12 +1,12 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.application; -import com.google.common.annotations.Beta; - /** - * @author tonytv + * @author Tony Vaagenes */ public enum Networking { + enable, disable + } diff --git a/application/src/main/java/com/yahoo/application/container/ApplicationException.java b/application/src/main/java/com/yahoo/application/container/ApplicationException.java index d3e4100cfef..424c66313a7 100644 --- a/application/src/main/java/com/yahoo/application/container/ApplicationException.java +++ b/application/src/main/java/com/yahoo/application/container/ApplicationException.java @@ -5,10 +5,11 @@ package com.yahoo.application.container; * Wraps an Exception in a RuntimeException, for user convenience. * * @author gjoranv - * @since 5.1.15 */ class ApplicationException extends RuntimeException { + ApplicationException(Exception e) { super(e); } + } diff --git a/application/src/main/java/com/yahoo/application/container/DocumentProcessing.java b/application/src/main/java/com/yahoo/application/container/DocumentProcessing.java index 2cf46c43d06..8e9180f00c7 100644 --- a/application/src/main/java/com/yahoo/application/container/DocumentProcessing.java +++ b/application/src/main/java/com/yahoo/application/container/DocumentProcessing.java @@ -20,10 +20,11 @@ import java.util.Map; /** * For doing document processing with {@link JDisc}. * - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge */ @Beta public final class DocumentProcessing { + private final DocumentProcessingHandler handler; private final Map<String, DocumentType> documentTypes; diff --git a/application/src/main/java/com/yahoo/application/container/JDisc.java b/application/src/main/java/com/yahoo/application/container/JDisc.java index 6cf98072232..ed0c29a3917 100644 --- a/application/src/main/java/com/yahoo/application/container/JDisc.java +++ b/application/src/main/java/com/yahoo/application/container/JDisc.java @@ -28,10 +28,9 @@ import java.nio.file.Path; /** * A JDisc Container configured from XML. * - * @author tonytv - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Tony Vaagenes + * @author Einar M R Rosenvinge * @author gjoranv - * @since 5.1.15 */ @Beta public final class JDisc implements AutoCloseable { diff --git a/application/src/main/java/com/yahoo/application/container/Processing.java b/application/src/main/java/com/yahoo/application/container/Processing.java index 5fc9abce8fe..f0ee3cdd1b9 100644 --- a/application/src/main/java/com/yahoo/application/container/Processing.java +++ b/application/src/main/java/com/yahoo/application/container/Processing.java @@ -17,7 +17,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; /** - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge * @author gjoranv */ @Beta diff --git a/application/src/main/java/com/yahoo/application/container/ProcessingBase.java b/application/src/main/java/com/yahoo/application/container/ProcessingBase.java index 14ba6eb394e..f1505e4429a 100644 --- a/application/src/main/java/com/yahoo/application/container/ProcessingBase.java +++ b/application/src/main/java/com/yahoo/application/container/ProcessingBase.java @@ -19,7 +19,6 @@ import java.util.concurrent.Executors; /** * @author gjoranv - * @since 5.1.15 */ @Beta public abstract class ProcessingBase< @@ -27,6 +26,7 @@ public abstract class ProcessingBase< RESPONSE extends Response, PROCESSOR extends Processor> { + /** * Returns a registry of configured chains. * diff --git a/application/src/main/java/com/yahoo/application/container/Search.java b/application/src/main/java/com/yahoo/application/container/Search.java index ba241c70b5b..9503ce4fb50 100644 --- a/application/src/main/java/com/yahoo/application/container/Search.java +++ b/application/src/main/java/com/yahoo/application/container/Search.java @@ -18,7 +18,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; /** - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge * @author gjoranv */ @Beta diff --git a/application/src/main/java/com/yahoo/application/container/SynchronousRequestResponseHandler.java b/application/src/main/java/com/yahoo/application/container/SynchronousRequestResponseHandler.java index 1d64d2df2a9..c5ca67d4428 100644 --- a/application/src/main/java/com/yahoo/application/container/SynchronousRequestResponseHandler.java +++ b/application/src/main/java/com/yahoo/application/container/SynchronousRequestResponseHandler.java @@ -20,7 +20,7 @@ import java.util.Map; import java.util.concurrent.CountDownLatch; /** - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge */ @ThreadSafe @Beta @@ -156,6 +156,7 @@ final class SynchronousRequestResponseHandler { } private static class BlockingCompletionHandler implements CompletionHandler { + private volatile Throwable throwable; private CountDownLatch doneLatch = new CountDownLatch(1); @@ -184,5 +185,7 @@ final class SynchronousRequestResponseHandler { } } } + } + } diff --git a/application/src/main/java/com/yahoo/application/container/handler/Headers.java b/application/src/main/java/com/yahoo/application/container/handler/Headers.java index 8c49d36c078..cb4ebc3d8b9 100644 --- a/application/src/main/java/com/yahoo/application/container/handler/Headers.java +++ b/application/src/main/java/com/yahoo/application/container/handler/Headers.java @@ -15,8 +15,8 @@ import java.util.Set; * * @see Request * @see Response - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> - * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a> + * @author Einar M R Rosenvinge + * @author Simon Thoresen */ @NotThreadSafe @Beta @@ -99,10 +99,6 @@ public class Headers implements Map<String, List<String>> { } - /* - CONVENIENCE METHODS: - */ - /** * <p>Convenience method for checking whether or not a named header contains a specific value. If the named header * is not set, or if the given value is not contained within that header's value list, this method returns @@ -223,4 +219,5 @@ public class Headers implements Map<String, List<String>> { public List<Entry<String, String>> entries() { return h.entries(); } + } diff --git a/application/src/main/java/com/yahoo/application/container/handler/Response.java b/application/src/main/java/com/yahoo/application/container/handler/Response.java index 6502cfe6da2..35d42e3e147 100644 --- a/application/src/main/java/com/yahoo/application/container/handler/Response.java +++ b/application/src/main/java/com/yahoo/application/container/handler/Response.java @@ -17,13 +17,13 @@ import java.util.regex.Pattern; /** * A response for use with {@link com.yahoo.application.container.JDisc#handleRequest(Request)}. * - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> - * @since 5.1.15 + * @author Einar M R Rosenvinge * @see Request */ @Immutable @Beta public class Response { + private final static Pattern charsetPattern = Pattern.compile("charset=([^\\s\\;]+)", Pattern.CASE_INSENSITIVE); private final int status; private final Headers headers = new Headers(); @@ -122,4 +122,5 @@ public class Response { } return Utf8.getCharset(); } + } diff --git a/application/src/main/java/com/yahoo/application/content/ContentCluster.java b/application/src/main/java/com/yahoo/application/content/ContentCluster.java index f68e329c12f..93c83f3b323 100644 --- a/application/src/main/java/com/yahoo/application/content/ContentCluster.java +++ b/application/src/main/java/com/yahoo/application/content/ContentCluster.java @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.application.content; +import com.google.common.annotations.Beta; + import java.nio.file.Path; import java.util.Collections; import java.util.List; @@ -8,6 +10,7 @@ import java.util.List; /** * @author bratseth */ +@Beta public class ContentCluster { /** diff --git a/application/src/test/java/com/yahoo/application/ApplicationFacade.java b/application/src/test/java/com/yahoo/application/ApplicationFacade.java index 65f36b0804f..744ebb138c9 100644 --- a/application/src/test/java/com/yahoo/application/ApplicationFacade.java +++ b/application/src/test/java/com/yahoo/application/ApplicationFacade.java @@ -158,4 +158,5 @@ public class ApplicationFacade implements AutoCloseable { public void close() { application.close(); } + } diff --git a/application/src/test/java/com/yahoo/application/container/JDiscContainerDocprocTest.java b/application/src/test/java/com/yahoo/application/container/JDiscContainerDocprocTest.java index 2ce11335894..2a363916fa3 100644 --- a/application/src/test/java/com/yahoo/application/container/JDiscContainerDocprocTest.java +++ b/application/src/test/java/com/yahoo/application/container/JDiscContainerDocprocTest.java @@ -150,4 +150,5 @@ public class JDiscContainerDocprocTest { } } + } diff --git a/application/src/test/java/com/yahoo/application/container/JDiscContainerProcessingTest.java b/application/src/test/java/com/yahoo/application/container/JDiscContainerProcessingTest.java index 134d7d64f20..4c8c7f1ce06 100644 --- a/application/src/test/java/com/yahoo/application/container/JDiscContainerProcessingTest.java +++ b/application/src/test/java/com/yahoo/application/container/JDiscContainerProcessingTest.java @@ -17,7 +17,7 @@ import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertThat; /** - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge */ public class JDiscContainerProcessingTest { diff --git a/application/src/test/java/com/yahoo/application/container/MockClient.java b/application/src/test/java/com/yahoo/application/container/MockClient.java index 5479f4db58e..6909b1059ff 100644 --- a/application/src/test/java/com/yahoo/application/container/MockClient.java +++ b/application/src/test/java/com/yahoo/application/container/MockClient.java @@ -11,10 +11,10 @@ import com.yahoo.jdisc.service.AbstractClientProvider; import java.util.concurrent.atomic.AtomicInteger; /** - * * @author Christian Andersen */ public class MockClient extends AbstractClientProvider { + private final AtomicInteger counter = new AtomicInteger(); @Override @@ -40,4 +40,5 @@ public class MockClient extends AbstractClientProvider { // Ignored } }; + } diff --git a/application/src/test/java/com/yahoo/application/container/MockServer.java b/application/src/test/java/com/yahoo/application/container/MockServer.java index d8d7d927f7d..cdb320fd69e 100644 --- a/application/src/test/java/com/yahoo/application/container/MockServer.java +++ b/application/src/test/java/com/yahoo/application/container/MockServer.java @@ -5,10 +5,10 @@ import com.yahoo.jdisc.service.AbstractServerProvider; import com.yahoo.jdisc.service.CurrentContainer; /** - * * @author Christian Andersen */ public class MockServer extends AbstractServerProvider { + private boolean started = false; public MockServer(CurrentContainer container) { @@ -28,4 +28,5 @@ public class MockServer extends AbstractServerProvider { public boolean isStarted() { return started; } + } diff --git a/application/src/test/java/com/yahoo/application/container/docprocs/Rot13DocumentProcessor.java b/application/src/test/java/com/yahoo/application/container/docprocs/Rot13DocumentProcessor.java index 57e69e4d1b4..ca221fa5199 100644 --- a/application/src/test/java/com/yahoo/application/container/docprocs/Rot13DocumentProcessor.java +++ b/application/src/test/java/com/yahoo/application/container/docprocs/Rot13DocumentProcessor.java @@ -11,7 +11,7 @@ import com.yahoo.document.datatypes.StringFieldValue; import java.util.concurrent.atomic.AtomicInteger; /** - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge */ public class Rot13DocumentProcessor extends DocumentProcessor { private static final String FIELD_NAME = "title"; diff --git a/application/src/test/java/com/yahoo/application/container/handlers/DelayedThrowingInWriteRequestHandler.java b/application/src/test/java/com/yahoo/application/container/handlers/DelayedThrowingInWriteRequestHandler.java index 2638bcfdfef..d99fc0c2b9a 100644 --- a/application/src/test/java/com/yahoo/application/container/handlers/DelayedThrowingInWriteRequestHandler.java +++ b/application/src/test/java/com/yahoo/application/container/handlers/DelayedThrowingInWriteRequestHandler.java @@ -13,8 +13,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** -* @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> -*/ + * @author Einar M R Rosenvinge + */ public class DelayedThrowingInWriteRequestHandler extends AbstractRequestHandler { private ExecutorService responseExecutor = Executors.newSingleThreadExecutor(); diff --git a/application/src/test/java/com/yahoo/application/container/handlers/DelayedWriteException.java b/application/src/test/java/com/yahoo/application/container/handlers/DelayedWriteException.java index 01cebc3a3e9..054a63fef66 100644 --- a/application/src/test/java/com/yahoo/application/container/handlers/DelayedWriteException.java +++ b/application/src/test/java/com/yahoo/application/container/handlers/DelayedWriteException.java @@ -2,7 +2,7 @@ package com.yahoo.application.container.handlers; /** - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge */ public class DelayedWriteException extends RuntimeException { } diff --git a/application/src/test/java/com/yahoo/application/container/handlers/HeaderEchoRequestHandler.java b/application/src/test/java/com/yahoo/application/container/handlers/HeaderEchoRequestHandler.java index 7749902f25a..c47d0afdd02 100644 --- a/application/src/test/java/com/yahoo/application/container/handlers/HeaderEchoRequestHandler.java +++ b/application/src/test/java/com/yahoo/application/container/handlers/HeaderEchoRequestHandler.java @@ -12,8 +12,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** -* @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> -*/ + * @author Einar M R Rosenvinge + */ public class HeaderEchoRequestHandler extends AbstractRequestHandler { private ExecutorService responseExecutor = Executors.newSingleThreadExecutor(); diff --git a/application/src/test/java/com/yahoo/application/container/handlers/MockHttpHandler.java b/application/src/test/java/com/yahoo/application/container/handlers/MockHttpHandler.java index 3e2d5eab559..643205e9c57 100644 --- a/application/src/test/java/com/yahoo/application/container/handlers/MockHttpHandler.java +++ b/application/src/test/java/com/yahoo/application/container/handlers/MockHttpHandler.java @@ -11,10 +11,10 @@ import java.io.PrintStream; import java.util.concurrent.Executor; /** - * * @author Christian Andersen */ public class MockHttpHandler extends ThreadedHttpRequestHandler { + public MockHttpHandler(Executor executor) { super(executor); } @@ -30,4 +30,5 @@ public class MockHttpHandler extends ThreadedHttpRequestHandler { } }; } + } diff --git a/application/src/test/java/com/yahoo/application/container/handlers/ThrowingInWriteRequestHandler.java b/application/src/test/java/com/yahoo/application/container/handlers/ThrowingInWriteRequestHandler.java index 535dcca16dc..b1f0480adc7 100644 --- a/application/src/test/java/com/yahoo/application/container/handlers/ThrowingInWriteRequestHandler.java +++ b/application/src/test/java/com/yahoo/application/container/handlers/ThrowingInWriteRequestHandler.java @@ -11,9 +11,10 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** -* @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> +* @author Einar M R Rosenvinge */ public class ThrowingInWriteRequestHandler extends AbstractRequestHandler { + private ExecutorService responseExecutor = Executors.newSingleThreadExecutor(); @Override @@ -50,4 +51,5 @@ public class ThrowingInWriteRequestHandler extends AbstractRequestHandler { handler.completed(); } } + } diff --git a/application/src/test/java/com/yahoo/application/container/handlers/WriteException.java b/application/src/test/java/com/yahoo/application/container/handlers/WriteException.java index 3ec0eb63a48..22ce6652c87 100644 --- a/application/src/test/java/com/yahoo/application/container/handlers/WriteException.java +++ b/application/src/test/java/com/yahoo/application/container/handlers/WriteException.java @@ -2,7 +2,7 @@ package com.yahoo.application.container.handlers; /** - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge */ public class WriteException extends RuntimeException { } diff --git a/application/src/test/java/com/yahoo/application/container/renderers/MockRenderer.java b/application/src/test/java/com/yahoo/application/container/renderers/MockRenderer.java index 8191fe4a2ee..99bb6c7b067 100644 --- a/application/src/test/java/com/yahoo/application/container/renderers/MockRenderer.java +++ b/application/src/test/java/com/yahoo/application/container/renderers/MockRenderer.java @@ -8,10 +8,10 @@ import java.io.IOException; import java.io.Writer; /** - * * @author Christian Andersen */ public class MockRenderer extends Renderer { + public MockRenderer() { } @@ -29,4 +29,5 @@ public class MockRenderer extends Renderer { protected void render(Writer writer, Result result) throws IOException { writer.write("<mock hits=\"" + result.hits().size() + "\" />"); } + } diff --git a/application/src/test/java/com/yahoo/application/container/searchers/MockSearcher.java b/application/src/test/java/com/yahoo/application/container/searchers/MockSearcher.java index 867f3e52015..34913a1beb5 100644 --- a/application/src/test/java/com/yahoo/application/container/searchers/MockSearcher.java +++ b/application/src/test/java/com/yahoo/application/container/searchers/MockSearcher.java @@ -9,7 +9,6 @@ import com.yahoo.search.result.HitGroup; import com.yahoo.search.searchchain.Execution; /** - * * @author Christian Andersen */ public class MockSearcher extends Searcher { diff --git a/chain/src/main/java/com/yahoo/component/chain/Chain.java b/chain/src/main/java/com/yahoo/component/chain/Chain.java index 48ed39ba5da..1c628f3dfa4 100644 --- a/chain/src/main/java/com/yahoo/component/chain/Chain.java +++ b/chain/src/main/java/com/yahoo/component/chain/Chain.java @@ -13,7 +13,7 @@ import java.util.List; /** * An immutable ordered list of components * - * @author tonytv + * @author Tony Vaagenes */ public class Chain<COMPONENT extends ChainedComponent> { diff --git a/chain/src/main/java/com/yahoo/component/chain/ChainedComponent.java b/chain/src/main/java/com/yahoo/component/chain/ChainedComponent.java index c381cc6d591..7e0eb8b72ec 100644 --- a/chain/src/main/java/com/yahoo/component/chain/ChainedComponent.java +++ b/chain/src/main/java/com/yahoo/component/chain/ChainedComponent.java @@ -19,7 +19,7 @@ import java.util.List; /** * Component with dependencies. * - * @author tonytv + * @author Tony Vaagenes */ public abstract class ChainedComponent extends AbstractComponent { diff --git a/chain/src/main/java/com/yahoo/component/chain/ChainsConfigurer.java b/chain/src/main/java/com/yahoo/component/chain/ChainsConfigurer.java index c73dc7c16f2..969c1c7d66a 100644 --- a/chain/src/main/java/com/yahoo/component/chain/ChainsConfigurer.java +++ b/chain/src/main/java/com/yahoo/component/chain/ChainsConfigurer.java @@ -1,7 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.component.chain; -import com.yahoo.component.AbstractComponent; import com.yahoo.component.ComponentSpecification; import com.yahoo.component.chain.model.ChainSpecification; import com.yahoo.component.chain.model.ChainedComponentModel; diff --git a/chain/src/main/java/com/yahoo/component/chain/Phase.java b/chain/src/main/java/com/yahoo/component/chain/Phase.java index a291f471737..4148bdc6258 100644 --- a/chain/src/main/java/com/yahoo/component/chain/Phase.java +++ b/chain/src/main/java/com/yahoo/component/chain/Phase.java @@ -10,10 +10,11 @@ import java.util.TreeSet; /** * Used for many to many constraints on searcher ordering. * - * @author tonytv + * @author Tony Vaagenes */ @Immutable public class Phase { + public final Dependencies dependencies; public Phase(String name, Set<String> before, Set<String> after) { @@ -49,4 +50,5 @@ public class Phase { Dependencies union = dependencies.union(phase.dependencies); return new Phase(getName(), union.before(), union.after()); } + } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/After.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/After.java index f510e8f4c8b..be10c82d2e1 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/After.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/After.java @@ -10,11 +10,13 @@ import java.lang.annotation.*; * See {@link com.yahoo.component.chain.dependencies.ordering.ChainBuilder} * for dependency handling information. * - * @author tonytv + * @author Tony Vaagenes */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Inherited public @interface After { - public abstract String[] value() default {}; + + String[] value() default {}; + } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/Before.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/Before.java index 01ad8f6e563..4542140c574 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/Before.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/Before.java @@ -10,11 +10,13 @@ import java.lang.annotation.*; * See {@link com.yahoo.component.chain.dependencies.ordering.ChainBuilder} * for dependency handling information. * - * @author tonytv + * @author Tony Vaagenes */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Inherited public @interface Before { - public abstract String[] value() default {}; + + String[] value() default {}; + } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/Dependencies.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/Dependencies.java index a817bbb5116..46ea3518656 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/Dependencies.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/Dependencies.java @@ -9,7 +9,7 @@ import net.jcip.annotations.Immutable; /** * Constraints for ordering ChainedComponents in chains. * - * @author tonytv + * @author Tony Vaagenes */ @Immutable public class Dependencies { diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/Provides.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/Provides.java index 23becf6b4a7..b014681c469 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/Provides.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/Provides.java @@ -8,11 +8,13 @@ import java.lang.annotation.*; * Other components can then mark themselves as "before" and "after" the string provided here, * to impose constraints on ordering. * - * @author tonytv + * @author Tony Vaagenes */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Inherited public @interface Provides { - public abstract String[] value() default {}; + + String[] value() default {}; + } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ChainBuilder.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ChainBuilder.java index 637cacf2bb6..beafe7d2b98 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ChainBuilder.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ChainBuilder.java @@ -31,9 +31,10 @@ import com.yahoo.component.chain.Phase; * A warning will be logged if multiple components of different types provides the * same name. A component can not provide the same name as a phase. * - * @author tonytv + * @author Tony Vaagenes */ public class ChainBuilder<T extends ChainedComponent> { + private final ComponentId id; private int numComponents = 0; private int priority = 1; @@ -166,4 +167,5 @@ public class ChainBuilder<T extends ChainedComponent> { } return readyNodes; } + } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ComponentNameProvider.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ComponentNameProvider.java index 4c1eeff3c61..b9e8f56d15c 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ComponentNameProvider.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ComponentNameProvider.java @@ -11,7 +11,7 @@ import com.yahoo.component.chain.ChainedComponent; /** * A set of components providing a given name. * - * @author tonytv + * @author Tony Vaagenes */ class ComponentNameProvider extends NameProvider { diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ComponentNode.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ComponentNode.java index e6a8b982ad8..2bc81542d52 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ComponentNode.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ComponentNode.java @@ -7,9 +7,10 @@ import com.yahoo.component.chain.ChainedComponent; * A node representing a given component. * * @see Node - * @author tonytv + * @author Tony Vaagenes */ class ComponentNode<T extends ChainedComponent> extends Node { + private T component; public ComponentNode(T component, int priority) { @@ -31,5 +32,6 @@ class ComponentNode<T extends ChainedComponent> extends Node { int classPriority() { return 2; } + } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ConflictingNodeTypeException.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ConflictingNodeTypeException.java index a233f0cd79f..edf4a119e5c 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ConflictingNodeTypeException.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/ConflictingNodeTypeException.java @@ -4,7 +4,7 @@ package com.yahoo.component.chain.dependencies.ordering; /** * Thrown if a searcher provides the same name as a phase. * - * @author tonytv + * @author Tony Vaagenes */ @SuppressWarnings("serial") public class ConflictingNodeTypeException extends RuntimeException { diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/CycleDependenciesException.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/CycleDependenciesException.java index fd05ab20b02..40a78030c41 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/CycleDependenciesException.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/CycleDependenciesException.java @@ -10,10 +10,11 @@ import java.util.Set; * representation of the cycle is available to help solve the problem (<a * href="http://graphviz.org/">GraphViz</a>). * - * @author tonytv + * @author Tony Vaagenes */ @SuppressWarnings("serial") public class CycleDependenciesException extends RuntimeException { + public Map<String, NameProvider> cycleNodes; CycleDependenciesException(Map<String, NameProvider> cycleNodes) { @@ -41,5 +42,4 @@ public class CycleDependenciesException extends RuntimeException { return createDotString(cycleNodes); } - } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/NameProvider.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/NameProvider.java index 526e65146d9..773b6d07035 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/NameProvider.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/NameProvider.java @@ -4,9 +4,10 @@ package com.yahoo.component.chain.dependencies.ordering; /** * A node containing nodes providing a given name. * - * @author tonytv + * @author Tony Vaagenes */ abstract class NameProvider extends Node { + final String name; public NameProvider(String name, int priority) { @@ -24,6 +25,7 @@ abstract class NameProvider extends Node { protected String dotName() { return name; } + } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/Node.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/Node.java index cb5b6a1cbff..da652fde614 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/Node.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/Node.java @@ -17,7 +17,7 @@ import java.util.Set; * * Where name designates a NameProvider( either a phase or a set of searchers). * - * @author tonytv + * @author Tony Vaagenes */ abstract class Node { //How this node should be prioritized if its compared with a node of the same class, see class priority. diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/OrderedReadyNodes.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/OrderedReadyNodes.java index a9650fe751b..7af863a37c3 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/OrderedReadyNodes.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/OrderedReadyNodes.java @@ -8,9 +8,10 @@ import java.util.PriorityQueue; /** * Ensures that Searchers are ordered deterministically. * - * @author tonytv + * @author Tony Vaagenes */ class OrderedReadyNodes { + private class PriorityComparator implements Comparator<Node> { @Override public int compare(Node lhs, Node rhs) { @@ -22,8 +23,7 @@ class OrderedReadyNodes { } } - final private PriorityQueue<Node> nodes = - new PriorityQueue<>(10, new PriorityComparator()); + final private PriorityQueue<Node> nodes = new PriorityQueue<>(10, new PriorityComparator()); public void add(Node node) { nodes.add(node); @@ -36,4 +36,5 @@ class OrderedReadyNodes { public boolean isEmpty() { return nodes.isEmpty(); } + } diff --git a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/PhaseNameProvider.java b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/PhaseNameProvider.java index a44cbad4b2f..f99a9191150 100644 --- a/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/PhaseNameProvider.java +++ b/chain/src/main/java/com/yahoo/component/chain/dependencies/ordering/PhaseNameProvider.java @@ -4,9 +4,10 @@ package com.yahoo.component.chain.dependencies.ordering; /** * A phase providing a given name. * - * @author tonytv + * @author Tony Vaagenes */ class PhaseNameProvider extends NameProvider { + public PhaseNameProvider(String name, int priority) { super(name,priority); } @@ -25,4 +26,5 @@ class PhaseNameProvider extends NameProvider { int classPriority() { return 0; } + } diff --git a/chain/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java b/chain/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java index 2f6a03cbb87..eac76afa275 100644 --- a/chain/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java +++ b/chain/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java @@ -12,10 +12,11 @@ import java.util.*; /** * Specifies how the components should be selected to create a chain. * - * @author tonytv + * @author Tony Vaagenes */ @Immutable public class ChainSpecification { + public static class Inheritance { public final Set<ComponentSpecification> chainSpecifications; public final Set<ComponentSpecification> excludedComponents; diff --git a/chain/src/main/java/com/yahoo/component/chain/model/ChainedComponentModel.java b/chain/src/main/java/com/yahoo/component/chain/model/ChainedComponentModel.java index bc728f0fdd1..cce51824942 100644 --- a/chain/src/main/java/com/yahoo/component/chain/model/ChainedComponentModel.java +++ b/chain/src/main/java/com/yahoo/component/chain/model/ChainedComponentModel.java @@ -9,8 +9,8 @@ import net.jcip.annotations.Immutable; /** * Describes how a chained component should be created. * - * @author <a href="mailto:arnebef@yahoo-inc.com">Arne Bergene Fossaa</a> - * @author tonytv + * @author Arne Bergene Fossaa + * @author Tony Vaagenes */ @Immutable public class ChainedComponentModel extends ComponentModel { diff --git a/chain/src/main/java/com/yahoo/component/chain/model/ChainsModel.java b/chain/src/main/java/com/yahoo/component/chain/model/ChainsModel.java index be0b124c383..08cb6b7ccfd 100644 --- a/chain/src/main/java/com/yahoo/component/chain/model/ChainsModel.java +++ b/chain/src/main/java/com/yahoo/component/chain/model/ChainsModel.java @@ -12,7 +12,7 @@ import com.yahoo.component.provider.ComponentRegistry; /** * A model of how the chains and components should be created. * - * @author tonytv + * @author Tony Vaagenes */ public class ChainsModel { diff --git a/chain/src/main/java/com/yahoo/component/chain/model/ChainsModelBuilder.java b/chain/src/main/java/com/yahoo/component/chain/model/ChainsModelBuilder.java index f7c771c1e60..5f9f2daa177 100644 --- a/chain/src/main/java/com/yahoo/component/chain/model/ChainsModelBuilder.java +++ b/chain/src/main/java/com/yahoo/component/chain/model/ChainsModelBuilder.java @@ -14,7 +14,7 @@ import com.yahoo.container.core.ChainsConfig; /** * Builds a chains model from config. * - * @author tonytv + * @author Tony Vaagenes */ public class ChainsModelBuilder { diff --git a/chain/src/main/java/com/yahoo/component/chain/model/ComponentAdaptor.java b/chain/src/main/java/com/yahoo/component/chain/model/ComponentAdaptor.java index 142af91f0fd..2961768a7de 100644 --- a/chain/src/main/java/com/yahoo/component/chain/model/ComponentAdaptor.java +++ b/chain/src/main/java/com/yahoo/component/chain/model/ComponentAdaptor.java @@ -7,7 +7,7 @@ import com.yahoo.component.ComponentId; /** * For using non-component model classes with ComponentRegistry. * - * @author tonytv + * @author Tony Vaagenes */ public final class ComponentAdaptor<T> extends AbstractComponent { diff --git a/chain/src/main/java/com/yahoo/component/chain/model/Resolver.java b/chain/src/main/java/com/yahoo/component/chain/model/Resolver.java index 5f6b3ce7905..15acff0db0b 100644 --- a/chain/src/main/java/com/yahoo/component/chain/model/Resolver.java +++ b/chain/src/main/java/com/yahoo/component/chain/model/Resolver.java @@ -6,8 +6,10 @@ import com.yahoo.component.ComponentSpecification; /** * Maps component specifications to matching instances. * - * @author tonytv + * @author Tony Vaagenes */ public interface Resolver<T> { + T resolve(ComponentSpecification componentSpecification); + } diff --git a/chain/src/test/java/com/yahoo/component/chain/dependencies/ordering/ChainBuilderTest.java b/chain/src/test/java/com/yahoo/component/chain/dependencies/ordering/ChainBuilderTest.java index 9d302174a47..7e74a732893 100644 --- a/chain/src/test/java/com/yahoo/component/chain/dependencies/ordering/ChainBuilderTest.java +++ b/chain/src/test/java/com/yahoo/component/chain/dependencies/ordering/ChainBuilderTest.java @@ -22,8 +22,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** - * @author tonytv - * @since 5.1.10 + * @author Tony Vaagenes */ @SuppressWarnings({"rawtypes", "unchecked"}) public class ChainBuilderTest { diff --git a/chain/src/test/java/com/yahoo/component/chain/dependencies/ordering/OrderedReadyNodesTest.java b/chain/src/test/java/com/yahoo/component/chain/dependencies/ordering/OrderedReadyNodesTest.java index 8dde4ac3ea5..77729a99012 100644 --- a/chain/src/test/java/com/yahoo/component/chain/dependencies/ordering/OrderedReadyNodesTest.java +++ b/chain/src/test/java/com/yahoo/component/chain/dependencies/ordering/OrderedReadyNodesTest.java @@ -16,10 +16,12 @@ import com.yahoo.component.ComponentId; /** * Test for OrderedReadyNodes. - * @author tonytv + * + * @author Tony Vaagenes */ @SuppressWarnings("rawtypes") public class OrderedReadyNodesTest { + class ComponentA extends ChainedComponent { public ComponentA(ComponentId id) { super(id); @@ -101,4 +103,5 @@ public class OrderedReadyNodesTest { private Node pop() { return readyNodes.pop(); } + } diff --git a/chain/src/test/java/com/yahoo/component/chain/model/ChainsModelBuilderTest.java b/chain/src/test/java/com/yahoo/component/chain/model/ChainsModelBuilderTest.java index a946d568704..2a22b5afbf7 100644 --- a/chain/src/test/java/com/yahoo/component/chain/model/ChainsModelBuilderTest.java +++ b/chain/src/test/java/com/yahoo/component/chain/model/ChainsModelBuilderTest.java @@ -17,7 +17,6 @@ import static org.junit.Assert.assertTrue; /** * @author gjoranv - * @since 5.1.10 */ public class ChainsModelBuilderTest { @@ -69,4 +68,5 @@ public class ChainsModelBuilderTest { getComponentsByName(Set<ComponentSpecification> componentSpecifications) { return ChainSpecification.componentsByName(componentSpecifications); } + } diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java index 06f3ecbf5e3..4bc09898361 100644 --- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterController.java @@ -104,4 +104,5 @@ public class ClusterController extends AbstractComponent void shutdownController(FleetController controller) throws Exception { controller.shutdown(); } + } diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java index 98c09bdd61a..0936f9d781a 100644 --- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurer.java @@ -98,4 +98,5 @@ public class ClusterControllerClusterConfigurer { } } } + } diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/DummyZooKeeperProvider.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/DummyZooKeeperProvider.java index 320020ef6d4..f961297643e 100644 --- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/DummyZooKeeperProvider.java +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/DummyZooKeeperProvider.java @@ -4,8 +4,7 @@ package com.yahoo.vespa.clustercontroller.apps.clustercontroller; /** * A dummy zookeeper provider when we do not run our own zookeeper instance. * - * @author lulf - * @since 5.26 + * @author Ulf Lilleengen */ public class DummyZooKeeperProvider implements ZooKeeperProvider { } diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StandaloneZooKeeperProvider.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StandaloneZooKeeperProvider.java index 1cc8155657f..cbb1eb41eac 100644 --- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StandaloneZooKeeperProvider.java +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StandaloneZooKeeperProvider.java @@ -6,10 +6,11 @@ import com.yahoo.vespa.zookeeper.ZooKeeperServer; /** * ZooKeeper provider that ensures we are running our own instance of zookeeper. * - * @author lulf - * @since 5.26 + * @author Ulf Lilleengen */ public class StandaloneZooKeeperProvider implements ZooKeeperProvider { + public StandaloneZooKeeperProvider(ZooKeeperServer server) { } + } diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StateRestApiV2Handler.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StateRestApiV2Handler.java index cb0132c18d6..431fc797df6 100644 --- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StateRestApiV2Handler.java +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StateRestApiV2Handler.java @@ -62,4 +62,5 @@ public class StateRestApiV2Handler extends JDiscHttpRequestHandler { } return set; } + } diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StatusHandler.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StatusHandler.java index 16ac6bfcbe7..ae7c32e0f95 100644 --- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StatusHandler.java +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StatusHandler.java @@ -8,6 +8,7 @@ import com.yahoo.vespa.clustercontroller.apputil.communication.http.JDiscHttpReq import java.util.concurrent.Executor; public class StatusHandler extends JDiscHttpRequestHandler { + private final com.yahoo.vespa.clustercontroller.core.status.StatusHandler statusHandler; @Inject @@ -19,4 +20,5 @@ public class StatusHandler extends JDiscHttpRequestHandler { super(handler, executor, accessLog); this.statusHandler = handler; } + } diff --git a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ZooKeeperProvider.java b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ZooKeeperProvider.java index 68baa5f0480..bb18bcc65d6 100644 --- a/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ZooKeeperProvider.java +++ b/clustercontroller-apps/src/main/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ZooKeeperProvider.java @@ -4,8 +4,7 @@ package com.yahoo.vespa.clustercontroller.apps.clustercontroller; /** * Abstraction we can depend on providing us with a zookeeper server being up. * - * @author lulf - * @since 5.25 + * @author Ulf Lilleengen */ public interface ZooKeeperProvider { } diff --git a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java index 3316f05ce60..f437e6aa67d 100644 --- a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java +++ b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerClusterConfigurerTest.java @@ -79,4 +79,5 @@ public class ClusterControllerClusterConfigurerTest extends TestCase { assertEquals("Must set zookeeper server with multiple fleetcontrollers", e.getMessage()); } } + } diff --git a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerTest.java b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerTest.java index f026aa3f0ef..fcef483e7d7 100644 --- a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerTest.java +++ b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/ClusterControllerTest.java @@ -13,6 +13,7 @@ import junit.framework.TestCase; import java.util.Map; public class ClusterControllerTest extends TestCase { + private FleetControllerOptions options = new FleetControllerOptions("storage"); private Metric metric = new Metric() { @Override diff --git a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StateRestApiV2HandlerTest.java b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StateRestApiV2HandlerTest.java index 25d6e1846da..524aba1398b 100644 --- a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StateRestApiV2HandlerTest.java +++ b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StateRestApiV2HandlerTest.java @@ -48,4 +48,5 @@ public class StateRestApiV2HandlerTest extends TestCase { assertEquals(expected, mapping); } + } diff --git a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StatusHandlerTest.java b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StatusHandlerTest.java index a904f46c2ae..66cb477e793 100644 --- a/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StatusHandlerTest.java +++ b/clustercontroller-apps/src/test/java/com/yahoo/vespa/clustercontroller/apps/clustercontroller/StatusHandlerTest.java @@ -16,4 +16,5 @@ public class StatusHandlerTest extends TestCase { StatusHandler handler = new StatusHandler(controller, executor, AccessLog.voidAccessLog()); executor.shutdown(); } + } diff --git a/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/ApacheAsyncHttpClient.java b/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/ApacheAsyncHttpClient.java index 89127b99d7c..11d746ef3ce 100644 --- a/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/ApacheAsyncHttpClient.java +++ b/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/ApacheAsyncHttpClient.java @@ -21,10 +21,13 @@ import java.util.logging.Logger; * This class gets around these issues by creating one instance per unique setting, and ensuring only one request use a given instance at a time. */ public class ApacheAsyncHttpClient implements AsyncHttpClient<HttpResult> { + private static final Logger log = Logger.getLogger(ApacheAsyncHttpClient.class.getName()); + public interface SyncHttpClientFactory { SyncHttpClient createInstance(String proxyHost, int proxyPort, long timeoutMs); } + public static class Settings { String proxyHost; int proxyPort; @@ -176,4 +179,5 @@ public class ApacheAsyncHttpClient implements AsyncHttpClient<HttpResult> { apacheInstances.clear(); } } + } diff --git a/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/ApacheHttpInstance.java b/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/ApacheHttpInstance.java index 02195701243..3eafd2ae1d5 100644 --- a/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/ApacheHttpInstance.java +++ b/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/ApacheHttpInstance.java @@ -30,6 +30,7 @@ import org.apache.http.params.HttpParams; * Synchronous http client using Apache commons. */ public class ApacheHttpInstance implements SyncHttpClient { + private static final Logger log = Logger.getLogger(ApacheHttpInstance.class.getName()); DefaultHttpClient client; @@ -128,4 +129,5 @@ public class ApacheHttpInstance implements SyncHttpClient { public void close() { client.getConnectionManager().shutdown(); } + } diff --git a/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscHttpRequestHandler.java b/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscHttpRequestHandler.java index aa44845561e..1069bd79b4f 100644 --- a/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscHttpRequestHandler.java +++ b/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscHttpRequestHandler.java @@ -19,7 +19,7 @@ import java.util.logging.Logger; /** * Note. This class is tested through apache http instance test, using this as other endpoint. - * @author humbe + * @author Haakon Humberset * @author Harald Musum * @author Vegard Sjonfjell */ @@ -124,4 +124,5 @@ public class JDiscHttpRequestHandler extends LoggingRequestHandler { } return headers; } + } diff --git a/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscMetricWrapper.java b/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscMetricWrapper.java index 0f203dac3bf..559eaee4821 100644 --- a/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscMetricWrapper.java +++ b/clustercontroller-apputil/src/main/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscMetricWrapper.java @@ -7,6 +7,7 @@ import com.yahoo.vespa.clustercontroller.utils.util.MetricReporter; import java.util.logging.Logger; public class JDiscMetricWrapper implements MetricReporter { + private final Object lock = new Object(); private Metric m; @@ -47,4 +48,5 @@ public class JDiscMetricWrapper implements MetricReporter { return new ContextWrapper(m.createContext(stringMap)); } } + } diff --git a/clustercontroller-apputil/src/test/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscMetricWrapperTest.java b/clustercontroller-apputil/src/test/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscMetricWrapperTest.java index 278f6a9e1fa..13abfa0ecd5 100644 --- a/clustercontroller-apputil/src/test/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscMetricWrapperTest.java +++ b/clustercontroller-apputil/src/test/java/com/yahoo/vespa/clustercontroller/apputil/communication/http/JDiscMetricWrapperTest.java @@ -10,6 +10,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class JDiscMetricWrapperTest { + class MetricImpl implements Metric { int calls = 0; @Override @@ -41,4 +42,5 @@ public class JDiscMetricWrapperTest { assertEquals(5, impl2.calls); } + } diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java index ba68404b7ca..72f19ed64b5 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java @@ -73,32 +73,23 @@ public class DeploymentSpec { } /** Throw an IllegalArgumentException if any production zone is declared multiple times */ - private static void validateZones(List<Step> steps) { - // Collect both non-parallel and parallel zones - List<DeclaredZone> zones = new ArrayList<>(); - steps.stream() - .filter(step -> step instanceof DeclaredZone) - .map(DeclaredZone.class::cast) - .forEach(zones::add); - steps.stream() - .filter(step -> step instanceof ParallelZones) - .map(ParallelZones.class::cast) - .flatMap(parallelZones -> parallelZones.zones().stream()) - .forEach(zones::add); - - - // Detect duplicates - Set<DeclaredZone> unique = new HashSet<>(); - List<RegionName> duplicates = zones.stream() - .filter(z -> z.environment() == Environment.prod && !unique.add(z)) - .map(z -> z.region().get()) - .collect(Collectors.toList()); - if (!duplicates.isEmpty()) { - throw new IllegalArgumentException("All declared regions must be unique, but found these " + - "duplicated regions: " + duplicates); - } + private void validateZones(List<Step> steps) { + Set<DeclaredZone> zones = new HashSet<>(); + + steps.stream().filter(step -> step instanceof DeclaredZone) + .map(DeclaredZone.class::cast) + .forEach(zone -> ensureUnique(zone, zones)); + steps.stream().filter(step -> step instanceof ParallelZones) + .map(ParallelZones.class::cast) + .flatMap(parallelZones -> parallelZones.zones().stream()) + .forEach(zone -> ensureUnique(zone, zones)); } + private void ensureUnique(DeclaredZone zone, Set<DeclaredZone> zones) { + if ( ! zones.add(zone)) + throw new IllegalArgumentException(zone + " is listed twice in deployment.xml"); + } + /** Adds missing required steps and reorders steps to a permissible order */ private static List<Step> completeSteps(List<Step> steps) { // Ensure no duplicate deployments to the same zone @@ -399,6 +390,11 @@ public class DeploymentSpec { if ( ! this.region.equals(other.region())) return false; return true; } + + @Override + public String toString() { + return environment + ( region.isPresent() ? "." + region.get() : ""); + } } diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java index 2b503125e33..95f9963d6f4 100644 --- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java +++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java @@ -265,10 +265,6 @@ public class DeploymentSpecTest { " <region active='true'>us-central-1</region>\n" + " <region active='true'>us-east-3</region>\n" + " </parallel>\n" + - " <parallel>\n" + - " <region active='true'>eu-west-1</region>\n" + - " <region active='true'>us-central-1</region>\n" + - " </parallel>\n" + " </prod>\n" + "</deployment>" ); @@ -276,8 +272,7 @@ public class DeploymentSpecTest { DeploymentSpec.fromXml(r); fail("Expected exception"); } catch (IllegalArgumentException e) { - assertEquals("All declared regions must be unique, but found these duplicated regions: " + - "[us-west-1, us-central-1]", e.getMessage()); + assertEquals("prod.us-west-1 is listed twice in deployment.xml", e.getMessage()); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java b/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java index 6d4945f23ad..38e417aca9e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java @@ -45,7 +45,7 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon /** The optional PRELOAD libraries for this Service. */ // Please keep non-null, as passed to command line in service startup - private String preload = Defaults.getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"); + private String preload = Defaults.getDefaults().underVespaHome("lib64/vespa/malloc/libvespamallocd.so"); // If larger or equal to 0 it mean that explicit mmaps shall not be included in coredump. private long mmapNoCoreLimit = -1l; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ConfigServerContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ConfigServerContainerModelBuilder.java index 414cc56b1e3..c9cc51af867 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ConfigServerContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ConfigServerContainerModelBuilder.java @@ -19,8 +19,7 @@ import java.util.List; /** * Builds the config model for the standalone config server. * - * @author lulf - * @since 5.16 + * @author Ulf Lilleengen */ public class ConfigServerContainerModelBuilder extends ContainerModelBuilder { diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java index 63d5d37598b..98f599769c0 100644 --- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java +++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java @@ -110,9 +110,9 @@ public class ModelProvisioningTest { assertThat(model.getContainerClusters().get("mydisc").getContainers().get(0).getJvmArgs(), is("")); assertThat(model.getContainerClusters().get("mydisc").getContainers().get(1).getJvmArgs(), is("")); assertThat(model.getContainerClusters().get("mydisc").getContainers().get(2).getJvmArgs(), is("")); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(0).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(1).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); - assertThat(model.getContainerClusters().get("mydisc").getContainers().get(2).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamalloc.so"))); + assertThat(model.getContainerClusters().get("mydisc").getContainers().get(0).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamallocd.so"))); + assertThat(model.getContainerClusters().get("mydisc").getContainers().get(1).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamallocd.so"))); + assertThat(model.getContainerClusters().get("mydisc").getContainers().get(2).getPreLoad(), is(getDefaults().underVespaHome("lib64/vespa/malloc/libvespamallocd.so"))); assertThat(model.getContainerClusters().get("mydisc").getMemoryPercentage(), is(Optional.empty())); assertThat(model.getContainerClusters().get("mydisc2").getContainers().get(0).getJvmArgs(), is("-verbosegc")); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java index 377b3997e43..70be29fa80d 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java @@ -51,14 +51,12 @@ import java.util.logging.Logger; * @author Vegard Havdal * @author Ulf Lilleengen */ -//TODO Rename to TenantRepository +// TODO: Rename to TenantRepository public class Tenants implements ConnectionStateListener, PathChildrenCacheListener { public static final TenantName HOSTED_VESPA_TENANT = TenantName.from("hosted-vespa"); private static final TenantName DEFAULT_TENANT = TenantName.defaultName(); - private static final List<TenantName> SYSTEM_TENANT_NAMES = Arrays.asList( - DEFAULT_TENANT, - HOSTED_VESPA_TENANT); + private static final List<TenantName> SYSTEM_TENANT_NAMES = Arrays.asList(DEFAULT_TENANT, HOSTED_VESPA_TENANT); private static final Path tenantsPath = Path.fromString("/config/v2/tenants/"); private static final Path vespaPath = Path.fromString("/vespa"); diff --git a/container-dev/pom.xml b/container-dev/pom.xml index e858ba1c50b..7ac2eb03016 100644 --- a/container-dev/pom.xml +++ b/container-dev/pom.xml @@ -112,33 +112,11 @@ <groupId>com.yahoo.vespa</groupId> <artifactId>container-search-and-docproc</artifactId> <version>${project.version}</version> - <exclusions> - <exclusion> - <groupId>org.antlr</groupId> - <artifactId>antlr4-runtime</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>com.yahoo.vespa</groupId> <artifactId>config-bundle</artifactId> <version>${project.version}</version> </dependency> - - <!-- Dependencies below are added explicitly to exclude transitive deps that are not provided runtime by the container, - and hence make them invisible to user projects' build classpath. - Excluded artifacts should be added explicitly to the application module to make then visible in users' test classpath. --> - <dependency> - <groupId>com.yahoo.vespa</groupId> - <artifactId>predicate-search-core</artifactId> - <version>${project.version}</version> - <exclusions> - <exclusion> - <groupId>org.antlr</groupId> - <artifactId>antlr-runtime</artifactId> - </exclusion> - </exclusions> - </dependency> - </dependencies> </project> diff --git a/container-search/pom.xml b/container-search/pom.xml index f622567acde..837629c44b9 100644 --- a/container-search/pom.xml +++ b/container-search/pom.xml @@ -143,6 +143,7 @@ <dependency> <groupId>org.antlr</groupId> <artifactId>antlr4-runtime</artifactId> + <version>4.5</version> </dependency> <dependency> <groupId>org.mockito</groupId> @@ -210,7 +211,7 @@ <plugin> <!-- For the YQL query language --> <groupId>org.antlr</groupId> <artifactId>antlr4-maven-plugin</artifactId> - <version>${antlr4.version}</version> + <version>4.5</version> <executions> <execution> <configuration> diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java index 999846d1755..2eec7109722 100644 --- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java @@ -271,12 +271,14 @@ public class FastHit extends Hit { public void addSummary(Docsum docsum) { LazyDocsumValue lazyDocsumValue = new LazyDocsumValue(docsum); + reserve(docsum.getDefinition().getFieldCount()); for (DocsumField field : docsum.getDefinition().getFields()) { setDocsumFieldIfNotPresent(field.getName(), lazyDocsumValue); } } void addSummary(DocsumDefinition docsumDef, Inspector value) { + reserve(docsumDef.getFieldCount()); for (DocsumField field : docsumDef.getFields()) { String fieldName = field.getName(); if (value.type() == Type.STRING && diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java index b03c0cb752f..6b4d3594087 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java @@ -227,6 +227,7 @@ public class Dispatcher extends AbstractComponent { } private void fill(FastHit hit, Inspector summary) { + hit.reserve(summary.fieldCount()); summary.traverse((String name, Inspector value) -> { hit.setField(name, nativeTypeOf(value)); }); diff --git a/container-search/src/main/java/com/yahoo/search/result/Hit.java b/container-search/src/main/java/com/yahoo/search/result/Hit.java index 815006edbf5..0bfbecfd9ab 100644 --- a/container-search/src/main/java/com/yahoo/search/result/Hit.java +++ b/container-search/src/main/java/com/yahoo/search/result/Hit.java @@ -101,8 +101,12 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi public static final String SDDOCNAME_FIELD = "sddocname"; private Map<String,Object> getFieldMap() { + return getFieldMap(16); + } + private Map<String,Object> getFieldMap(int minSize) { if (fields == null) { - fields = new LinkedHashMap<>(16); + // Compensate for loadfactor and then some, rounded up.... + fields = new LinkedHashMap<>(2*minSize); } return fields; } @@ -448,6 +452,14 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi public final Map<String,Object> fields() { return getUnmodifiableFieldMap(); } /** + * Will preallocate in order to avoid resizing. + * @param minSize + */ + public void reserve(int minSize) { + getFieldMap(minSize); + } + + /** * Fields * @return An iterator for traversing the fields * @since 5.1.3 @@ -56,7 +56,7 @@ <plugin> <groupId>org.antlr</groupId> <artifactId>antlr3-maven-plugin</artifactId> - <version>${antlr.version}</version> + <version>3.5.2</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> @@ -574,12 +574,7 @@ <dependency> <groupId>org.antlr</groupId> <artifactId>antlr-runtime</artifactId> - <version>${antlr.version}</version> - </dependency> - <dependency> - <groupId>org.antlr</groupId> - <artifactId>antlr4-runtime</artifactId> - <version>${antlr4.version}</version> + <version>3.5.2</version> </dependency> <dependency> <groupId>org.apache.aries.spifly</groupId> @@ -894,8 +889,6 @@ <properties> <javax.ws.rs-api.version>2.0.1</javax.ws.rs-api.version> <!-- must be kept in sync with version used by current jersey2.version --> - <antlr.version>3.5.2</antlr.version> - <antlr4.version>4.5</antlr4.version> <aries.spifly.version>1.0.8</aries.spifly.version> <aries.util.version>1.0.0</aries.util.version> <asm-debug-all.version>5.0.3</asm-debug-all.version> diff --git a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp index 4970ad867ce..2ed60f3c078 100644 --- a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp +++ b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp @@ -198,13 +198,23 @@ public: { } - virtual void notifyGidToLidChange(document::GlobalId gid, uint32_t lid) override { + virtual void notifyPut(document::GlobalId gid, uint32_t lid, SerialNum) override { _changeGid = gid; _changeLid = lid; _gidToLid[gid] = lid; ++_changes; } + virtual void notifyRemove(document::GlobalId gid, SerialNum) override { + _changeGid = gid; + _changeLid = 0; + _gidToLid[gid] = 0; + ++_changes; + } + + virtual void notifyRemoveDone(document::GlobalId, SerialNum) override { + } + void assertChanges(document::GlobalId expGid, uint32_t expLid, uint32_t expChanges) { EXPECT_EQUAL(expGid, _changeGid); EXPECT_EQUAL(expLid, _changeLid); diff --git a/searchcore/src/tests/proton/matching/matching_test.cpp b/searchcore/src/tests/proton/matching/matching_test.cpp index deadafcad8f..679108ba872 100644 --- a/searchcore/src/tests/proton/matching/matching_test.cpp +++ b/searchcore/src/tests/proton/matching/matching_test.cpp @@ -494,11 +494,11 @@ TEST("require that sortspec can be used (multi-threaded)") { SearchReply::UP reply = world.performSearch(request, threads); ASSERT_EQUAL(9u, reply->hits.size()); EXPECT_EQUAL(document::DocumentId("doc::100").getGlobalId(), reply->hits[0].gid); - EXPECT_EQUAL(0.0, reply->hits[0].metric); + EXPECT_EQUAL(default_rank_value, reply->hits[0].metric); EXPECT_EQUAL(document::DocumentId("doc::200").getGlobalId(), reply->hits[1].gid); - EXPECT_EQUAL(0.0, reply->hits[1].metric); + EXPECT_EQUAL(default_rank_value, reply->hits[1].metric); EXPECT_EQUAL(document::DocumentId("doc::300").getGlobalId(), reply->hits[2].gid); - EXPECT_EQUAL(0.0, reply->hits[2].metric); + EXPECT_EQUAL(default_rank_value, reply->hits[2].metric); } } diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp b/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp index eb2052ef32f..1c5287f15e5 100644 --- a/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp +++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp @@ -14,6 +14,7 @@ LOG_SETUP("gid_to_lid_change_handler_test"); using document::GlobalId; using document::DocumentId; using search::makeLambdaTask; +using search::SerialNum; namespace proton { @@ -30,7 +31,8 @@ vespalib::string doc1("id:test:music::1"); class ListenerStats { using lock_guard = std::lock_guard<std::mutex>; std::mutex _lock; - uint32_t _changes; + uint32_t _putChanges; + uint32_t _removeChanges; uint32_t _createdListeners; uint32_t _registeredListeners; uint32_t _destroyedListeners; @@ -38,7 +40,8 @@ class ListenerStats { public: ListenerStats() : _lock(), - _changes(0u), + _putChanges(0u), + _removeChanges(0u), _createdListeners(0u), _registeredListeners(0u), _destroyedListeners(0u) @@ -50,9 +53,13 @@ public: EXPECT_EQUAL(_createdListeners, _destroyedListeners); } - void notifyGidToLidChange() { + void notifyPut() { lock_guard guard(_lock); - ++_changes; + ++_putChanges; + } + void notifyRemove() { + lock_guard guard(_lock); + ++_removeChanges; } void markCreatedListener() { lock_guard guard(_lock); ++_createdListeners; } void markRegisteredListener() { lock_guard guard(_lock); ++_registeredListeners; } @@ -62,15 +69,18 @@ public: uint32_t getRegisteredListeners() const { return _registeredListeners; } uint32_t getDestroyedListeners() const { return _destroyedListeners; } - void assertCounts(uint32_t expCreatedListeners, - uint32_t expRegisteredListeners, - uint32_t expDestroyedListeners, - uint32_t expChanges) + void assertListeners(uint32_t expCreatedListeners, + uint32_t expRegisteredListeners, + uint32_t expDestroyedListeners) { EXPECT_EQUAL(expCreatedListeners, getCreatedListeners()); EXPECT_EQUAL(expRegisteredListeners, getRegisteredListeners()); EXPECT_EQUAL(expDestroyedListeners, getDestroyedListeners()); - EXPECT_EQUAL(expChanges, _changes); + } + void assertChanges(uint32_t expPutChanges, uint32_t expRemoveChanges) + { + EXPECT_EQUAL(expPutChanges, _putChanges); + EXPECT_EQUAL(expRemoveChanges, _removeChanges); } }; @@ -91,7 +101,8 @@ public: _stats.markCreatedListener(); } virtual ~MyListener() { _stats.markDestroyedListener(); } - virtual void notifyGidToLidChange(GlobalId, uint32_t) override { _stats.notifyGidToLidChange(); } + virtual void notifyPut(GlobalId, uint32_t) override { _stats.notifyPut(); } + virtual void notifyRemove(GlobalId) override { _stats.notifyRemove(); } virtual void notifyRegistered() override { _stats.markRegisteredListener(); } virtual const vespalib::string &getName() const override { return _name; } virtual const vespalib::string &getDocTypeName() const override { return _docTypeName; } @@ -99,16 +110,12 @@ public: struct Fixture { - vespalib::ThreadStackExecutor _masterExecutor; - ExecutorThreadService _master; std::vector<std::shared_ptr<ListenerStats>> _statss; std::shared_ptr<GidToLidChangeHandler> _handler; Fixture() - : _masterExecutor(1, 128 * 1024), - _master(_masterExecutor), - _statss(), - _handler(std::make_shared<GidToLidChangeHandler>(&_master)) + : _statss(), + _handler(std::make_shared<GidToLidChangeHandler>()) { } @@ -119,8 +126,7 @@ struct Fixture void close() { - _master.execute(makeLambdaTask([this]() { _handler->close(); })); - _master.sync(); + _handler->close(); } ListenerStats &addStats() { @@ -130,18 +136,23 @@ struct Fixture void addListener(std::unique_ptr<IGidToLidChangeListener> listener) { _handler->addListener(std::move(listener)); - _master.sync(); } - void notifyGidToLidChange(GlobalId gid, uint32_t lid) { - _master.execute(makeLambdaTask([this, gid, lid]() { _handler->notifyGidToLidChange(gid, lid); })); - _master.sync(); + void notifyPut(GlobalId gid, uint32_t lid, SerialNum serialNum) { + _handler->notifyPut(gid, lid, serialNum); + } + + void notifyRemove(GlobalId gid, SerialNum serialNum) { + _handler->notifyRemove(gid, serialNum); + } + + void notifyRemoveDone(GlobalId gid, SerialNum serialNum) { + _handler->notifyRemoveDone(gid, serialNum); } void removeListeners(const vespalib::string &docTypeName, const std::set<vespalib::string> &keepNames) { _handler->removeListeners(docTypeName, keepNames); - _master.sync(); } }; @@ -150,13 +161,13 @@ TEST_F("Test that we can register a listener", Fixture) { auto &stats = f.addStats(); auto listener = std::make_unique<MyListener>(stats, "test", "testdoc"); - TEST_DO(stats.assertCounts(1, 0, 0, 0)); + TEST_DO(stats.assertListeners(1, 0, 0)); f.addListener(std::move(listener)); - TEST_DO(stats.assertCounts(1, 1, 0, 0)); - f.notifyGidToLidChange(toGid(doc1), 10); - TEST_DO(stats.assertCounts(1, 1, 0, 1)); + TEST_DO(stats.assertListeners(1, 1, 0)); + f.notifyPut(toGid(doc1), 10, 10); + TEST_DO(stats.assertChanges(1, 0)); f.removeListeners("testdoc", {}); - TEST_DO(stats.assertCounts(1, 1, 1, 1)); + TEST_DO(stats.assertListeners(1, 1, 1)); } TEST_F("Test that we can register multiple listeners", Fixture) @@ -167,48 +178,86 @@ TEST_F("Test that we can register multiple listeners", Fixture) auto listener1 = std::make_unique<MyListener>(stats1, "test1", "testdoc"); auto listener2 = std::make_unique<MyListener>(stats2, "test2", "testdoc"); auto listener3 = std::make_unique<MyListener>(stats3, "test3", "testdoc2"); - TEST_DO(stats1.assertCounts(1, 0, 0, 0)); - TEST_DO(stats2.assertCounts(1, 0, 0, 0)); - TEST_DO(stats3.assertCounts(1, 0, 0, 0)); + TEST_DO(stats1.assertListeners(1, 0, 0)); + TEST_DO(stats2.assertListeners(1, 0, 0)); + TEST_DO(stats3.assertListeners(1, 0, 0)); f.addListener(std::move(listener1)); f.addListener(std::move(listener2)); f.addListener(std::move(listener3)); - TEST_DO(stats1.assertCounts(1, 1, 0, 0)); - TEST_DO(stats2.assertCounts(1, 1, 0, 0)); - TEST_DO(stats3.assertCounts(1, 1, 0, 0)); - f.notifyGidToLidChange(toGid(doc1), 10); - TEST_DO(stats1.assertCounts(1, 1, 0, 1)); - TEST_DO(stats2.assertCounts(1, 1, 0, 1)); - TEST_DO(stats3.assertCounts(1, 1, 0, 1)); + TEST_DO(stats1.assertListeners(1, 1, 0)); + TEST_DO(stats2.assertListeners(1, 1, 0)); + TEST_DO(stats3.assertListeners(1, 1, 0)); + f.notifyPut(toGid(doc1), 10, 10); + TEST_DO(stats1.assertChanges(1, 0)); + TEST_DO(stats2.assertChanges(1, 0)); + TEST_DO(stats3.assertChanges(1, 0)); f.removeListeners("testdoc", {"test1"}); - TEST_DO(stats1.assertCounts(1, 1, 0, 1)); - TEST_DO(stats2.assertCounts(1, 1, 1, 1)); - TEST_DO(stats3.assertCounts(1, 1, 0, 1)); + TEST_DO(stats1.assertListeners(1, 1, 0)); + TEST_DO(stats2.assertListeners(1, 1, 1)); + TEST_DO(stats3.assertListeners(1, 1, 0)); f.removeListeners("testdoc", {}); - TEST_DO(stats1.assertCounts(1, 1, 1, 1)); - TEST_DO(stats2.assertCounts(1, 1, 1, 1)); - TEST_DO(stats3.assertCounts(1, 1, 0, 1)); + TEST_DO(stats1.assertListeners(1, 1, 1)); + TEST_DO(stats2.assertListeners(1, 1, 1)); + TEST_DO(stats3.assertListeners(1, 1, 0)); f.removeListeners("testdoc2", {"test3"}); - TEST_DO(stats1.assertCounts(1, 1, 1, 1)); - TEST_DO(stats2.assertCounts(1, 1, 1, 1)); - TEST_DO(stats3.assertCounts(1, 1, 0, 1)); + TEST_DO(stats1.assertListeners(1, 1, 1)); + TEST_DO(stats2.assertListeners(1, 1, 1)); + TEST_DO(stats3.assertListeners(1, 1, 0)); f.removeListeners("testdoc2", {"foo"}); - TEST_DO(stats1.assertCounts(1, 1, 1, 1)); - TEST_DO(stats2.assertCounts(1, 1, 1, 1)); - TEST_DO(stats3.assertCounts(1, 1, 1, 1)); + TEST_DO(stats1.assertListeners(1, 1, 1)); + TEST_DO(stats2.assertListeners(1, 1, 1)); + TEST_DO(stats3.assertListeners(1, 1, 1)); } TEST_F("Test that we keep old listener when registering duplicate", Fixture) { auto &stats = f.addStats(); auto listener = std::make_unique<MyListener>(stats, "test1", "testdoc"); - TEST_DO(stats.assertCounts(1, 0, 0, 0)); + TEST_DO(stats.assertListeners(1, 0, 0)); f.addListener(std::move(listener)); - TEST_DO(stats.assertCounts(1, 1, 0, 0)); + TEST_DO(stats.assertListeners(1, 1, 0)); listener = std::make_unique<MyListener>(stats, "test1", "testdoc"); - TEST_DO(stats.assertCounts(2, 1, 0, 0)); + TEST_DO(stats.assertListeners(2, 1, 0)); + f.addListener(std::move(listener)); + TEST_DO(stats.assertListeners(2, 1, 1)); +} + +TEST_F("Test that put is ignored if we have a pending remove", Fixture) +{ + auto &stats = f.addStats(); + auto listener = std::make_unique<MyListener>(stats, "test", "testdoc"); f.addListener(std::move(listener)); - TEST_DO(stats.assertCounts(2, 1, 1, 0)); + f.notifyRemove(toGid(doc1), 20); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyPut(toGid(doc1), 10, 10); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyRemoveDone(toGid(doc1), 20); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyPut(toGid(doc1), 11, 30); + TEST_DO(stats.assertChanges(1, 1)); + f.removeListeners("testdoc", {}); +} + +TEST_F("Test that pending removes are merged", Fixture) +{ + auto &stats = f.addStats(); + auto listener = std::make_unique<MyListener>(stats, "test", "testdoc"); + f.addListener(std::move(listener)); + f.notifyRemove(toGid(doc1), 20); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyRemove(toGid(doc1), 40); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyPut(toGid(doc1), 10, 10); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyRemoveDone(toGid(doc1), 20); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyPut(toGid(doc1), 11, 30); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyRemoveDone(toGid(doc1), 40); + TEST_DO(stats.assertChanges(0, 1)); + f.notifyPut(toGid(doc1), 12, 50); + TEST_DO(stats.assertChanges(1, 1)); + f.removeListeners("testdoc", {}); } } diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/gid_to_lid_change_listener_test.cpp b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/gid_to_lid_change_listener_test.cpp index 780a6d79ad6..08787e41438 100644 --- a/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/gid_to_lid_change_listener_test.cpp +++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/gid_to_lid_change_listener_test.cpp @@ -117,8 +117,8 @@ struct Fixture _listener = std::make_unique<GidToLidChangeListener>(_writer, _attr, _refCount, "test", "testdoc"); } - void notifyGidToLidChange(const GlobalId &gid, uint32_t referencedDoc) { - _listener->notifyGidToLidChange(gid, referencedDoc); + void notifyPut(const GlobalId &gid, uint32_t referencedDoc) { + _listener->notifyPut(gid, referencedDoc); } void notifyListenerRegistered() { @@ -137,9 +137,9 @@ TEST_F("Test that we can use gid to lid change listener", Fixture) TEST_DO(f.assertRefLid(0, 2)); TEST_DO(f.assertRefLid(0, 3)); f.allocListener(); - f.notifyGidToLidChange(toGid(doc1), 10); - f.notifyGidToLidChange(toGid(doc2), 20); - f.notifyGidToLidChange(toGid(doc3), 30); + f.notifyPut(toGid(doc1), 10); + f.notifyPut(toGid(doc2), 20); + f.notifyPut(toGid(doc3), 30); TEST_DO(f.assertRefLid(10, 1)); TEST_DO(f.assertRefLid(20, 2)); TEST_DO(f.assertRefLid(10, 3)); diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp b/searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp index e97f117e481..a5231647158 100644 --- a/searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp +++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp @@ -24,7 +24,8 @@ public: { } virtual ~MyListener() { } - virtual void notifyGidToLidChange(document::GlobalId, uint32_t) override { } + virtual void notifyPut(document::GlobalId, uint32_t) override { } + virtual void notifyRemove(document::GlobalId) override { } virtual void notifyRegistered() override { } virtual const vespalib::string &getName() const override { return _name; } virtual const vespalib::string &getDocTypeName() const override { return _docTypeName; } diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_thread.h b/searchcore/src/vespa/searchcore/proton/matching/match_thread.h index cd01c330931..2d056d0e761 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/match_thread.h +++ b/searchcore/src/vespa/searchcore/proton/matching/match_thread.h @@ -53,7 +53,7 @@ private: Context(double rankDropLimit, MatchTools &matchTools, RankProgram & ranking, HitCollector & hits, uint32_t num_threads) __attribute__((noinline)); void rankHit(uint32_t docId); - void addHit(uint32_t docId) { _hits.addHit(docId, 0.0); } + void addHit(uint32_t docId) { _hits.addHit(docId, search::default_rank_value); } bool isBelowLimit() const { return matches < _matches_limit; } bool isAtLimit() const { return matches == _matches_limit; } bool atSoftDoom() const { return _softDoom.doom(); } diff --git a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp index e7b347c4c80..d7b2c16867a 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp +++ b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.cpp @@ -6,63 +6,98 @@ #include <vespa/searchcorespi/index/i_thread_service.h> #include <vespa/document/base/globalid.h> #include <cassert> +#include <vespa/vespalib/stllike/hash_map.hpp> using search::makeLambdaTask; namespace proton { -GidToLidChangeHandler::GidToLidChangeHandler(searchcorespi::index::IThreadService *master) +GidToLidChangeHandler::GidToLidChangeHandler() : _lock(), _listeners(), - _master(master) + _closed(false), + _pendingRemove() + { } GidToLidChangeHandler::~GidToLidChangeHandler() { - assert(_master == nullptr); + assert(_closed); assert(_listeners.empty()); + assert(_pendingRemove.empty()); } void -GidToLidChangeHandler::notifyGidToLidChange(document::GlobalId gid, uint32_t lid) +GidToLidChangeHandler::notifyPut(GlobalId gid, uint32_t lid) { for (const auto &listener : _listeners) { - listener->notifyGidToLidChange(gid, lid); + listener->notifyPut(gid, lid); } } void -GidToLidChangeHandler::close() +GidToLidChangeHandler::notifyRemove(GlobalId gid) +{ + for (const auto &listener : _listeners) { + listener->notifyRemove(gid); + } +} + +void +GidToLidChangeHandler::notifyPut(GlobalId gid, uint32_t lid, SerialNum serialNum) { lock_guard guard(_lock); - if (_master != nullptr) { - assert(_master->isCurrentThread()); - _master = nullptr; - _listeners.clear(); + auto itr = _pendingRemove.find(gid); + if (itr != _pendingRemove.end()) { + assert(itr->second > serialNum); + return; // Document has already been removed later on } + notifyPut(gid, lid); } void -GidToLidChangeHandler::addListener(std::unique_ptr<IGidToLidChangeListener> listener) +GidToLidChangeHandler::notifyRemove(GlobalId gid, SerialNum serialNum) { lock_guard guard(_lock); - if (_master) { - auto self(shared_from_this()); - _master->execute(makeLambdaTask([self,listener(std::move(listener))]() mutable { self->performAddListener(std::move(listener)); })); + auto insRes = _pendingRemove.insert(std::make_pair(gid, serialNum)); + if (!insRes.second) { + assert(insRes.first->second < serialNum); + insRes.first->second = serialNum; } else { - assert(_listeners.empty()); + notifyRemove(gid); } } +void +GidToLidChangeHandler::notifyRemoveDone(GlobalId gid, SerialNum serialNum) +{ + lock_guard guard(_lock); + auto itr = _pendingRemove.find(gid); + assert(itr != _pendingRemove.end() && itr->second >= serialNum); + if (itr->second == serialNum) { + _pendingRemove.erase(itr); + } +} void -GidToLidChangeHandler::performAddListener(std::unique_ptr<IGidToLidChangeListener> listener) +GidToLidChangeHandler::close() +{ + Listeners deferredDelete; + { + lock_guard guard(_lock); + _closed = true; + _listeners.swap(deferredDelete); + } +} + +void +GidToLidChangeHandler::addListener(std::unique_ptr<IGidToLidChangeListener> listener) { lock_guard guard(_lock); - if (_master) { + if (!_closed) { const vespalib::string &docTypeName = listener->getDocTypeName(); const vespalib::string &name = listener->getName(); for (const auto &oldlistener : _listeners) { @@ -77,19 +112,6 @@ GidToLidChangeHandler::performAddListener(std::unique_ptr<IGidToLidChangeListene } } -void -GidToLidChangeHandler::removeListeners(const vespalib::string &docTypeName, - const std::set<vespalib::string> &keepNames) -{ - lock_guard guard(_lock); - if (_master) { - auto self(shared_from_this()); - _master->execute(makeLambdaTask([self,docTypeName,keepNames]() mutable { self->performRemoveListener(docTypeName, keepNames); })); - } else { - assert(_listeners.empty()); - } -} - namespace { bool shouldRemoveListener(const IGidToLidChangeListener &listener, @@ -103,21 +125,25 @@ bool shouldRemoveListener(const IGidToLidChangeListener &listener, } void -GidToLidChangeHandler::performRemoveListener(const vespalib::string &docTypeName, - const std::set<vespalib::string> &keepNames) +GidToLidChangeHandler::removeListeners(const vespalib::string &docTypeName, + const std::set<vespalib::string> &keepNames) { - lock_guard guard(_lock); - if (_master) { - auto itr = _listeners.begin(); - while (itr != _listeners.end()) { - if (shouldRemoveListener(**itr, docTypeName, keepNames)) { - itr = _listeners.erase(itr); - } else { - ++itr; + Listeners deferredDelete; + { + lock_guard guard(_lock); + if (!_closed) { + auto itr = _listeners.begin(); + while (itr != _listeners.end()) { + if (shouldRemoveListener(**itr, docTypeName, keepNames)) { + deferredDelete.emplace_back(std::move(*itr)); + itr = _listeners.erase(itr); + } else { + ++itr; + } } + } else { + assert(_listeners.empty()); } - } else { - assert(_listeners.empty()); } } diff --git a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h index 2197490b65e..736a34aba76 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h +++ b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_handler.h @@ -5,6 +5,8 @@ #include "i_gid_to_lid_change_handler.h" #include <vector> #include <mutex> +#include <vespa/vespalib/stllike/hash_map.h> +#include <vespa/document/base/globalid.h> namespace searchcorespi { namespace index { class IThreadService; } } @@ -19,25 +21,27 @@ class GidToLidChangeHandler : public std::enable_shared_from_this<GidToLidChange public IGidToLidChangeHandler { using lock_guard = std::lock_guard<std::mutex>; + using Listeners = std::vector<std::unique_ptr<IGidToLidChangeListener>>; std::mutex _lock; - std::vector<std::unique_ptr<IGidToLidChangeListener>> _listeners; - searchcorespi::index::IThreadService *_master; + Listeners _listeners; + bool _closed; + vespalib::hash_map<GlobalId, SerialNum, GlobalId::hash> _pendingRemove; - void performAddListener(std::unique_ptr<IGidToLidChangeListener> listener); - void performRemoveListener(const vespalib::string &docTypeName, - const std::set<vespalib::string> &keepNames); + void notifyPut(GlobalId gid, uint32_t lid); + void notifyRemove(GlobalId gid); public: - GidToLidChangeHandler(searchcorespi::index::IThreadService *master); + GidToLidChangeHandler(); virtual ~GidToLidChangeHandler(); /** - * Notify gid to lid mapping change. Called by master executor. + * Notify gid to lid mapping change. */ - virtual void notifyGidToLidChange(document::GlobalId gid, uint32_t lid) override; + virtual void notifyPut(GlobalId gid, uint32_t lid, SerialNum serialNum) override; + virtual void notifyRemove(GlobalId gid, SerialNum serialNum) override; + virtual void notifyRemoveDone(GlobalId gid, SerialNum serialNum) override; /** - * Close handler, further notifications are blocked. Called by master - * executor. + * Close handler, further notifications are blocked. */ void close(); diff --git a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.cpp b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.cpp index 5aba8bf3150..6a368997770 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.cpp +++ b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.cpp @@ -26,12 +26,22 @@ GidToLidChangeListener::~GidToLidChangeListener() } void -GidToLidChangeListener::notifyGidToLidChange(document::GlobalId gid, uint32_t lid) +GidToLidChangeListener::notifyPut(document::GlobalId gid, uint32_t lid) { std::promise<bool> promise; std::future<bool> future = promise.get_future(); _attributeFieldWriter.executeLambda(_executorId, - [this, &promise, gid, lid]() { _attr->notifyGidToLidChange(gid, lid); promise.set_value(true); }); + [this, &promise, gid, lid]() { _attr->notifyReferencedPut(gid, lid); promise.set_value(true); }); + (void) future.get(); +} + +void +GidToLidChangeListener::notifyRemove(document::GlobalId gid) +{ + std::promise<bool> promise; + std::future<bool> future = promise.get_future(); + _attributeFieldWriter.executeLambda(_executorId, + [this, &promise, gid]() { _attr->notifyReferencedRemove(gid); promise.set_value(true); }); (void) future.get(); } diff --git a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.h b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.h index 8a3a7d00cec..35ff913d7af 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.h +++ b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.h @@ -30,7 +30,8 @@ public: const vespalib::string &name, const vespalib::string &docTypeName); virtual ~GidToLidChangeListener(); - virtual void notifyGidToLidChange(document::GlobalId gid, uint32_t lid) override; + virtual void notifyPut(document::GlobalId gid, uint32_t lid) override; + virtual void notifyRemove(document::GlobalId gid) override; virtual void notifyRegistered() override; virtual const vespalib::string &getName() const override; virtual const vespalib::string &getDocTypeName() const override; diff --git a/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h b/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h index 73ff140e2c6..a3b1db59abd 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h +++ b/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h @@ -5,6 +5,7 @@ #include <set> #include <memory> #include <vespa/vespalib/stllike/string.h> +#include <vespa/searchlib/common/serialnum.h> namespace document { class GlobalId; } @@ -19,14 +20,18 @@ class IGidToLidChangeListener; class IGidToLidChangeHandler { public: + using SerialNum = search::SerialNum; + using GlobalId = document::GlobalId; + virtual ~IGidToLidChangeHandler() { } virtual void addListener(std::unique_ptr<IGidToLidChangeListener> listener) = 0; virtual void removeListeners(const vespalib::string &docTypeName, const std::set<vespalib::string> &keepNames) = 0; - virtual void notifyGidToLidChange(document::GlobalId gid, uint32_t lid) = 0; - + virtual void notifyPut(GlobalId gid, uint32_t lid, SerialNum serialNum) = 0; + virtual void notifyRemove(GlobalId gid, SerialNum serialNum) = 0; + virtual void notifyRemoveDone(GlobalId gid, SerialNum serialNum) = 0; }; } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_listener.h b/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_listener.h index 317f378bedc..d02979e168f 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_listener.h +++ b/searchcore/src/vespa/searchcore/proton/reference/i_gid_to_lid_change_listener.h @@ -17,7 +17,8 @@ class IGidToLidChangeListener { public: virtual ~IGidToLidChangeListener() { } - virtual void notifyGidToLidChange(document::GlobalId gid, uint32_t lid) = 0; + virtual void notifyPut(document::GlobalId gid, uint32_t lid) = 0; + virtual void notifyRemove(document::GlobalId gid) = 0; virtual void notifyRegistered() = 0; virtual const vespalib::string &getName() const = 0; virtual const vespalib::string &getDocTypeName() const = 0; diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp index 3a3264336c8..913956c509f 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp @@ -262,9 +262,21 @@ SearchableFeedView::forceCommit(SerialNum serialNum, OnForceCommitDoneType onCom } void -SearchableFeedView::notifyGidToLidChange(const document::GlobalId &gid, uint32_t lid) +SearchableFeedView::notifyPutGidToLidChange(const document::GlobalId &gid, uint32_t lid, SerialNum serialNum) { - _gidToLidChangeHandler->notifyGidToLidChange(gid, lid); + _gidToLidChangeHandler->notifyPut(gid, lid, serialNum); +} + +void +SearchableFeedView::notifyRemoveGidToLidChange(const document::GlobalId &gid, SerialNum serialNum) +{ + _gidToLidChangeHandler->notifyRemove(gid, serialNum); +} + +void +SearchableFeedView::notifyRemoveDoneGidToLidChange(const document::GlobalId &gid, SerialNum serialNum) +{ + _gidToLidChangeHandler->notifyRemoveDone(gid, serialNum); } } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h index c0d9bfcfbc6..4b536d0adde 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h +++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.h @@ -86,7 +86,9 @@ private: void performIndexForceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone); void forceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone) override; - virtual void notifyGidToLidChange(const document::GlobalId &gid, uint32_t lid) override; + virtual void notifyPutGidToLidChange(const document::GlobalId &gid, uint32_t lid, SerialNum serialNum) override; + virtual void notifyRemoveGidToLidChange(const document::GlobalId &gid, SerialNum serialNum) override; + virtual void notifyRemoveDoneGidToLidChange(const document::GlobalId &gid, SerialNum serialNum) override; public: SearchableFeedView(const StoreOnlyFeedView::Context &storeOnlyCtx, const PersistentParams ¶ms, diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp index 8eb36435ed5..e9e0120dac1 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp @@ -49,7 +49,7 @@ SearchableDocSubDB::SearchableDocSubDB(const Config &cfg, const Context &ctx) getSubDbName(), ctx._fastUpdCtx._storeOnlyCtx._owner.getDistributionKey()), _numSearcherThreads(cfg._numSearcherThreads), _warmupExecutor(ctx._warmupExecutor), - _gidToLidChangeHandler(std::make_shared<GidToLidChangeHandler>(&_writeService.master())) + _gidToLidChangeHandler(std::make_shared<GidToLidChangeHandler>()) { } SearchableDocSubDB::~SearchableDocSubDB() diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp index da3e09bea41..3e7e3d6ddfa 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp @@ -611,16 +611,17 @@ StoreOnlyFeedView::adjustMetaStore(const DocumentOperation &op, const DocumentId op.getLid() != op.getPrevLid()) { moveMetaData(_metaStore, docId, op); - notifyGidToLidChange(docId.getGlobalId(), op.getLid()); + notifyPutGidToLidChange(docId.getGlobalId(), op.getLid(), serialNum); } else { putMetaData(_metaStore, docId, op, _params._subDbType == SubDbType::REMOVED); if (op.getDbDocumentId() != op.getPrevDbDocumentId()) { - notifyGidToLidChange(docId.getGlobalId(), op.getLid()); + notifyPutGidToLidChange(docId.getGlobalId(), op.getLid(), serialNum); } } } else if (op.getValidPrevDbdId(_params._subDbId)) { removeMetaData(_metaStore, docId, op, _params._subDbType == SubDbType::REMOVED); - notifyGidToLidChange(docId.getGlobalId(), 0u); + notifyRemoveGidToLidChange(docId.getGlobalId(), serialNum); + notifyRemoveDoneGidToLidChange(docId.getGlobalId(), serialNum); } _metaStore.commit(serialNum, serialNum); } @@ -651,7 +652,8 @@ StoreOnlyFeedView::removeDocuments(const RemoveDocumentsOperation &op, bool remo std::vector<document::GlobalId> gidsToRemove(getGidsToRemove(_metaStore, lidsToRemove)); _metaStore.removeBatch(lidsToRemove, ctx->getDocIdLimit()); for (const auto &gid : gidsToRemove) { - notifyGidToLidChange(gid, 0u); + notifyRemoveGidToLidChange(gid, serialNum); + notifyRemoveDoneGidToLidChange(gid, serialNum); } _metaStore.commit(serialNum, serialNum); explicitReuseLids = _lidReuseDelayer.delayReuse(lidsToRemove); @@ -806,6 +808,12 @@ StoreOnlyFeedView::getDocumentMetaStorePtr() const } void -StoreOnlyFeedView::notifyGidToLidChange(const document::GlobalId &, uint32_t ) {} +StoreOnlyFeedView::notifyPutGidToLidChange(const document::GlobalId &, uint32_t, SerialNum) {} + +void +StoreOnlyFeedView::notifyRemoveGidToLidChange(const document::GlobalId &, SerialNum) {} + +void +StoreOnlyFeedView::notifyRemoveDoneGidToLidChange(const document::GlobalId &, SerialNum) {} } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h index 982acf200a7..ec3003fb5d6 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h @@ -179,7 +179,9 @@ private: // Ack token early if visibility delay is nonzero void considerEarlyAck(FeedTokenUP &token, FeedOperation::Type opType); - virtual void notifyGidToLidChange(const document::GlobalId &gid, uint32_t lid); + virtual void notifyPutGidToLidChange(const document::GlobalId &gid, uint32_t lid, SerialNum serialNum); + virtual void notifyRemoveGidToLidChange(const document::GlobalId &gid, SerialNum serialNum); + virtual void notifyRemoveDoneGidToLidChange(const document::GlobalId &gid, SerialNum serialNum); void makeUpdatedDocument(SerialNum serialNum, Lid lid, DocumentUpdate::SP upd, OnOperationDoneType onWriteDone,PromisedDoc promisedDoc, PromisedStream promisedStream); diff --git a/searchcore/src/vespa/searchcore/proton/test/mock_gid_to_lid_change_handler.h b/searchcore/src/vespa/searchcore/proton/test/mock_gid_to_lid_change_handler.h index 2aa613461ef..41efb55e61c 100644 --- a/searchcore/src/vespa/searchcore/proton/test/mock_gid_to_lid_change_handler.h +++ b/searchcore/src/vespa/searchcore/proton/test/mock_gid_to_lid_change_handler.h @@ -44,7 +44,9 @@ public: _removes.emplace_back(docTypeName, keepNames); } - virtual void notifyGidToLidChange(document::GlobalId, uint32_t) override { } + virtual void notifyPut(document::GlobalId, uint32_t, SerialNum) override { } + virtual void notifyRemove(document::GlobalId, SerialNum) override { } + virtual void notifyRemoveDone(document::GlobalId, SerialNum) override { } void assertAdds(const std::vector<AddEntry> &expAdds) { diff --git a/searchlib/src/tests/attribute/reference_attribute/reference_attribute_test.cpp b/searchlib/src/tests/attribute/reference_attribute/reference_attribute_test.cpp index 7e2e8904170..1b1bc1f8796 100644 --- a/searchlib/src/tests/attribute/reference_attribute/reference_attribute_test.cpp +++ b/searchlib/src/tests/attribute/reference_attribute/reference_attribute_test.cpp @@ -182,8 +182,11 @@ struct Fixture iter, oldStatus.getUsed(), newStatus.getUsed()); } - void notifyGidToLidChange(const GlobalId &gid, uint32_t referencedDoc) { - _attr->notifyGidToLidChange(gid, referencedDoc); + void notifyReferencedPut(const GlobalId &gid, uint32_t referencedDoc) { + _attr->notifyReferencedPut(gid, referencedDoc); + } + void notifyReferencedRemove(const GlobalId &gid) { + _attr->notifyReferencedRemove(gid); } void populateReferencedLids() { _attr->populateReferencedLids(); @@ -300,7 +303,7 @@ TEST_F("require that update() uses gid-mapper to set referenced lid", Fixture) TEST_DO(f.assertRefLid(5, 0)); } -TEST_F("require that notifyGidToLidChange() updates lid-2-lid mapping", Fixture) +TEST_F("require that notifyReferencedPut() updates lid-2-lid mapping", Fixture) { f.ensureDocIdLimit(4); f.set(1, toGid(doc1)); @@ -310,9 +313,9 @@ TEST_F("require that notifyGidToLidChange() updates lid-2-lid mapping", Fixture) TEST_DO(f.assertRefLid(1, 0)); TEST_DO(f.assertRefLid(2, 0)); TEST_DO(f.assertRefLid(3, 0)); - f.notifyGidToLidChange(toGid(doc1), 10); - f.notifyGidToLidChange(toGid(doc2), 20); - f.notifyGidToLidChange(toGid(doc3), 30); + f.notifyReferencedPut(toGid(doc1), 10); + f.notifyReferencedPut(toGid(doc2), 20); + f.notifyReferencedPut(toGid(doc3), 30); TEST_DO(f.assertRefLid(1, 10)); TEST_DO(f.assertRefLid(2, 20)); TEST_DO(f.assertRefLid(3, 10)); @@ -369,18 +372,18 @@ TEST_F("require that populateReferencedLids() uses gid-mapper to update lid-2-li EXPECT_TRUE(vespalib::unlink("test.udat")); } -TEST_F("Require that notifyGidToLidChange changes reverse mapping", Fixture) +TEST_F("Require that notifyReferencedPut and notifyReferencedRemove changes reverse mapping", Fixture) { TEST_DO(preparePopulateReferencedLids(f)); TEST_DO(f.assertLids(10, { })); TEST_DO(f.assertLids(11, { })); - f.notifyGidToLidChange(toGid(doc1), 10); + f.notifyReferencedPut(toGid(doc1), 10); TEST_DO(f.assertLids(10, { 1, 3})); TEST_DO(f.assertLids(11, { })); - f.notifyGidToLidChange(toGid(doc1), 11); + f.notifyReferencedPut(toGid(doc1), 11); TEST_DO(f.assertLids(10, { })); TEST_DO(f.assertLids(11, { 1, 3})); - f.notifyGidToLidChange(toGid(doc1), 0); + f.notifyReferencedRemove(toGid(doc1)); TEST_DO(f.assertLids(10, { })); TEST_DO(f.assertLids(11, { })); } @@ -406,8 +409,8 @@ TEST_F("Require that reverse mapping recovers from temporary out of order glitch TEST_DO(f.assertRefLid(2, 17)); TEST_DO(f.assertRefLid(3, 10)); // Notify reference attribute about gid to lid mapping changes - f.notifyGidToLidChange(toGid(doc1), 0); - f.notifyGidToLidChange(toGid(doc3), 10); + f.notifyReferencedRemove(toGid(doc1)); + f.notifyReferencedPut(toGid(doc3), 10); TEST_DO(f.assertRefLid(1, 0)); TEST_DO(f.assertRefLid(2, 17)); TEST_DO(f.assertRefLid(3, 10)); diff --git a/searchlib/src/tests/hitcollector/hitcollector_test.cpp b/searchlib/src/tests/hitcollector/hitcollector_test.cpp index b38f5cdb168..3f49c6969a0 100644 --- a/searchlib/src/tests/hitcollector/hitcollector_test.cpp +++ b/searchlib/src/tests/hitcollector/hitcollector_test.cpp @@ -30,7 +30,7 @@ struct PredefinedScorer : public HitCollector::DocumentScorer ScoreMap _scores; PredefinedScorer(const ScoreMap &scores) : _scores(scores) {} virtual feature_t score(uint32_t docId) override { - feature_t retval = 0.0; + feature_t retval = default_rank_value; auto itr = _scores.find(docId); if (itr != _scores.end()) { retval = itr->second; @@ -436,7 +436,7 @@ TEST_F("require that result set is merged correctly with first phase ranking", expRh.push_back(RankedHit()); expRh.back()._docId = i; // only the maxHitsSize best hits gets a score - expRh.back()._rankValue = (i < f.numDocs - f.maxHitsSize) ? 0 : i + 1000; + expRh.back()._rankValue = (i < f.numDocs - f.maxHitsSize) ? default_rank_value : i + 1000; } std::unique_ptr<ResultSet> rs = f.hc.getResultSet(); TEST_DO(checkResult(*rs.get(), expRh)); @@ -448,7 +448,7 @@ addExpectedHitForMergeTest(const MergeResultSetFixture &f, std::vector<RankedHit expRh.push_back(RankedHit()); expRh.back()._docId = docId; if (docId < f.numDocs - f.maxHitsSize) { // only the maxHitsSize best hits gets a score - expRh.back()._rankValue = 0; + expRh.back()._rankValue = default_rank_value; } else if (docId < f.numDocs - f.maxHeapSize) { // only first phase ranking expRh.back()._rankValue = docId + 500; // adjusted with - 500 } else { // second phase ranking on the maxHeapSize best hits @@ -497,7 +497,7 @@ TEST("require that hits can be added out of order when passing array limit") { for (uint32_t i = 0; i < numHits; ++i) { expRh.push_back(RankedHit()); expRh.back()._docId = i; - expRh.back()._rankValue = (i < 50) ? 0 : (i + 100); + expRh.back()._rankValue = (i < 50) ? default_rank_value : (i + 100); } // add results in reverse order for (uint32_t i = numHits; i-- > 0; ) { @@ -516,7 +516,7 @@ TEST("require that hits can be added out of order only after passing array limit for (uint32_t i = 0; i < numHits; ++i) { expRh.push_back(RankedHit()); expRh.back()._docId = i; - expRh.back()._rankValue = (i < 50) ? 0 : (i + 100); + expRh.back()._rankValue = (i < 50) ? default_rank_value : (i + 100); } // add results in reverse order const uint32_t numInOrder = numHits - 30; diff --git a/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp b/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp index 7e17ba3a808..2cb05b14503 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp +++ b/searchlib/src/vespa/searchlib/attribute/reference_attribute.cpp @@ -320,12 +320,23 @@ ReferenceAttribute::setGidToLidMapperFactory(std::shared_ptr<IGidToLidMapperFact } void -ReferenceAttribute::notifyGidToLidChange(const GlobalId &gid, DocId referencedLid) +ReferenceAttribute::notifyReferencedPut(const GlobalId &gid, DocId referencedLid) { EntryRef ref = _store.find(gid); if (ref.valid()) { const auto &entry = _store.get(ref); - _referenceMappings.notifyGidToLidChange(entry, referencedLid); + _referenceMappings.notifyReferencedPut(entry, referencedLid); + commit(); + } +} + +void +ReferenceAttribute::notifyReferencedRemove(const GlobalId &gid) +{ + EntryRef ref = _store.find(gid); + if (ref.valid()) { + const auto &entry = _store.get(ref); + _referenceMappings.notifyReferencedRemove(entry); commit(); } } diff --git a/searchlib/src/vespa/searchlib/attribute/reference_attribute.h b/searchlib/src/vespa/searchlib/attribute/reference_attribute.h index 4ee277b8733..ce7c908db99 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_attribute.h +++ b/searchlib/src/vespa/searchlib/attribute/reference_attribute.h @@ -78,7 +78,8 @@ public: ReverseMappingRefs getReverseMappingRefs() const { return _referenceMappings.getReverseMappingRefs(); } const ReverseMapping &getReverseMapping() const { return _referenceMappings.getReverseMapping(); } - void notifyGidToLidChange(const GlobalId &gid, DocId referencedLid); + void notifyReferencedPut(const GlobalId &gid, DocId referencedLid); + void notifyReferencedRemove(const GlobalId &gid); void populateReferencedLids(); virtual void clearDocs(DocId lidLow, DocId lidLimit) override; virtual void onShrinkLidSpace() override; diff --git a/searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp b/searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp index 4edd9d45e60..f2462cdc40d 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp +++ b/searchlib/src/vespa/searchlib/attribute/reference_mappings.cpp @@ -93,7 +93,7 @@ ReferenceMappings::buildReverseMapping(const Reference &entry, const std::vector } void -ReferenceMappings::notifyGidToLidChange(const Reference &entry, uint32_t referencedLid) +ReferenceMappings::notifyReferencedPut(const Reference &entry, uint32_t referencedLid) { uint32_t oldReferencedLid = entry.lid(); if (oldReferencedLid != referencedLid) { @@ -107,6 +107,20 @@ ReferenceMappings::notifyGidToLidChange(const Reference &entry, uint32_t referen } void +ReferenceMappings::notifyReferencedRemove(const Reference &entry) +{ + uint32_t oldReferencedLid = entry.lid(); + if (oldReferencedLid != 0) { + if (oldReferencedLid < _reverseMappingIndices.size()) { + _reverseMappingIndices[oldReferencedLid] = EntryRef(); + } + entry.setLid(0); + } + syncReverseMappingIndices(entry); + syncForwardMapping(entry); +} + +void ReferenceMappings::onAddDocs(uint32_t docIdLimit) { _referencedLids.reserve(docIdLimit); diff --git a/searchlib/src/vespa/searchlib/attribute/reference_mappings.h b/searchlib/src/vespa/searchlib/attribute/reference_mappings.h index 3190e1b5a83..73754d9cb13 100644 --- a/searchlib/src/vespa/searchlib/attribute/reference_mappings.h +++ b/searchlib/src/vespa/searchlib/attribute/reference_mappings.h @@ -57,7 +57,8 @@ public: void transferHoldLists(generation_t generation) { _reverseMapping.transferHoldLists(generation); } // Handle mapping changes - void notifyGidToLidChange(const Reference &entry, uint32_t referencedLid); + void notifyReferencedPut(const Reference &entry, uint32_t referencedLid); + void notifyReferencedRemove(const Reference &entry); void removeReverseMapping(const Reference &entry, uint32_t lid); void addReverseMapping(const Reference &entry, uint32_t lid); void syncMappings(const Reference &entry); diff --git a/searchlib/src/vespa/searchlib/common/hitrank.h b/searchlib/src/vespa/searchlib/common/hitrank.h index abc714660cf..9f40cf9277c 100644 --- a/searchlib/src/vespa/searchlib/common/hitrank.h +++ b/searchlib/src/vespa/searchlib/common/hitrank.h @@ -2,10 +2,13 @@ #pragma once +#include <cmath> + namespace search { typedef double HitRank; typedef double SignedHitRank; +constexpr HitRank default_rank_value = -HUGE_VAL; } // namespace search diff --git a/searchlib/src/vespa/searchlib/common/rankedhit.h b/searchlib/src/vespa/searchlib/common/rankedhit.h index bd66f884a08..d56fa92442f 100644 --- a/searchlib/src/vespa/searchlib/common/rankedhit.h +++ b/searchlib/src/vespa/searchlib/common/rankedhit.h @@ -11,8 +11,8 @@ namespace search { struct RankedHit { - RankedHit() : _docId(0), _rankValue(0) { } - RankedHit(unsigned int docId, HitRank rank=0.0) : _docId(docId), _rankValue(rank) { } + RankedHit() : _docId(0), _rankValue(default_rank_value) { } + RankedHit(unsigned int docId, HitRank rank = default_rank_value) : _docId(docId), _rankValue(rank) { } unsigned int getDocId() const { return _docId & 0x7fffffff; } bool hasMore() const { return _docId & 0x80000000; } HitRank getRank() const { return _rankValue; } diff --git a/searchlib/src/vespa/searchlib/common/resultset.cpp b/searchlib/src/vespa/searchlib/common/resultset.cpp index 69f3b13d709..5ad89bf49d7 100644 --- a/searchlib/src/vespa/searchlib/common/resultset.cpp +++ b/searchlib/src/vespa/searchlib/common/resultset.cpp @@ -111,7 +111,7 @@ ResultSet::mergeWithBitOverflow() // bitvector hits before array hits while (bidx < firstArrayHit) { tgtA->_docId = bidx; - tgtA->_rankValue = 0; + tgtA->_rankValue = default_rank_value; tgtA++; bidx = bitVector->getNextTrueBit(bidx + 1); } @@ -123,7 +123,7 @@ ResultSet::mergeWithBitOverflow() tgtA->_rankValue = oldA->_rankValue; oldA++; } else { - tgtA->_rankValue = 0; + tgtA->_rankValue = default_rank_value; } tgtA++; bidx = bitVector->getNextTrueBit(bidx + 1); @@ -134,7 +134,7 @@ ResultSet::mergeWithBitOverflow() // bitvector hits after array hits while (tgtA < tgtAEnd) { tgtA->_docId = bidx; - tgtA->_rankValue = 0; + tgtA->_rankValue = default_rank_value; tgtA++; bidx = bitVector->getNextTrueBit(bidx + 1); } diff --git a/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp b/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp index 3601a93fdc2..7d79d0f659e 100644 --- a/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp @@ -306,7 +306,7 @@ HitCollector::getResultSet() rh[j]._rankValue = getReScore(_hits[i].second); ++i; } else { - rh[j]._rankValue = 0; + rh[j]._rankValue = default_rank_value; } } } else { @@ -317,7 +317,7 @@ HitCollector::getResultSet() rh[j]._rankValue = _hits[i].second; ++i; } else { - rh[j]._rankValue = 0; + rh[j]._rankValue = default_rank_value; } } } diff --git a/vespajlib/src/main/java/com/yahoo/collections/ByteArrayComparator.java b/vespajlib/src/main/java/com/yahoo/collections/ByteArrayComparator.java index d6f73cea3e2..d8b964a2a3c 100644 --- a/vespajlib/src/main/java/com/yahoo/collections/ByteArrayComparator.java +++ b/vespajlib/src/main/java/com/yahoo/collections/ByteArrayComparator.java @@ -5,9 +5,10 @@ package com.yahoo.collections; * Utility class which is useful when implementing <code>Comparable</code> and one needs to * compare byte arrays as instance variables. * - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> + * @author Einar M R Rosenvinge */ public class ByteArrayComparator { + /** * Compare the arguments. Shorter arrays are always considered * smaller than longer arrays. For arrays of equal lengths, the elements @@ -29,17 +30,18 @@ public class ByteArrayComparator { return 1; } - //lengths are equal, compare contents + // lengths are equal, compare contents for (int i = 0; i < first.length; i++) { if (first[i] < second[i]) { return -1; } else if (first[i] > second[i]) { return 1; } - //values at index i are equal, continue... + // values at index i are equal, continue... } - //we haven't returned yet; contents must be equal: + // we haven't returned yet; contents must be equal: return 0; } + } diff --git a/vespamalloc/src/tests/allocfree/CMakeLists.txt b/vespamalloc/src/tests/allocfree/CMakeLists.txt index cf0aab705a3..52c0c03d079 100644 --- a/vespamalloc/src/tests/allocfree/CMakeLists.txt +++ b/vespamalloc/src/tests/allocfree/CMakeLists.txt @@ -25,4 +25,4 @@ vespa_add_executable(vespamalloc_linklist_test_app ) vespa_add_test(NAME vespamalloc_allocfree_shared_test_app NO_VALGRIND COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/allocfree_test.sh BENCHMARK DEPENDS vespamalloc_realloc_test_app vespamalloc_allocfree_shared_test_app vespamalloc_linklist_test_app - vespamalloc vespamalloc_vespamallocd) + vespamalloc vespamallocd) diff --git a/vespamalloc/src/tests/allocfree/allocfree_test.sh b/vespamalloc/src/tests/allocfree/allocfree_test.sh index d52bec12bd9..810a66f632b 100755 --- a/vespamalloc/src/tests/allocfree/allocfree_test.sh +++ b/vespamalloc/src/tests/allocfree/allocfree_test.sh @@ -5,7 +5,7 @@ set -e TIME=/usr/bin/time VESPA_MALLOC_SO=../../../src/vespamalloc/libvespamalloc.so -VESPA_MALLOC_SO_D=../../../src/vespamalloc/libvespamalloc_vespamallocd.so +VESPA_MALLOC_SO_D=../../../src/vespamalloc/libvespamallocd.so LD_PRELOAD=$VESPA_MALLOC_SO ./vespamalloc_realloc_test_app LD_PRELOAD=$VESPA_MALLOC_SO_D ./vespamalloc_realloc_test_app diff --git a/vespamalloc/src/tests/doubledelete/CMakeLists.txt b/vespamalloc/src/tests/doubledelete/CMakeLists.txt index c6fe46be614..2017a242d1b 100644 --- a/vespamalloc/src/tests/doubledelete/CMakeLists.txt +++ b/vespamalloc/src/tests/doubledelete/CMakeLists.txt @@ -11,4 +11,4 @@ vespa_add_executable(vespamalloc_expectsignal_app ) vespa_add_test(NAME vespamalloc_doubledelete_test_app NO_VALGRIND COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/doubledelete_test.sh DEPENDS vespamalloc_doubledelete_test_app vespamalloc_expectsignal_app - vespamalloc vespamalloc_vespamallocd) + vespamalloc vespamallocd) diff --git a/vespamalloc/src/tests/doubledelete/doubledelete_test.sh b/vespamalloc/src/tests/doubledelete/doubledelete_test.sh index 7bea46f6a57..ab0b4943b11 100755 --- a/vespamalloc/src/tests/doubledelete/doubledelete_test.sh +++ b/vespamalloc/src/tests/doubledelete/doubledelete_test.sh @@ -5,4 +5,4 @@ set -e LD_PRELOAD=../../../src/vespamalloc/libvespamalloc.so ./vespamalloc_doubledelete_test_app ulimit -c 0 -./vespamalloc_expectsignal_app 6 "LD_PRELOAD=../../../src/vespamalloc/libvespamalloc_vespamallocd.so ./vespamalloc_doubledelete_test_app" +./vespamalloc_expectsignal_app 6 "LD_PRELOAD=../../../src/vespamalloc/libvespamallocd.so ./vespamalloc_doubledelete_test_app" diff --git a/vespamalloc/src/tests/overwrite/CMakeLists.txt b/vespamalloc/src/tests/overwrite/CMakeLists.txt index 5855b35ada9..29b6ac46eb4 100644 --- a/vespamalloc/src/tests/overwrite/CMakeLists.txt +++ b/vespamalloc/src/tests/overwrite/CMakeLists.txt @@ -12,4 +12,4 @@ vespa_add_executable(vespamalloc_expectsignal-overwrite_app ) vespa_add_test(NAME vespamalloc_overwrite_test_app NO_VALGRIND COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/overwrite_test.sh DEPENDS vespamalloc_overwrite_test_app vespamalloc_expectsignal-overwrite_app - vespamalloc vespamalloc_vespamallocd) + vespamalloc vespamallocd) diff --git a/vespamalloc/src/tests/overwrite/overwrite_test.sh b/vespamalloc/src/tests/overwrite/overwrite_test.sh index 9d7de928a75..05b1836e94e 100755 --- a/vespamalloc/src/tests/overwrite/overwrite_test.sh +++ b/vespamalloc/src/tests/overwrite/overwrite_test.sh @@ -3,8 +3,8 @@ set -e LD_PRELOAD=../../../src/vespamalloc/libvespamalloc.so ./vespamalloc_overwrite_test_app -LD_PRELOAD=../../../src/vespamalloc/libvespamalloc_vespamallocd.so ./vespamalloc_overwrite_test_app testmemoryfill +LD_PRELOAD=../../../src/vespamalloc/libvespamallocd.so ./vespamalloc_overwrite_test_app testmemoryfill ulimit -c 0; -./vespamalloc_expectsignal-overwrite_app 6 "LD_PRELOAD=../../../src/vespamalloc/libvespamalloc_vespamallocd.so ./vespamalloc_overwrite_test_app prewrite" -./vespamalloc_expectsignal-overwrite_app 6 "LD_PRELOAD=../../../src/vespamalloc/libvespamalloc_vespamallocd.so ./vespamalloc_overwrite_test_app postwrite" -./vespamalloc_expectsignal-overwrite_app 6 "LD_PRELOAD=../../../src/vespamalloc/libvespamalloc_vespamallocd.so ./vespamalloc_overwrite_test_app writeafterfree" +./vespamalloc_expectsignal-overwrite_app 6 "LD_PRELOAD=../../../src/vespamalloc/libvespamallocd.so ./vespamalloc_overwrite_test_app prewrite" +./vespamalloc_expectsignal-overwrite_app 6 "LD_PRELOAD=../../../src/vespamalloc/libvespamallocd.so ./vespamalloc_overwrite_test_app postwrite" +./vespamalloc_expectsignal-overwrite_app 6 "LD_PRELOAD=../../../src/vespamalloc/libvespamallocd.so ./vespamalloc_overwrite_test_app writeafterfree" diff --git a/vespamalloc/src/tests/stacktrace/CMakeLists.txt b/vespamalloc/src/tests/stacktrace/CMakeLists.txt index 1259f52c326..491b0d4089e 100644 --- a/vespamalloc/src/tests/stacktrace/CMakeLists.txt +++ b/vespamalloc/src/tests/stacktrace/CMakeLists.txt @@ -8,5 +8,5 @@ vespa_add_executable(vespamalloc_stacktrace_test_app TEST vespa_add_test( NAME vespamalloc_stacktrace_test_app NO_VALGRIND COMMAND vespamalloc_stacktrace_test_app - ENVIRONMENT "LD_PRELOAD=${CMAKE_CURRENT_BINARY_DIR}/../../vespamalloc/libvespamalloc_vespamallocdst16.so" + ENVIRONMENT "LD_PRELOAD=${CMAKE_CURRENT_BINARY_DIR}/../../vespamalloc/libvespamallocdst16.so" NO_VALGRIND) diff --git a/vespamalloc/src/tests/thread/CMakeLists.txt b/vespamalloc/src/tests/thread/CMakeLists.txt index 2be281a6bd0..53d61f4aa76 100644 --- a/vespamalloc/src/tests/thread/CMakeLists.txt +++ b/vespamalloc/src/tests/thread/CMakeLists.txt @@ -9,4 +9,4 @@ vespa_add_executable(vespamalloc_racemanythreads_test_app ) vespa_add_test(NAME vespamalloc_thread_test_app NO_VALGRIND COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/thread_test.sh DEPENDS vespamalloc_thread_test_app vespamalloc_racemanythreads_test_app - vespamalloc vespamalloc_vespamallocd) + vespamalloc vespamallocd) diff --git a/vespamalloc/src/tests/thread/thread_test.sh b/vespamalloc/src/tests/thread/thread_test.sh index 8b3d94e922d..b06c27e4a17 100755 --- a/vespamalloc/src/tests/thread/thread_test.sh +++ b/vespamalloc/src/tests/thread/thread_test.sh @@ -15,7 +15,7 @@ else fi VESPA_MALLOC_SO=../../../src/vespamalloc/libvespamalloc.so -VESPA_MALLOC_SO_D=../../../src/vespamalloc/libvespamalloc_vespamallocd.so +VESPA_MALLOC_SO_D=../../../src/vespamalloc/libvespamallocd.so LD_PRELOAD=$VESPA_MALLOC_SO ./vespamalloc_thread_test_app return 20 LD_PRELOAD=$VESPA_MALLOC_SO ./vespamalloc_thread_test_app exit 20 diff --git a/vespamalloc/src/vespamalloc/CMakeLists.txt b/vespamalloc/src/vespamalloc/CMakeLists.txt index b065df672dd..d43d779217d 100644 --- a/vespamalloc/src/vespamalloc/CMakeLists.txt +++ b/vespamalloc/src/vespamalloc/CMakeLists.txt @@ -7,7 +7,7 @@ vespa_add_library(vespamalloc DEPENDS dl ) -vespa_add_library(vespamalloc_vespamallocd +vespa_add_library(vespamallocd SOURCES $<TARGET_OBJECTS:vespamalloc_mallocd> $<TARGET_OBJECTS:vespamalloc_util> @@ -15,7 +15,7 @@ vespa_add_library(vespamalloc_vespamallocd DEPENDS dl ) -vespa_add_library(vespamalloc_vespamallocdst16 +vespa_add_library(vespamallocdst16 SOURCES $<TARGET_OBJECTS:vespamalloc_mallocdst16> $<TARGET_OBJECTS:vespamalloc_util> @@ -23,7 +23,7 @@ vespa_add_library(vespamalloc_vespamallocdst16 DEPENDS dl ) -vespa_add_library(vespamalloc_vespamallocdst16_nl +vespa_add_library(vespamallocdst16_nl SOURCES $<TARGET_OBJECTS:vespamalloc_mallocdst16_nl> $<TARGET_OBJECTS:vespamalloc_util> @@ -31,7 +31,7 @@ vespa_add_library(vespamalloc_vespamallocdst16_nl DEPENDS dl ) -vespa_add_library(vespamalloc_vespammap +vespa_add_library(vespammap SOURCES $<TARGET_OBJECTS:vespamalloc_mmap> INSTALL lib64/vespa/malloc |