summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java6
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java18
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/host/HostValidator.java8
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java4
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java3
-rw-r--r--document/src/vespa/document/select/parse_utils.cpp13
-rw-r--r--eval/src/vespa/eval/instruction/sparse_112_dot_product.cpp9
-rw-r--r--model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java9
-rw-r--r--storage/src/vespa/storageframework/generic/clock/time.cpp1
-rw-r--r--vespalib/src/vespa/vespalib/util/time.cpp18
-rw-r--r--vespalib/src/vespa/vespalib/util/time.h13
12 files changed, 76 insertions, 33 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
index 2a0d62a1c9a..5831cb3e75f 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/TenantApplications.java
@@ -57,7 +57,7 @@ import static java.util.stream.Collectors.toSet;
* @author Ulf Lilleengen
* @author jonmv
*/
-public class TenantApplications implements RequestHandler, HostValidator<ApplicationId> {
+public class TenantApplications implements RequestHandler, HostValidator {
private static final Logger log = Logger.getLogger(TenantApplications.class.getName());
@@ -402,10 +402,6 @@ public class TenantApplications implements RequestHandler, HostValidator<Applica
configActivationListener.verifyHostsAreAvailable(applicationId, newHosts);
}
- public HostValidator<ApplicationId> getHostValidator() {
- return this;
- }
-
public ApplicationId getApplicationIdForHostName(String hostname) {
return hostRegistry.getKeyForHost(hostname);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java b/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java
index 5c161a5f746..b89f3bba835 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostRegistry.java
@@ -1,27 +1,25 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.host;
+import com.google.common.collect.Collections2;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.TenantName;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
-import com.google.common.collect.Collections2;
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.TenantName;
-
-import java.util.logging.Level;
-
/**
* A host registry with a mapping between hosts (hostname as a String) and some type T
* TODO: Maybe we should have a Host type, but using String for now.
*
* @author Ulf Lilleengen
*/
-public class HostRegistry implements HostValidator<ApplicationId> {
+public class HostRegistry implements HostValidator {
private static final Logger log = Logger.getLogger(HostRegistry.class.getName());
@@ -43,10 +41,10 @@ public class HostRegistry implements HostValidator<ApplicationId> {
}
@Override
- public synchronized void verifyHosts(ApplicationId key, Collection<String> newHosts) {
+ public synchronized void verifyHosts(ApplicationId applicationId, Collection<String> newHosts) {
for (String host : newHosts) {
- if (hostAlreadyTaken(host, key)) {
- throw new IllegalArgumentException("'" + key + "' tried to allocate host '" + host +
+ if (hostAlreadyTaken(host, applicationId)) {
+ throw new IllegalArgumentException("'" + applicationId + "' tried to allocate host '" + host +
"', but the host is already taken by '" + host2KeyMap.get(host) + "'");
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostValidator.java b/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostValidator.java
index 0d3cbb3860b..115d135b0c1 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostValidator.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/host/HostValidator.java
@@ -1,16 +1,16 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.host;
+import com.yahoo.config.provision.ApplicationId;
import java.util.Collection;
/**
- * A read only host registry that has mappings from a host to some type T.
- * strings.
+ * A read only host registry that has mappings from a host to application id
*
* @author Ulf Lilleengen
*/
-public interface HostValidator<T> {
+public interface HostValidator {
- void verifyHosts(T key, Collection<String> newHosts);
+ void verifyHosts(ApplicationId applicationId, Collection<String> newHosts);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
index 18f33224d83..1bfa94a1355 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
@@ -45,7 +45,6 @@ import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.logging.Level;
import java.util.logging.Logger;
-import java.util.stream.Collectors;
/**
* @author bratseth
@@ -59,7 +58,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
private final List<ContainerEndpoint> containerEndpoints;
private final Optional<EndpointCertificateSecrets> endpointCertificateSecrets;
private final ConfigDefinitionRepo configDefinitionRepo;
- private final HostValidator<ApplicationId> hostValidator;
+ private final HostValidator hostValidator;
private final PrepareParams params;
private final FileRegistry fileRegistry;
private final Optional<ApplicationSet> currentActiveApplicationSet;
@@ -76,7 +75,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
ExecutorService executor,
HostProvisionerProvider hostProvisionerProvider,
Curator curator,
- HostValidator<ApplicationId> hostValidator,
+ HostValidator hostValidator,
DeployLogger deployLogger,
PrepareParams params,
Optional<ApplicationSet> currentActiveApplicationSet,
@@ -171,7 +170,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
}
}
- private void validateModelHosts(HostValidator<ApplicationId> hostValidator, ApplicationId applicationId, Model model) {
+ private void validateModelHosts(HostValidator hostValidator, ApplicationId applicationId, Model model) {
// Will retry here, since hosts used might not be in sync on all config servers (we wait for 2/3 servers
// to respond to deployments and deletions).
Instant end = Instant.now().plus(Duration.ofSeconds(1));
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
index 17a019067a3..ffafbb8827e 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
@@ -126,7 +126,7 @@ public class SessionPreparer {
* @param activeApplicationSet set of currently active applications.
* @return the config change actions that must be done to handle the activation of the models prepared.
*/
- public PrepareResult prepare(HostValidator<ApplicationId> hostValidator, DeployLogger logger, PrepareParams params,
+ public PrepareResult prepare(HostValidator hostValidator, DeployLogger logger, PrepareParams params,
Optional<ApplicationSet> activeApplicationSet, Instant now, File serverDbSessionDir,
ApplicationPackage applicationPackage, SessionZooKeeperClient sessionZooKeeperClient) {
ApplicationId applicationId = params.getApplicationId();
@@ -181,7 +181,7 @@ public class SessionPreparer {
private final PreparedModelsBuilder preparedModelsBuilder;
private final FileRegistry fileRegistry;
- Preparation(HostValidator<ApplicationId> hostValidator, DeployLogger logger, PrepareParams params,
+ Preparation(HostValidator hostValidator, DeployLogger logger, PrepareParams params,
Optional<ApplicationSet> currentActiveApplicationSet, Path tenantPath,
File serverDbSessionDir, ApplicationPackage applicationPackage,
SessionZooKeeperClient sessionZooKeeperClient) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
index 306b24a3c69..a0597b77539 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
@@ -13,7 +13,6 @@ import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.model.application.provider.DeployData;
import com.yahoo.config.model.application.provider.FilesApplicationPackage;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.Tags;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
@@ -243,7 +242,7 @@ public class SessionRepository {
? Optional.empty()
: Optional.of(sessionZooKeeperClient.createPrepareWaiter());
Optional<ApplicationSet> activeApplicationSet = getActiveApplicationSet(params.getApplicationId());
- ConfigChangeActions actions = sessionPreparer.prepare(applicationRepo.getHostValidator(), logger, params,
+ ConfigChangeActions actions = sessionPreparer.prepare(applicationRepo, logger, params,
activeApplicationSet, now, getSessionAppDir(sessionId),
session.getApplicationPackage(), sessionZooKeeperClient)
.getConfigChangeActions();
diff --git a/document/src/vespa/document/select/parse_utils.cpp b/document/src/vespa/document/select/parse_utils.cpp
index 2e85f81f089..95461442349 100644
--- a/document/src/vespa/document/select/parse_utils.cpp
+++ b/document/src/vespa/document/select/parse_utils.cpp
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "parse_utils.h"
+#include <vespa/vespalib/locale/c.h>
#include <charconv>
#include <limits>
@@ -23,6 +24,17 @@ parse_i64(const char* str, size_t len, int64_t& out) {
}
bool
parse_double(const char* str, size_t len, double& out) {
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 160000
+ // Temporary workaround that also handles underflow (cf. issue 3081)
+ // until libc++ supports std::from_chars for double
+ char *str_end = const_cast<char*>(str) + len;
+ double out0 = vespalib::locale::c::strtod_au(str, &str_end);
+ if (str_end != str + len) {
+ return false;
+ }
+ out = out0;
+ return true;
+#else
auto res = std::from_chars(str, str+len, out);
if (res.ec == std::errc::result_out_of_range) {
out = (str[0] == '-')
@@ -31,6 +43,7 @@ parse_double(const char* str, size_t len, double& out) {
return true;
}
return (res.ec == std::errc()) && (res.ptr == str+len);
+#endif
}
}
diff --git a/eval/src/vespa/eval/instruction/sparse_112_dot_product.cpp b/eval/src/vespa/eval/instruction/sparse_112_dot_product.cpp
index 080f51e384a..b17c2db8b22 100644
--- a/eval/src/vespa/eval/instruction/sparse_112_dot_product.cpp
+++ b/eval/src/vespa/eval/instruction/sparse_112_dot_product.cpp
@@ -16,17 +16,17 @@ using namespace instruction;
namespace {
template <typename T, size_t N>
-ConstArrayRef<T> as_car(std::array<T, N> &array) {
+ConstArrayRef<T> as_car(std::array<T, N> &array) noexcept {
return {array.data(), array.size()};
}
template <typename T, size_t N>
-ConstArrayRef<const T *> as_ccar(std::array<T *, N> &array) {
+ConstArrayRef<const T *> as_ccar(std::array<T *, N> &array) noexcept {
return {array.data(), array.size()};
}
template <typename T>
-ConstArrayRef<T> as_car(T &value) {
+ConstArrayRef<T> as_car(T &value) noexcept {
return {&value, 1};
}
@@ -63,6 +63,9 @@ double my_sparse_112_dot_product_fallback(const Value::Index &a_idx, const Value
template <typename CT>
double my_fast_sparse_112_dot_product(const FastAddrMap *a_map, const FastAddrMap *b_map, const FastAddrMap *c_map,
+ const CT *a_cells, const CT *b_cells, const CT *c_cells) __attribute__((noinline));
+template <typename CT>
+double my_fast_sparse_112_dot_product(const FastAddrMap *a_map, const FastAddrMap *b_map, const FastAddrMap *c_map,
const CT *a_cells, const CT *b_cells, const CT *c_cells)
{
double result = 0.0;
diff --git a/model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java b/model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java
index 9877dd69e83..e8aae24ca9e 100644
--- a/model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java
+++ b/model-evaluation/src/main/java/ai/vespa/models/evaluation/RankProfilesConfigImporter.java
@@ -232,13 +232,16 @@ public class RankProfilesConfigImporter {
protected Tensor readTensorFromFile(String name, TensorType type, FileReference fileReference) {
try {
File file = fileAcquirer.waitFor(fileReference, 7, TimeUnit.DAYS);
- if (file.getName().endsWith(".tbf"))
+ if (file.getName().endsWith(".tbf")) {
return TypedBinaryFormat.decode(Optional.of(type),
GrowableByteBuffer.wrap(IOUtils.readFileBytes(file)));
- else
+ } else if (file.getName().endsWith(".json")) {
+ return com.yahoo.tensor.serialization.JsonFormat.decode(type, IOUtils.readFileBytes(file));
+ } else {
throw new IllegalArgumentException("Constant files on other formats than .tbf are not supported, got " +
file + " for constant " + name);
- // TODO: Support json and json.lz4
+ }
+ // TODO: Support json.lz4
}
catch (InterruptedException e) {
throw new IllegalStateException("Gave up waiting for constant " + name);
diff --git a/storage/src/vespa/storageframework/generic/clock/time.cpp b/storage/src/vespa/storageframework/generic/clock/time.cpp
index a27caa44d40..7c5573b7436 100644
--- a/storage/src/vespa/storageframework/generic/clock/time.cpp
+++ b/storage/src/vespa/storageframework/generic/clock/time.cpp
@@ -2,6 +2,7 @@
#include "time.h"
#include <vespa/vespalib/stllike/asciistream.h>
+#include <ostream>
namespace storage::framework {
diff --git a/vespalib/src/vespa/vespalib/util/time.cpp b/vespalib/src/vespa/vespalib/util/time.cpp
index 51d5e580609..42155647870 100644
--- a/vespalib/src/vespa/vespalib/util/time.cpp
+++ b/vespalib/src/vespa/vespalib/util/time.cpp
@@ -92,3 +92,21 @@ Timer::waitAtLeast(duration dur, bool busyWait) {
}
}
+
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 160000
+
+// Temporary workaround until libc++ supports stream operators for duration
+
+#include <ostream>
+
+namespace std::chrono {
+
+ostream&
+operator<<(ostream& os, const nanoseconds& value)
+{
+ os << value.count() << "ns";
+ return os;
+}
+
+}
+#endif
diff --git a/vespalib/src/vespa/vespalib/util/time.h b/vespalib/src/vespa/vespalib/util/time.h
index ce914b097d4..27f359071ae 100644
--- a/vespalib/src/vespa/vespalib/util/time.h
+++ b/vespalib/src/vespa/vespalib/util/time.h
@@ -99,3 +99,16 @@ duration adjustTimeoutByDetectedHz(duration timeout);
duration adjustTimeoutByHz(duration timeout, long hz);
}
+
+#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 160000
+
+// Temporary workaround until libc++ supports stream operators for duration
+
+#include <iosfwd>
+
+namespace std::chrono {
+
+ostream& operator<<(ostream& os, const nanoseconds& value);
+
+}
+#endif