summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--annotations/pom.xml1
-rw-r--r--application-deploy-plugin/pom.xml1
-rw-r--r--application-model/pom.xml1
-rw-r--r--application-preprocessor/pom.xml1
-rw-r--r--application/pom.xml1
-rw-r--r--athenz-identity-provider-service/pom.xml1
-rwxr-xr-xbootstrap.sh10
-rw-r--r--bundle-plugin-test/pom.xml1
-rw-r--r--bundle-plugin/pom.xml1
-rwxr-xr-xchain/pom.xml1
-rw-r--r--clustercontroller-apps/pom.xml1
-rw-r--r--clustercontroller-apputil/pom.xml1
-rw-r--r--clustercontroller-core/pom.xml1
-rw-r--r--clustercontroller-standalone/pom.xml1
-rw-r--r--clustercontroller-utils/pom.xml1
-rwxr-xr-xcomponent/pom.xml1
-rw-r--r--config-application-package/pom.xml1
-rw-r--r--config-bundle/pom.xml1
-rw-r--r--config-class-plugin/pom.xml1
-rw-r--r--config-lib/pom.xml1
-rw-r--r--config-model-api/pom.xml1
-rw-r--r--config-model-fat/pom.xml1
-rw-r--r--config-model/pom.xml1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java16
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java26
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/clients/VespaSpoolerService.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/Container.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/DummyFileDistributionConfigProducer.java42
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java22
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProvider.java59
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java57
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java12
-rw-r--r--config-provisioning/pom.xml1
-rw-r--r--config-proxy/pom.xml1
-rwxr-xr-xconfig/pom.xml1
-rw-r--r--configdefinitions/pom.xml1
-rw-r--r--configgen/pom.xml1
-rw-r--r--configserver/pom.xml1
-rw-r--r--container-accesslogging/pom.xml1
-rw-r--r--container-core/pom.xml1
-rw-r--r--container-dependencies-enforcer/pom.xml45
-rw-r--r--container-dependency-versions/pom.xml422
-rw-r--r--container-dev/pom.xml1
-rw-r--r--container-di/pom.xml1
-rw-r--r--container-disc/pom.xml1
-rw-r--r--container-jersey2/pom.xml1
-rw-r--r--container-messagebus/pom.xml1
-rw-r--r--container-search-and-docproc/pom.xml1
-rw-r--r--container-search/pom.xml1
-rw-r--r--container-test-jars/pom.xml1
-rw-r--r--container-test/pom.xml1
-rw-r--r--container/pom.xml1
-rw-r--r--controller-api/pom.xml1
-rw-r--r--controller-server/pom.xml1
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java2
-rw-r--r--defaults/pom.xml7
-rw-r--r--docker-api/pom.xml1
-rw-r--r--docproc/pom.xml1
-rw-r--r--docprocs/pom.xml1
-rw-r--r--document/pom.xml1
-rw-r--r--documentapi/pom.xml1
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp2
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.h2
-rw-r--r--documentgen-test/pom.xml1
-rw-r--r--eval/CMakeLists.txt1
-rw-r--r--eval/src/apps/tensor_conformance/generate.cpp11
-rw-r--r--eval/src/apps/tensor_conformance/test_spec.json4
-rw-r--r--eval/src/tests/tensor/dense_tensor_function_compiler/dense_tensor_function_compiler_test.cpp87
-rw-r--r--eval/src/tests/tensor/dense_xw_product_function/CMakeLists.txt8
-rw-r--r--eval/src/tests/tensor/dense_xw_product_function/dense_xw_product_function_test.cpp102
-rw-r--r--eval/src/vespa/eval/eval/tensor_function.h14
-rw-r--r--eval/src/vespa/eval/tensor/default_tensor_engine.cpp4
-rw-r--r--eval/src/vespa/eval/tensor/dense/CMakeLists.txt1
-rw-r--r--eval/src/vespa/eval/tensor/dense/dense_dot_product_function.cpp5
-rw-r--r--eval/src/vespa/eval/tensor/dense/dense_tensor_function_compiler.cpp68
-rw-r--r--eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp91
-rw-r--r--eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h53
-rw-r--r--fileacquirer/pom.xml1
-rw-r--r--filedistribution/pom.xml3
-rw-r--r--filedistribution_test/pom.xml1
-rw-r--r--filedistributionmanager/pom.xml1
-rw-r--r--fsa/pom.xml1
-rw-r--r--indexinglanguage/pom.xml1
-rw-r--r--jaxrs_client_utils/pom.xml1
-rw-r--r--jaxrs_utils/pom.xml1
-rw-r--r--jdisc_core/pom.xml1
-rw-r--r--jdisc_core_test/pom.xml1
-rw-r--r--jdisc_http_service/pom.xml1
-rw-r--r--jdisc_jetty/pom.xml1
-rw-r--r--jdisc_messagebus_service/pom.xml1
-rw-r--r--jrt/pom.xml1
-rw-r--r--linguistics/pom.xml2
-rw-r--r--logd/pom.xml1
-rw-r--r--logserver/pom.xml1
-rw-r--r--maven-plugins/pom.xml1
-rw-r--r--messagebus-disc/pom.xml1
-rw-r--r--messagebus/pom.xml1
-rw-r--r--metrics/pom.xml1
-rw-r--r--node-admin/pom.xml1
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java6
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java5
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java14
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java12
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImpl.java8
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java9
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutor.java81
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java41
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java70
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImplTest.java24
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImplTest.java15
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutorTest.java86
-rw-r--r--node-maintainer/pom.xml1
-rw-r--r--node-repository/pom.xml1
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java13
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json39
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json4
-rw-r--r--orchestrator-restapi/pom.xml1
-rw-r--r--orchestrator/pom.xml1
-rw-r--r--parent/pom.xml721
-rw-r--r--pom.xml942
-rw-r--r--predicate-search-core/pom.xml1
-rw-r--r--predicate-search/pom.xml1
-rw-r--r--processing/pom.xml1
-rwxr-xr-xprovided-dependencies/pom.xml1
-rw-r--r--searchcore/pom.xml1
-rw-r--r--searchlib/pom.xml1
-rw-r--r--searchsummary/pom.xml1
-rw-r--r--service-monitor/pom.xml2
-rw-r--r--serviceview/pom.xml1
-rw-r--r--simplemetrics/pom.xml1
-rw-r--r--socket_test/pom.xml1
-rw-r--r--standalone-container/pom.xml1
-rw-r--r--statistics/pom.xml1
-rw-r--r--storage/pom.xml1
-rw-r--r--testutil/pom.xml2
-rw-r--r--vdslib/pom.xml1
-rw-r--r--vespa-application-maven-plugin/pom.xml1
-rw-r--r--vespa-documentgen-plugin/pom.xml1
-rw-r--r--vespa-hadoop/pom.xml1
-rw-r--r--vespa-http-client/pom.xml1
-rw-r--r--vespa_feed_perf/pom.xml1
-rw-r--r--vespa_jersey2/pom.xml1
-rw-r--r--vespaclient-container-plugin/pom.xml1
-rw-r--r--vespaclient-core/pom.xml1
-rw-r--r--vespaclient-java/pom.xml1
-rw-r--r--vespajlib/pom.xml1
-rw-r--r--vespalog/pom.xml1
-rw-r--r--vsm/pom.xml1
-rw-r--r--yolean/pom.xml1
-rw-r--r--zkfacade/pom.xml1
158 files changed, 2122 insertions, 1278 deletions
diff --git a/annotations/pom.xml b/annotations/pom.xml
index 146eb5e9be2..3321dddaf8c 100644
--- a/annotations/pom.xml
+++ b/annotations/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>annotations</artifactId>
<packaging>jar</packaging>
diff --git a/application-deploy-plugin/pom.xml b/application-deploy-plugin/pom.xml
index 3cae7cf7831..501dee385a6 100644
--- a/application-deploy-plugin/pom.xml
+++ b/application-deploy-plugin/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>application-deploy-plugin</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/application-model/pom.xml b/application-model/pom.xml
index 13a2d3ea49b..801c72e9194 100644
--- a/application-model/pom.xml
+++ b/application-model/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>application-model</artifactId>
<packaging>container-plugin</packaging>
diff --git a/application-preprocessor/pom.xml b/application-preprocessor/pom.xml
index 4fa319a881a..6ffff09e548 100644
--- a/application-preprocessor/pom.xml
+++ b/application-preprocessor/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>application-preprocessor</artifactId>
<packaging>jar</packaging>
diff --git a/application/pom.xml b/application/pom.xml
index 17e9ece3543..8103226e55d 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>application</artifactId>
<packaging>jar</packaging>
diff --git a/athenz-identity-provider-service/pom.xml b/athenz-identity-provider-service/pom.xml
index c87589d7be2..bfd02d54d43 100644
--- a/athenz-identity-provider-service/pom.xml
+++ b/athenz-identity-provider-service/pom.xml
@@ -11,6 +11,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<dependencies>
<!-- COMPILE -->
diff --git a/bootstrap.sh b/bootstrap.sh
index 075da74b7c7..b71af73c529 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -44,8 +44,16 @@ $top/dist/getversion.pl -M $top > $top/dist/vtag.map
# The 'default' mode also builds some modules needed by C++ code.
# The 'full' mode also builds modules needed by C++ tests.
-# must install parent pom first:
+# must install parent poms first:
echo "Downloading all dependencies. This may take a few minutes with an empty Maven cache."
+(
+ cd container-dependency-versions
+ mvn_install
+)
+(
+ cd parent
+ mvn_install
+)
mvn_install -N
# and build plugins first:
diff --git a/bundle-plugin-test/pom.xml b/bundle-plugin-test/pom.xml
index 8d8bf48cc07..3dd5be00add 100644
--- a/bundle-plugin-test/pom.xml
+++ b/bundle-plugin-test/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>com.yahoo.vespa</groupId>
<artifactId>bundle-plugin-test</artifactId>
diff --git a/bundle-plugin/pom.xml b/bundle-plugin/pom.xml
index 02f0ed2ccf5..47a06a1ee76 100644
--- a/bundle-plugin/pom.xml
+++ b/bundle-plugin/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>bundle-plugin</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/chain/pom.xml b/chain/pom.xml
index a3096d37748..01a64a93609 100755
--- a/chain/pom.xml
+++ b/chain/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>chain</artifactId>
<packaging>jar</packaging>
diff --git a/clustercontroller-apps/pom.xml b/clustercontroller-apps/pom.xml
index 26f466eb208..bdc6059a816 100644
--- a/clustercontroller-apps/pom.xml
+++ b/clustercontroller-apps/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>clustercontroller-apps</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/clustercontroller-apputil/pom.xml b/clustercontroller-apputil/pom.xml
index 68adc82596f..42c7690eab6 100644
--- a/clustercontroller-apputil/pom.xml
+++ b/clustercontroller-apputil/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>clustercontroller-apputil</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/clustercontroller-core/pom.xml b/clustercontroller-core/pom.xml
index 499dee0d1de..99cf4df643b 100644
--- a/clustercontroller-core/pom.xml
+++ b/clustercontroller-core/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>clustercontroller-core</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/clustercontroller-standalone/pom.xml b/clustercontroller-standalone/pom.xml
index f51555a92b6..f435cd9d7c4 100644
--- a/clustercontroller-standalone/pom.xml
+++ b/clustercontroller-standalone/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>clustercontroller-standalone</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/clustercontroller-utils/pom.xml b/clustercontroller-utils/pom.xml
index f151a623ff9..287a85089ca 100644
--- a/clustercontroller-utils/pom.xml
+++ b/clustercontroller-utils/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>clustercontroller-utils</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/component/pom.xml b/component/pom.xml
index 92f852e4ba0..18bfd000a84 100755
--- a/component/pom.xml
+++ b/component/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>component</artifactId>
<packaging>container-plugin</packaging>
diff --git a/config-application-package/pom.xml b/config-application-package/pom.xml
index 90d4a2d9af6..629c02de1e8 100644
--- a/config-application-package/pom.xml
+++ b/config-application-package/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config-application-package</artifactId>
<packaging>container-plugin</packaging>
diff --git a/config-bundle/pom.xml b/config-bundle/pom.xml
index 7121756ce68..07262141801 100644
--- a/config-bundle/pom.xml
+++ b/config-bundle/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config-bundle</artifactId>
<packaging>container-plugin</packaging>
diff --git a/config-class-plugin/pom.xml b/config-class-plugin/pom.xml
index 5b3149a13da..71a20782d85 100644
--- a/config-class-plugin/pom.xml
+++ b/config-class-plugin/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config-class-plugin</artifactId>
<packaging>maven-plugin</packaging>
diff --git a/config-lib/pom.xml b/config-lib/pom.xml
index 2ed993dd052..31648958fa6 100644
--- a/config-lib/pom.xml
+++ b/config-lib/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config-lib</artifactId>
<packaging>container-plugin</packaging>
diff --git a/config-model-api/pom.xml b/config-model-api/pom.xml
index 6618612df31..743164afb16 100644
--- a/config-model-api/pom.xml
+++ b/config-model-api/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config-model-api</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/config-model-fat/pom.xml b/config-model-fat/pom.xml
index a4bbba0e6e8..0526c2f6581 100644
--- a/config-model-fat/pom.xml
+++ b/config-model-fat/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config-model-fat</artifactId>
<packaging>bundle</packaging>
diff --git a/config-model/pom.xml b/config-model/pom.xml
index 0fdc09e1a61..729d1a2ef9b 100644
--- a/config-model/pom.xml
+++ b/config-model/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config-model</artifactId>
<packaging>container-plugin</packaging>
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 b4b89278c51..659d5b65a4c 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
@@ -510,22 +510,6 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon
}
/**
- * Sets up this service to be included when generating monitoring config.
- * The ymon service name used will be {@link #getServiceType()}
- */
- public void monitorService() {
- monitorService(getServiceType());
- }
-
- /**
- * Sets up this service to be included when generating ymon config.
- * @param ymonServiceName the ymon service name to be used
- */
- public void monitorService(String ymonServiceName) {
- setProp("ymonService", ymonServiceName);
- }
-
- /**
*
* The service HTTP port for health status
* @return portnumber
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java b/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
index d751e332ff3..c540a5f62d2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
@@ -16,6 +16,8 @@ package com.yahoo.vespa.model;
*/
public class ConfigProxy extends AbstractService {
+ public final static int BASEPORT = 19090;
+
/**
* Creates a new ConfigProxy instance.
*
@@ -31,7 +33,7 @@ public class ConfigProxy extends AbstractService {
/**
* Returns the desired base port for this service.
*/
- public int getWantedPort() { return 19090; }
+ public int getWantedPort() { return BASEPORT; }
/**
* The desired base port is the only allowed base port.
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
index 2575cdb6237..d892d70e0de 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
@@ -14,6 +14,8 @@ import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
import com.yahoo.vespa.model.container.ContainerCluster;
+import com.yahoo.vespa.model.filedistribution.DummyFileDistributionConfigProducer;
+import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProvider;
import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer;
import com.yahoo.vespa.model.filedistribution.FileDistributor;
import com.yahoo.vespa.model.filedistribution.FileDistributorService;
@@ -213,11 +215,25 @@ public class Admin extends AbstractConfigProducer implements Serializable {
fileDistributor.fileSourceHost() + "'. Hostsystem=" + getHostSystem());
}
- FileDistributorService fds = new FileDistributorService(fileDistribution, host.getHost().getHostName(),
- fileDistribution.getFileDistributor(), fileDistribution.getOptions(), host == deployHost);
- fds.setHostResource(host);
- fds.initService();
- fileDistribution.addFileDistributionService(host.getHost(), fds);
+ FileDistributionConfigProvider configProvider =
+ new FileDistributionConfigProvider(fileDistributor,
+ fileDistribution.getOptions(),
+ host == deployHost,
+ host.getHost());
+ if (fileDistribution.getOptions().disableFiledistributor()) {
+ DummyFileDistributionConfigProducer dummyFileDistributionConfigProducer =
+ new DummyFileDistributionConfigProducer(fileDistribution,
+ host.getHost().getHostName(),
+ configProvider);
+ fileDistribution.addFileDistributionConfigProducer(host.getHost(), dummyFileDistributionConfigProducer);
+ } else {
+ FileDistributorService fds = new FileDistributorService(fileDistribution,
+ host.getHost().getHostName(),
+ configProvider);
+ fds.setHostResource(host);
+ fds.initService();
+ fileDistribution.addFileDistributionConfigProducer(host.getHost(), fds);
+ }
}
private boolean deployHostIsMissing(HostResource deployHost) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java
index 942d563d850..e8f1f59310b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java
@@ -35,7 +35,6 @@ public class Configserver extends AbstractService {
portsMeta.on(1).tag("http").tag("config").tag("state");
setProp("clustertype", "admin");
setProp("clustername", "admin");
- monitorService();
}
/**
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java
index 28cf18802cf..8b98dc9d06a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Logserver.java
@@ -23,7 +23,6 @@ public class Logserver extends AbstractService {
portsMeta.on(3).tag("logtp").tag("telnet").tag("replicator");
setProp("clustertype", "admin");
setProp("clustername", "admin");
- monitorService();
}
/**
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
index cefc08981a4..093694f41b3 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
@@ -23,7 +23,6 @@ public class Slobrok extends AbstractService {
setProp("index", index);
setProp("clustertype", "slobrok");
setProp("clustername", "admin");
- monitorService();
}
@Override
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/clients/VespaSpoolerService.java b/config-model/src/main/java/com/yahoo/vespa/model/clients/VespaSpoolerService.java
index 4969132ccfb..f4287cf982e 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/clients/VespaSpoolerService.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/clients/VespaSpoolerService.java
@@ -19,7 +19,6 @@ public class VespaSpoolerService extends AbstractService implements SpoolerConfi
public VespaSpoolerService(AbstractConfigProducer parent, int index, VespaSpooler spooler) {
super(parent, "spooler." + index);
this.spooler = spooler;
- monitorService("spooler");
}
public int getPortCount() {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
index 8991bfa6215..5925ec978bb 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
@@ -165,7 +165,6 @@ public class Container extends AbstractService implements
}
tagServers();
- monitorService();
}
private void tagServers() {
@@ -331,7 +330,7 @@ public class Container extends AbstractService implements
FileDistributionConfigProducer fileDistribution = getRoot().getFileDistributionConfigProducer();
if (fileDistribution != null) {
- builder.configid(fileDistribution.getFileDistributorService(getHost()).getConfigId());
+ builder.configid(fileDistribution.getConfigProducer(getHost()).getConfigId());
}
return builder;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
index 7ef54360f00..4257e47218e 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
@@ -50,8 +50,6 @@ public abstract class ContentNode extends AbstractService
portsMeta.on(0).tag("messaging");
portsMeta.on(1).tag("rpc").tag("status");
portsMeta.on(2).tag("http").tag("status").tag("state");
-
- monitorService();
}
@Override
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/DummyFileDistributionConfigProducer.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/DummyFileDistributionConfigProducer.java
new file mode 100644
index 00000000000..1b1e66594d1
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/DummyFileDistributionConfigProducer.java
@@ -0,0 +1,42 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.filedistribution;
+
+import com.yahoo.cloud.config.filedistribution.FiledistributorConfig;
+import com.yahoo.cloud.config.filedistribution.FiledistributorrpcConfig;
+import com.yahoo.cloud.config.filedistribution.FilereferencesConfig;
+import com.yahoo.config.model.producer.AbstractConfigProducer;
+
+/**
+ * @author hmusum
+ * <p>
+ * Dummy file distribution config producer, needed for serving file distribution config when there is no FiledistributorService.
+ */
+public class DummyFileDistributionConfigProducer extends AbstractConfigProducer implements
+ FiledistributorConfig.Producer,
+ FiledistributorrpcConfig.Producer,
+ FilereferencesConfig.Producer {
+
+ private final FileDistributionConfigProvider configProvider;
+
+ public DummyFileDistributionConfigProducer(AbstractConfigProducer parent,
+ String hostname,
+ FileDistributionConfigProvider configProvider) {
+ super(parent, hostname);
+ this.configProvider = configProvider;
+ }
+
+ @Override
+ public void getConfig(FiledistributorConfig.Builder builder) {
+ configProvider.getConfig(builder);
+ }
+
+ @Override
+ public void getConfig(FiledistributorrpcConfig.Builder builder) {
+ configProvider.getConfig(builder);
+ }
+
+ @Override
+ public void getConfig(FilereferencesConfig.Builder builder) {
+ configProvider.getConfig(builder);
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java
index 9e5e3074c5e..c863b180b21 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java
@@ -10,11 +10,13 @@ import java.util.IdentityHashMap;
import java.util.Map;
/**
- * @author tonytv
+ * @author hmusum
+ * <p>
+ * File distribution config producer, delegates getting config to {@link DummyFileDistributionConfigProducer} (one per host)
*/
public class FileDistributionConfigProducer extends AbstractConfigProducer {
- private final Map<Host, FileDistributorService> fileDistributorServices = new IdentityHashMap<>();
+ private final Map<Host, AbstractConfigProducer> fileDistributionConfigProducers = new IdentityHashMap<>();
private final FileDistributor fileDistributor;
private final FileDistributionOptions options;
@@ -24,14 +26,6 @@ public class FileDistributionConfigProducer extends AbstractConfigProducer {
this.options = options;
}
- public FileDistributorService getFileDistributorService(Host host) {
- FileDistributorService service = fileDistributorServices.get(host);
- if (service == null) {
- throw new IllegalStateException("No file distribution service for host " + host);
- }
- return service;
- }
-
public FileDistributor getFileDistributor() {
return fileDistributor;
}
@@ -40,8 +34,8 @@ public class FileDistributionConfigProducer extends AbstractConfigProducer {
return options;
}
- public void addFileDistributionService(Host host, FileDistributorService fds) {
- fileDistributorServices.put(host, fds);
+ public void addFileDistributionConfigProducer(Host host, AbstractConfigProducer fileDistributionConfigProducer) {
+ fileDistributionConfigProducers.put(host, fileDistributionConfigProducer);
}
public static class Builder {
@@ -58,4 +52,8 @@ public class FileDistributionConfigProducer extends AbstractConfigProducer {
}
}
+ public AbstractConfigProducer getConfigProducer(Host host) {
+ return fileDistributionConfigProducers.get(host);
+ }
+
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProvider.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProvider.java
new file mode 100644
index 00000000000..33cc581c3a8
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProvider.java
@@ -0,0 +1,59 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.filedistribution;
+
+import com.yahoo.cloud.config.filedistribution.FiledistributorConfig;
+import com.yahoo.cloud.config.filedistribution.FiledistributorrpcConfig;
+import com.yahoo.cloud.config.filedistribution.FilereferencesConfig;
+import com.yahoo.config.FileReference;
+import com.yahoo.config.model.api.FileDistribution;
+import com.yahoo.vespa.model.ConfigProxy;
+import com.yahoo.vespa.model.Host;
+import com.yahoo.vespa.model.admin.FileDistributionOptions;
+
+import java.util.Collection;
+
+public class FileDistributionConfigProvider {
+
+ private final FileDistributor fileDistributor;
+ private final FileDistributionOptions fileDistributionOptions;
+ private final boolean sendAllFiles;
+ private final Host host;
+
+ public FileDistributionConfigProvider(FileDistributor fileDistributor,
+ FileDistributionOptions fileDistributionOptions,
+ boolean sendAllFiles,
+ Host host) {
+ this.fileDistributor = fileDistributor;
+ this.fileDistributionOptions = fileDistributionOptions;
+ this.sendAllFiles = sendAllFiles;
+ this.host = host;
+ }
+
+ public void getConfig(FiledistributorConfig.Builder builder) {
+ fileDistributionOptions.getConfig(builder);
+ builder.torrentport(FileDistributorService.BASEPORT + 1);
+ builder.stateport(FileDistributorService.BASEPORT + 2);
+ builder.hostname(host.getHostName());
+ builder.filedbpath(FileDistribution.getDefaultFileDBPath().toString());
+ }
+
+ public void getConfig(FiledistributorrpcConfig.Builder builder) {
+ // If disabled config proxy should act as file distributor, so use config proxy port
+ int port = (fileDistributionOptions.disableFiledistributor()) ? ConfigProxy.BASEPORT : FileDistributorService.BASEPORT;
+ builder.connectionspec("tcp/" + host.getHostName() + ":" + port);
+ }
+
+ public void getConfig(FilereferencesConfig.Builder builder) {
+ for (FileReference reference : getFileReferences()) {
+ builder.filereferences(reference.value());
+ }
+ }
+
+ private Collection<FileReference> getFileReferences() {
+ if (sendAllFiles) {
+ return fileDistributor.allFilesToSend();
+ } else {
+ return fileDistributor.filesToSendToHost(host);
+ }
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java
index 7616b721be9..986334125d2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java
@@ -4,60 +4,36 @@ package com.yahoo.vespa.model.filedistribution;
import com.yahoo.cloud.config.filedistribution.FiledistributorConfig;
import com.yahoo.cloud.config.filedistribution.FiledistributorrpcConfig;
import com.yahoo.cloud.config.filedistribution.FilereferencesConfig;
-import com.yahoo.config.FileReference;
-
-import com.yahoo.config.model.api.FileDistribution;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
-import com.yahoo.vespa.model.admin.FileDistributionOptions;
-
-import java.util.Collection;
/**
- * @author tonytv
+ * @author Tony Vaagenes
+ *
+ * Config is produced by {@link FileDistributionConfigProvider}
*/
public class FileDistributorService extends AbstractService implements
FiledistributorConfig.Producer,
FiledistributorrpcConfig.Producer,
FilereferencesConfig.Producer {
- private final static int BASEPORT = 19092;
- private final FileDistributor fileDistributor;
- private final FileDistributionOptions fileDistributionOptions;
- private final boolean sendAllFiles;
+ final static int BASEPORT = 19092;
- private Collection<FileReference> getFileReferences() {
- if (sendAllFiles) {
- return fileDistributor.allFilesToSend();
- } else {
- return fileDistributor.filesToSendToHost(getHost());
- }
- }
+ private final FileDistributionConfigProvider configProvider;
- public FileDistributorService(AbstractConfigProducer parent,
- String name,
- FileDistributor fileDistributor,
- FileDistributionOptions fileDistributionOptions,
- boolean sendAllFiles) {
- super(parent, name);
+ public FileDistributorService(AbstractConfigProducer parent, String hostname, FileDistributionConfigProvider configProvider) {
+ super(parent, hostname);
+ this.configProvider = configProvider;
portsMeta.on(0).tag("rpc");
portsMeta.on(1).tag("torrent");
portsMeta.on(2).tag("http").tag("state");
setProp("clustertype", "filedistribution");
setProp("clustername", "admin");
-
- this.fileDistributor = fileDistributor;
- this.fileDistributionOptions = fileDistributionOptions;
- this.sendAllFiles = sendAllFiles;
- monitorService();
}
@Override
public String getStartupCommand() {
- // If disabled config proxy should act as file distributor, so don't start this service
- return (fileDistributionOptions.disableFiledistributor())
- ? null
- : "exec $ROOT/sbin/vespa-filedistributor" + " --configid " + getConfigId();
+ return "exec $ROOT/sbin/vespa-filedistributor" + " --configid " + getConfigId();
}
@Override
@@ -70,6 +46,7 @@ public class FileDistributorService extends AbstractService implements
return true;
}
+ @Override
public int getPortCount() {
return 3;
}
@@ -81,24 +58,16 @@ public class FileDistributorService extends AbstractService implements
@Override
public void getConfig(FiledistributorConfig.Builder builder) {
- fileDistributionOptions.getConfig(builder);
- builder.torrentport(getRelativePort(1));
- builder.stateport(getRelativePort(2));
- builder.hostname(getHostName());
- builder.filedbpath(FileDistribution.getDefaultFileDBPath().toString());
+ configProvider.getConfig(builder);
}
@Override
public void getConfig(FiledistributorrpcConfig.Builder builder) {
- // If disabled config proxy should act as file distributor, so use config proxy port
- int port = (fileDistributionOptions.disableFiledistributor()) ? 19090 : getRelativePort(0);
- builder.connectionspec("tcp/" + getHostName() + ":" + port);
+ configProvider.getConfig(builder);
}
@Override
public void getConfig(FilereferencesConfig.Builder builder) {
- for (FileReference reference : getFileReferences()) {
- builder.filereferences(reference.value());
- }
+ configProvider.getConfig(builder);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java b/config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java
index c0867d252a3..789c5562d9c 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/Dispatch.java
@@ -46,7 +46,6 @@ public class Dispatch extends AbstractService implements SearchInterface,
setProp("clustertype", "search")
.setProp("clustername", dispatchGroup.getClusterName())
.setProp("index", nodeSpec.groupIndex());
- monitorService();
}
public static Dispatch createTld(DispatchGroup dispatchGroup, AbstractConfigProducer parent, int rowId) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
index c5f7272ee80..819d5904c25 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
@@ -19,6 +19,7 @@ import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.application.validation.RestartConfigs;
import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder;
import com.yahoo.vespa.model.content.ContentNode;
+import com.yahoo.vespa.model.filedistribution.DummyFileDistributionConfigProducer;
import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer;
import com.yahoo.vespa.model.filedistribution.FileDistributorService;
import org.w3c.dom.Element;
@@ -112,7 +113,6 @@ public class SearchNode extends AbstractService implements
portsMeta.on(UNUSED_3).tag("unused");
portsMeta.on(HEALTH_PORT).tag("http").tag("json").tag("health").tag("state");
// Properties are set in DomSearchBuilder
- monitorService();
this.tuning = tuning;
}
@@ -229,10 +229,12 @@ public class SearchNode extends AbstractService implements
public void getConfig(FiledistributorrpcConfig.Builder builder) {
FileDistributionConfigProducer fileDistribution = getRoot().getFileDistributionConfigProducer();
if (fileDistribution != null) {
- FileDistributorService fds = fileDistribution.getFileDistributorService(getHost());
- if (fds != null) {
- fds.getConfig(builder);
- }
+ AbstractConfigProducer configProducer = fileDistribution.getConfigProducer(getHost());
+ // TODO: Hack, will be fixed when FileDistributorService is gone
+ if (configProducer instanceof DummyFileDistributionConfigProducer)
+ ((DummyFileDistributionConfigProducer) configProducer).getConfig(builder);
+ else
+ ((FileDistributorService) configProducer).getConfig(builder);
}
}
diff --git a/config-provisioning/pom.xml b/config-provisioning/pom.xml
index ebe7d460989..05f94973017 100644
--- a/config-provisioning/pom.xml
+++ b/config-provisioning/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>com.yahoo.vespa</groupId>
<artifactId>config-provisioning</artifactId>
diff --git a/config-proxy/pom.xml b/config-proxy/pom.xml
index 0aadb1bbb12..a266f68efe2 100644
--- a/config-proxy/pom.xml
+++ b/config-proxy/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config-proxy</artifactId>
<packaging>jar</packaging>
diff --git a/config/pom.xml b/config/pom.xml
index f73c5b7bfd8..cfa3a692181 100755
--- a/config/pom.xml
+++ b/config/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>config</artifactId>
<packaging>container-plugin</packaging>
diff --git a/configdefinitions/pom.xml b/configdefinitions/pom.xml
index 92980a18899..487c43ed3b3 100644
--- a/configdefinitions/pom.xml
+++ b/configdefinitions/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>configdefinitions</artifactId>
<packaging>container-plugin</packaging>
diff --git a/configgen/pom.xml b/configgen/pom.xml
index 6e550ec7321..e8de114f8d5 100644
--- a/configgen/pom.xml
+++ b/configgen/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>configgen</artifactId>
<packaging>jar</packaging>
diff --git a/configserver/pom.xml b/configserver/pom.xml
index 30d92dc7650..f5aa8ea3118 100644
--- a/configserver/pom.xml
+++ b/configserver/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>configserver</artifactId>
<packaging>container-plugin</packaging>
diff --git a/container-accesslogging/pom.xml b/container-accesslogging/pom.xml
index 45d7b4a2ed2..b4c7094a50a 100644
--- a/container-accesslogging/pom.xml
+++ b/container-accesslogging/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-accesslogging</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container-core/pom.xml b/container-core/pom.xml
index c608f35f26c..1be10215419 100644
--- a/container-core/pom.xml
+++ b/container-core/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-core</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container-dependencies-enforcer/pom.xml b/container-dependencies-enforcer/pom.xml
index 61495384744..3384da7c1eb 100644
--- a/container-dependencies-enforcer/pom.xml
+++ b/container-dependencies-enforcer/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-dependencies-enforcer</artifactId>
@@ -81,36 +82,36 @@
<include>com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:[2.5.4, ${jackson2.version}]:jar:provided</include>
<include>com.fasterxml.jackson.module:jackson-module-jaxb-annotations:[2.5.4, ${jackson2.version}]:jar:provided</include>
- <include>com.google.code.findbugs:annotations:[1.3.9]:jar:provided</include>
- <include>com.google.code.findbugs:jsr305:[1.3.9]:jar:provided</include>
- <include>com.google.guava:guava:[18.0]:jar:provided</include>
- <include>com.google.inject.extensions:guice-assistedinject:[3.0]:jar:provided</include>
- <include>com.google.inject.extensions:guice-multibindings:[3.0]:jar:provided</include>
- <include>com.google.inject:guice:[3.0]:jar:provided:no_aop</include>
+ <include>com.google.code.findbugs:annotations:[${findbugs.version}]:jar:provided</include>
+ <include>com.google.code.findbugs:jsr305:[${findbugs.version}]:jar:provided</include>
+ <include>com.google.guava:guava:[${guava.version}]:jar:provided</include>
+ <include>com.google.inject.extensions:guice-assistedinject:[${guice.version}]:jar:provided</include>
+ <include>com.google.inject.extensions:guice-multibindings:[${guice.version}]:jar:provided</include>
+ <include>com.google.inject:guice:[${guice.version}]:jar:provided:no_aop</include>
<include>commons-codec:commons-codec:[1.4]:jar:provided</include>
<include>commons-daemon:commons-daemon:[1.0.3]:jar:provided</include>
<include>commons-logging:commons-logging:[1.1.1]:jar:provided</include>
- <include>javax.annotation:javax.annotation-api:[1.2]:jar:provided</include>
+ <include>javax.annotation:javax.annotation-api:[${javax.annotation-api.version}]:jar:provided</include>
<include>javax.inject:javax.inject:[1]:jar:provided</include>
<include>javax.servlet:javax.servlet-api:[3.1.0]:jar:provided</include>
- <include>javax.validation:validation-api:[1.1.0.Final]:jar:provided</include>
+ <include>javax.validation:validation-api:[${javax.validation-api.version}]:jar:provided</include>
<include>javax.ws.rs:javax.ws.rs-api:[${javax.ws.rs-api.version}]:jar:provided</include>
<include>net.jcip:jcip-annotations:[1.0]:jar:provided</include>
<include>net.jpountz.lz4:lz4:[1.3.0]:jar:provided</include>
- <include>org.apache.felix:org.apache.felix.framework:[4.2.1]:jar:provided</include>
+ <include>org.apache.felix:org.apache.felix.framework:[${felix.version}]:jar:provided</include>
<include>org.apache.felix:org.apache.felix.log:[1.0.1]:jar:provided</include>
- <include>org.apache.felix:org.apache.felix.main:[4.2.1]:jar:provided</include>
+ <include>org.apache.felix:org.apache.felix.main:[${felix.version}]:jar:provided</include>
<include>org.apache.httpcomponents:httpclient:[4.3.6]:jar:provided</include>
<include>org.apache.httpcomponents:httpcore:[4.3.3]:jar:provided</include>
<include>org.eclipse.jetty:jetty-http:[${jetty.version}]:jar:provided</include>
<include>org.eclipse.jetty:jetty-io:[${jetty.version}]:jar:provided</include>
<include>org.eclipse.jetty:jetty-util:[${jetty.version}]:jar:provided</include>
- <include>org.glassfish.hk2.external:aopalliance-repackaged:[2.5.0-b05]:jar:provided</include>
- <include>org.glassfish.hk2.external:javax.inject:[2.5.0-b05]:jar:provided</include>
- <include>org.glassfish.hk2:hk2-api:[2.5.0-b05]:jar:provided</include>
- <include>org.glassfish.hk2:hk2-locator:[2.5.0-b05]:jar:provided</include>
- <include>org.glassfish.hk2:hk2-utils:[2.5.0-b05]:jar:provided</include>
- <include>org.glassfish.hk2:osgi-resource-locator:[1.0.1]:jar:provided</include>
+ <include>org.glassfish.hk2.external:aopalliance-repackaged:[${hk2.version}]:jar:provided</include>
+ <include>org.glassfish.hk2.external:javax.inject:[${hk2.version}]:jar:provided</include>
+ <include>org.glassfish.hk2:hk2-api:[${hk2.version}]:jar:provided</include>
+ <include>org.glassfish.hk2:hk2-locator:[${hk2.version}]:jar:provided</include>
+ <include>org.glassfish.hk2:hk2-utils:[${hk2.version}]:jar:provided</include>
+ <include>org.glassfish.hk2:osgi-resource-locator:[${hk2.osgi-resource-locator.version}]:jar:provided</include>
<include>org.glassfish.jersey.bundles.repackaged:jersey-guava:[${jersey2.version}]:jar:provided</include>
<include>org.glassfish.jersey.containers:jersey-container-servlet-core:[${jersey2.version}]:jar:provided</include>
<include>org.glassfish.jersey.containers:jersey-container-servlet:[${jersey2.version}]:jar:provided</include>
@@ -122,13 +123,13 @@
<include>org.glassfish.jersey.media:jersey-media-jaxb:[${jersey2.version}]:jar:provided</include>
<include>org.glassfish.jersey.media:jersey-media-json-jackson:[${jersey2.version}]:jar:provided</include>
<include>org.glassfish.jersey.media:jersey-media-multipart:[${jersey2.version}]:jar:provided</include>
- <include>org.javassist:javassist:[3.20.0-GA]:jar:provided</include>
+ <include>org.javassist:javassist:[${javassist.version}]:jar:provided</include>
<include>org.json:json:[20090211]:jar:provided</include>
- <include>org.jvnet.mimepull:mimepull:[1.9.6]:jar:provided</include>
- <include>org.slf4j:jcl-over-slf4j:[1.7.5]:jar:provided</include>
- <include>org.slf4j:log4j-over-slf4j:[1.7.5]:jar:provided</include>
- <include>org.slf4j:slf4j-api:[1.7.5]:jar:provided</include>
- <include>org.slf4j:slf4j-jdk14:[1.7.5]:jar:provided</include>
+ <include>org.jvnet.mimepull:mimepull:[${mimepull.version}]:jar:provided</include>
+ <include>org.slf4j:jcl-over-slf4j:[${slf4j.version}]:jar:provided</include>
+ <include>org.slf4j:log4j-over-slf4j:[${slf4j.version}]:jar:provided</include>
+ <include>org.slf4j:slf4j-api:[${slf4j.version}]:jar:provided</include>
+ <include>org.slf4j:slf4j-jdk14:[${slf4j.version}]:jar:provided</include>
<include>xml-apis:xml-apis:[1.4.01]:jar:provided</include>
</includes>
</bannedDependencies>
diff --git a/container-dependency-versions/pom.xml b/container-dependency-versions/pom.xml
new file mode 100644
index 00000000000..5479cace414
--- /dev/null
+++ b/container-dependency-versions/pom.xml
@@ -0,0 +1,422 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>container-dependency-versions</artifactId>
+ <packaging>pom</packaging>
+ <version>6-SNAPSHOT</version>
+ <description>Dependency versions for all Vespa maven projects.</description>
+ <url>https://github.com/vespa-engine</url>
+
+ <licenses>
+ <license>
+ <name>The Apache License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ </license>
+ </licenses>
+
+<!-- TODO: add pluginManagement for bundle-plugin and/or compiler-plugin?
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.6.1</version>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ <optimize>true</optimize>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>bundle-plugin</artifactId>
+ <version>${project.version}</version>
+ <configuration>
+ <configGenVersion>${project.version}</configGenVersion>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+-->
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>aopalliance</groupId>
+ <artifactId>aopalliance</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-jdk8</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-jsr310</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.jaxrs</groupId>
+ <artifactId>jackson-jaxrs-base</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.jaxrs</groupId>
+ <artifactId>jackson-jaxrs-json-provider</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.module</groupId>
+ <artifactId>jackson-module-jaxb-annotations</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>annotations</artifactId>
+ <version>${findbugs.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ <version>${findbugs.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>${guava.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject.extensions</groupId>
+ <artifactId>guice-assistedinject</artifactId>
+ <version>${guice.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject.extensions</groupId>
+ <artifactId>guice-multibindings</artifactId>
+ <version>${guice.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject</groupId>
+ <artifactId>guice</artifactId>
+ <version>${guice.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject</groupId>
+ <artifactId>guice</artifactId>
+ <version>${guice.version}</version>
+ <classifier>no_aop</classifier>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-daemon</groupId>
+ <artifactId>commons-daemon</artifactId>
+ <version>1.0.3</version>
+ </dependency>
+ <dependency>
+ <!-- This version is exported by jdisc via jcl-over-slf4j. -->
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.annotation</groupId>
+ <artifactId>javax.annotation-api</artifactId>
+ <version>${javax.annotation-api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ <version>${javax.validation-api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>javax.ws.rs-api</artifactId>
+ <version>${javax.ws.rs-api.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.jcip</groupId>
+ <artifactId>jcip-annotations</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>net.jpountz.lz4</groupId>
+ <artifactId>lz4</artifactId>
+ <version>1.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.framework</artifactId>
+ <version>${felix.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.log</artifactId>
+ <version>1.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.main</artifactId>
+ <version>${felix.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>4.3.6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore</artifactId>
+ <version>4.3.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-http</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-io</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2.external</groupId>
+ <artifactId>aopalliance-repackaged</artifactId>
+ <version>${hk2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2.external</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>${hk2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2</groupId>
+ <artifactId>hk2-api</artifactId>
+ <version>${hk2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2</groupId>
+ <artifactId>hk2-locator</artifactId>
+ <version>${hk2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2</groupId>
+ <artifactId>hk2-utils</artifactId>
+ <version>${hk2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2</groupId>
+ <artifactId>osgi-resource-locator</artifactId>
+ <version>${hk2.osgi-resource-locator.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.bundles.repackaged</groupId>
+ <artifactId>jersey-guava</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.containers</groupId>
+ <artifactId>jersey-container-servlet-core</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.containers</groupId>
+ <artifactId>jersey-container-servlet</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.core</groupId>
+ <artifactId>jersey-client</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.core</groupId>
+ <artifactId>jersey-common</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.core</groupId>
+ <artifactId>jersey-server</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.ext</groupId>
+ <artifactId>jersey-entity-filtering</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.ext</groupId>
+ <artifactId>jersey-proxy-client</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.media</groupId>
+ <artifactId>jersey-media-jaxb</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.media</groupId>
+ <artifactId>jersey-media-json-jackson</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.media</groupId>
+ <artifactId>jersey-media-multipart</artifactId>
+ <version>${jersey2.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>${javassist.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ <version>20090211</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jvnet.mimepull</groupId>
+ <artifactId>mimepull</artifactId>
+ <version>${mimepull.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>log4j-over-slf4j</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jdk14</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>xml-apis</groupId>
+ <artifactId>xml-apis</artifactId>
+ <version>1.4.01</version>
+ </dependency>
+
+ <!-- NOTE: The dependencies below are not provided from the jdisc container runtime, but had to be moved
+ here from 'parent' because factorylib reads the text in parent/pom.xml and this pom file to
+ build a pom model used to bootstrap the maven cache on factory. Hence all deps using properties
+ declared in this pom also have to reside in this pom.
+ See factorylib:com.yahoo.vespa.dependencies.pom.list.Main.-->
+ <!-- TODO: move these back to parent/pom.xml when the above does not hold anymore. -->
+
+ <dependency>
+ <!-- NOT provided from jdisc runtime -->
+ <groupId>com.fasterxml.jackson.jaxrs</groupId>
+ <artifactId>jackson-jaxrs-xml-provider</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <!-- NOT provided from jdisc runtime -->
+ <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <artifactId>jackson-dataformat-xml</artifactId>
+ <version>${jackson2.version}</version>
+ </dependency>
+ <dependency>
+ <!-- NOT provided from jdisc runtime -->
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-continuation</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <!-- NOT provided from jdisc runtime -->
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <!-- NOT provided from jdisc runtime -->
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <!-- NOT provided from jdisc runtime -->
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlets</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <!-- NOT provided from jdisc runtime -->
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-jmx</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+
+ <!-- Please don't add deps here, but instead above the NOTE. -->
+
+ </dependencies>
+ </dependencyManagement>
+
+ <properties>
+ <felix.version>4.2.1</felix.version>
+ <findbugs.version>1.3.9</findbugs.version>
+ <guava.version>18.0</guava.version>
+ <guice.version>3.0</guice.version>
+ <jetty.version>9.4.6.v20170531</jetty.version>
+ <slf4j.version>1.7.5</slf4j.version>
+
+ <!-- These must be kept in sync with version used by current jersey2.version. -->
+ <!-- MUST be updated each time jersey2 is upgraded! -->
+ <!-- Check versions by doing: ' ls -l vespa/vespa_jersey2/target/dependency' -->
+ <hk2.version>2.5.0-b05</hk2.version>
+ <hk2.osgi-resource-locator.version>1.0.1</hk2.osgi-resource-locator.version>
+ <jackson2.version>2.8.3</jackson2.version>
+ <javassist.version>3.20.0-GA</javassist.version>
+ <javax.annotation-api.version>1.2</javax.annotation-api.version>
+ <javax.validation-api.version>1.1.0.Final</javax.validation-api.version>
+ <javax.ws.rs-api.version>2.0.1</javax.ws.rs-api.version>
+ <jersey2.version>2.23.2</jersey2.version>
+ <mimepull.version>1.9.6</mimepull.version>
+ </properties>
+
+</project>
diff --git a/container-dev/pom.xml b/container-dev/pom.xml
index d02ec233d96..f62bbd22690 100644
--- a/container-dev/pom.xml
+++ b/container-dev/pom.xml
@@ -10,6 +10,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-dev</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container-di/pom.xml b/container-di/pom.xml
index cf6a9e54daa..abc652d6e6e 100644
--- a/container-di/pom.xml
+++ b/container-di/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-di</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container-disc/pom.xml b/container-disc/pom.xml
index ad86b3ffcff..38b4bfc2ff5 100644
--- a/container-disc/pom.xml
+++ b/container-disc/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-disc</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container-jersey2/pom.xml b/container-jersey2/pom.xml
index 8f579e49876..26dfa762032 100644
--- a/container-jersey2/pom.xml
+++ b/container-jersey2/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-jersey2</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container-messagebus/pom.xml b/container-messagebus/pom.xml
index 6058063daf3..1daf1df6fcb 100644
--- a/container-messagebus/pom.xml
+++ b/container-messagebus/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-messagebus</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container-search-and-docproc/pom.xml b/container-search-and-docproc/pom.xml
index fb2794670a2..9b4419ae2b6 100644
--- a/container-search-and-docproc/pom.xml
+++ b/container-search-and-docproc/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-search-and-docproc</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container-search/pom.xml b/container-search/pom.xml
index f622567acde..0df502cf21a 100644
--- a/container-search/pom.xml
+++ b/container-search/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-search</artifactId>
<packaging>jar</packaging>
diff --git a/container-test-jars/pom.xml b/container-test-jars/pom.xml
index dcde18fc8cf..804ca5eb879 100644
--- a/container-test-jars/pom.xml
+++ b/container-test-jars/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>com.yahoo.vespa.container-test-jars</groupId>
<artifactId>container-test-jars</artifactId>
diff --git a/container-test/pom.xml b/container-test/pom.xml
index 7aaffed652e..26f02767062 100644
--- a/container-test/pom.xml
+++ b/container-test/pom.xml
@@ -11,6 +11,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container-test</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/container/pom.xml b/container/pom.xml
index 4726071db55..3793a3508a4 100644
--- a/container/pom.xml
+++ b/container/pom.xml
@@ -11,6 +11,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>container</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/controller-api/pom.xml b/controller-api/pom.xml
index 51666da0c03..5ef130a22ba 100644
--- a/controller-api/pom.xml
+++ b/controller-api/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>controller-api</artifactId>
<packaging>container-plugin</packaging>
diff --git a/controller-server/pom.xml b/controller-server/pom.xml
index 0cfcbc40601..b033286b82a 100644
--- a/controller-server/pom.xml
+++ b/controller-server/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>controller-server</artifactId>
<packaging>container-plugin</packaging>
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index c7755a87510..34f3ea8f060 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -508,7 +508,7 @@ public class ApplicationController {
return Optional.of(new InstanceEndpoints(endPointUrls));
}
catch (RuntimeException e) {
- log.log(Level.FINE, "Failed to get endpoint information for " + deploymentId, e);
+ log.log(Level.WARNING, "Failed to get endpoint information for " + deploymentId, e);
return Optional.empty();
}
}
diff --git a/defaults/pom.xml b/defaults/pom.xml
index 2f3f06780e7..4d1a08aacc2 100644
--- a/defaults/pom.xml
+++ b/defaults/pom.xml
@@ -5,9 +5,10 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>com.yahoo.vespa</groupId>
- <artifactId>parent</artifactId>
- <version>6-SNAPSHOT</version>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>parent</artifactId>
+ <version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>com.yahoo.vespa</groupId>
<artifactId>defaults</artifactId>
diff --git a/docker-api/pom.xml b/docker-api/pom.xml
index fc374a12dd2..449a94fb621 100644
--- a/docker-api/pom.xml
+++ b/docker-api/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>docker-api</artifactId>
diff --git a/docproc/pom.xml b/docproc/pom.xml
index 09635201e51..1043de32128 100644
--- a/docproc/pom.xml
+++ b/docproc/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>docproc</artifactId>
<packaging>jar</packaging>
diff --git a/docprocs/pom.xml b/docprocs/pom.xml
index 1b209ec39ee..16259a861c7 100644
--- a/docprocs/pom.xml
+++ b/docprocs/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>docprocs</artifactId>
<packaging>container-plugin</packaging>
diff --git a/document/pom.xml b/document/pom.xml
index 81b21487314..10f71218422 100644
--- a/document/pom.xml
+++ b/document/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>document</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/documentapi/pom.xml b/documentapi/pom.xml
index c94337e8873..3781dfd93ac 100644
--- a/documentapi/pom.xml
+++ b/documentapi/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>documentapi</artifactId>
<packaging>container-plugin</packaging>
diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp
index 96408e9a204..62747309c13 100644
--- a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp
@@ -13,6 +13,8 @@ GetBucketListMessage::GetBucketListMessage(const document::BucketId &bucketId) :
{
}
+GetBucketListMessage::~GetBucketListMessage() = default;
+
DocumentReply::UP
GetBucketListMessage::doCreateReply() const
{
diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.h b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.h
index 8b49afd6672..e89020bcf37 100644
--- a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.h
+++ b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.h
@@ -24,6 +24,8 @@ public:
*/
GetBucketListMessage(const document::BucketId &bucketId);
+ ~GetBucketListMessage();
+
/**
* Returns the bucket whose list to retrieve.
*
diff --git a/documentgen-test/pom.xml b/documentgen-test/pom.xml
index 53b49cf1473..d009ef3d592 100644
--- a/documentgen-test/pom.xml
+++ b/documentgen-test/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>documentgen-test</artifactId>
<packaging>jar</packaging>
diff --git a/eval/CMakeLists.txt b/eval/CMakeLists.txt
index 89e8a72e330..d107ebfed40 100644
--- a/eval/CMakeLists.txt
+++ b/eval/CMakeLists.txt
@@ -24,6 +24,7 @@ vespa_define_module(
src/tests/eval/value_cache
src/tests/eval/value_type
src/tests/tensor/dense_dot_product_function
+ src/tests/tensor/dense_xw_product_function
src/tests/tensor/dense_tensor_address_combiner
src/tests/tensor/dense_tensor_builder
src/tests/tensor/dense_tensor_function_compiler
diff --git a/eval/src/apps/tensor_conformance/generate.cpp b/eval/src/apps/tensor_conformance/generate.cpp
index 0aba5276ace..f70c472cbcd 100644
--- a/eval/src/apps/tensor_conformance/generate.cpp
+++ b/eval/src/apps/tensor_conformance/generate.cpp
@@ -169,6 +169,16 @@ void generate_dot_product(TestBuilder &dst) {
//-----------------------------------------------------------------------------
+void generate_xw_product(TestBuilder &dst) {
+ auto matrix = spec({x(2),y(3)}, Seq({ 3, 5, 7, 11, 13, 17 }));
+ dst.add("reduce(a*b,sum,x)", {{"a", spec(x(2), Seq({ 1, 2 }))}, {"b", matrix}},
+ spec(y(3), Seq({(1*3+2*11),(1*5+2*13),(1*7+2*17)})));
+ dst.add("reduce(a*b,sum,y)", {{"a", spec(y(3), Seq({ 1, 2, 3 }))}, {"b", matrix}},
+ spec(x(2), Seq({(1*3+2*5+3*7),(1*11+2*13+3*17)})));
+}
+
+//-----------------------------------------------------------------------------
+
void generate_tensor_concat(TestBuilder &dst) {
dst.add("concat(a,b,x)", {{"a", spec(10.0)}, {"b", spec(20.0)}}, spec(x(2), Seq({10.0, 20.0})));
dst.add("concat(a,b,x)", {{"a", spec(x(1), Seq({10.0}))}, {"b", spec(20.0)}}, spec(x(2), Seq({10.0, 20.0})));
@@ -218,6 +228,7 @@ Generator::generate(TestBuilder &dst)
generate_tensor_map(dst);
generate_tensor_join(dst);
generate_dot_product(dst);
+ generate_xw_product(dst);
generate_tensor_concat(dst);
generate_tensor_rename(dst);
generate_tensor_lambda(dst);
diff --git a/eval/src/apps/tensor_conformance/test_spec.json b/eval/src/apps/tensor_conformance/test_spec.json
index 24edc9a7ac7..513d5e8e902 100644
--- a/eval/src/apps/tensor_conformance/test_spec.json
+++ b/eval/src/apps/tensor_conformance/test_spec.json
@@ -1225,6 +1225,8 @@
{"expression":"reduce(a*b,sum)","inputs":{"a":"0x0201017803400000000000000040080000000000004014000000000000","b":"0x0201017803401C0000000000004026000000000000402A000000000000"},"result":{"expect":"0x0200405C000000000000"}}
{"expression":"reduce(a*b,sum)","inputs":{"a":"0x020101780240000000000000004008000000000000","b":"0x0201017803401C0000000000004026000000000000402A000000000000"},"result":{"expect":"0x02004047800000000000"}}
{"expression":"reduce(a*b,sum)","inputs":{"a":"0x0201017803400000000000000040080000000000004014000000000000","b":"0x0201017802401C0000000000004026000000000000"},"result":{"expect":"0x02004047800000000000"}}
+{"expression":"reduce(a*b,sum,x)","inputs":{"a":"0x02010178023FF00000000000004000000000000000","b":"0x020201780201790340080000000000004014000000000000401C0000000000004026000000000000402A0000000000004031000000000000"},"result":{"expect":"0x02010179034039000000000000403F0000000000004044800000000000"}}
+{"expression":"reduce(a*b,sum,y)","inputs":{"a":"0x02010179033FF000000000000040000000000000004008000000000000","b":"0x020201780201790340080000000000004014000000000000401C0000000000004026000000000000402A0000000000004031000000000000"},"result":{"expect":"0x020101780240410000000000004056000000000000"}}
{"expression":"concat(a,b,x)","inputs":{"a":"0x02004024000000000000","b":"0x02004034000000000000"},"result":{"expect":"0x020101780240240000000000004034000000000000"}}
{"expression":"concat(a,b,x)","inputs":{"a":"0x02010178014024000000000000","b":"0x02004034000000000000"},"result":{"expect":"0x020101780240240000000000004034000000000000"}}
{"expression":"concat(a,b,x)","inputs":{"a":"0x02004024000000000000","b":"0x02010178014034000000000000"},"result":{"expect":"0x020101780240240000000000004034000000000000"}}
@@ -1242,4 +1244,4 @@
{"expression":"tensor(x[10])(x+1)","inputs":{},"result":{"expect":"0x020101780A3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402000000000000040220000000000004024000000000000"}}
{"expression":"tensor(x[5],y[4])(x*4+(y+1))","inputs":{},"result":{"expect":"0x02020178050179043FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E00000000000040300000000000004031000000000000403200000000000040330000000000004034000000000000"}}
{"expression":"tensor(x[5],y[4])(x==y)","inputs":{},"result":{"expect":"0x02020178050179043FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000"}}
-{"num_tests":1244}
+{"num_tests":1246}
diff --git a/eval/src/tests/tensor/dense_tensor_function_compiler/dense_tensor_function_compiler_test.cpp b/eval/src/tests/tensor/dense_tensor_function_compiler/dense_tensor_function_compiler_test.cpp
index 63829650cc5..7df436d85a1 100644
--- a/eval/src/tests/tensor/dense_tensor_function_compiler/dense_tensor_function_compiler_test.cpp
+++ b/eval/src/tests/tensor/dense_tensor_function_compiler/dense_tensor_function_compiler_test.cpp
@@ -2,6 +2,7 @@
#include <vespa/vespalib/testkit/test_kit.h>
#include <vespa/eval/tensor/dense/dense_dot_product_function.h>
+#include <vespa/eval/tensor/dense/dense_xw_product_function.h>
#include <vespa/eval/tensor/dense/dense_tensor_function_compiler.h>
#include <vespa/eval/eval/operation.h>
@@ -11,8 +12,7 @@ using namespace vespalib::eval::tensor_function;
using namespace vespalib::tensor;
using vespalib::Stash;
-template <typename T>
-const T *as(const TensorFunction &function) { return dynamic_cast<const T *>(&function); }
+//-----------------------------------------------------------------------------
const TensorFunction &
compileDotProduct(const vespalib::string &lhsType,
@@ -48,6 +48,65 @@ assertNotCompiledDotProduct(const vespalib::string &lhsType,
EXPECT_TRUE(reduce);
}
+//-----------------------------------------------------------------------------
+
+const TensorFunction &
+compileXWProduct(const vespalib::string &lhsType,
+ const vespalib::string &rhsType,
+ const vespalib::string &dim,
+ Stash &stash)
+{
+ const Node &reduceNode = reduce(join(inject(ValueType::from_spec(lhsType), 1, stash),
+ inject(ValueType::from_spec(rhsType), 3, stash),
+ Mul::f, stash),
+ Aggr::SUM, {dim}, stash);
+ return DenseTensorFunctionCompiler::compile(reduceNode, stash);
+}
+
+void
+assertCompiledXWProduct(const vespalib::string &vecTypeStr,
+ const vespalib::string &matTypeStr,
+ const vespalib::string &dim)
+{
+ Stash stash;
+ const TensorFunction &func = compileXWProduct(vecTypeStr, matTypeStr, dim, stash);
+ const TensorFunction &inv_func = compileXWProduct(matTypeStr, vecTypeStr, dim, stash);
+ const DenseXWProductFunction *xwProduct = as<DenseXWProductFunction>(func);
+ const DenseXWProductFunction *inv_xwProduct = as<DenseXWProductFunction>(inv_func);
+ ValueType vecType = ValueType::from_spec(vecTypeStr);
+ ValueType matType = ValueType::from_spec(matTypeStr);
+ size_t common_idx = matType.dimension_index(vecType.dimensions()[0].name);
+ ASSERT_TRUE(xwProduct);
+ ASSERT_TRUE(inv_xwProduct);
+ ASSERT_TRUE(common_idx != ValueType::Dimension::npos);
+ EXPECT_EQUAL(xwProduct->vectorId(), 1u);
+ EXPECT_EQUAL(inv_xwProduct->vectorId(), 3u);
+ EXPECT_EQUAL(xwProduct->matrixId(), 3u);
+ EXPECT_EQUAL(inv_xwProduct->matrixId(), 1u);
+ EXPECT_EQUAL(xwProduct->vectorSize(), vecType.dimensions()[0].size);
+ EXPECT_EQUAL(inv_xwProduct->vectorSize(), vecType.dimensions()[0].size);
+ EXPECT_EQUAL(xwProduct->resultSize(), matType.dimensions()[1 - common_idx].size);
+ EXPECT_EQUAL(inv_xwProduct->resultSize(), matType.dimensions()[1 - common_idx].size);
+ EXPECT_EQUAL(xwProduct->matrixHasCommonDimensionInnermost(), (common_idx == 1));
+ EXPECT_EQUAL(inv_xwProduct->matrixHasCommonDimensionInnermost(), (common_idx == 1));
+}
+
+void
+assertNotCompiledXWProduct(const vespalib::string &vecType,
+ const vespalib::string &matType,
+ const vespalib::string &dim)
+{
+ Stash stash;
+ const TensorFunction &func = compileXWProduct(vecType, matType, dim, stash);
+ const TensorFunction &inv_func = compileXWProduct(matType, vecType, dim, stash);
+ const Reduce *reduce = as<Reduce>(func);
+ const Reduce *inv_reduce = as<Reduce>(inv_func);
+ EXPECT_TRUE(reduce);
+ EXPECT_TRUE(inv_reduce);
+}
+
+//-----------------------------------------------------------------------------
+
TEST("require that dot product with compatible dimensions is compiled")
{
TEST_DO(assertCompiledDotProduct("tensor(x[5])", "tensor(x[5])"));
@@ -67,4 +126,28 @@ TEST("require that dot product with incompatible dimensions is NOT compiled")
TEST_DO(assertNotCompiledDotProduct("tensor(x[5],y[7])", "tensor(x[5],y[7])"));
}
+//-----------------------------------------------------------------------------
+
+TEST("require that xw products with compatible dimensions are compiled") {
+ TEST_DO(assertCompiledXWProduct("tensor(x[3])", "tensor(x[3],y[4])", "x"));
+ TEST_DO(assertCompiledXWProduct("tensor(y[4])", "tensor(x[3],y[4])", "y"));
+}
+
+TEST("require that xw products with incompatible dimensions are not compiled") {
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[3])", "tensor(x[3],y[4])", "y"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[])", "tensor(x[3],y[4])", "x"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[3])", "tensor(x[],y[4])", "x"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[3])", "tensor(x[3],y[])", "x"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[2])", "tensor(x[3],y[4])", "x"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[4])", "tensor(x[3],y[4])", "x"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[3])", "tensor(y[3],z[4])", "x"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[3])", "tensor(y[3],z[4])", "y"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(x[3])", "tensor(y[3],z[4])", "z"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(y[4])", "tensor(x[3],y[4])", "x"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(y[3])", "tensor(x[3],y[4])", "y"));
+ TEST_DO(assertNotCompiledXWProduct("tensor(y[5])", "tensor(x[3],y[4])", "y"));
+}
+
+//-----------------------------------------------------------------------------
+
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/eval/src/tests/tensor/dense_xw_product_function/CMakeLists.txt b/eval/src/tests/tensor/dense_xw_product_function/CMakeLists.txt
new file mode 100644
index 00000000000..648c10e64bd
--- /dev/null
+++ b/eval/src/tests/tensor/dense_xw_product_function/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(eval_dense_xw_product_function_test_app TEST
+ SOURCES
+ dense_xw_product_function_test.cpp
+ DEPENDS
+ vespaeval
+)
+vespa_add_test(NAME eval_dense_xw_product_function_test_app COMMAND eval_dense_xw_product_function_test_app)
diff --git a/eval/src/tests/tensor/dense_xw_product_function/dense_xw_product_function_test.cpp b/eval/src/tests/tensor/dense_xw_product_function/dense_xw_product_function_test.cpp
new file mode 100644
index 00000000000..5c62d319dc3
--- /dev/null
+++ b/eval/src/tests/tensor/dense_xw_product_function/dense_xw_product_function_test.cpp
@@ -0,0 +1,102 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include <vespa/log/log.h>
+LOG_SETUP("dense_dot_product_function_test");
+
+#include <vespa/vespalib/testkit/test_kit.h>
+#include <vespa/eval/eval/tensor_function.h>
+#include <vespa/eval/eval/operation.h>
+#include <vespa/eval/eval/simple_tensor.h>
+#include <vespa/eval/eval/simple_tensor_engine.h>
+#include <vespa/eval/tensor/default_tensor_engine.h>
+#include <vespa/eval/tensor/dense/dense_xw_product_function.h>
+#include <vespa/eval/tensor/dense/dense_tensor.h>
+#include <vespa/eval/tensor/dense/dense_tensor_builder.h>
+#include <vespa/eval/tensor/dense/dense_tensor_view.h>
+
+#include <vespa/vespalib/util/stringfmt.h>
+#include <vespa/vespalib/util/stash.h>
+
+using namespace vespalib;
+using namespace vespalib::eval;
+using namespace vespalib::tensor;
+
+const TensorEngine &ref_engine = SimpleTensorEngine::ref();
+const TensorEngine &prod_engine = DefaultTensorEngine::ref();
+
+void verify_equal(const Value &expect, const Value &value) {
+ const eval::Tensor *tensor = value.as_tensor();
+ ASSERT_TRUE(tensor != nullptr);
+ const eval::Tensor *expect_tensor = expect.as_tensor();
+ ASSERT_TRUE(expect_tensor != nullptr);
+ auto expect_spec = expect_tensor->engine().to_spec(expect);
+ auto value_spec = tensor->engine().to_spec(value);
+ EXPECT_EQUAL(expect_spec, value_spec);
+}
+
+std::vector<eval::Value::CREF> wrap(std::vector<eval::Value::CREF> params) {
+ return std::move(params);
+}
+
+void verify_result(const TensorSpec &v, const TensorSpec &m, bool happy) {
+ Stash stash;
+ Value::UP ref_vec = ref_engine.from_spec(v);
+ Value::UP ref_mat = ref_engine.from_spec(m);
+ const Value &joined = ref_engine.join(*ref_vec, *ref_mat, operation::Mul::f, stash);
+ const Value &expect = ref_engine.reduce(joined, Aggr::SUM, {"x"}, stash);
+
+ Value::UP prod_vec = prod_engine.from_spec(v);
+ Value::UP prod_mat = prod_engine.from_spec(m);
+
+ DenseXWProductFunction fun1(expect.type(), 0, 1,
+ prod_vec->type().dimensions()[0].size,
+ expect.type().dimensions()[0].size,
+ happy);
+ const Value &actual1 = fun1.eval(wrap({*prod_vec, *prod_mat}), stash);
+ TEST_DO(verify_equal(expect, actual1));
+
+ DenseXWProductFunction fun2(expect.type(), 1, 0,
+ prod_vec->type().dimensions()[0].size,
+ expect.type().dimensions()[0].size,
+ happy);
+ const Value &actual2 = fun2.eval(wrap({*prod_mat, *prod_vec}), stash);
+ TEST_DO(verify_equal(expect, actual2));
+}
+
+TensorSpec make_vector(const vespalib::string &name, size_t sz) {
+ TensorSpec ret(make_string("tensor(%s[%zu])", name.c_str(), sz));
+ for (size_t i = 0; i < sz; ++i) {
+ ret.add({{name, i}}, (1.0 + i) * 16.0);
+ }
+ return ret;
+}
+
+TensorSpec make_matrix(const vespalib::string &d1name, size_t d1sz,
+ const vespalib::string &d2name, size_t d2sz)
+{
+ TensorSpec ret(make_string("tensor(%s[%zu],%s[%zu])",
+ d1name.c_str(), d1sz,
+ d2name.c_str(), d2sz));
+ for (size_t i = 0; i < d1sz; ++i) {
+ for (size_t j = 0; j < d2sz; ++j) {
+ ret.add({{d1name,i},{d2name,j}}, 1.0 + i*7.0 + j*43.0);
+ }
+ }
+ return ret;
+}
+
+TEST("require that xw product gives same results as reference join/reduce") {
+ verify_result(make_vector("x", 1), make_matrix("o", 1, "x", 1), true);
+ verify_result(make_vector("x", 1), make_matrix("x", 1, "y", 1), false);
+
+ verify_result(make_vector("x", 3), make_matrix("o", 2, "x", 3), true);
+ verify_result(make_vector("x", 3), make_matrix("x", 3, "y", 2), false);
+
+ verify_result(make_vector("x", 5), make_matrix("o", 8, "x", 5), true);
+ verify_result(make_vector("x", 5), make_matrix("x", 5, "y", 8), false);
+
+ verify_result(make_vector("x", 16), make_matrix("o", 5, "x", 16), true);
+ verify_result(make_vector("x", 16), make_matrix("x", 16, "y", 5), false);
+}
+
+TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/eval/src/vespa/eval/eval/tensor_function.h b/eval/src/vespa/eval/eval/tensor_function.h
index 359cabc18a0..e23dc8c6fc0 100644
--- a/eval/src/vespa/eval/eval/tensor_function.h
+++ b/eval/src/vespa/eval/eval/tensor_function.h
@@ -45,9 +45,13 @@ struct TensorFunction
virtual ~TensorFunction() {}
};
-//-----------------------------------------------------------------------------
+/**
+ * Simple typecasting utility.
+ */
+template <typename T>
+const T *as(const TensorFunction &node) { return dynamic_cast<const T *>(&node); }
-struct TensorFunctionVisitor;
+//-----------------------------------------------------------------------------
namespace tensor_function {
@@ -77,12 +81,6 @@ struct Node : public TensorFunction
Node &operator=(Node &&) = delete;
};
-/**
- * Simple typecasting utility.
- */
-template <typename T>
-const T *as(const Node &node) { return dynamic_cast<const T *>(&node); }
-
struct Inject : Node {
const size_t tensor_id;
Inject(const ValueType &result_type_in,
diff --git a/eval/src/vespa/eval/tensor/default_tensor_engine.cpp b/eval/src/vespa/eval/tensor/default_tensor_engine.cpp
index 1f413925319..773d2364b7d 100644
--- a/eval/src/vespa/eval/tensor/default_tensor_engine.cpp
+++ b/eval/src/vespa/eval/tensor/default_tensor_engine.cpp
@@ -321,8 +321,8 @@ size_t vector_size(const ValueType &type, const vespalib::string &dimension) {
}
void append_vector(double *&pos, const Value &value) {
- const DenseTensorView *view = dynamic_cast<const DenseTensorView *>(&value);
- if (view) {
+ if (auto tensor = value.as_tensor()) {
+ const DenseTensorView *view = static_cast<const DenseTensorView *>(tensor);
for (double cell: view->cellsRef()) {
*pos++ = cell;
}
diff --git a/eval/src/vespa/eval/tensor/dense/CMakeLists.txt b/eval/src/vespa/eval/tensor/dense/CMakeLists.txt
index ec715bce3d9..54698371f4e 100644
--- a/eval/src/vespa/eval/tensor/dense/CMakeLists.txt
+++ b/eval/src/vespa/eval/tensor/dense/CMakeLists.txt
@@ -3,6 +3,7 @@ vespa_add_library(eval_tensor_dense OBJECT
SOURCES
direct_dense_tensor_builder.cpp
dense_dot_product_function.cpp
+ dense_xw_product_function.cpp
dense_tensor.cpp
dense_tensor_address_combiner.cpp
dense_tensor_builder.cpp
diff --git a/eval/src/vespa/eval/tensor/dense/dense_dot_product_function.cpp b/eval/src/vespa/eval/tensor/dense/dense_dot_product_function.cpp
index 705496714fa..992f2eae750 100644
--- a/eval/src/vespa/eval/tensor/dense/dense_dot_product_function.cpp
+++ b/eval/src/vespa/eval/tensor/dense/dense_dot_product_function.cpp
@@ -23,9 +23,8 @@ namespace {
CellsRef
getCellsRef(const eval::Value &value)
{
- const Tensor *tensor = static_cast<const Tensor *>(value.as_tensor());
- const DenseTensorView *denseTensor = static_cast<const DenseTensorView *>(tensor);
- return denseTensor->cellsRef();
+ const DenseTensorView &denseTensor = static_cast<const DenseTensorView &>(value);
+ return denseTensor.cellsRef();
}
}
diff --git a/eval/src/vespa/eval/tensor/dense/dense_tensor_function_compiler.cpp b/eval/src/vespa/eval/tensor/dense/dense_tensor_function_compiler.cpp
index e9ee7d30692..1268a46b8e5 100644
--- a/eval/src/vespa/eval/tensor/dense/dense_tensor_function_compiler.cpp
+++ b/eval/src/vespa/eval/tensor/dense/dense_tensor_function_compiler.cpp
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "dense_dot_product_function.h"
+#include "dense_xw_product_function.h"
#include "dense_tensor_function_compiler.h"
#include <vespa/eval/eval/operation.h>
#include <vespa/vespalib/test/insertion_operators.h>
@@ -15,39 +16,64 @@ namespace tensor {
namespace {
-bool
-willReduceAllDimensions(const std::vector<vespalib::string> &dimensions)
-{
- return (dimensions.empty() || (dimensions.size() == 1));
+bool is1dDenseTensor(const ValueType &type) {
+ return (type.is_dense() && (type.dimensions().size() == 1));
}
-bool
-is1dDenseTensor(const ValueType &type)
-{
- return (type.is_dense() && (type.dimensions().size() == 1));
+bool isConcreteDenseTensor(const ValueType &type, size_t d) {
+ return (type.is_dense() && (type.dimensions().size() == d) && !type.is_abstract());
}
-bool
-isCompatibleTensorsForDotProduct(const ValueType &lhsType, const ValueType &rhsType)
-{
- return (is1dDenseTensor(lhsType) &&
+bool isDenseDotProduct(const ValueType &res, const ValueType &lhsType, const ValueType &rhsType) {
+ return (res.is_double() &&
+ is1dDenseTensor(lhsType) &&
is1dDenseTensor(rhsType) &&
(lhsType.dimensions()[0].name == rhsType.dimensions()[0].name));
}
-struct DotProductFunctionCompiler
+bool isDenseXWProduct(const ValueType &res, const ValueType &vec, const ValueType &mat) {
+ if (isConcreteDenseTensor(res, 1) &&
+ isConcreteDenseTensor(vec, 1) &&
+ isConcreteDenseTensor(mat, 2))
+ {
+ size_t res_idx = mat.dimension_index(res.dimensions()[0].name);
+ size_t vec_idx = mat.dimension_index(vec.dimensions()[0].name);
+ size_t npos = ValueType::Dimension::npos;
+ if ((res_idx != npos) && (vec_idx != npos) && (res_idx != vec_idx)) {
+ return ((mat.dimensions()[res_idx].size == res.dimensions()[0].size) &&
+ (mat.dimensions()[vec_idx].size == vec.dimensions()[0].size));
+ }
+ }
+ return false;
+}
+
+const TensorFunction &createDenseXWProduct(const ValueType &res, const Inject &vec, const Inject &mat, Stash &stash) {
+ bool common_is_inner = (mat.result_type.dimension_index(vec.result_type.dimensions()[0].name) == 1);
+ return stash.create<DenseXWProductFunction>(res, vec.tensor_id, mat.tensor_id,
+ vec.result_type.dimensions()[0].size,
+ res.dimensions()[0].size,
+ common_is_inner);
+}
+
+struct InnerProductFunctionCompiler
{
static const TensorFunction &compile(const Node &expr, Stash &stash) {
const Reduce *reduce = as<Reduce>(expr);
- if (reduce && (reduce->aggr == Aggr::SUM) && willReduceAllDimensions(reduce->dimensions)) {
+ if (reduce && (reduce->aggr == Aggr::SUM)) {
const Join *join = as<Join>(reduce->tensor);
if (join && (join->function == Mul::f)) {
- const Inject *lhsTensor = as<Inject>(join->lhs_tensor);
- const Inject *rhsTensor = as<Inject>(join->rhs_tensor);
- if (lhsTensor && rhsTensor &&
- isCompatibleTensorsForDotProduct(lhsTensor->result_type, rhsTensor->result_type))
- {
- return stash.create<DenseDotProductFunction>(lhsTensor->tensor_id, rhsTensor->tensor_id);
+ const Inject *lhs = as<Inject>(join->lhs_tensor);
+ const Inject *rhs = as<Inject>(join->rhs_tensor);
+ if (lhs && rhs) {
+ if (isDenseDotProduct(expr.result_type, lhs->result_type, rhs->result_type)) {
+ return stash.create<DenseDotProductFunction>(lhs->tensor_id, rhs->tensor_id);
+ }
+ if (isDenseXWProduct(expr.result_type, lhs->result_type, rhs->result_type)) {
+ return createDenseXWProduct(expr.result_type, *lhs, *rhs, stash);
+ }
+ if (isDenseXWProduct(expr.result_type, rhs->result_type, lhs->result_type)) {
+ return createDenseXWProduct(expr.result_type, *rhs, *lhs, stash);
+ }
}
}
}
@@ -60,7 +86,7 @@ struct DotProductFunctionCompiler
const TensorFunction &
DenseTensorFunctionCompiler::compile(const eval::tensor_function::Node &expr, Stash &stash)
{
- return DotProductFunctionCompiler::compile(expr, stash);
+ return InnerProductFunctionCompiler::compile(expr, stash);
}
} // namespace tensor
diff --git a/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp b/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp
new file mode 100644
index 00000000000..45de00dc7fe
--- /dev/null
+++ b/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.cpp
@@ -0,0 +1,91 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "dense_xw_product_function.h"
+#include "dense_tensor.h"
+#include "dense_tensor_view.h"
+#include <vespa/eval/eval/value.h>
+#include <vespa/eval/tensor/tensor.h>
+#include <vespa/vespalib/util/exceptions.h>
+#include <assert.h>
+
+namespace vespalib {
+namespace tensor {
+
+DenseXWProductFunction::DenseXWProductFunction(const eval::ValueType &resultType,
+ size_t vectorId,
+ size_t matrixId,
+ size_t vectorSize,
+ size_t resultSize,
+ bool matrixHasCommonDimensionInnermost)
+ : _resultType(resultType),
+ _vectorId(vectorId),
+ _matrixId(matrixId),
+ _vectorSize(vectorSize),
+ _resultSize(resultSize),
+ _commonDimensionInnermost(matrixHasCommonDimensionInnermost),
+ _hwAccelerator(hwaccelrated::IAccelrated::getAccelrator())
+{}
+
+void
+DenseXWProductFunction::multiDotProduct(const XWInput &vectorCells,
+ const XWInput &matrixCells,
+ XWOutput &result) const
+{
+ double *out = result.begin();
+ const double *matrixP = matrixCells.cbegin();
+ const double * const vectorP = vectorCells.cbegin();
+ for (size_t row = 0; row < _resultSize; ++row) {
+ double cell = _hwAccelerator->dotProduct(vectorP, matrixP, _vectorSize);
+ *out++ = cell;
+ matrixP += _vectorSize;
+ }
+ assert(out == result.end());
+ assert(matrixP == matrixCells.cend());
+}
+
+void
+DenseXWProductFunction::transposedProduct(const XWInput &vectorCells,
+ const XWInput &matrixCells,
+ XWOutput &result) const
+{
+ double *out = result.begin();
+ const double * const matrixP = matrixCells.cbegin();
+ const double * const vectorP = vectorCells.cbegin();
+ for (size_t row = 0; row < _resultSize; ++row) {
+ double cell = 0;
+ for (size_t col = 0; col < _vectorSize; ++col) {
+ cell += matrixP[col*_resultSize + row] * vectorP[col];
+ }
+ *out++ = cell;
+ }
+ assert(out == result.end());
+}
+
+namespace {
+
+DenseTensorView::CellsRef
+getCellsRef(const eval::Value &value)
+{
+ const DenseTensorView &denseTensor = static_cast<const DenseTensorView &>(value);
+ return denseTensor.cellsRef();
+}
+
+} // namespace <unnamed>
+
+const eval::Value &
+DenseXWProductFunction::eval(ConstArrayRef<eval::Value::CREF> params, Stash &stash) const
+{
+ DenseTensorView::CellsRef vectorCells = getCellsRef(params[_vectorId]);
+ DenseTensorView::CellsRef matrixCells = getCellsRef(params[_matrixId]);
+
+ ArrayRef<double> outputCells = stash.create_array<double>(_resultSize);
+ if (_commonDimensionInnermost) {
+ multiDotProduct(vectorCells, matrixCells, outputCells);
+ } else {
+ transposedProduct(vectorCells, matrixCells, outputCells);
+ }
+ return stash.create<DenseTensorView>(_resultType, outputCells);
+}
+
+} // namespace tensor
+} // namespace vespalib
diff --git a/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h b/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h
new file mode 100644
index 00000000000..db006100e5a
--- /dev/null
+++ b/eval/src/vespa/eval/tensor/dense/dense_xw_product_function.h
@@ -0,0 +1,53 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/eval/eval/tensor_function.h>
+#include "dense_tensor_view.h"
+#include <vespa/vespalib/hwaccelrated/iaccelrated.h>
+
+namespace vespalib {
+namespace tensor {
+
+using XWInput = DenseTensorView::CellsRef;
+using XWOutput = ArrayRef<double>;
+
+/**
+ * Tensor function for product of one 1-dimensional and one 2-dimensional dense tensor.
+ */
+class DenseXWProductFunction : public eval::TensorFunction
+{
+private:
+ const eval::ValueType _resultType;
+ const size_t _vectorId;
+ const size_t _matrixId;
+ const size_t _vectorSize;
+ const size_t _resultSize;
+ bool _commonDimensionInnermost;
+ hwaccelrated::IAccelrated::UP _hwAccelerator;
+
+ void multiDotProduct(const XWInput &v, const XWInput &m, XWOutput &r) const;
+ void transposedProduct(const XWInput &v, const XWInput &m, XWOutput &r) const;
+public:
+ DenseXWProductFunction(const eval::ValueType &resultType,
+ size_t vectorId,
+ size_t matrixId,
+ size_t vectorSize,
+ size_t resultSize,
+ bool matrixHasCommonDimensionInnermost);
+
+ ~DenseXWProductFunction() {}
+
+ size_t vectorId() const { return _vectorId; }
+ size_t matrixId() const { return _matrixId; }
+
+ size_t vectorSize() const { return _vectorSize; }
+ size_t resultSize() const { return _resultSize; }
+
+ bool matrixHasCommonDimensionInnermost() const { return _commonDimensionInnermost; }
+
+ const eval::Value &eval(ConstArrayRef<eval::Value::CREF> params, Stash &stash) const override;
+};
+
+} // namespace tensor
+} // namespace vespalib
diff --git a/fileacquirer/pom.xml b/fileacquirer/pom.xml
index eb040eddffb..6449b8c620f 100644
--- a/fileacquirer/pom.xml
+++ b/fileacquirer/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>fileacquirer</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/filedistribution/pom.xml b/filedistribution/pom.xml
index 10b77b540e7..b0bdaff518f 100644
--- a/filedistribution/pom.xml
+++ b/filedistribution/pom.xml
@@ -9,7 +9,8 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
- </parent>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
<artifactId>filedistribution</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/filedistribution_test/pom.xml b/filedistribution_test/pom.xml
index c270eabb6cf..5cc113c6453 100644
--- a/filedistribution_test/pom.xml
+++ b/filedistribution_test/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>filedistribution_test</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/filedistributionmanager/pom.xml b/filedistributionmanager/pom.xml
index 9e3ecf95ecb..9f037814a12 100644
--- a/filedistributionmanager/pom.xml
+++ b/filedistributionmanager/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>filedistributionmanager</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/fsa/pom.xml b/fsa/pom.xml
index a49845105cf..2a56069f82e 100644
--- a/fsa/pom.xml
+++ b/fsa/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>fsa</artifactId>
<packaging>container-plugin</packaging>
diff --git a/indexinglanguage/pom.xml b/indexinglanguage/pom.xml
index 70cb9f6d8d0..f0aba8d9476 100644
--- a/indexinglanguage/pom.xml
+++ b/indexinglanguage/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>indexinglanguage</artifactId>
<packaging>jar</packaging>
diff --git a/jaxrs_client_utils/pom.xml b/jaxrs_client_utils/pom.xml
index 1c4bdde21a8..e3de5b8163d 100644
--- a/jaxrs_client_utils/pom.xml
+++ b/jaxrs_client_utils/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>jaxrs_client_utils</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/jaxrs_utils/pom.xml b/jaxrs_utils/pom.xml
index 249cbda992b..1753d016ec3 100644
--- a/jaxrs_utils/pom.xml
+++ b/jaxrs_utils/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>jaxrs_utils</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/jdisc_core/pom.xml b/jdisc_core/pom.xml
index fb8200eb610..55da222994f 100644
--- a/jdisc_core/pom.xml
+++ b/jdisc_core/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>jdisc_core</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/jdisc_core_test/pom.xml b/jdisc_core_test/pom.xml
index 92e7a39fee0..a1a96463ffc 100644
--- a/jdisc_core_test/pom.xml
+++ b/jdisc_core_test/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>com.yahoo.vespa.jdisc_core</groupId>
<artifactId>parent</artifactId>
diff --git a/jdisc_http_service/pom.xml b/jdisc_http_service/pom.xml
index d8c0b0bc29c..a1482669b39 100644
--- a/jdisc_http_service/pom.xml
+++ b/jdisc_http_service/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>jdisc_http_service</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/jdisc_jetty/pom.xml b/jdisc_jetty/pom.xml
index 4e739aae8cc..0f8a5ba19e2 100644
--- a/jdisc_jetty/pom.xml
+++ b/jdisc_jetty/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>jdisc_jetty</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/jdisc_messagebus_service/pom.xml b/jdisc_messagebus_service/pom.xml
index e9531a73861..6201f413b9a 100644
--- a/jdisc_messagebus_service/pom.xml
+++ b/jdisc_messagebus_service/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>jdisc_messagebus_service</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/jrt/pom.xml b/jrt/pom.xml
index 0d6be56fdab..cf3da2ab7ce 100644
--- a/jrt/pom.xml
+++ b/jrt/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>jrt</artifactId>
<packaging>container-plugin</packaging>
diff --git a/linguistics/pom.xml b/linguistics/pom.xml
index 328742f483a..e4aa7c3049e 100644
--- a/linguistics/pom.xml
+++ b/linguistics/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>linguistics</artifactId>
<packaging>container-plugin</packaging>
@@ -59,6 +60,7 @@
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<scope>provided</scope>
+ <classifier>no_aop</classifier>
</dependency>
</dependencies>
<build>
diff --git a/logd/pom.xml b/logd/pom.xml
index e21931efc5a..a1a107bc20c 100644
--- a/logd/pom.xml
+++ b/logd/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>logd</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/logserver/pom.xml b/logserver/pom.xml
index 6acdd8ed1d7..55c5c443cfb 100644
--- a/logserver/pom.xml
+++ b/logserver/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>logserver</artifactId>
<packaging>jar</packaging>
diff --git a/maven-plugins/pom.xml b/maven-plugins/pom.xml
index 2f7343e753c..0aabe630a63 100644
--- a/maven-plugins/pom.xml
+++ b/maven-plugins/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>com.yahoo.vespa</groupId>
<artifactId>bundle-plugins</artifactId>
diff --git a/messagebus-disc/pom.xml b/messagebus-disc/pom.xml
index 46158b0ca60..89741dce82b 100644
--- a/messagebus-disc/pom.xml
+++ b/messagebus-disc/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>messagebus-disc</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/messagebus/pom.xml b/messagebus/pom.xml
index 7fb44787cdf..7c37bccbd9a 100644
--- a/messagebus/pom.xml
+++ b/messagebus/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>messagebus</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/metrics/pom.xml b/metrics/pom.xml
index ec64d0d392c..628ab66552d 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>com.yahoo.vespa</groupId>
<artifactId>metrics</artifactId>
diff --git a/node-admin/pom.xml b/node-admin/pom.xml
index f7691cda3f7..983e4d3a832 100644
--- a/node-admin/pom.xml
+++ b/node-admin/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>node-admin</artifactId>
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
index d3af55cdff5..d2863468ee7 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
@@ -18,11 +18,13 @@ import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger;
import java.io.IOException;
import java.net.Inet6Address;
import java.net.InetAddress;
+import java.net.URI;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.yahoo.vespa.defaults.Defaults.getDefaults;
@@ -99,7 +101,9 @@ public class DockerOperationsImpl implements DockerOperations {
InetAddress nodeInetAddress = environment.getInetAddressForHost(nodeSpec.hostname);
final boolean isIPv6 = nodeInetAddress instanceof Inet6Address;
- String configServers = String.join(",", environment.getConfigServerHosts());
+ String configServers = environment.getConfigServerUris().stream()
+ .map(URI::getHost)
+ .collect(Collectors.joining(","));
Docker.CreateContainerCommand command = docker.createContainerCommand(
nodeSpec.wantedDockerImage.get(),
ContainerResources.from(nodeSpec.minCpuCores, nodeSpec.minMainMemoryAvailableGb),
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
index 763291bf86b..f41d7deb04b 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java
@@ -21,6 +21,7 @@ import com.yahoo.vespa.hosted.node.admin.util.SecretAgentScheduleMaker;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -310,8 +311,8 @@ public class StorageMaintainer {
* @throws RuntimeException if exit code != 0
*/
public String getHardwareDivergence() {
- String configServers = environment.getConfigServerHosts().stream()
- .map(configServer -> "http://" + configServer + ":" + 4080)
+ String configServers = environment.getConfigServerUris().stream()
+ .map(URI::getHost)
.collect(Collectors.joining(","));
return executeMaintainer("com.yahoo.vespa.hosted.node.verification.spec.SpecVerifier", configServers);
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
index 906e6b55640..e380e7a2e26 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
@@ -34,6 +34,7 @@ import java.util.stream.Collectors;
import static com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater.State.RESUMED;
import static com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater.State.SUSPENDED_NODE_ADMIN;
+import static com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater.State.TRANSITIONING;
/**
* Pulls information from node repository and forwards containers to run to node admin.
@@ -110,15 +111,15 @@ public class NodeAdminStateUpdater {
return this.getClass().getSimpleName() + "@" + Integer.toString(System.identityHashCode(this));
}
- public enum State { RESUMED, SUSPENDED_NODE_ADMIN, SUSPENDED}
+ public enum State { TRANSITIONING, RESUMED, SUSPENDED_NODE_ADMIN, SUSPENDED}
public Map<String, Object> getDebugPage() {
Map<String, Object> debug = new LinkedHashMap<>();
synchronized (monitor) {
debug.put("dockerHostHostName", dockerHostHostName);
+ debug.put("wantedState", wantedState);
+ debug.put("currentState", currentState);
debug.put("NodeAdmin", nodeAdmin.debugInfo());
- debug.put("Wanted State: ", wantedState);
- debug.put("Current State: ", currentState);
}
return debug;
}
@@ -185,7 +186,7 @@ public class NodeAdminStateUpdater {
log.log(LogLevel.ERROR, "Error while trying to converge to " + wantedStateCopy, e);
}
- if (wantedStateCopy != RESUMED && currentState == RESUMED) {
+ if (wantedStateCopy != RESUMED && currentState == TRANSITIONING) {
Duration subsystemFreezeDuration = nodeAdmin.subsystemFreezeDuration();
if (subsystemFreezeDuration.compareTo(FREEZE_CONVERGENCE_TIMEOUT) > 0) {
// We have spent too much time trying to freeze and node admin is still not frozen.
@@ -203,8 +204,9 @@ public class NodeAdminStateUpdater {
* with respect to: freeze, Orchestrator, and services running.
*/
private void convergeState(State wantedState) {
- if (currentState == wantedState) {
- return;
+ if (currentState == wantedState) return;
+ synchronized (monitor) {
+ currentState = TRANSITIONING;
}
boolean wantFrozen = wantedState != RESUMED;
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java
index 8283c90e43d..b5c439e209a 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImpl.java
@@ -31,11 +31,9 @@ public class NodeRepositoryImpl implements NodeRepository {
private static final PrefixLogger NODE_ADMIN_LOGGER = PrefixLogger.getNodeAdminLogger(NodeRepositoryImpl.class);
private final ConfigServerHttpRequestExecutor requestExecutor;
- private final int port;
- public NodeRepositoryImpl(ConfigServerHttpRequestExecutor requestExecutor, int port) {
+ public NodeRepositoryImpl(ConfigServerHttpRequestExecutor requestExecutor) {
this.requestExecutor = requestExecutor;
- this.port = port;
}
@Override
@@ -43,7 +41,6 @@ public class NodeRepositoryImpl implements NodeRepository {
try {
final GetNodesResponse nodesForHost = requestExecutor.get(
"/nodes/v2/node/?parentHost=" + baseHostName + "&recursive=true",
- port,
GetNodesResponse.class);
if (nodesForHost.nodes == null) {
@@ -71,7 +68,6 @@ public class NodeRepositoryImpl implements NodeRepository {
public Optional<ContainerNodeSpec> getContainerNodeSpec(String hostName) {
try {
GetNodesResponse.Node nodeResponse = requestExecutor.get("/nodes/v2/node/" + hostName,
- port,
GetNodesResponse.Node.class);
if (nodeResponse == null) {
return Optional.empty();
@@ -86,7 +82,7 @@ public class NodeRepositoryImpl implements NodeRepository {
public List<ContainerAclSpec> getContainerAclSpecs(String hostName) {
try {
final String path = String.format("/nodes/v2/acl/%s?children=true", hostName);
- final GetAclResponse response = requestExecutor.get(path, port, GetAclResponse.class);
+ final GetAclResponse response = requestExecutor.get(path, GetAclResponse.class);
return response.trustedNodes.stream()
.map(node -> new ContainerAclSpec(
node.hostname, node.ipAddress, ContainerName.fromHostname(node.trustedBy)))
@@ -96,7 +92,7 @@ public class NodeRepositoryImpl implements NodeRepository {
}
}
- public static ContainerNodeSpec createContainerNodeSpec(GetNodesResponse.Node node)
+ private static ContainerNodeSpec createContainerNodeSpec(GetNodesResponse.Node node)
throws IllegalArgumentException, NullPointerException {
Objects.requireNonNull(node.nodeState, "Unknown node state");
Node.State nodeState = Node.State.valueOf(node.nodeState);
@@ -145,7 +141,6 @@ public class NodeRepositoryImpl implements NodeRepository {
public void updateNodeAttributes(final String hostName, final NodeAttributes nodeAttributes) {
UpdateNodeAttributesResponse response = requestExecutor.patch(
"/nodes/v2/node/" + hostName,
- port,
new UpdateNodeAttributesRequestBody(nodeAttributes),
UpdateNodeAttributesResponse.class);
@@ -170,7 +165,6 @@ public class NodeRepositoryImpl implements NodeRepository {
private void markNodeToState(String hostName, String state) {
NodeMessageResponse response = requestExecutor.put(
"/nodes/v2/state/" + state + "/" + hostName,
- port,
Optional.empty(), /* body */
NodeMessageResponse.class);
NODE_ADMIN_LOGGER.info(response.message);
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImpl.java
index d1e996f8e93..7093f3f12e7 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImpl.java
@@ -26,11 +26,9 @@ public class OrchestratorImpl implements Orchestrator {
= ORCHESTRATOR_PATH_PREFIX + HostSuspensionApi.PATH_PREFIX;
private final ConfigServerHttpRequestExecutor requestExecutor;
- private final int port;
- public OrchestratorImpl(ConfigServerHttpRequestExecutor requestExecutor, int port) {
+ public OrchestratorImpl(ConfigServerHttpRequestExecutor requestExecutor) {
this.requestExecutor = requestExecutor;
- this.port = port;
}
@Override
@@ -38,7 +36,6 @@ public class OrchestratorImpl implements Orchestrator {
UpdateHostResponse response;
try {
response = requestExecutor.put(getSuspendPath(hostName),
- port,
Optional.empty(), /* body */
UpdateHostResponse.class);
} catch (HttpException.NotFoundException n) {
@@ -61,7 +58,6 @@ public class OrchestratorImpl implements Orchestrator {
try {
batchOperationResult = requestExecutor.put(
ORCHESTRATOR_PATH_PREFIX_HOST_SUSPENSION_API,
- port,
Optional.of(new BatchHostSuspendRequest(parentHostName, hostNames)),
BatchOperationResult.class);
} catch (HttpException e) {
@@ -81,7 +77,7 @@ public class OrchestratorImpl implements Orchestrator {
UpdateHostResponse response;
try {
String path = getSuspendPath(hostName);
- response = requestExecutor.delete(path, port, UpdateHostResponse.class);
+ response = requestExecutor.delete(path, UpdateHostResponse.class);
} catch (HttpException.NotFoundException n) {
throw new OrchestratorNotFoundException("Failed to resume " + hostName + ", host not found");
} catch (HttpException e) {
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java
index 109dbab924c..a343e431b5a 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java
@@ -29,8 +29,6 @@ import java.time.Clock;
import java.time.Duration;
import java.util.function.Function;
-import static com.yahoo.vespa.defaults.Defaults.getDefaults;
-
/**
* Set up node admin for production.
*
@@ -38,7 +36,6 @@ import static com.yahoo.vespa.defaults.Defaults.getDefaults;
*/
public class NodeAdminProvider implements Provider<NodeAdminStateUpdater> {
- private static final int WEB_SERVICE_PORT = getDefaults().vespaWebServicePort();
private static final Duration NODE_AGENT_SCAN_INTERVAL = Duration.ofSeconds(30);
private static final Duration NODE_ADMIN_CONVERGE_STATE_INTERVAL = Duration.ofSeconds(30);
@@ -51,9 +48,9 @@ public class NodeAdminProvider implements Provider<NodeAdminStateUpdater> {
ProcessExecuter processExecuter = new ProcessExecuter();
Environment environment = new Environment();
- ConfigServerHttpRequestExecutor requestExecutor = ConfigServerHttpRequestExecutor.create(environment.getConfigServerHosts());
- NodeRepository nodeRepository = new NodeRepositoryImpl(requestExecutor, WEB_SERVICE_PORT);
- Orchestrator orchestrator = new OrchestratorImpl(requestExecutor, WEB_SERVICE_PORT);
+ ConfigServerHttpRequestExecutor requestExecutor = ConfigServerHttpRequestExecutor.create(environment.getConfigServerUris());
+ NodeRepository nodeRepository = new NodeRepositoryImpl(requestExecutor);
+ Orchestrator orchestrator = new OrchestratorImpl(requestExecutor);
DockerOperations dockerOperations = new DockerOperationsImpl(docker, environment, processExecuter);
StorageMaintainer storageMaintainer = new StorageMaintainer(docker, processExecuter, metricReceiver, environment, clock);
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutor.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutor.java
index e825fa4ac8f..bdfa98a5113 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutor.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutor.java
@@ -12,18 +12,27 @@ import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.ssl.SSLContextBuilder;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.security.GeneralSecurityException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import java.util.Set;
/**
* Retries request on config server a few times before giving up. Assumes that all requests should be sent with
@@ -33,11 +42,11 @@ import java.util.Set;
*/
public class ConfigServerHttpRequestExecutor {
private static final PrefixLogger NODE_ADMIN_LOGGER = PrefixLogger.getNodeAdminLogger(ConfigServerHttpRequestExecutor.class);
+ private static final int MAX_LOOPS = 2;
private final ObjectMapper mapper = new ObjectMapper();
private final CloseableHttpClient client;
- private final List<String> configServerHosts;
- private final static int MAX_LOOPS = 2;
+ private final List<URI> configServerHosts;
@Override
public void finalize() throws Throwable {
@@ -50,31 +59,45 @@ public class ConfigServerHttpRequestExecutor {
super.finalize();
}
- public static ConfigServerHttpRequestExecutor create(Set<String> configServerHosts) {
- if (configServerHosts.isEmpty()) {
- throw new IllegalStateException("Environment setting for config servers missing or empty.");
- }
+ public static ConfigServerHttpRequestExecutor create(Collection<URI> configServerUris) {
+ PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(getConnectionSocketFactoryRegistry());
+ cm.setMaxTotal(200); // Increase max total connections to 200, which should be enough
+
+ return new ConfigServerHttpRequestExecutor(randomizeConfigServerUris(configServerUris),
+ HttpClientBuilder.create()
+ .disableAutomaticRetries()
+ .setUserAgent("node-admin")
+ .setConnectionManager(cm).build());
+ }
- PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
- // Increase max total connections to 200, which should be enough
- cm.setMaxTotal(200);
- return new ConfigServerHttpRequestExecutor(configServerHosts,
- HttpClientBuilder.create().disableAutomaticRetries().setConnectionManager(cm).build());
+ private static Registry<ConnectionSocketFactory> getConnectionSocketFactoryRegistry() {
+ try {
+ SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
+ new SSLContextBuilder().loadTrustMaterial(null, (arg0, arg1) -> true).build(),
+ NoopHostnameVerifier.INSTANCE);
+
+ return RegistryBuilder.<ConnectionSocketFactory>create()
+ .register("http", PlainConnectionSocketFactory.getSocketFactory())
+ .register("https", sslSocketFactory)
+ .build();
+ } catch (GeneralSecurityException e) {
+ throw new RuntimeException("Failed to create SSL context", e);
+ }
}
- ConfigServerHttpRequestExecutor(Set<String> configServerHosts, CloseableHttpClient client) {
- this.configServerHosts = randomizeConfigServerHosts(configServerHosts);
+ ConfigServerHttpRequestExecutor(List<URI> configServerHosts, CloseableHttpClient client) {
+ this.configServerHosts = configServerHosts;
this.client = client;
}
public interface CreateRequest {
- HttpUriRequest createRequest(String configserver) throws JsonProcessingException, UnsupportedEncodingException;
+ HttpUriRequest createRequest(URI configServerUri) throws JsonProcessingException, UnsupportedEncodingException;
}
private <T> T tryAllConfigServers(CreateRequest requestFactory, Class<T> wantedReturnType) {
Exception lastException = null;
for (int loopRetry = 0; loopRetry < MAX_LOOPS; loopRetry++) {
- for (String configServer : configServerHosts) {
+ for (URI configServer : configServerHosts) {
final CloseableHttpResponse response;
try {
response = client.execute(requestFactory.createRequest(configServer));
@@ -118,9 +141,9 @@ public class ConfigServerHttpRequestExecutor {
+ configServerHosts + ") failed, last as follows:", lastException);
}
- public <T> T put(String path, int port, Optional<Object> bodyJsonPojo, Class<T> wantedReturnType) {
+ public <T> T put(String path, Optional<Object> bodyJsonPojo, Class<T> wantedReturnType) {
return tryAllConfigServers(configServer -> {
- HttpPut put = new HttpPut("http://" + configServer + ":" + port + path);
+ HttpPut put = new HttpPut(configServer.resolve(path));
setContentTypeToApplicationJson(put);
if (bodyJsonPojo.isPresent()) {
put.setEntity(new StringEntity(mapper.writeValueAsString(bodyJsonPojo.get())));
@@ -129,28 +152,28 @@ public class ConfigServerHttpRequestExecutor {
}, wantedReturnType);
}
- public <T> T patch(String path, int port, Object bodyJsonPojo, Class<T> wantedReturnType) {
+ public <T> T patch(String path, Object bodyJsonPojo, Class<T> wantedReturnType) {
return tryAllConfigServers(configServer -> {
- HttpPatch patch = new HttpPatch("http://" + configServer + ":" + port + path);
+ HttpPatch patch = new HttpPatch(configServer.resolve(path));
setContentTypeToApplicationJson(patch);
patch.setEntity(new StringEntity(mapper.writeValueAsString(bodyJsonPojo)));
return patch;
}, wantedReturnType);
}
- public <T> T delete(String path, int port, Class<T> wantedReturnType) {
+ public <T> T delete(String path, Class<T> wantedReturnType) {
return tryAllConfigServers(configServer ->
- new HttpDelete("http://" + configServer + ":" + port + path), wantedReturnType);
+ new HttpDelete(configServer.resolve(path)), wantedReturnType);
}
- public <T> T get(String path, int port, Class<T> wantedReturnType) {
+ public <T> T get(String path, Class<T> wantedReturnType) {
return tryAllConfigServers(configServer ->
- new HttpGet("http://" + configServer + ":" + port + path), wantedReturnType);
+ new HttpGet(configServer.resolve(path)), wantedReturnType);
}
- public <T> T post(String path, int port, Object bodyJsonPojo, Class<T> wantedReturnType) {
+ public <T> T post(String path, Object bodyJsonPojo, Class<T> wantedReturnType) {
return tryAllConfigServers(configServer -> {
- HttpPost post = new HttpPost("http://" + configServer + ":" + port + path);
+ HttpPost post = new HttpPost(configServer.resolve(path));
setContentTypeToApplicationJson(post);
post.setEntity(new StringEntity(mapper.writeValueAsString(bodyJsonPojo)));
return post;
@@ -161,9 +184,9 @@ public class ConfigServerHttpRequestExecutor {
request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
}
- // Shuffle config server hosts to balance load
- private List<String> randomizeConfigServerHosts(Set<String> configServerHosts) {
- List<String> shuffledConfigServerHosts = new ArrayList<>(configServerHosts);
+ // Shuffle config server URIs to balance load
+ private static List<URI> randomizeConfigServerUris(Collection<URI> configServerUris) {
+ List<URI> shuffledConfigServerHosts = new ArrayList<>(configServerUris);
Collections.shuffle(shuffledConfigServerHosts);
return shuffledConfigServerHosts;
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
index 65a4d84b4c3..2b5e7990617 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
@@ -6,6 +6,7 @@ import com.yahoo.net.HostName;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import java.net.InetAddress;
+import java.net.URI;
import java.net.UnknownHostException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -15,9 +16,7 @@ import java.time.Instant;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import java.util.TimeZone;
import java.util.stream.Collectors;
@@ -31,13 +30,15 @@ public class Environment {
private static final DateFormat filenameFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
public static final String APPLICATION_STORAGE_CLEANUP_PATH_PREFIX = "cleanup_";
- private static final String ENV_CONFIGSERVERS = "services__addr_configserver";
+ private static final String ENV_CONFIGSERVER_SCHEME = "CONFIG_SERVER_SCHEME";
+ private static final String ENV_CONFIGSERVER_HOSTS = "CONFIG_SERVER_ADDRESS";
+ private static final String ENV_CONFIGSERVER_PORT = "CONFIG_SERVER_PORT";
private static final String ENVIRONMENT = "ENVIRONMENT";
private static final String REGION = "REGION";
private static final String LOGSTASH_NODES = "LOGSTASH_NODES";
private static final String COREDUMP_FEED_ENDPOINT = "COREDUMP_FEED_ENDPOINT";
- private final Set<String> configServerHosts;
+ private final List<URI> configServerHosts;
private final String environment;
private final String region;
private final String parentHostHostname;
@@ -51,7 +52,7 @@ public class Environment {
}
public Environment() {
- this(getConfigServerHostsFromEnvironment(),
+ this(getConfigServerUrlsFromEnvironment(),
getEnvironmentVariable(ENVIRONMENT),
getEnvironmentVariable(REGION),
HostName.getLocalhost(),
@@ -61,7 +62,7 @@ public class Environment {
getEnvironmentVariable(COREDUMP_FEED_ENDPOINT));
}
- public Environment(Set<String> configServerHosts,
+ public Environment(List<URI> configServerHosts,
String environment,
String region,
String parentHostHostname,
@@ -79,7 +80,7 @@ public class Environment {
this.feedEndpoint = feedEndpoint;
}
- public Set<String> getConfigServerHosts() { return configServerHosts; }
+ public List<URI> getConfigServerUris() { return configServerHosts; }
public String getEnvironment() {
return environment;
@@ -95,7 +96,9 @@ public class Environment {
private static String getEnvironmentVariable(String name) {
final String value = System.getenv(name);
- if (value == null) throw new IllegalStateException(String.format("Environment variable %s not set", name));
+ if (Strings.isNullOrEmpty(value)) {
+ throw new IllegalStateException(String.format("Environment variable %s not set", name));
+ }
return value;
}
@@ -103,14 +106,14 @@ public class Environment {
return getEnvironment() + "." + getRegion();
}
- private static Set<String> getConfigServerHostsFromEnvironment() {
- String configServerHosts = System.getenv(ENV_CONFIGSERVERS);
- if (configServerHosts == null) {
- return Collections.emptySet();
- }
+ private static List<URI> getConfigServerUrlsFromEnvironment() {
+ String scheme = getEnvironmentVariable(ENV_CONFIGSERVER_SCHEME);
+ String configServerHosts = getEnvironmentVariable(ENV_CONFIGSERVER_HOSTS);
+ String port = getEnvironmentVariable(ENV_CONFIGSERVER_PORT);
- final List<String> hostNameStrings = Arrays.asList(configServerHosts.split("[,\\s]+"));
- return new HashSet<>(hostNameStrings);
+ return Arrays.stream(configServerHosts.split("[,\\s]+"))
+ .map(hostname -> URI.create(scheme + "://" + hostname + ":" + port))
+ .collect(Collectors.toList());
}
private static List<String> getLogstashNodesFromEnvironment() {
@@ -188,7 +191,7 @@ public class Environment {
}
public static class Builder {
- private Set<String> configServerHosts = Collections.emptySet();
+ private List<URI> configServerHosts = Collections.emptyList();
private String environment;
private String region;
private String parentHostHostname;
@@ -197,8 +200,10 @@ public class Environment {
private List<String> logstashNodes = Collections.emptyList();
private String feedEndpoint;
- public Builder configServerHosts(String... hosts) {
- configServerHosts = Arrays.stream(hosts).collect(Collectors.toSet());
+ public Builder configServerUris(String... hosts) {
+ configServerHosts = Arrays.stream(hosts)
+ .map(URI::create)
+ .collect(Collectors.toList());
return this;
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
index ce062702a3b..1058278a02c 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java
@@ -13,8 +13,9 @@ import org.junit.Test;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -50,26 +51,13 @@ public class NodeAdminStateUpdaterTest {
@Test
public void testStateConvergence() throws IOException {
- List<ContainerNodeSpec> containersToRun = new ArrayList<>();
- for (int i = 0; i < 10; i++) {
- containersToRun.add(
- new ContainerNodeSpec.Builder()
- .hostname("host" + i + ".test.yahoo.com")
- .nodeState(i % 3 == 0 ? Node.State.active : Node.State.ready)
- .nodeType("tenant")
- .nodeFlavor("docker")
- .minCpuCores(1)
- .minMainMemoryAvailableGb(1)
- .minDiskAvailableGb(1)
- .build());
- }
- List<String> activeHostnames = Arrays.asList(
- "host0.test.yahoo.com", "host3.test.yahoo.com", "host6.test.yahoo.com", "host9.test.yahoo.com");
+ mockNodeRepo(4);
+ List<String> activeHostnames = nodeRepository.getContainersToRun(parentHostname).stream()
+ .map(node -> node.hostname)
+ .collect(Collectors.toList());
List<String> suspendHostnames = new ArrayList<>(activeHostnames);
suspendHostnames.add(parentHostname);
- when(nodeRepository.getContainersToRun(eq(parentHostname))).thenReturn(containersToRun);
-
// Initially everything is frozen to force convergence
assertFalse(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.RESUMED));
when(nodeAdmin.setFrozen(eq(false))).thenReturn(true);
@@ -148,7 +136,7 @@ public class NodeAdminStateUpdaterTest {
assertTrue(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.SUSPENDED));
verify(refresher, times(2)).signalWorkToBeDone(); // No change in desired state
verifyNoMoreInteractions(nodeAdmin);
-
+
// Lets try going back to resumed
when(nodeAdmin.setFrozen(eq(false))).thenReturn(false).thenReturn(true); // NodeAgents not converged to yet
assertFalse(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.RESUMED));
@@ -163,6 +151,50 @@ public class NodeAdminStateUpdaterTest {
assertTrue(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.RESUMED));
}
+ @Test
+ public void half_transition_revert() throws IOException {
+ mockNodeRepo(3);
+
+ // Initially everything is frozen to force convergence
+ when(nodeAdmin.setFrozen(eq(false))).thenReturn(true);
+ doNothing().when(orchestrator).resume(parentHostname);
+ tickAfter(0); // The first tick should unfreeze
+ assertTrue(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.RESUMED));
+ verify(nodeAdmin, times(1)).setFrozen(eq(false));
+
+ // Let's start suspending, we are able to freeze the nodes, but orchestrator denies suspension
+ when(nodeAdmin.subsystemFreezeDuration()).thenReturn(Duration.ofSeconds(1));
+ when(nodeAdmin.setFrozen(eq(true))).thenReturn(true);
+ doThrow(new RuntimeException("Cannot allow to suspend because some reason"))
+ .when(orchestrator).suspend(eq(parentHostname));
+
+ assertFalse(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.SUSPENDED_NODE_ADMIN));
+ tickAfter(0);
+ verify(nodeAdmin, times(1)).setFrozen(eq(true));
+
+ // We change our mind, want to remain resumed
+ assertFalse(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.RESUMED));
+ tickAfter(0);
+ assertTrue(refresher.setResumeStateAndCheckIfResumed(NodeAdminStateUpdater.State.RESUMED));
+ verify(nodeAdmin, times(2)).setFrozen(eq(false)); // Make sure that we unfreeze!
+ }
+
+ private void mockNodeRepo(int numberOfNodes) throws IOException {
+ List<ContainerNodeSpec> containersToRun = IntStream.range(0, numberOfNodes)
+ .mapToObj(i -> new ContainerNodeSpec.Builder()
+ .hostname("host" + i + ".test.yahoo.com")
+ .nodeState(Node.State.active)
+ .nodeType("tenant")
+ .nodeFlavor("docker")
+ .minCpuCores(1)
+ .minMainMemoryAvailableGb(1)
+ .minDiskAvailableGb(1)
+ .build())
+ .collect(Collectors.toList());
+
+ when(nodeRepository.getContainersToRun(eq(parentHostname))).thenReturn(containersToRun);
+ }
+
private void tickAfter(int seconds) {
clock.advance(Duration.ofSeconds(seconds));
refresher.tick();
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImplTest.java
index 7456b07d2f4..45f5de3d1a5 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/noderepository/NodeRepositoryImplTest.java
@@ -17,6 +17,7 @@ import org.junit.Test;
import java.io.IOException;
import java.net.ServerSocket;
+import java.net.URI;
import java.time.Instant;
import java.util.Collections;
import java.util.List;
@@ -35,9 +36,7 @@ import static org.junit.Assert.fail;
*/
public class NodeRepositoryImplTest {
private JDisc container;
- private int port;
- private final ConfigServerHttpRequestExecutor requestExecutor = ConfigServerHttpRequestExecutor.create(
- Collections.singleton("127.0.0.1"));
+ private ConfigServerHttpRequestExecutor requestExecutor;
private int findRandomOpenPort() throws IOException {
@@ -56,14 +55,15 @@ public class NodeRepositoryImplTest {
*/
@Before
public void startContainer() throws Exception {
- port = findRandomOpenPort();
- System.err.println("PORT IS " + port);
+ final int port = findRandomOpenPort();
+ requestExecutor = ConfigServerHttpRequestExecutor.create(
+ Collections.singleton(URI.create("http://127.0.0.1:" + port)));
container = JDisc.fromServicesXml(ContainerConfig.servicesXmlV2(port), Networking.enable);
}
private void waitForJdiscContainerToServe() throws InterruptedException {
Instant start = Instant.now();
- NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor, port);
+ NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor);
while (Instant.now().minusSeconds(120).isBefore(start)) {
try {
nodeRepositoryApi.getContainersToRun("foobar");
@@ -85,7 +85,7 @@ public class NodeRepositoryImplTest {
@Test
public void testGetContainersToRunApi() throws IOException, InterruptedException {
waitForJdiscContainerToServe();
- NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor, port);
+ NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor);
String dockerHostHostname = "dockerhost1.yahoo.com";
final List<ContainerNodeSpec> containersToRun = nodeRepositoryApi.getContainersToRun(dockerHostHostname);
@@ -104,7 +104,7 @@ public class NodeRepositoryImplTest {
@Test
public void testGetContainer() throws InterruptedException, IOException {
waitForJdiscContainerToServe();
- NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor, port);
+ NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor);
String hostname = "host4.yahoo.com";
Optional<ContainerNodeSpec> nodeSpec = nodeRepositoryApi.getContainerNodeSpec(hostname);
assertThat(nodeSpec.isPresent(), is(true));
@@ -114,7 +114,7 @@ public class NodeRepositoryImplTest {
@Test
public void testGetContainerForNonExistingNode() throws InterruptedException, IOException {
waitForJdiscContainerToServe();
- NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor, port);
+ NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor);
String hostname = "host-that-does-not-exist";
Optional<ContainerNodeSpec> nodeSpec = nodeRepositoryApi.getContainerNodeSpec(hostname);
assertFalse(nodeSpec.isPresent());
@@ -123,7 +123,7 @@ public class NodeRepositoryImplTest {
@Test
public void testUpdateNodeAttributes() throws InterruptedException, IOException {
waitForJdiscContainerToServe();
- NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor, port);
+ NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor);
String hostname = "host4.yahoo.com";
nodeRepositoryApi.updateNodeAttributes(
hostname,
@@ -136,7 +136,7 @@ public class NodeRepositoryImplTest {
@Test(expected = RuntimeException.class)
public void testUpdateNodeAttributesWithBadValue() throws InterruptedException, IOException {
waitForJdiscContainerToServe();
- NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor, port);
+ NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor);
String hostname = "host4.yahoo.com";
nodeRepositoryApi.updateNodeAttributes(
hostname,
@@ -148,7 +148,7 @@ public class NodeRepositoryImplTest {
@Test
public void testMarkAsReady() throws InterruptedException, IOException {
- NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor, port);
+ NodeRepository nodeRepositoryApi = new NodeRepositoryImpl(requestExecutor);
waitForJdiscContainerToServe();
nodeRepositoryApi.markAsDirty("host5.yahoo.com");
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImplTest.java
index 0a11ddd1e62..779a0a6a376 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/orchestrator/OrchestratorImplTest.java
@@ -24,15 +24,12 @@ public class OrchestratorImplTest {
private static final String hostName = "host123.yahoo.com";
private final ConfigServerHttpRequestExecutor requestExecutor = mock(ConfigServerHttpRequestExecutor.class);
- private final int port = 1234;
- private final OrchestratorImpl orchestrator = new OrchestratorImpl(requestExecutor, port);
-
+ private final OrchestratorImpl orchestrator = new OrchestratorImpl(requestExecutor);
@Test
public void testSuspendCall() {
when(requestExecutor.put(
OrchestratorImpl.ORCHESTRATOR_PATH_PREFIX_HOST_API + "/" + hostName+ "/suspended",
- port,
Optional.empty(),
UpdateHostResponse.class
)).thenReturn(new UpdateHostResponse(hostName, null));
@@ -44,7 +41,6 @@ public class OrchestratorImplTest {
public void testSuspendCallWithFailureReason() {
when(requestExecutor.put(
OrchestratorImpl.ORCHESTRATOR_PATH_PREFIX_HOST_API + "/" + hostName+ "/suspended",
- port,
Optional.empty(),
UpdateHostResponse.class
)).thenReturn(new UpdateHostResponse(hostName, new HostStateChangeDenialReason("hostname", "fail")));
@@ -56,7 +52,6 @@ public class OrchestratorImplTest {
public void testSuspendCallWithNotFound() {
when(requestExecutor.put(
any(String.class),
- any(Integer.class),
any(),
any()
)).thenThrow(new HttpException.NotFoundException("Not Found"));
@@ -68,7 +63,6 @@ public class OrchestratorImplTest {
public void testSuspendCallWithSomeOtherException() {
when(requestExecutor.put(
any(String.class),
- any(Integer.class),
any(),
any()
)).thenThrow(new RuntimeException("Some parameter was wrong"));
@@ -81,7 +75,6 @@ public class OrchestratorImplTest {
public void testResumeCall() {
when(requestExecutor.delete(
OrchestratorImpl.ORCHESTRATOR_PATH_PREFIX_HOST_API + "/" + hostName+ "/suspended",
- port,
UpdateHostResponse.class
)).thenReturn(new UpdateHostResponse(hostName, null));
@@ -92,7 +85,6 @@ public class OrchestratorImplTest {
public void testResumeCallWithFailureReason() {
when(requestExecutor.delete(
OrchestratorImpl.ORCHESTRATOR_PATH_PREFIX_HOST_API + "/" + hostName+ "/suspended",
- port,
UpdateHostResponse.class
)).thenReturn(new UpdateHostResponse(hostName, new HostStateChangeDenialReason("hostname", "fail")));
@@ -103,7 +95,6 @@ public class OrchestratorImplTest {
public void testResumeCallWithNotFound() {
when(requestExecutor.delete(
any(String.class),
- any(Integer.class),
any()
)).thenThrow(new HttpException.NotFoundException("Not Found"));
@@ -114,7 +105,6 @@ public class OrchestratorImplTest {
public void testResumeCallWithSomeOtherException() {
when(requestExecutor.put(
any(String.class),
- any(Integer.class),
any(),
any()
)).thenThrow(new RuntimeException("Some parameter was wrong"));
@@ -130,7 +120,6 @@ public class OrchestratorImplTest {
when(requestExecutor.put(
OrchestratorImpl.ORCHESTRATOR_PATH_PREFIX_HOST_SUSPENSION_API,
- port,
Optional.of(new BatchHostSuspendRequest(parentHostName, hostNames)),
BatchOperationResult.class
)).thenReturn(BatchOperationResult.successResult());
@@ -146,7 +135,6 @@ public class OrchestratorImplTest {
when(requestExecutor.put(
OrchestratorImpl.ORCHESTRATOR_PATH_PREFIX_HOST_SUSPENSION_API,
- port,
Optional.of(new BatchHostSuspendRequest(parentHostName, hostNames)),
BatchOperationResult.class
)).thenReturn(new BatchOperationResult(failureReason));
@@ -162,7 +150,6 @@ public class OrchestratorImplTest {
when(requestExecutor.put(
OrchestratorImpl.ORCHESTRATOR_PATH_PREFIX_HOST_SUSPENSION_API,
- port,
Optional.of(new BatchHostSuspendRequest(parentHostName, hostNames)),
BatchOperationResult.class
)).thenThrow(new RuntimeException(exceptionMessage));
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutorTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutorTest.java
index d431f175b1c..67cd2c79034 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutorTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/util/ConfigServerHttpRequestExecutorTest.java
@@ -3,19 +3,22 @@ package com.yahoo.vespa.hosted.node.admin.util;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
-import com.yahoo.collections.ArraySet;
-import org.apache.http.HttpEntity;
-import org.apache.http.StatusLine;
+import org.apache.http.HttpVersion;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
+import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.message.BasicStatusLine;
+import org.junit.Before;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
import java.nio.charset.StandardCharsets;
-import java.util.Set;
+import java.util.Arrays;
+import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.arrayContainingInAnyOrder;
@@ -38,85 +41,76 @@ public class ConfigServerHttpRequestExecutorTest {
@JsonIgnoreProperties(ignoreUnknown = true)
public static class TestPojo {
@JsonProperty("foo")
- public String foo;
+ String foo;
@JsonProperty("error-code")
- public Integer errorCode;
+ Integer errorCode;
}
+ private final String uri1 = "http://host1:666";
+ private final String uri2 = "http://host2:666";
+ private final List<URI> configServers = Arrays.asList(URI.create(uri1), URI.create(uri2));
private final StringBuilder mockLog = new StringBuilder();
+
+ private ConfigServerHttpRequestExecutor executor;
private int mockReturnCode = 200;
- private CloseableHttpClient createClientMock() throws IOException {
+ @Before
+ public void initExecutor() throws IOException {
CloseableHttpClient httpMock = mock(CloseableHttpClient.class);
when(httpMock.execute(any())).thenAnswer(invocationOnMock -> {
HttpGet get = (HttpGet) invocationOnMock.getArguments()[0];
mockLog.append(get.getMethod()).append(" ").append(get.getURI()).append(" ");
- CloseableHttpResponse response = mock(CloseableHttpResponse.class);
- StatusLine statusLine = mock(StatusLine.class);
- when(statusLine.getStatusCode()).thenReturn(mockReturnCode);
- when(response.getStatusLine()).thenReturn(statusLine);
if (mockReturnCode == 100000) throw new RuntimeException("FAIL");
- HttpEntity entity = mock(HttpEntity.class);
- when(response.getEntity()).thenReturn(entity);
+
+ BasicStatusLine statusLine = new BasicStatusLine(HttpVersion.HTTP_1_1, mockReturnCode, null);
+ BasicHttpEntity entity = new BasicHttpEntity();
String returnMessage = "{\"foo\":\"bar\", \"no\":3, \"error-code\": " + mockReturnCode + "}";
InputStream stream = new ByteArrayInputStream(returnMessage.getBytes(StandardCharsets.UTF_8));
- when(entity.getContent()).thenReturn(stream);
+ entity.setContent(stream);
+
+ CloseableHttpResponse response = mock(CloseableHttpResponse.class);
+ when(response.getEntity()).thenReturn(entity);
+ when(response.getStatusLine()).thenReturn(statusLine);
+
return response;
});
doNothing().when(httpMock).close();
- return httpMock;
+ executor = new ConfigServerHttpRequestExecutor(configServers, httpMock);
}
@Test
public void testBasicParsingSingleServer() throws Exception {
- Set<String> configServers = new ArraySet<>(2);
- configServers.add("host1");
- configServers.add("host2");
- ConfigServerHttpRequestExecutor executor = new ConfigServerHttpRequestExecutor(configServers, createClientMock());
- TestPojo answer = executor.get("/path", 666, TestPojo.class);
+ TestPojo answer = executor.get("/path", TestPojo.class);
assertThat(answer.foo, is("bar"));
assertLogStringContainsGETForAHost();
}
@Test(expected = HttpException.class)
public void testBasicFailure() throws Exception {
- Set<String> configServers = new ArraySet<>(2);
- configServers.add("host1");
- configServers.add("host2");
// Server is returning 400, no retries.
mockReturnCode = 400;
- ConfigServerHttpRequestExecutor executor = new ConfigServerHttpRequestExecutor(configServers, createClientMock());
- TestPojo testPojo = executor.get("/path", 666, TestPojo.class);
+ TestPojo testPojo = executor.get("/path", TestPojo.class);
assertEquals(testPojo.errorCode.intValue(), mockReturnCode);
assertLogStringContainsGETForAHost();
}
@Test
public void testBasicSuccessWithNoRetries() throws Exception {
- Set<String> configServers = new ArraySet<>(2);
- configServers.add("host1");
- configServers.add("host2");
// Server is returning 201, no retries.
mockReturnCode = 201;
- ConfigServerHttpRequestExecutor executor = new ConfigServerHttpRequestExecutor(configServers, createClientMock());
- TestPojo testPojo = executor.get("/path", 666, TestPojo.class);
+ TestPojo testPojo = executor.get("/path", TestPojo.class);
assertEquals(testPojo.errorCode.intValue(), mockReturnCode);
assertLogStringContainsGETForAHost();
}
@Test
public void testRetries() throws Exception {
- Set<String> configServers = new ArraySet<>(2);
- configServers.add("host1");
- configServers.add("host2");
// Client is throwing exception, should be retries.
mockReturnCode = 100000;
- ConfigServerHttpRequestExecutor executor =
- new ConfigServerHttpRequestExecutor(configServers, createClientMock());
try {
- executor.get("/path", 666, TestPojo.class);
+ executor.get("/path", TestPojo.class);
fail("Expected failure");
} catch (Exception e) {
// ignore
@@ -129,15 +123,10 @@ public class ConfigServerHttpRequestExecutorTest {
@Test
public void testRetriesOnBadHttpResponseCode() throws Exception {
- Set<String> configServers = new ArraySet<>(2);
- configServers.add("host1");
- configServers.add("host2");
// Client is throwing exception, should be retries.
mockReturnCode = 503;
- ConfigServerHttpRequestExecutor executor =
- new ConfigServerHttpRequestExecutor(configServers, createClientMock());
try {
- executor.get("/path", 666, TestPojo.class);
+ executor.get("/path", TestPojo.class);
fail("Expected failure");
} catch (Exception e) {
// ignore
@@ -151,14 +140,10 @@ public class ConfigServerHttpRequestExecutorTest {
@Test
public void testNotFound() throws Exception {
- Set<String> configServers = new ArraySet<>(2);
- configServers.add("host1");
- configServers.add("host2");
// Server is returning 404, special exception is thrown.
mockReturnCode = 404;
- ConfigServerHttpRequestExecutor executor = new ConfigServerHttpRequestExecutor(configServers, createClientMock());
try {
- executor.get("/path", 666, TestPojo.class);
+ executor.get("/path", TestPojo.class);
fail("Expected exception");
} catch (HttpException.NotFoundException e) {
// ignore
@@ -168,14 +153,9 @@ public class ConfigServerHttpRequestExecutorTest {
@Test
public void testConflict() throws Exception {
- Set<String> configServers = new ArraySet<>(2);
- configServers.add("host1");
- configServers.add("host2");
// Server is returning 409, no exception is thrown.
mockReturnCode = 409;
- ConfigServerHttpRequestExecutor executor =
- new ConfigServerHttpRequestExecutor(configServers, createClientMock());
- executor.get("/path", 666, TestPojo.class);
+ executor.get("/path", TestPojo.class);
assertLogStringContainsGETForAHost();
}
diff --git a/node-maintainer/pom.xml b/node-maintainer/pom.xml
index d56e12d92c6..1fe3eb23857 100644
--- a/node-maintainer/pom.xml
+++ b/node-maintainer/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>node-maintainer</artifactId>
diff --git a/node-repository/pom.xml b/node-repository/pom.xml
index 09b0d3df3d9..6673ea487a1 100644
--- a/node-repository/pom.xml
+++ b/node-repository/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>node-repository</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
index 88daa34d8ca..9b05478eb07 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
@@ -307,11 +307,16 @@ public class NodeRepository extends AbstractComponent {
/** Sets a list of nodes ready and returns the nodes in the ready state */
public List<Node> setReady(List<Node> nodes) {
- for (Node node : nodes)
- if (node.state() != Node.State.dirty)
- throw new IllegalArgumentException("Can not set " + node + " ready. It is not dirty.");
try (Mutex lock = lockUnallocated()) {
- return db.writeTo(Node.State.ready, nodes, Agent.system, Optional.empty());
+ List<Node> nodesWithResetFields = nodes.stream()
+ .map(node -> {
+ if (node.state() != Node.State.dirty)
+ throw new IllegalArgumentException("Can not set " + node + " ready. It is not dirty.");
+ return node.with(node.status().withWantToRetire(false).withWantToDeprovision(false));
+ })
+ .collect(Collectors.toList());
+
+ return db.writeTo(Node.State.ready, nodesWithResetFields, Agent.system, Optional.empty());
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index 7de138fa954..928d8082c6b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -95,9 +95,10 @@ public class MockNodeRepository extends NodeRepository {
node10 = node10.with(node10newStatus);
nodes.add(node10);
- nodes.add(createNode("node55", "host55.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant));
+ Node node55 = createNode("node55", "host55.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant);
+ nodes.add(node55.with(node55.status().withWantToRetire(true).withWantToDeprovision(true)));
- /** Setup docker hosts (two of these will be reserved for spares */
+ /* Setup docker hosts (two of these will be reserved for spares */
nodes.add(createNode("dockerhost1", "dockerhost1.yahoo.com", ipAddresses, additionalIpAddresses, Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host));
nodes.add(createNode("dockerhost2", "dockerhost2.yahoo.com", ipAddresses, additionalIpAddresses, Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host));
nodes.add(createNode("dockerhost3", "dockerhost3.yahoo.com", ipAddresses, additionalIpAddresses, Optional.empty(), flavors.getFlavorOrThrow("large"), NodeType.host));
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
index 54e0c59ff00..2739b4d1cf8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
@@ -308,6 +308,15 @@ public class RestApiTest {
}
@Test
+ public void setting_node_to_ready_will_reset_certain_fields() throws Exception {
+ final String hostname = "host55.yahoo.com";
+ assertResponse(new Request("http://localhost:8080/nodes/v2/state/ready/" + hostname,
+ new byte[0], Request.Method.PUT),
+ "{\"message\":\"Moved " + hostname + " to ready\"}");
+ assertFile(new Request("http://localhost:8080/nodes/v2/node/" + hostname), "node55-after-changes.json");
+ }
+
+ @Test
public void acl_request_by_tenant_node() throws Exception {
String hostname = "foo.yahoo.com";
assertResponse(new Request("http://localhost:8080/nodes/v2/node",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
new file mode 100644
index 00000000000..4560e5e1be4
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
@@ -0,0 +1,39 @@
+{
+ "url": "http://localhost:8080/nodes/v2/node/host55.yahoo.com",
+ "id": "host55.yahoo.com",
+ "state": "ready",
+ "type": "tenant",
+ "hostname": "host55.yahoo.com",
+ "openStackId": "node55",
+ "flavor": "default",
+ "canonicalFlavor": "default",
+ "minDiskAvailableGb": 400.0,
+ "minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
+ "minCpuCores": 2.0,
+ "fastDisk": true,
+ "environment": "BARE_METAL",
+ "rebootGeneration": 1,
+ "currentRebootGeneration": 0,
+ "failCount": 0,
+ "hardwareFailure": false,
+ "wantToRetire": false,
+ "wantToDeprovision": false,
+ "history": [
+ {
+ "event": "provisioned",
+ "at": 123,
+ "agent": "system"
+ },
+ {
+ "event": "readied",
+ "at": 123,
+ "agent": "system"
+ }
+ ],
+ "ipAddresses": [
+ "::1",
+ "127.0.0.1"
+ ],
+ "additionalIpAddresses": []
+}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
index 7d07037d076..4f8b988ccbf 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
@@ -17,8 +17,8 @@
"currentRebootGeneration": 0,
"failCount": 0,
"hardwareFailure": false,
- "wantToRetire": false,
- "wantToDeprovision": false,
+ "wantToRetire": true,
+ "wantToDeprovision": true,
"history": [
{
"event": "provisioned",
diff --git a/orchestrator-restapi/pom.xml b/orchestrator-restapi/pom.xml
index db823f3fb15..310512812e2 100644
--- a/orchestrator-restapi/pom.xml
+++ b/orchestrator-restapi/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>orchestrator-restapi</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/orchestrator/pom.xml b/orchestrator/pom.xml
index c50f9ddcb29..ae22b6718f9 100644
--- a/orchestrator/pom.xml
+++ b/orchestrator/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>orchestrator</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/parent/pom.xml b/parent/pom.xml
new file mode 100644
index 00000000000..48d35410fff
--- /dev/null
+++ b/parent/pom.xml
@@ -0,0 +1,721 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>parent</artifactId>
+ <packaging>pom</packaging>
+ <version>6-SNAPSHOT</version>
+ <name>parent</name>
+ <description>Parent artifact for all Vespa maven projects.</description>
+ <url>https://github.com/vespa-engine</url>
+
+ <parent>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>container-dependency-versions</artifactId>
+ <version>6-SNAPSHOT</version>
+ <relativePath>../container-dependency-versions/pom.xml</relativePath>
+ </parent>
+
+ <licenses>
+ <license>
+ <name>The Apache License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ </license>
+ </licenses>
+
+ <developers>
+ <developer>
+ <name>Vespa</name>
+ <url>https://github.com/vespa-engine</url>
+ </developer>
+ </developers>
+
+ <distributionManagement>
+ <repository>
+ <id>bintray-vespa-repo</id>
+ <url>https://api.bintray.com/maven/yahoo/maven/vespa;publish=1</url>
+ </repository>
+ </distributionManagement>
+
+ <repositories>
+ <!-- Required for Athenz libraries -->
+ <repository>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <id>bintray-yahoo-maven</id>
+ <name>bintray</name>
+ <url>https://yahoo.bintray.com/maven</url>
+ </repository>
+ </repositories>
+
+ <scm>
+ <connection>scm:git:git@github.com:vespa-engine/vespa.git</connection>
+ <developerConnection>scm:git:git@github.com:vespa-engine/vespa.git</developerConnection>
+ <url>git@github.com:vespa-engine/vespa.git</url>
+ </scm>
+
+ <build>
+ <finalName>${project.artifactId}</finalName>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>2.7</version>
+ </extension>
+ <extension>
+ <groupId>org.apache.maven.archetype</groupId>
+ <artifactId>archetype-packaging</artifactId>
+ <version>2.0</version>
+ </extension>
+ </extensions>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.antlr</groupId>
+ <artifactId>antlr3-maven-plugin</artifactId>
+ <version>${antlr.version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.7</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.4.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.4</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.6.1</version>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ <showWarnings>true</showWarnings>
+ <optimize>true</optimize>
+ <showDeprecation>false</showDeprecation>
+ <compilerArgs>
+ <arg>-Xlint:all</arg>
+ <arg>-Xlint:-serial</arg>
+ <arg>-Xlint:-try</arg>
+ <arg>-Xlint:-processing</arg>
+ <arg>-Xlint:-varargs</arg>
+ <arg>-Werror</arg>
+ </compilerArgs>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.10</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.5</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.5.2</version>
+ <configuration>
+ <updateReleaseInfo>true</updateReleaseInfo>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <additionalparam>-Xdoclint:${doclint} -Xdoclint:-missing</additionalparam>
+ </configuration>
+ <version>2.10.4</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>3.5</version>
+ <configuration>
+ <!-- see http://jira.codehaus.org/browse/MNG-5346 -->
+ <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+ </configuration>
+ <executions>
+ <execution>
+ <id>mojo-descriptor</id>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.7</version>
+ <configuration>
+ <escapeString>\</escapeString>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <version>3.3</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.1.2</version>
+ <configuration>
+ <includePom>true</includePom>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${surefire.version}</version>
+ <configuration>
+ <redirectTestOutputToFile>${test.hide}</redirectTestOutputToFile>
+ <systemPropertyVariables>
+ <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ <version>${surefire.version}</version>
+ <configuration>
+ <alwaysGenerateSurefireReport>false</alwaysGenerateSurefireReport>
+ <showSuccess>false</showSuccess>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.9.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.6.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>javacc-maven-plugin</artifactId>
+ <version>2.6</version>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>properties-maven-plugin</artifactId>
+ <version>1.0.0</version>
+ </plugin>
+ <plugin>
+ <groupId>net.alchim31.maven</groupId>
+ <artifactId>scala-maven-plugin</artifactId>
+ <version>3.2.2</version>
+ <configuration>
+ <args>
+ <arg>-unchecked</arg>
+ <arg>-deprecation</arg>
+ <arg>-feature</arg>
+ <arg>-Xfatal-warnings</arg>
+ </args>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>bundle-plugin</artifactId>
+ <version>${project.version}</version>
+ <configuration>
+ <configGenVersion>${project.version}</configGenVersion>
+ <useCommonAssemblyIds>true</useCommonAssemblyIds>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <profiles>
+ <profile>
+ <id>attach-sources</id>
+ <activation>
+ <property>
+ <name>!skipSources</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar-no-fork</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>generate-javadoc</id>
+ <activation>
+ <property>
+ <name>!skipJavadoc</name>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>generate-javadoc</id>
+ <phase>package</phase>
+ <goals>
+ <goal>javadoc</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <additionalparam>-Xdoclint:${doclint} -Xdoclint:-missing</additionalparam>
+ <failOnError>${javadoc.failOnError}</failOnError>
+ <quiet>true</quiet>
+ <show>private</show>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>coverage</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <configuration>
+ <includePluginDependencies>true</includePluginDependencies>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/main/scala</source>
+ </sources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>add-test-source</id>
+ <phase>generate-test-sources</phase>
+ <goals>
+ <goal>add-test-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/test/scala</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>sign-artifacts</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-gpg-plugin</artifactId>
+ <version>1.6</version>
+ <executions>
+ <execution>
+ <id>sign-artifacts</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh-external</artifactId>
+ <version>2.7</version>
+ </dependency>
+ <dependency>
+ <groupId>com.github.cverges.expect4j</groupId>
+ <artifactId>expect4j</artifactId>
+ <version>1.6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-compress</artifactId>
+ <version>1.11</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-exec</artifactId>
+ <version>1.3</version>
+ </dependency>
+ <dependency>
+ <groupId>io.airlift</groupId>
+ <artifactId>airline</artifactId>
+ <version>0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm</artifactId>
+ <version>5.2</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava-testlib</artifactId>
+ <version>18.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.protobuf</groupId>
+ <artifactId>protobuf-java</artifactId>
+ <version>2.4.1</version>
+ </dependency>
+ <dependency>
+ <groupId>com.googlecode.jmockit</groupId>
+ <artifactId>jmockit</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>com.goldmansachs</groupId>
+ <artifactId>gs-collections</artifactId>
+ <version>6.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.infradna.tool</groupId>
+ <artifactId>bridge-method-annotation</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>1.3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-configuration</groupId>
+ <artifactId>commons-configuration</artifactId>
+ <version>1.6</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.4</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>${commons-lang.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-net</groupId>
+ <artifactId>commons-net</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-pool</groupId>
+ <artifactId>commons-pool</artifactId>
+ <version>1.5.6</version>
+ </dependency>
+ <!-- Explicitly included to get Zookeeper version 3.4.10,
+ can be excluded if you want the Zookeeper version
+ used by curator by default
+ -->
+ <dependency>
+ <groupId>org.apache.zookeeper</groupId>
+ <artifactId>zookeeper</artifactId>
+ <version>3.4.10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.curator</groupId>
+ <artifactId>curator-recipes</artifactId>
+ <version>${curator.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.curator</groupId>
+ <artifactId>curator-test</artifactId>
+ <version>${curator.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</version>
+ </dependency>
+ <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>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.aries.spifly</groupId>
+ <artifactId>org.apache.aries.spifly.dynamic.bundle</artifactId>
+ <version>${aries.spifly.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>fluent-hc</artifactId>
+ <version>4.3.6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpmime</artifactId>
+ <version>4.3.6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>3.5.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>3.5.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>3.5.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>3.5.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-junit4</artifactId>
+ <version>${surefire.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-providers</artifactId>
+ <version>${surefire.version}</version>
+ <type>pom</type>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <version>1.3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.cthul</groupId>
+ <artifactId>cthul-matchers</artifactId>
+ <version>1.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-core</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-library</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>uk.co.datumedge</groupId>
+ <artifactId>hamcrest-json</artifactId>
+ <version>0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hdrhistogram</groupId>
+ <artifactId>HdrHistogram</artifactId>
+ <version>2.1.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.9.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>1.9.5</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>4.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>4.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <version>${scala.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang.modules</groupId>
+ <artifactId>scala-parser-combinators_${scala.major-version}</artifactId>
+ <version>1.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang.modules</groupId>
+ <artifactId>scala-xml_${scala.major-version}</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scalatest</groupId>
+ <artifactId>scalatest_${scala.major-version}</artifactId>
+ <version>2.2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>4.0.6.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>6.10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.twdata.maven</groupId>
+ <artifactId>mojo-executor</artifactId>
+ <version>2.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>net.spy</groupId>
+ <artifactId>spymemcached</artifactId>
+ <version>2.10.1</version>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>2.11.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcpkix-jdk15on</artifactId>
+ <version>${bouncycastle.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk15on</artifactId>
+ <version>${bouncycastle.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.ibm.icu</groupId>
+ <artifactId>icu4j</artifactId>
+ <version>57.1</version>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.athenz</groupId>
+ <artifactId>athenz-zms-java-client</artifactId>
+ <version>${athenz.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.athenz</groupId>
+ <artifactId>athenz-zts-java-client</artifactId>
+ <version>${athenz.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <properties>
+ <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>
+ <!-- Athenz dependencies. Make sure these dependencies matches those in Vespa's internal repositories -->
+ <athenz.version>1.7.28</athenz.version>
+ <bouncycastle.version>1.58</bouncycastle.version>
+ <commons-lang.version>2.6</commons-lang.version>
+ <!-- WARNING: If you change curator version, you also need to update
+ zkfacade/src/main/java/org/apache/curator/**/package-info.java
+ using something like
+ find zkfacade/src/main/java/org/apache/curator -name package-info.java | \
+ xargs perl -pi -e 's/major = [0-9]+, minor = [0-9]+, micro = [0-9]+/major = 2, minor = 9, micro = 1/g'
+ -->
+ <curator.version>2.9.1</curator.version>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <test.hide>true</test.hide>
+ <doclint>all</doclint>
+ <scala.major-version>2.11</scala.major-version>
+ <scala.version>${scala.major-version}.4</scala.version>
+ <surefire.version>2.19.1</surefire.version> <!-- NOTE bjorncs 15.06.2017: Version 2.20 has OoM issues -->
+ </properties>
+
+</project>
diff --git a/pom.xml b/pom.xml
index 2b7c1abc0d4..eb1f954ce13 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,11 +3,10 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yahoo.vespa</groupId>
- <artifactId>parent</artifactId>
+ <artifactId>vespa</artifactId>
<packaging>pom</packaging>
<version>6-SNAPSHOT</version>
- <name>parent</name>
- <description>Parent artifact for all Vespa maven projects.</description>
+ <description>Aggregator pom for vespa.</description>
<url>https://github.com/vespa-engine</url>
<licenses>
@@ -24,941 +23,6 @@
</developer>
</developers>
- <distributionManagement>
- <repository>
- <id>bintray-vespa-repo</id>
- <url>https://api.bintray.com/maven/yahoo/maven/vespa;publish=1</url>
- </repository>
- </distributionManagement>
-
- <repositories>
- <!-- Required for Athenz libraries -->
- <repository>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- <id>bintray-yahoo-maven</id>
- <name>bintray</name>
- <url>https://yahoo.bintray.com/maven</url>
- </repository>
- </repositories>
-
- <scm>
- <connection>scm:git:git@github.com:vespa-engine/vespa.git</connection>
- <developerConnection>scm:git:git@github.com:vespa-engine/vespa.git</developerConnection>
- <url>git@github.com:vespa-engine/vespa.git</url>
- </scm>
-
- <build>
- <finalName>${project.artifactId}</finalName>
- <extensions>
- <extension>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-ssh-external</artifactId>
- <version>2.7</version>
- </extension>
- <extension>
- <groupId>org.apache.maven.archetype</groupId>
- <artifactId>archetype-packaging</artifactId>
- <version>2.0</version>
- </extension>
- </extensions>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.antlr</groupId>
- <artifactId>antlr3-maven-plugin</artifactId>
- <version>${antlr.version}</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.7</version>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>2.4.0</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.4</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.6.1</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- <showWarnings>true</showWarnings>
- <optimize>true</optimize>
- <showDeprecation>false</showDeprecation>
- <compilerArgs>
- <arg>-Xlint:all</arg>
- <arg>-Xlint:-serial</arg>
- <arg>-Xlint:-try</arg>
- <arg>-Xlint:-processing</arg>
- <arg>-Xlint:-varargs</arg>
- <arg>-Werror</arg>
- </compilerArgs>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.10</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <version>2.5</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-install-plugin</artifactId>
- <version>2.5.2</version>
- <configuration>
- <updateReleaseInfo>true</updateReleaseInfo>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.0.2</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <configuration>
- <additionalparam>-Xdoclint:${doclint} -Xdoclint:-missing</additionalparam>
- </configuration>
- <version>2.10.4</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-plugin-plugin</artifactId>
- <version>3.5</version>
- <configuration>
- <!-- see http://jira.codehaus.org/browse/MNG-5346 -->
- <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
- </configuration>
- <executions>
- <execution>
- <id>mojo-descriptor</id>
- <goals>
- <goal>descriptor</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
- <configuration>
- <escapeString>\</escapeString>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-site-plugin</artifactId>
- <version>3.3</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <version>2.1.2</version>
- <configuration>
- <includePom>true</includePom>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>${surefire.version}</version>
- <configuration>
- <redirectTestOutputToFile>${test.hide}</redirectTestOutputToFile>
- <systemPropertyVariables>
- <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
- </systemPropertyVariables>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-report-plugin</artifactId>
- <version>${surefire.version}</version>
- <configuration>
- <alwaysGenerateSurefireReport>false</alwaysGenerateSurefireReport>
- <showSuccess>false</showSuccess>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <version>1.9.1</version>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>exec-maven-plugin</artifactId>
- <version>1.6.0</version>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
- <version>2.6</version>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>properties-maven-plugin</artifactId>
- <version>1.0.0</version>
- </plugin>
- <plugin>
- <groupId>net.alchim31.maven</groupId>
- <artifactId>scala-maven-plugin</artifactId>
- <version>3.2.2</version>
- <configuration>
- <args>
- <arg>-unchecked</arg>
- <arg>-deprecation</arg>
- <arg>-feature</arg>
- <arg>-Xfatal-warnings</arg>
- </args>
- </configuration>
- </plugin>
- <plugin>
- <groupId>com.yahoo.vespa</groupId>
- <artifactId>bundle-plugin</artifactId>
- <version>${project.version}</version>
- <configuration>
- <configGenVersion>${project.version}</configGenVersion>
- <useCommonAssemblyIds>true</useCommonAssemblyIds>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
- <profiles>
- <profile>
- <id>attach-sources</id>
- <activation>
- <property>
- <name>!skipSources</name>
- </property>
- </activation>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <executions>
- <execution>
- <id>attach-sources</id>
- <goals>
- <goal>jar-no-fork</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <id>generate-javadoc</id>
- <activation>
- <property>
- <name>!skipJavadoc</name>
- </property>
- </activation>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <executions>
- <execution>
- <id>generate-javadoc</id>
- <phase>package</phase>
- <goals>
- <goal>javadoc</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <additionalparam>-Xdoclint:${doclint} -Xdoclint:-missing</additionalparam>
- <failOnError>${javadoc.failOnError}</failOnError>
- <quiet>true</quiet>
- <show>private</show>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <id>coverage</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>exec-maven-plugin</artifactId>
- <configuration>
- <includePluginDependencies>true</includePluginDependencies>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <executions>
- <execution>
- <phase>generate-sources</phase>
- <goals>
- <goal>add-source</goal>
- </goals>
- <configuration>
- <sources>
- <source>src/main/scala</source>
- </sources>
- </configuration>
- </execution>
- <execution>
- <id>add-test-source</id>
- <phase>generate-test-sources</phase>
- <goals>
- <goal>add-test-source</goal>
- </goals>
- <configuration>
- <sources>
- <source>src/test/scala</source>
- </sources>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <id>sign-artifacts</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-gpg-plugin</artifactId>
- <version>1.6</version>
- <executions>
- <execution>
- <id>sign-artifacts</id>
- <phase>verify</phase>
- <goals>
- <goal>sign</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-ssh-external</artifactId>
- <version>2.7</version>
- </dependency>
- <dependency>
- <groupId>com.github.cverges.expect4j</groupId>
- <artifactId>expect4j</artifactId>
- <version>1.6</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- <version>1.11</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-exec</artifactId>
- <version>1.3</version>
- </dependency>
- <dependency>
- <groupId>io.airlift</groupId>
- <artifactId>airline</artifactId>
- <version>0.7</version>
- </dependency>
- <dependency>
- <groupId>aopalliance</groupId>
- <artifactId>aopalliance</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>org.ow2.asm</groupId>
- <artifactId>asm</artifactId>
- <version>5.2</version>
- </dependency>
- <dependency>
- <groupId>com.google.code.findbugs</groupId>
- <artifactId>annotations</artifactId>
- <version>1.3.9</version>
- </dependency>
- <dependency>
- <groupId>com.google.code.findbugs</groupId>
- <artifactId>jsr305</artifactId>
- <version>1.3.9</version>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>18.0</version>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava-testlib</artifactId>
- <version>18.0</version>
- </dependency>
- <dependency>
- <groupId>com.google.inject</groupId>
- <artifactId>guice</artifactId>
- <version>3.0</version>
- </dependency>
- <dependency>
- <groupId>com.google.inject</groupId>
- <artifactId>guice</artifactId>
- <version>3.0</version>
- <classifier>no_aop</classifier>
- </dependency>
- <dependency>
- <groupId>com.google.inject.extensions</groupId>
- <artifactId>guice-assistedinject</artifactId>
- <version>3.0</version>
- </dependency>
- <dependency>
- <groupId>com.google.inject.extensions</groupId>
- <artifactId>guice-multibindings</artifactId>
- <version>3.0</version>
- </dependency>
- <dependency>
- <groupId>com.google.protobuf</groupId>
- <artifactId>protobuf-java</artifactId>
- <version>2.4.1</version>
- </dependency>
- <dependency>
- <groupId>com.googlecode.jmockit</groupId>
- <artifactId>jmockit</artifactId>
- <version>1.2</version>
- </dependency>
- <dependency>
- <groupId>com.goldmansachs</groupId>
- <artifactId>gs-collections</artifactId>
- <version>6.1.0</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.jaxrs</groupId>
- <artifactId>jackson-jaxrs-json-provider</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.module</groupId>
- <artifactId>jackson-module-jaxb-annotations</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.jaxrs</groupId>
- <artifactId>jackson-jaxrs-base</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.jaxrs</groupId>
- <artifactId>jackson-jaxrs-xml-provider</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
- <artifactId>jackson-dataformat-xml</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.datatype</groupId>
- <artifactId>jackson-datatype-jdk8</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.datatype</groupId>
- <artifactId>jackson-datatype-jsr310</artifactId>
- <version>${jackson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.infradna.tool</groupId>
- <artifactId>bridge-method-annotation</artifactId>
- <version>1.4</version>
- </dependency>
- <dependency>
- <groupId>commons-cli</groupId>
- <artifactId>commons-cli</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- <version>1.4</version>
- </dependency>
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.2.1</version>
- </dependency>
- <dependency>
- <groupId>commons-configuration</groupId>
- <artifactId>commons-configuration</artifactId>
- <version>1.6</version>
- </dependency>
- <dependency>
- <groupId>commons-daemon</groupId>
- <artifactId>commons-daemon</artifactId>
- <version>1.0.3</version>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.4</version>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>${commons-lang.version}</version>
- </dependency>
- <dependency>
- <!-- This version is exported by jdisc via jcl-over-slf4j. -->
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.1.1</version>
- </dependency>
- <dependency>
- <groupId>commons-net</groupId>
- <artifactId>commons-net</artifactId>
- <version>2.0</version>
- </dependency>
- <dependency>
- <groupId>commons-pool</groupId>
- <artifactId>commons-pool</artifactId>
- <version>1.5.6</version>
- </dependency>
- <!-- Explicitly included to get Zookeeper version 3.4.10,
- can be excluded if you want the Zookeeper version
- used by curator by default
- -->
- <dependency>
- <groupId>org.apache.zookeeper</groupId>
- <artifactId>zookeeper</artifactId>
- <version>3.4.10</version>
- </dependency>
- <dependency>
- <groupId>org.apache.curator</groupId>
- <artifactId>curator-recipes</artifactId>
- <version>${curator.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.curator</groupId>
- <artifactId>curator-test</artifactId>
- <version>${curator.version}</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- </dependency>
- <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>
- </dependency>
- <dependency>
- <groupId>org.apache.aries.spifly</groupId>
- <artifactId>org.apache.aries.spifly.dynamic.bundle</artifactId>
- <version>${aries.spifly.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>3.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.framework</artifactId>
- <version>4.2.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.log</artifactId>
- <version>1.0.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.main</artifactId>
- <version>4.2.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>fluent-hc</artifactId>
- <version>4.3.6</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>4.3.6</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore</artifactId>
- <version>4.3.3</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpmime</artifactId>
- <version>4.3.6</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-artifact</artifactId>
- <version>3.5.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-core</artifactId>
- <version>3.5.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-model</artifactId>
- <version>3.5.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.plugin-tools</groupId>
- <artifactId>maven-plugin-annotations</artifactId>
- <version>3.5</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-plugin-api</artifactId>
- <version>3.5.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-project</artifactId>
- <version>2.2.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.0.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.surefire</groupId>
- <artifactId>surefire-junit4</artifactId>
- <version>${surefire.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.surefire</groupId>
- <artifactId>surefire-providers</artifactId>
- <version>${surefire.version}</version>
- <type>pom</type>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jettison</groupId>
- <artifactId>jettison</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
- <groupId>org.cthul</groupId>
- <artifactId>cthul-matchers</artifactId>
- <version>1.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-continuation</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-servlet</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-servlets</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-http</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-jmx</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-all</artifactId>
- <version>1.3</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-core</artifactId>
- <version>1.3</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-library</artifactId>
- <version>1.3</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>uk.co.datumedge</groupId>
- <artifactId>hamcrest-json</artifactId>
- <version>0.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.hdrhistogram</groupId>
- <artifactId>HdrHistogram</artifactId>
- <version>2.1.8</version>
- </dependency>
- <dependency>
- <groupId>org.json</groupId>
- <artifactId>json</artifactId>
- <version>20090211</version>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <version>1.9.5</version>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <version>1.9.5</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- <version>4.3.0</version>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- <version>4.3.0</version>
- </dependency>
- <dependency>
- <groupId>org.scala-lang</groupId>
- <artifactId>scala-library</artifactId>
- <version>${scala.version}</version>
- </dependency>
- <dependency>
- <groupId>org.scala-lang.modules</groupId>
- <artifactId>scala-parser-combinators_${scala.major-version}</artifactId>
- <version>1.0.1</version>
- </dependency>
- <dependency>
- <groupId>org.scala-lang.modules</groupId>
- <artifactId>scala-xml_${scala.major-version}</artifactId>
- <version>1.0.2</version>
- </dependency>
- <dependency>
- <groupId>org.scalatest</groupId>
- <artifactId>scalatest_${scala.major-version}</artifactId>
- <version>2.2.2</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <version>1.7.5</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>log4j-over-slf4j</artifactId>
- <version>1.7.5</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.5</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-jdk14</artifactId>
- <version>1.7.5</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>4.0.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.testng</groupId>
- <artifactId>testng</artifactId>
- <version>6.10</version>
- </dependency>
- <dependency>
- <groupId>org.twdata.maven</groupId>
- <artifactId>mojo-executor</artifactId>
- <version>2.3.0</version>
- </dependency>
- <dependency>
- <groupId>net.jcip</groupId>
- <artifactId>jcip-annotations</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>net.jpountz.lz4</groupId>
- <artifactId>lz4</artifactId>
- <version>1.3.0</version>
- </dependency>
- <dependency>
- <groupId>net.spy</groupId>
- <artifactId>spymemcached</artifactId>
- <version>2.10.1</version>
- </dependency>
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- <version>2.11.0</version>
- </dependency>
- <dependency>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcpkix-jdk15on</artifactId>
- <version>${bouncycastle.version}</version>
- </dependency>
- <dependency>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcprov-jdk15on</artifactId>
- <version>${bouncycastle.version}</version>
- </dependency>
- <!-- jersey 2 support -->
- <dependency>
- <groupId>javax.ws.rs</groupId>
- <artifactId>javax.ws.rs-api</artifactId>
- <version>${javax.ws.rs-api.version}</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.containers</groupId>
- <artifactId>jersey-container-servlet-core</artifactId>
- <version>${jersey2.version}</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.containers</groupId>
- <artifactId>jersey-container-servlet</artifactId>
- <version>${jersey2.version}</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.media</groupId>
- <artifactId>jersey-media-json-jackson</artifactId>
- <version>${jersey2.version}</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.media</groupId>
- <artifactId>jersey-media-multipart</artifactId>
- <version>${jersey2.version}</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.ext</groupId>
- <artifactId>jersey-proxy-client</artifactId>
- <version>${jersey2.version}</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.core</groupId>
- <artifactId>jersey-client</artifactId>
- <version>${jersey2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.ibm.icu</groupId>
- <artifactId>icu4j</artifactId>
- <version>57.1</version>
- </dependency>
- <dependency>
- <groupId>com.yahoo.athenz</groupId>
- <artifactId>athenz-zms-java-client</artifactId>
- <version>${athenz.version}</version>
- </dependency>
- <dependency>
- <groupId>com.yahoo.athenz</groupId>
- <artifactId>athenz-zts-java-client</artifactId>
- <version>${athenz.version}</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <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>
- <!-- Athenz dependencies. Make sure these dependencies matches those in Vespa's internal repositories -->
- <athenz.version>1.7.28</athenz.version>
- <bouncycastle.version>1.58</bouncycastle.version>
- <commons-lang.version>2.6</commons-lang.version>
- <!-- WARNING: If you change curator version, you also need to update
- zkfacade/src/main/java/org/apache/curator/**/package-info.java
- using something like
- find zkfacade/src/main/java/org/apache/curator -name package-info.java | \
- xargs perl -pi -e 's/major = [0-9]+, minor = [0-9]+, micro = [0-9]+/major = 2, minor = 9, micro = 1/g'
- -->
- <curator.version>2.9.1</curator.version>
- <jackson2.version>2.8.3</jackson2.version>
- <jersey2.version>2.23.2</jersey2.version>
- <jetty.version>9.4.6.v20170531</jetty.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <test.hide>true</test.hide>
- <doclint>all</doclint>
- <scala.major-version>2.11</scala.major-version>
- <scala.version>${scala.major-version}.4</scala.version>
- <surefire.version>2.19.1</surefire.version> <!-- NOTE bjorncs 15.06.2017: Version 2.20 has OoM issues -->
- </properties>
-
<modules>
<module>application</module>
<module>application-deploy-plugin</module>
@@ -989,6 +53,7 @@
<module>container-core</module>
<module>container-accesslogging</module>
<module>container-dependencies-enforcer</module>
+ <module>container-dependency-versions</module>
<module>container-dev</module>
<module>container-di</module>
<module>container-disc</module>
@@ -1033,6 +98,7 @@
<module>node-maintainer</module>
<module>orchestrator-restapi</module>
<module>orchestrator</module>
+ <module>parent</module>
<module>predicate-search</module>
<module>predicate-search-core</module>
<module>processing</module>
diff --git a/predicate-search-core/pom.xml b/predicate-search-core/pom.xml
index ea2995c4770..8ced58b840e 100644
--- a/predicate-search-core/pom.xml
+++ b/predicate-search-core/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>predicate-search-core</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/predicate-search/pom.xml b/predicate-search/pom.xml
index ca79544c766..289250012a0 100644
--- a/predicate-search/pom.xml
+++ b/predicate-search/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>predicate-search</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/processing/pom.xml b/processing/pom.xml
index 15aa984cbd2..9bb9ee77037 100644
--- a/processing/pom.xml
+++ b/processing/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>processing</artifactId>
<packaging>jar</packaging>
diff --git a/provided-dependencies/pom.xml b/provided-dependencies/pom.xml
index 18cdd294b87..33f1977c7e2 100755
--- a/provided-dependencies/pom.xml
+++ b/provided-dependencies/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>provided-dependencies</artifactId>
<packaging>jar</packaging>
diff --git a/searchcore/pom.xml b/searchcore/pom.xml
index f31617cfe53..3b43bf1205e 100644
--- a/searchcore/pom.xml
+++ b/searchcore/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>searchcore</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/searchlib/pom.xml b/searchlib/pom.xml
index c669903c3da..5f6717d9516 100644
--- a/searchlib/pom.xml
+++ b/searchlib/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>searchlib</artifactId>
<packaging>container-plugin</packaging>
diff --git a/searchsummary/pom.xml b/searchsummary/pom.xml
index 97a29655ad1..417e25ff944 100644
--- a/searchsummary/pom.xml
+++ b/searchsummary/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>searchsummary</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/service-monitor/pom.xml b/service-monitor/pom.xml
index c63bdf35574..70f9d4aa655 100644
--- a/service-monitor/pom.xml
+++ b/service-monitor/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>service-monitor</artifactId>
<packaging>container-plugin</packaging>
@@ -66,6 +67,7 @@
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<scope>provided</scope>
+ <classifier>no_aop</classifier>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
diff --git a/serviceview/pom.xml b/serviceview/pom.xml
index c3620ecfc9d..4357cc697b8 100644
--- a/serviceview/pom.xml
+++ b/serviceview/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>serviceview</artifactId>
<packaging>container-plugin</packaging>
diff --git a/simplemetrics/pom.xml b/simplemetrics/pom.xml
index d027fda82ce..02758b182e3 100644
--- a/simplemetrics/pom.xml
+++ b/simplemetrics/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>simplemetrics</artifactId>
<packaging>container-plugin</packaging>
diff --git a/socket_test/pom.xml b/socket_test/pom.xml
index 60d8b3713e9..0c6d5cd77f4 100644
--- a/socket_test/pom.xml
+++ b/socket_test/pom.xml
@@ -12,6 +12,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<packaging>jar</packaging>
<build>
diff --git a/standalone-container/pom.xml b/standalone-container/pom.xml
index 9300181e00b..0d66951f364 100644
--- a/standalone-container/pom.xml
+++ b/standalone-container/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>standalone-container</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/statistics/pom.xml b/statistics/pom.xml
index 7bbef0ea3c0..521efa9a2a1 100644
--- a/statistics/pom.xml
+++ b/statistics/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>statistics</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/storage/pom.xml b/storage/pom.xml
index 49b103cbe34..e0b21d5a8a9 100644
--- a/storage/pom.xml
+++ b/storage/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>storage</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/testutil/pom.xml b/testutil/pom.xml
index 9f98f40c2d0..00f606860a4 100644
--- a/testutil/pom.xml
+++ b/testutil/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>testutil</artifactId>
<packaging>jar</packaging>
@@ -23,6 +24,7 @@
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<scope>provided</scope>
+ <classifier>no_aop</classifier>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
diff --git a/vdslib/pom.xml b/vdslib/pom.xml
index 48681b8ce83..5063489ed66 100644
--- a/vdslib/pom.xml
+++ b/vdslib/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vdslib</artifactId>
<packaging>container-plugin</packaging>
diff --git a/vespa-application-maven-plugin/pom.xml b/vespa-application-maven-plugin/pom.xml
index 2464c8208ad..980c8eee60f 100644
--- a/vespa-application-maven-plugin/pom.xml
+++ b/vespa-application-maven-plugin/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespa-application-maven-plugin</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vespa-documentgen-plugin/pom.xml b/vespa-documentgen-plugin/pom.xml
index 4e96a0475f7..718b19ae994 100644
--- a/vespa-documentgen-plugin/pom.xml
+++ b/vespa-documentgen-plugin/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespa-documentgen-plugin</artifactId>
<packaging>maven-plugin</packaging>
diff --git a/vespa-hadoop/pom.xml b/vespa-hadoop/pom.xml
index b9fbd589525..62d9010b9fd 100644
--- a/vespa-hadoop/pom.xml
+++ b/vespa-hadoop/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespa-hadoop</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vespa-http-client/pom.xml b/vespa-http-client/pom.xml
index 15d72b7c1c2..c336c641352 100644
--- a/vespa-http-client/pom.xml
+++ b/vespa-http-client/pom.xml
@@ -7,6 +7,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespa-http-client</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vespa_feed_perf/pom.xml b/vespa_feed_perf/pom.xml
index f54b2df9b8a..436dcc06f3d 100644
--- a/vespa_feed_perf/pom.xml
+++ b/vespa_feed_perf/pom.xml
@@ -13,6 +13,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespa_feed_perf</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vespa_jersey2/pom.xml b/vespa_jersey2/pom.xml
index 3250cd8a41f..781075fd041 100644
--- a/vespa_jersey2/pom.xml
+++ b/vespa_jersey2/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespa_jersey2</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vespaclient-container-plugin/pom.xml b/vespaclient-container-plugin/pom.xml
index 59895438038..3472f3fcdc5 100644
--- a/vespaclient-container-plugin/pom.xml
+++ b/vespaclient-container-plugin/pom.xml
@@ -9,6 +9,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespaclient-container-plugin</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vespaclient-core/pom.xml b/vespaclient-core/pom.xml
index bdb15825fbb..2e427364bd6 100644
--- a/vespaclient-core/pom.xml
+++ b/vespaclient-core/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespaclient-core</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vespaclient-java/pom.xml b/vespaclient-java/pom.xml
index 8cde41d53d7..d692a6ed57f 100644
--- a/vespaclient-java/pom.xml
+++ b/vespaclient-java/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespaclient-java</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vespajlib/pom.xml b/vespajlib/pom.xml
index 1f98a5e4c02..81c385c96ab 100644
--- a/vespajlib/pom.xml
+++ b/vespajlib/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespajlib</artifactId>
<packaging>container-plugin</packaging>
diff --git a/vespalog/pom.xml b/vespalog/pom.xml
index 6cea5ab83d9..6443769afbe 100644
--- a/vespalog/pom.xml
+++ b/vespalog/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vespalog</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/vsm/pom.xml b/vsm/pom.xml
index 8c5b006aeec..3c491906060 100644
--- a/vsm/pom.xml
+++ b/vsm/pom.xml
@@ -8,6 +8,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>vsm</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/yolean/pom.xml b/yolean/pom.xml
index d64ea29a95c..850daae6fea 100644
--- a/yolean/pom.xml
+++ b/yolean/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>yolean</artifactId>
<version>6-SNAPSHOT</version>
diff --git a/zkfacade/pom.xml b/zkfacade/pom.xml
index 45ba8c32372..f9cb8c42688 100644
--- a/zkfacade/pom.xml
+++ b/zkfacade/pom.xml
@@ -6,6 +6,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>parent</artifactId>
<version>6-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>zkfacade</artifactId>
<packaging>container-plugin</packaging>