From d39e86ba1b6f9c18fb540392d18d2e415b9c7dc4 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Tue, 12 Apr 2022 20:13:50 +0200 Subject: Stop sharing multivalue read views. --- .../attribute/i_multi_value_attribute.h | 35 +++++++++--------- .../attribute/i_multi_value_read_view.h | 6 ++-- .../src/vespa/searchlib/attribute/CMakeLists.txt | 1 + .../searchlib/attribute/multivalueattribute.h | 16 ++------- .../searchlib/attribute/multivalueattribute.hpp | 15 ++++++++ .../attribute/raw_multi_value_read_view.cpp | 41 ++++++++++++++++++++++ .../attribute/raw_multi_value_read_view.h | 24 +++++++++++++ .../vespa/searchlib/features/attributefeature.cpp | 14 ++++---- .../vespa/searchlib/features/dotproductfeature.cpp | 24 ++++++------- .../internal_max_reduce_prod_join_feature.cpp | 4 +-- 10 files changed, 127 insertions(+), 53 deletions(-) create mode 100644 searchlib/src/vespa/searchlib/attribute/raw_multi_value_read_view.cpp create mode 100644 searchlib/src/vespa/searchlib/attribute/raw_multi_value_read_view.h diff --git a/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h b/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h index cf72b3cf643..3ed86a076b3 100644 --- a/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h +++ b/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_attribute.h @@ -4,6 +4,8 @@ #include "i_multi_value_read_view.h" +namespace vespalib { class Stash; } + namespace search::attribute { /** @@ -11,6 +13,7 @@ namespace search::attribute { * * The type-safe down-cast functions only return a valid pointer when that particular type is supported. * Otherwise a nullptr is returned. + * The returned read view is owned by the supplied stash. */ class IMultiValueAttribute { public: @@ -29,22 +32,22 @@ public: virtual ~IMultiValueAttribute() {} - virtual const IArrayReadView* as_read_view(ArrayTag) const { return nullptr; } - virtual const IArrayReadView* as_read_view(ArrayTag) const { return nullptr; } - virtual const IArrayReadView* as_read_view(ArrayTag) const { return nullptr; } - virtual const IArrayReadView* as_read_view(ArrayTag) const { return nullptr; } - virtual const IArrayReadView* as_read_view(ArrayTag) const { return nullptr; } - virtual const IArrayReadView* as_read_view(ArrayTag) const { return nullptr; } - - virtual const IWeightedSetReadView* as_read_view(WeightedSetTag) const { return nullptr; } - virtual const IWeightedSetReadView* as_read_view(WeightedSetTag) const { return nullptr; } - virtual const IWeightedSetReadView* as_read_view(WeightedSetTag) const { return nullptr; } - virtual const IWeightedSetReadView* as_read_view(WeightedSetTag) const { return nullptr; } - virtual const IWeightedSetReadView* as_read_view(WeightedSetTag) const { return nullptr; } - virtual const IWeightedSetReadView* as_read_view(WeightedSetTag) const { return nullptr; } - - virtual const IArrayEnumReadView* as_read_view(ArrayEnumTag) const { return nullptr; } - virtual const IWeightedSetEnumReadView* as_read_view(WeightedSetEnumTag) const { return nullptr; } + virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } + virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } + virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } + virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } + virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } + virtual const IArrayReadView* make_read_view(ArrayTag, vespalib::Stash&) const { return nullptr; } + + virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } + virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } + virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } + virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } + virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } + virtual const IWeightedSetReadView* make_read_view(WeightedSetTag, vespalib::Stash&) const { return nullptr; } + + virtual const IArrayEnumReadView* make_read_view(ArrayEnumTag, vespalib::Stash&) const { return nullptr; } + virtual const IWeightedSetEnumReadView* make_read_view(WeightedSetEnumTag, vespalib::Stash&) const { return nullptr; } }; } diff --git a/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h b/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h index b62efb2098f..8e5005eae8d 100644 --- a/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h +++ b/searchcommon/src/vespa/searchcommon/attribute/i_multi_value_read_view.h @@ -9,14 +9,14 @@ namespace search::attribute { /** - * Read view for the raw data stored in a multi-value attribute. - * @tparam MultiValueType The multi-value type of the raw data to access. + * Read view for the data stored in a multi-value attribute. + * @tparam MultiValueType The multi-value type of the data to access. */ template class IMultiValueReadView { public: virtual ~IMultiValueReadView() {} - virtual vespalib::ConstArrayRef get_raw_values(uint32_t docid) const = 0; + virtual vespalib::ConstArrayRef get_values(uint32_t docid) const = 0; }; /** diff --git a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt index 2e562b4a54f..79c68ba4fe3 100644 --- a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt @@ -94,6 +94,7 @@ vespa_add_library(searchlib_attribute OBJECT postinglisttraits.cpp postingstore.cpp predicate_attribute.cpp + raw_multi_value_read_view.cpp readerbase.cpp reference_attribute.cpp reference_attribute_saver.cpp diff --git a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h index 9eb1a06d042..3844c0f9b02 100644 --- a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h @@ -19,8 +19,7 @@ namespace search { */ template class MultiValueAttribute : public B, - public attribute::IMultiValueAttribute, - public attribute::IMultiValueReadView + public attribute::IMultiValueAttribute { protected: typedef typename B::DocId DocId; @@ -80,19 +79,10 @@ public: void onShrinkLidSpace() override ; void onAddDocs(DocId lidLimit) override; - const IMultiValueAttribute* as_multi_value_attribute() const override { - return this; - } + const IMultiValueAttribute* as_multi_value_attribute() const override; // Implements attribute::IMultiValueAttribute - const attribute::IMultiValueReadView* as_read_view(attribute::IMultiValueAttribute::Tag) const override { - return this; - } - - // Implements attribute::IMultiValueReadView - vespalib::ConstArrayRef get_raw_values(uint32_t docid) const override { - return this->_mvMapping.get(docid); - } + const attribute::IMultiValueReadView* make_read_view(attribute::IMultiValueAttribute::Tag, vespalib::Stash& stash) const override; }; } // namespace search diff --git a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp index 8cf86f66236..04194f662d9 100644 --- a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.hpp @@ -3,10 +3,12 @@ #pragma once #include "address_space_components.h" +#include "raw_multi_value_read_view.h" #include #include #include #include +#include namespace search { @@ -289,6 +291,19 @@ MultiValueAttribute::onShrinkLidSpace() this->setNumDocs(committedDocIdLimit); } +template +const attribute::IMultiValueAttribute* +MultiValueAttribute::as_multi_value_attribute() const +{ + return this; +} + +template +const attribute::IMultiValueReadView* +MultiValueAttribute::make_read_view(attribute::IMultiValueAttribute::Tag, vespalib::Stash& stash) const +{ + return &stash.create>(this->_mvMapping.make_read_view(this->getCommittedDocIdLimit())); +} } // namespace search diff --git a/searchlib/src/vespa/searchlib/attribute/raw_multi_value_read_view.cpp b/searchlib/src/vespa/searchlib/attribute/raw_multi_value_read_view.cpp new file mode 100644 index 00000000000..66e7b7fec9b --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/raw_multi_value_read_view.cpp @@ -0,0 +1,41 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "raw_multi_value_read_view.h" + +namespace search::attribute { + +template +RawMultiValueReadView::RawMultiValueReadView(MultiValueMappingReadView mv_mapping_read_view) + : _mv_mapping_read_view(mv_mapping_read_view) +{ +} + +template +RawMultiValueReadView::~RawMultiValueReadView() = default; + +template +vespalib::ConstArrayRef +RawMultiValueReadView::get_values(uint32_t docid) const +{ + return _mv_mapping_read_view.get(docid); +} + +template class RawMultiValueReadView; +template class RawMultiValueReadView; +template class RawMultiValueReadView; +template class RawMultiValueReadView; +template class RawMultiValueReadView; +template class RawMultiValueReadView; +template class RawMultiValueReadView; + +using multivalue::WeightedValue; + +template class RawMultiValueReadView>; +template class RawMultiValueReadView>; +template class RawMultiValueReadView>; +template class RawMultiValueReadView>; +template class RawMultiValueReadView>; +template class RawMultiValueReadView>; +template class RawMultiValueReadView>; + +} diff --git a/searchlib/src/vespa/searchlib/attribute/raw_multi_value_read_view.h b/searchlib/src/vespa/searchlib/attribute/raw_multi_value_read_view.h new file mode 100644 index 00000000000..dc243c2a24f --- /dev/null +++ b/searchlib/src/vespa/searchlib/attribute/raw_multi_value_read_view.h @@ -0,0 +1,24 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include "multi_value_mapping_read_view.h" +#include + +namespace search::attribute { + +/** + * Read view for the raw data stored in a multi-value attribute. + * @tparam MultiValueType The multi-value type of the raw data to access. + */ +template +class RawMultiValueReadView : public IMultiValueReadView +{ + MultiValueMappingReadView _mv_mapping_read_view; +public: + RawMultiValueReadView(MultiValueMappingReadView mv_mapping_read_view); + ~RawMultiValueReadView() override; + vespalib::ConstArrayRef get_values(uint32_t docid) const override; +}; + +} diff --git a/searchlib/src/vespa/searchlib/features/attributefeature.cpp b/searchlib/src/vespa/searchlib/features/attributefeature.cpp index 47445e9e8ee..3b768633dd3 100644 --- a/searchlib/src/vespa/searchlib/features/attributefeature.cpp +++ b/searchlib/src/vespa/searchlib/features/attributefeature.cpp @@ -243,7 +243,7 @@ template void MultiAttributeExecutor::execute(uint32_t docId) { - auto values = _array_read_view->get_raw_values(docId); + auto values = _array_read_view->get_values(docId); auto o = outputs().get_bound(); o[0].as_number = __builtin_expect(_idx < values.size(), true) ? multivalue::get_value(values[_idx]) : 0; } @@ -341,10 +341,10 @@ struct MultiValueExecutorCreator { using ArrayReadView = attribute::IArrayReadView; using ExecType = MultiAttributeExecutor; MultiValueExecutorCreator() : _array_read_view(nullptr) {} - bool handle(const IAttributeVector *attribute) { + bool handle(vespalib::Stash &stash, const IAttributeVector *attribute) { auto multi_value_attribute = attribute->as_multi_value_attribute(); if (multi_value_attribute != nullptr) { - _array_read_view = multi_value_attribute->as_read_view(attribute::IMultiValueAttribute::Tag()); + _array_read_view = multi_value_attribute->make_read_view(attribute::IMultiValueAttribute::Tag(), stash); } return _array_read_view != nullptr; } @@ -422,19 +422,19 @@ createAttributeExecutor(uint32_t numOutputs, const IAttributeVector *attribute, } else if (attribute->isIntegerType()) { if (basicType == BasicType::INT32) { MultiValueExecutorCreator> creator; - if (creator.handle(attribute)) return creator.create(stash, idx); + if (creator.handle(stash, attribute)) return creator.create(stash, idx); } else if (basicType == BasicType::INT64) { MultiValueExecutorCreator> creator; - if (creator.handle(attribute)) return creator.create(stash, idx); + if (creator.handle(stash, attribute)) return creator.create(stash, idx); } return stash.create>(attribute, idx); } else { // FLOAT if (basicType == BasicType::DOUBLE) { MultiValueExecutorCreator> creator; - if (creator.handle(attribute)) return creator.create(stash, idx); + if (creator.handle(stash, attribute)) return creator.create(stash, idx); } else { MultiValueExecutorCreator> creator; - if (creator.handle(attribute)) return creator.create(stash, idx); + if (creator.handle(stash, attribute)) return creator.create(stash, idx); } return stash.create>(attribute, idx); } diff --git a/searchlib/src/vespa/searchlib/features/dotproductfeature.cpp b/searchlib/src/vespa/searchlib/features/dotproductfeature.cpp index b279cf6ca08..8f75b6ecc7d 100644 --- a/searchlib/src/vespa/searchlib/features/dotproductfeature.cpp +++ b/searchlib/src/vespa/searchlib/features/dotproductfeature.cpp @@ -145,7 +145,7 @@ template vespalib::ConstArrayRef::AT> DotProductByWeightedSetReadViewExecutor::getAttributeValues(uint32_t docId) { - return _weighted_set_read_view->get_raw_values(docId); + return _weighted_set_read_view->get_values(docId); } namespace { @@ -190,7 +190,7 @@ DotProductExecutorByEnum::~DotProductExecutorByEnum() = default; void DotProductExecutorByEnum::execute(uint32_t docId) { feature_t val = 0; - auto values = _weighted_set_enum_read_view->get_raw_values(docId); + auto values = _weighted_set_enum_read_view->get_values(docId); for (size_t i = 0; i < values.size(); ++i) { auto itr = _queryVector.getDimMap().find(values[i].value_ref().load_relaxed().ref()); if (itr != _end) { @@ -210,7 +210,7 @@ public: {} void execute(uint32_t docId) override { - auto values = _weighted_set_enum_read_view->get_raw_values(docId); + auto values = _weighted_set_enum_read_view->get_values(docId); for (size_t i = 0; i < values.size(); ++i) { if (values[i].value_ref().load_relaxed().ref() == _key) { outputs().set_number(0, values[i].weight()*_value); @@ -236,7 +236,7 @@ public: {} void execute(uint32_t docId) override { - auto values = _weighted_set_read_view->get_raw_values(docId); + auto values = _weighted_set_read_view->get_values(docId); for (size_t i = 0; i < values.size(); ++i) { if (values[i].value() == _key) { outputs().set_number(0, values[i].weight() * _value); @@ -290,7 +290,7 @@ template vespalib::ConstArrayRef DotProductByArrayReadViewExecutor::getAttributeValues(uint32_t docId) { - return _array_read_view->get_raw_values(docId); + return _array_read_view->get_values(docId); } template @@ -328,7 +328,7 @@ template vespalib::ConstArrayRef SparseDotProductByArrayReadViewExecutor::getAttributeValues(uint32_t docid) { - auto allValues = _array_read_view->get_raw_values(docid); + auto allValues = _array_read_view->get_values(docid); size_t i(0); for (; (i < _queryIndexes.size()) && (_queryIndexes[i] < allValues.size()); i++) { _scratch[i] = allValues[_queryIndexes[i]]; @@ -533,11 +533,11 @@ using dotproduct::ArrayParam; template const attribute::IMultiValueReadView* -get_multi_value_read_view(const IAttributeVector& attribute) +make_multi_value_read_view(const IAttributeVector& attribute, vespalib::Stash& stash) { auto multi_value_attribute = attribute.as_multi_value_attribute(); if (multi_value_attribute != nullptr) { - return multi_value_attribute->as_read_view(attribute::IMultiValueAttribute::Tag()); + return multi_value_attribute->make_read_view(attribute::IMultiValueAttribute::Tag(), stash); } return nullptr; } @@ -556,7 +556,7 @@ createForDirectArrayImpl(const IAttributeVector * attribute, const A * iattr = dynamic_cast(attribute); using T = typename A::BaseType; using VT = T; - auto array_read_view = get_multi_value_read_view(*attribute); + auto array_read_view = make_multi_value_read_view(*attribute, stash); if (indexes.empty()) { if (array_read_view != nullptr) { return stash.create>(array_read_view, values); @@ -658,7 +658,7 @@ createForDirectWSetImpl(const IAttributeVector * attribute, V && vector, vespali using T = typename A::BaseType; const A * iattr = dynamic_cast(attribute); using VT = multivalue::WeightedValue; - auto weighted_set_read_view = get_multi_value_read_view(*attribute); + auto weighted_set_read_view = make_multi_value_read_view(*attribute, stash); if (!attribute->isImported() && (iattr != nullptr) && weighted_set_read_view != nullptr) { if (extractSize(vector) == 1) { auto elem = extractElem(vector, 0ul); @@ -719,7 +719,7 @@ createFromObject(const IAttributeVector * attribute, const fef::Anything & objec return stash.create(); } using VT = multivalue::WeightedValue; - auto* weighted_set_enum_read_view = get_multi_value_read_view(*attribute); + auto* weighted_set_enum_read_view = make_multi_value_read_view(*attribute, stash); if (weighted_set_enum_read_view != nullptr) { if (vector.getVector().size() == 1) { const auto & elem = vector.getVector()[0]; @@ -814,7 +814,7 @@ createTypedWsetExecutor(const IAttributeVector * attribute, const Property & pro } vector->syncMap(); using VT = multivalue::WeightedValue; - auto* weighted_set_enum_read_view = get_multi_value_read_view(*attribute); + auto* weighted_set_enum_read_view = make_multi_value_read_view(*attribute, stash); if (weighted_set_enum_read_view != nullptr) { if (vector->getVector().size() == 1) { const auto & elem = vector->getVector()[0]; diff --git a/searchlib/src/vespa/searchlib/features/internal_max_reduce_prod_join_feature.cpp b/searchlib/src/vespa/searchlib/features/internal_max_reduce_prod_join_feature.cpp index e69c3703c2c..5e3dc727279 100644 --- a/searchlib/src/vespa/searchlib/features/internal_max_reduce_prod_join_feature.cpp +++ b/searchlib/src/vespa/searchlib/features/internal_max_reduce_prod_join_feature.cpp @@ -90,7 +90,7 @@ feature_t maxProduct(const A &array, size_t count, const V &query) { template void RawExecutor::execute(uint32_t docId) { - auto values = _array_read_view->get_raw_values(docId); + auto values = _array_read_view->get_values(docId); outputs().set_number(0, maxProduct(values.data(), values.size(), _queryVector)); } @@ -147,7 +147,7 @@ selectTypedExecutor(const IAttributeVector *attribute, V && vector, vespalib::St using VT = BaseType; auto multi_value_attribute = attribute->as_multi_value_attribute(); if (multi_value_attribute != nullptr) { - auto array_read_view = multi_value_attribute->as_read_view(attribute::IMultiValueAttribute::Tag()); + auto array_read_view = multi_value_attribute->make_read_view(attribute::IMultiValueAttribute::Tag(), stash); if (array_read_view != nullptr) { return stash.create>(array_read_view, std::forward(vector)); } -- cgit v1.2.3 From 0120a154a9acd75836153f0db887964ffc3d433d Mon Sep 17 00:00:00 2001 From: jonmv Date: Wed, 13 Apr 2022 08:51:29 +0200 Subject: Allow -1 as project id to indicate NO project id, which disabled dep orch --- .../com/yahoo/vespa/hosted/controller/application/InstanceList.java | 5 +++-- .../yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java | 2 ++ .../com/yahoo/vespa/hosted/controller/deployment/JobController.java | 2 +- .../com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java | 4 +++- .../controller/restapi/application/ApplicationApiHandler.java | 6 ++---- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/InstanceList.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/InstanceList.java index 030f7678b8c..6178bfbb89e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/InstanceList.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/InstanceList.java @@ -72,8 +72,9 @@ public class InstanceList extends AbstractFilteringList instances.get(id).jobSteps().values().stream() - .anyMatch(job -> job.isDeclared() && job.job().get().application().equals(id))); + return matching(id -> instances.get(id).application().revisions().last().isPresent() + && instances.get(id).jobSteps().values().stream() + .anyMatch(job -> job.isDeclared() && job.job().get().application().equals(id))); } /** Returns the subset of instances which have at least one deployment on a lower version than the given one, or which have no production deployments */ diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java index a2c5b8f4a9b..814e33f616b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentStatus.java @@ -182,6 +182,8 @@ public class DeploymentStatus { } private Map> jobsToRun(Map changes, boolean eagerTests) { + if (application.revisions().last().isEmpty()) return Map.of(); + Map> productionJobs = new LinkedHashMap<>(); changes.forEach((instance, change) -> productionJobs.putAll(productionJobs(instance, change, eagerTests))); Map> testJobs = testJobs(productionJobs); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java index 57c817e6cd5..d1c19476929 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java @@ -478,7 +478,7 @@ public class JobController { controller.clock().instant(), applicationPackage.metaDataZip()); - application = application.withProjectId(OptionalLong.of(projectId)); + application = application.withProjectId(projectId == -1 ? OptionalLong.empty() : OptionalLong.of(projectId)); application = application.withRevisions(revisions -> revisions.with(version.get())); application = withPrunedPackages(application); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java index e412a5cc9f7..fa5afa3a216 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java @@ -66,7 +66,9 @@ public class Upgrader extends ControllerMaintainer { /** Returns a list of all production application instances, except those which are pinned, which we should not manipulate here. */ private InstanceList instances(Version systemVersion) { - return InstanceList.from(controller().jobController().deploymentStatuses(ApplicationList.from(controller().applications().readable()), systemVersion)) + return InstanceList.from(controller().jobController().deploymentStatuses(ApplicationList.from(controller().applications().readable()) + .withProjectId(), + systemVersion)) .withDeclaredJobs() .shuffle(random) .byIncreasingDeployedVersion() diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 59240960dd1..a3b7ae338ff 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -801,9 +801,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { } private HttpResponse devApplicationPackage(ApplicationId id, JobType type) { - if ( ! type.environment().isManuallyDeployed()) - throw new IllegalArgumentException("Only manually deployed zones have dev packages"); - ZoneId zone = type.zone(controller.system()); RevisionId revision = controller.jobController().last(id, type).get().versions().targetRevision(); byte[] applicationPackage = controller.applications().applicationStore().get(new DeploymentId(id, zone), revision); @@ -2724,7 +2721,8 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { private HttpResponse submit(String tenant, String application, HttpRequest request) { Map dataParts = parseDataParts(request); Inspector submitOptions = SlimeUtils.jsonToSlime(dataParts.get(EnvironmentResource.SUBMIT_OPTIONS)).get(); - long projectId = Math.max(1, submitOptions.field("projectId").asLong()); // Absence of this means it's not a prod app :/ + long projectId = submitOptions.field("projectId").asLong(); // Absence of this means it's not a prod app :/ + projectId = projectId == 0 ? 1 : projectId; Optional repository = optional("repository", submitOptions); Optional branch = optional("branch", submitOptions); Optional commit = optional("commit", submitOptions); -- cgit v1.2.3 From 026b0dceb6cc4a5c6ee701e1d7e21b79b101c48a Mon Sep 17 00:00:00 2001 From: Geir Storli Date: Wed, 13 Apr 2022 09:17:28 +0000 Subject: Provide default value for persistence-async-throttling. --- .../src/main/java/com/yahoo/config/model/api/ModelContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java index e98a5254e09..360968bacd5 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java @@ -107,7 +107,7 @@ public interface ModelContext { @ModelFeatureFlag(owners = {"hmusum"}) default boolean failDeploymentWithInvalidJvmOptions() { return false; } @ModelFeatureFlag(owners = {"arnej", "andreer"}) default List ignoredHttpUserAgents() { return List.of(); } @ModelFeatureFlag(owners = {"bjorncs"}) default boolean enableServerOcspStapling() { return false; } - @ModelFeatureFlag(owners = {"vekterli"}) default String persistenceAsyncThrottling() { throw new UnsupportedOperationException("TODO specify default value"); } + @ModelFeatureFlag(owners = {"vekterli"}) default String persistenceAsyncThrottling() { return "DYNAMIC"; } @ModelFeatureFlag(owners = {"vekterli"}) default String mergeThrottlingPolicy() { throw new UnsupportedOperationException("TODO specify default value"); } @ModelFeatureFlag(owners = {"vekterli"}) default double persistenceThrottlingWsDecrementFactor() { throw new UnsupportedOperationException("TODO specify default value"); } @ModelFeatureFlag(owners = {"vekterli"}) default double persistenceThrottlingWsBackoff() { throw new UnsupportedOperationException("TODO specify default value"); } -- cgit v1.2.3 From 9f3d8f102a833d02ba65ca40192663e1d49a10ed Mon Sep 17 00:00:00 2001 From: Arnstein Ressem Date: Wed, 13 Apr 2022 11:29:23 +0200 Subject: Print go environment before building. --- dist/vespa.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/dist/vespa.spec b/dist/vespa.spec index 71d976f64a3..f3c148a74c4 100644 --- a/dist/vespa.spec +++ b/dist/vespa.spec @@ -595,6 +595,7 @@ mvn --batch-mode -e -N io.takari:maven:wrapper -Dmaven=3.6.3 . make %{_smp_mflags} +go env VERSION=%{version} make -C client/go install-all %endif -- cgit v1.2.3 From df1cf5402a7f237db9a80ad231286087488f5f6b Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Wed, 13 Apr 2022 14:43:35 +0200 Subject: Use google test for extendable attribute unit test. --- .../attribute/extendattributes/CMakeLists.txt | 4 +- .../attribute/extendattributes/extendattribute.cpp | 175 ++++++++++++--------- .../extendattributes/extendattribute_test.sh | 5 - 3 files changed, 101 insertions(+), 83 deletions(-) delete mode 100755 searchlib/src/tests/attribute/extendattributes/extendattribute_test.sh diff --git a/searchlib/src/tests/attribute/extendattributes/CMakeLists.txt b/searchlib/src/tests/attribute/extendattributes/CMakeLists.txt index e989d317b9c..f733f3d0091 100644 --- a/searchlib/src/tests/attribute/extendattributes/CMakeLists.txt +++ b/searchlib/src/tests/attribute/extendattributes/CMakeLists.txt @@ -4,6 +4,6 @@ vespa_add_executable(searchlib_extendattribute_test_app TEST extendattribute.cpp DEPENDS searchlib + GTest::GTest ) -vespa_add_test(NAME searchlib_extendattribute_test_app COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/extendattribute_test.sh - DEPENDS searchlib_extendattribute_test_app) +vespa_add_test(NAME searchlib_extendattribute_test_app COMMAND searchlib_extendattribute_test_app) diff --git a/searchlib/src/tests/attribute/extendattributes/extendattribute.cpp b/searchlib/src/tests/attribute/extendattributes/extendattribute.cpp index 6707a7c6edf..35dd0351f34 100644 --- a/searchlib/src/tests/attribute/extendattributes/extendattribute.cpp +++ b/searchlib/src/tests/attribute/extendattributes/extendattribute.cpp @@ -1,58 +1,55 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include -LOG_SETUP("extendattribute_test"); -#include +#include #include namespace search { -class ExtendAttributeTest : public vespalib::TestApp +class ExtendAttributeTest : public ::testing::Test { -private: +protected: + ExtendAttributeTest() = default; + ~ExtendAttributeTest() override = default; template void testExtendInteger(Attribute & attr); template void testExtendFloat(Attribute & attr); template void testExtendString(Attribute & attr); - -public: - int Main() override; }; template void ExtendAttributeTest::testExtendInteger(Attribute & attr) { uint32_t docId(0); - EXPECT_EQUAL(attr.getNumDocs(), 0u); + EXPECT_EQ(attr.getNumDocs(), 0u); attr.addDoc(docId); - EXPECT_EQUAL(docId, 0u); - EXPECT_EQUAL(attr.getNumDocs(), 1u); + EXPECT_EQ(docId, 0u); + EXPECT_EQ(attr.getNumDocs(), 1u); attr.add(1, 10); - EXPECT_EQUAL(attr.getInt(0), 1); + EXPECT_EQ(attr.getInt(0), 1); attr.add(2, 20); - EXPECT_EQUAL(attr.getInt(0), attr.hasMultiValue() ? 1 : 2); + EXPECT_EQ(attr.getInt(0), attr.hasMultiValue() ? 1 : 2); if (attr.hasMultiValue()) { AttributeVector::WeightedInt v[2]; - EXPECT_EQUAL((static_cast(attr)).get(0, v, 2), 2u); - EXPECT_EQUAL(v[0].getValue(), 1); - EXPECT_EQUAL(v[1].getValue(), 2); + EXPECT_EQ((static_cast(attr)).get(0, v, 2), 2u); + EXPECT_EQ(v[0].getValue(), 1); + EXPECT_EQ(v[1].getValue(), 2); if (attr.hasWeightedSetType()) { - EXPECT_EQUAL(v[0].getWeight(), 10); - EXPECT_EQUAL(v[1].getWeight(), 20); + EXPECT_EQ(v[0].getWeight(), 10); + EXPECT_EQ(v[1].getWeight(), 20); } } attr.addDoc(docId); - EXPECT_EQUAL(docId, 1u); - EXPECT_EQUAL(attr.getNumDocs(), 2u); + EXPECT_EQ(docId, 1u); + EXPECT_EQ(attr.getNumDocs(), 2u); attr.add(3, 30); - EXPECT_EQUAL(attr.getInt(1), 3); + EXPECT_EQ(attr.getInt(1), 3); if (attr.hasMultiValue()) { AttributeVector::WeightedInt v[1]; - EXPECT_EQUAL((static_cast(attr)).get(1, v, 1), 1u); - EXPECT_EQUAL(v[0].getValue(), 3); + EXPECT_EQ((static_cast(attr)).get(1, v, 1), 1u); + EXPECT_EQ(v[0].getValue(), 3); if (attr.hasWeightedSetType()) { - EXPECT_EQUAL(v[0].getWeight(), 30); + EXPECT_EQ(v[0].getWeight(), 30); } } } @@ -61,36 +58,36 @@ template void ExtendAttributeTest::testExtendFloat(Attribute & attr) { uint32_t docId(0); - EXPECT_EQUAL(attr.getNumDocs(), 0u); + EXPECT_EQ(attr.getNumDocs(), 0u); attr.addDoc(docId); - EXPECT_EQUAL(docId, 0u); - EXPECT_EQUAL(attr.getNumDocs(), 1u); + EXPECT_EQ(docId, 0u); + EXPECT_EQ(attr.getNumDocs(), 1u); attr.add(1.7, 10); - EXPECT_EQUAL(attr.getInt(0), 1); - EXPECT_EQUAL(attr.getFloat(0), 1.7); + EXPECT_EQ(attr.getInt(0), 1); + EXPECT_EQ(attr.getFloat(0), 1.7); attr.add(2.3, 20); - EXPECT_EQUAL(attr.getFloat(0), attr.hasMultiValue() ? 1.7 : 2.3); + EXPECT_EQ(attr.getFloat(0), attr.hasMultiValue() ? 1.7 : 2.3); if (attr.hasMultiValue()) { AttributeVector::WeightedFloat v[2]; - EXPECT_EQUAL((static_cast(attr)).get(0, v, 2), 2u); - EXPECT_EQUAL(v[0].getValue(), 1.7); - EXPECT_EQUAL(v[1].getValue(), 2.3); + EXPECT_EQ((static_cast(attr)).get(0, v, 2), 2u); + EXPECT_EQ(v[0].getValue(), 1.7); + EXPECT_EQ(v[1].getValue(), 2.3); if (attr.hasWeightedSetType()) { - EXPECT_EQUAL(v[0].getWeight(), 10); - EXPECT_EQUAL(v[1].getWeight(), 20); + EXPECT_EQ(v[0].getWeight(), 10); + EXPECT_EQ(v[1].getWeight(), 20); } } attr.addDoc(docId); - EXPECT_EQUAL(docId, 1u); - EXPECT_EQUAL(attr.getNumDocs(), 2u); + EXPECT_EQ(docId, 1u); + EXPECT_EQ(attr.getNumDocs(), 2u); attr.add(3.6, 30); - EXPECT_EQUAL(attr.getFloat(1), 3.6); + EXPECT_EQ(attr.getFloat(1), 3.6); if (attr.hasMultiValue()) { AttributeVector::WeightedFloat v[1]; - EXPECT_EQUAL((static_cast(attr)).get(1, v, 1), 1u); - EXPECT_EQUAL(v[0].getValue(), 3.6); + EXPECT_EQ((static_cast(attr)).get(1, v, 1), 1u); + EXPECT_EQ(v[0].getValue(), 3.6); if (attr.hasWeightedSetType()) { - EXPECT_EQUAL(v[0].getWeight(), 30); + EXPECT_EQ(v[0].getWeight(), 30); } } } @@ -99,77 +96,103 @@ template void ExtendAttributeTest::testExtendString(Attribute & attr) { uint32_t docId(0); - EXPECT_EQUAL(attr.getNumDocs(), 0u); + EXPECT_EQ(attr.getNumDocs(), 0u); attr.addDoc(docId); - EXPECT_EQUAL(docId, 0u); - EXPECT_EQUAL(attr.getNumDocs(), 1u); + EXPECT_EQ(docId, 0u); + EXPECT_EQ(attr.getNumDocs(), 1u); attr.add("1.7", 10); - EXPECT_EQUAL(std::string(attr.getString(0, NULL, 0)), "1.7"); + EXPECT_EQ(std::string(attr.getString(0, NULL, 0)), "1.7"); attr.add("2.3", 20); - EXPECT_EQUAL(std::string(attr.getString(0, NULL, 0)), attr.hasMultiValue() ? "1.7" : "2.3"); + EXPECT_EQ(std::string(attr.getString(0, NULL, 0)), attr.hasMultiValue() ? "1.7" : "2.3"); if (attr.hasMultiValue()) { AttributeVector::WeightedString v[2]; - EXPECT_EQUAL((static_cast(attr)).get(0, v, 2), 2u); - EXPECT_EQUAL(v[0].getValue(), "1.7"); - EXPECT_EQUAL(v[1].getValue(), "2.3"); + EXPECT_EQ((static_cast(attr)).get(0, v, 2), 2u); + EXPECT_EQ(v[0].getValue(), "1.7"); + EXPECT_EQ(v[1].getValue(), "2.3"); if (attr.hasWeightedSetType()) { - EXPECT_EQUAL(v[0].getWeight(), 10); - EXPECT_EQUAL(v[1].getWeight(), 20); + EXPECT_EQ(v[0].getWeight(), 10); + EXPECT_EQ(v[1].getWeight(), 20); } } attr.addDoc(docId); - EXPECT_EQUAL(docId, 1u); - EXPECT_EQUAL(attr.getNumDocs(), 2u); + EXPECT_EQ(docId, 1u); + EXPECT_EQ(attr.getNumDocs(), 2u); attr.add("3.6", 30); - EXPECT_EQUAL(std::string(attr.getString(1, NULL, 0)), "3.6"); + EXPECT_EQ(std::string(attr.getString(1, NULL, 0)), "3.6"); if (attr.hasMultiValue()) { AttributeVector::WeightedString v[1]; - EXPECT_EQUAL((static_cast(attr)).get(1, v, 1), 1u); - EXPECT_EQUAL(v[0].getValue(), "3.6"); + EXPECT_EQ((static_cast(attr)).get(1, v, 1), 1u); + EXPECT_EQ(v[0].getValue(), "3.6"); if (attr.hasWeightedSetType()) { - EXPECT_EQUAL(v[0].getWeight(), 30); + EXPECT_EQ(v[0].getWeight(), 30); } } } -int -ExtendAttributeTest::Main() -{ - TEST_INIT("extendattribute_test"); +TEST_F(ExtendAttributeTest, single_integer_ext_attribute) +{ SingleIntegerExtAttribute siattr("si1"); - MultiIntegerExtAttribute miattr("mi1"); - WeightedSetIntegerExtAttribute wsiattr("wsi1"); EXPECT_TRUE( ! siattr.hasMultiValue() ); - EXPECT_TRUE( miattr.hasMultiValue() ); - EXPECT_TRUE( wsiattr.hasWeightedSetType() ); testExtendInteger(siattr); +} + +TEST_F(ExtendAttributeTest, array_integer_ext_attribute) +{ + MultiIntegerExtAttribute miattr("mi1"); + EXPECT_TRUE( miattr.hasMultiValue() ); testExtendInteger(miattr); +} + +TEST_F(ExtendAttributeTest, weighted_set_integer_ext_attribute) +{ + WeightedSetIntegerExtAttribute wsiattr("wsi1"); + EXPECT_TRUE( wsiattr.hasWeightedSetType() ); testExtendInteger(wsiattr); +} +TEST_F(ExtendAttributeTest, single_float_ext_attribute) +{ SingleFloatExtAttribute sdattr("sd1"); - MultiFloatExtAttribute mdattr("md1"); - WeightedSetFloatExtAttribute wsdattr("wsd1"); EXPECT_TRUE( ! sdattr.hasMultiValue() ); - EXPECT_TRUE( mdattr.hasMultiValue() ); - EXPECT_TRUE( wsdattr.hasWeightedSetType() ); testExtendFloat(sdattr); +} + +TEST_F(ExtendAttributeTest, array_float_ext_attribute) +{ + MultiFloatExtAttribute mdattr("md1"); + EXPECT_TRUE( mdattr.hasMultiValue() ); testExtendFloat(mdattr); +} + +TEST_F(ExtendAttributeTest, weighted_set_float_ext_attribute) +{ + WeightedSetFloatExtAttribute wsdattr("wsd1"); + EXPECT_TRUE( wsdattr.hasWeightedSetType() ); testExtendFloat(wsdattr); +} +TEST_F(ExtendAttributeTest, single_string_ext_attribute) +{ SingleStringExtAttribute ssattr("ss1"); - MultiStringExtAttribute msattr("ms1"); - WeightedSetStringExtAttribute wssattr("wss1"); EXPECT_TRUE( ! ssattr.hasMultiValue() ); - EXPECT_TRUE( msattr.hasMultiValue() ); - EXPECT_TRUE( wssattr.hasWeightedSetType() ); testExtendString(ssattr); +} + +TEST_F(ExtendAttributeTest, array_string_ext_attribute) +{ + MultiStringExtAttribute msattr("ms1"); + EXPECT_TRUE( msattr.hasMultiValue() ); testExtendString(msattr); - testExtendString(wssattr); +} - TEST_DONE(); +TEST_F(ExtendAttributeTest, weighted_set_string_ext_attribute) +{ + WeightedSetStringExtAttribute wssattr("wss1"); + EXPECT_TRUE( wssattr.hasWeightedSetType() ); + testExtendString(wssattr); } } -TEST_APPHOOK(search::ExtendAttributeTest); +GTEST_MAIN_RUN_ALL_TESTS() diff --git a/searchlib/src/tests/attribute/extendattributes/extendattribute_test.sh b/searchlib/src/tests/attribute/extendattributes/extendattribute_test.sh deleted file mode 100755 index 250725ac052..00000000000 --- a/searchlib/src/tests/attribute/extendattributes/extendattribute_test.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -set -e -$VALGRIND ./searchlib_extendattribute_test_app -rm -rf *.dat -- cgit v1.2.3 From d8e4f5412c5ed26300213a4fb006aa85c00c1a04 Mon Sep 17 00:00:00 2001 From: jonmv Date: Wed, 13 Apr 2022 18:51:45 +0200 Subject: Proxy orchestrator/v1/ for a deployment --- .../api/integration/configserver/ConfigServer.java | 3 +++ .../yahoo/vespa/hosted/controller/api/role/PathGroup.java | 1 + .../restapi/application/ApplicationApiHandler.java | 6 ++++++ .../hosted/controller/integration/ConfigServerMock.java | 12 +++++++++--- .../controller/restapi/application/ApplicationApiTest.java | 5 +++++ 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java index 6dccf493d92..0b23f1c2f3f 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ConfigServer.java @@ -60,6 +60,9 @@ public interface ConfigServer { /** Returns a proxied response from a given path running on a given service and node */ ProxyResponse getServiceNodePage(DeploymentId deployment, String serviceName, DomainName node, Path subPath, Query query); + /** Returns health status for the services of an application */ + ProxyResponse getServiceNodes(DeploymentId deployment); + /** * Gets the Vespa logs of the given deployment. * diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java index b7874734e11..b5f03756777 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java @@ -115,6 +115,7 @@ enum PathGroup { "/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/environment/{environment}/region/{region}/clusters", "/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/environment/{environment}/region/{region}/content/{*}", "/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/environment/{environment}/region/{region}/logs", + "/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/environment/{environment}/region/{region}/orchestrator", "/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/environment/{environment}/region/{region}/suspended", "/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/environment/{environment}/region/{region}/service/{*}", "/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/environment/{environment}/region/{region}/access/support", diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index a3b7ae338ff..b0262506c42 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -272,6 +272,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service/{service}/state/v1/{*}")) return service(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.getRest(), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service/{service}/{host}/status/{*}")) return status(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.get("host"), path.getRest(), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/service/{service}/{host}/state/v1/{*}")) return stateV1(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.get("service"), path.get("host"), path.getRest(), request); + if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/orchestrator")) return orchestrator(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region")); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/nodes")) return nodes(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region")); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/clusters")) return clusters(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region")); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/environment/{environment}/region/{region}/content/{*}")) return content(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), path.getRest(), request); @@ -1799,6 +1800,11 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { Query.empty().add(request.getJDiscRequest().parameters())); } + private HttpResponse orchestrator(String tenantName, String applicationName, String instanceName, String environment, String region) { + DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenantName, applicationName, instanceName), requireZone(environment, region)); + return controller.serviceRegistry().configServer().getServiceNodes(deploymentId); + } + private HttpResponse stateV1(String tenantName, String applicationName, String instanceName, String environment, String region, String serviceName, String host, HttpURL.Path rest, HttpRequest request) { DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenantName, applicationName, instanceName), requireZone(environment, region)); Query query = Query.empty().add(request.getJDiscRequest().parameters()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java index 9eb1a375e6f..a9937fad01e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java @@ -74,6 +74,7 @@ import java.util.stream.Collectors; import static com.yahoo.config.provision.NodeResources.DiskSpeed.slow; import static com.yahoo.config.provision.NodeResources.StorageType.remote; +import static java.nio.charset.StandardCharsets.UTF_8; /** * @author mortent @@ -536,7 +537,12 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer @Override public ProxyResponse getServiceNodePage(DeploymentId deployment, String serviceName, DomainName node, Path subPath, Query query) { - return new ProxyResponse((subPath + " and " + query).getBytes(StandardCharsets.UTF_8), "text/html", 200); + return new ProxyResponse((subPath + " and " + query).getBytes(UTF_8), "text/html", 200); + } + + @Override + public ProxyResponse getServiceNodes(DeploymentId deployment) { + return new ProxyResponse("{\"json\":\"thank you very much\"}".getBytes(UTF_8), "application.json", 200); } @Override @@ -566,12 +572,12 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer @Override public InputStream getLogs(DeploymentId deployment, Map queryParameters) { - return new ByteArrayInputStream(log.get().getBytes(StandardCharsets.UTF_8)); + return new ByteArrayInputStream(log.get().getBytes(UTF_8)); } @Override public ProxyResponse getApplicationPackageContent(DeploymentId deployment, Path path, URI requestUri) { - return new ProxyResponse(("{\"path\":\"/" + String.join("/", path.segments()) + "\"}").getBytes(StandardCharsets.UTF_8), "application/json", 200); + return new ProxyResponse(("{\"path\":\"/" + String.join("/", path.segments()) + "\"}").getBytes(UTF_8), "application/json", 200); } public void setLogStream(Supplier log) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index a9164ddfa9e..cc5af52282d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -709,6 +709,11 @@ public class ApplicationApiTest extends ControllerContainerTest { .userIdentity(USER_ID), new File("service")); + // GET orchestrator + tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/orchestrator", GET) + .userIdentity(USER_ID), + "{\"json\":\"thank you very much\"}"); + // DELETE application with active deployments fails tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1", DELETE) .userIdentity(USER_ID) -- cgit v1.2.3 From 521f75f5567e391f0a9e333dfa947e1d75a32a3c Mon Sep 17 00:00:00 2001 From: Arnstein Ressem Date: Wed, 13 Apr 2022 22:32:07 +0200 Subject: Set CI=true when compiling the go code to make sure that GOPROXY is equally set on Copr for both CentOS 7 and CentOS Stream 8. --- dist/vespa.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dist/vespa.spec b/dist/vespa.spec index f3c148a74c4..104e78e9303 100644 --- a/dist/vespa.spec +++ b/dist/vespa.spec @@ -595,8 +595,7 @@ mvn --batch-mode -e -N io.takari:maven:wrapper -Dmaven=3.6.3 . make %{_smp_mflags} -go env -VERSION=%{version} make -C client/go install-all +VERSION=%{version} CI=true make -C client/go install-all %endif %install -- cgit v1.2.3