summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/ZooKeeperDatabase.java12
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java5
-rw-r--r--eval/src/tests/instruction/generic_rename/generic_rename_test.cpp6
-rw-r--r--eval/src/vespa/eval/instruction/generic_rename.cpp16
-rw-r--r--eval/src/vespa/eval/instruction/generic_rename.h7
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java8
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java2
-rw-r--r--vespalib/src/tests/small_vector/small_vector_test.cpp20
-rw-r--r--vespalib/src/vespa/vespalib/util/arrayref.h5
-rw-r--r--vespalib/src/vespa/vespalib/util/small_vector.h2
10 files changed, 63 insertions, 20 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/ZooKeeperDatabase.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/ZooKeeperDatabase.java
index f1e0b6d1239..60835d5bb4f 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/ZooKeeperDatabase.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/ZooKeeperDatabase.java
@@ -6,18 +6,26 @@ import com.yahoo.vespa.clustercontroller.core.ClusterStateBundle;
import com.yahoo.vespa.clustercontroller.core.ContentCluster;
import com.yahoo.vespa.clustercontroller.core.rpc.EnvelopedClusterStateBundleCodec;
import com.yahoo.vespa.clustercontroller.core.rpc.SlimeClusterStateBundleCodec;
-import org.apache.zookeeper.*;
+import org.apache.zookeeper.CreateMode;
+import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.ZooDefs;
+import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.data.ACL;
import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
import java.util.logging.Level;
import com.yahoo.vdslib.state.NodeState;
import com.yahoo.vdslib.state.State;
import com.yahoo.vdslib.state.Node;
import java.util.logging.Logger;
-import java.util.*;
import java.io.IOException;
import java.io.StringWriter;
import java.io.PrintWriter;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java
index eefe245f060..1e4a3b1e003 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerContainer.java
@@ -174,4 +174,9 @@ public class ClusterControllerContainer extends Container implements
}
}
+ @Override
+ protected String defaultPreload() {
+ return "";
+ }
+
}
diff --git a/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp b/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp
index dedb22f2763..9c17dce972f 100644
--- a/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp
+++ b/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp
@@ -53,8 +53,8 @@ TEST(GenericRenameTest, dense_rename_plan_can_be_created_and_executed) {
std::vector<vespalib::string> to({"f", "a", "b"});
ValueType renamed = lhs.rename(from, to);
auto plan = DenseRenamePlan(lhs, renamed, from, to);
- std::vector<size_t> expect_loop = {15,2,7};
- std::vector<size_t> expect_stride = {7,105,1};
+ SmallVector<size_t> expect_loop = {15,2,7};
+ SmallVector<size_t> expect_stride = {7,105,1};
EXPECT_EQ(plan.subspace_size, 210);
EXPECT_EQ(plan.loop_cnt, expect_loop);
EXPECT_EQ(plan.stride, expect_stride);
@@ -84,7 +84,7 @@ TEST(GenericRenameTest, sparse_rename_plan_can_be_created) {
ValueType renamed = lhs.rename(from, to);
auto plan = SparseRenamePlan(lhs, renamed, from, to);
EXPECT_EQ(plan.mapped_dims, 4);
- std::vector<size_t> expect = {2,0,1,3};
+ SmallVector<size_t> expect = {2,0,1,3};
EXPECT_EQ(plan.output_dimensions, expect);
}
diff --git a/eval/src/vespa/eval/instruction/generic_rename.cpp b/eval/src/vespa/eval/instruction/generic_rename.cpp
index 4fe347375c4..8363d4db573 100644
--- a/eval/src/vespa/eval/instruction/generic_rename.cpp
+++ b/eval/src/vespa/eval/instruction/generic_rename.cpp
@@ -69,10 +69,10 @@ generic_rename(const Value &a,
const ValueType &res_type, const ValueBuilderFactory &factory)
{
auto cells = a.cells().typify<CT>();
- std::vector<string_id> output_address(sparse_plan.mapped_dims);
- std::vector<string_id*> input_address;
+ SmallVector<string_id> output_address(sparse_plan.mapped_dims);
+ SmallVector<string_id*> input_address;
for (size_t maps_to : sparse_plan.output_dimensions) {
- input_address.push_back(&output_address[maps_to]);
+ input_address.emplace_back(&output_address[maps_to]);
}
auto builder = factory.create_transient_value_builder<CT>(res_type,
sparse_plan.mapped_dims,
@@ -152,7 +152,7 @@ SparseRenamePlan::SparseRenamePlan(const ValueType &input_type,
if (index != output_dimensions.size()) {
can_forward_index = false;
}
- output_dimensions.push_back(index);
+ output_dimensions.emplace_back(index);
}
assert(output_dimensions.size() == mapped_dims);
}
@@ -172,8 +172,8 @@ DenseRenamePlan::DenseRenamePlan(const ValueType &lhs_type,
const auto out_dims = output_type.nontrivial_indexed_dimensions();
size_t num_dense_dims = lhs_dims.size();
assert(num_dense_dims == out_dims.size());
- std::vector<size_t> lhs_loopcnt(num_dense_dims);
- std::vector<size_t> lhs_stride(num_dense_dims, 1);
+ SmallVector<size_t> lhs_loopcnt(num_dense_dims);
+ SmallVector<size_t> lhs_stride(num_dense_dims, 1);
size_t lhs_size = 1;
for (size_t i = num_dense_dims; i-- > 0; ) {
lhs_stride[i] = lhs_size;
@@ -191,8 +191,8 @@ DenseRenamePlan::DenseRenamePlan(const ValueType &lhs_type,
loop_cnt.back() *= lhs_loopcnt[index];
stride.back() = lhs_stride[index];
} else {
- loop_cnt.push_back(lhs_loopcnt[index]);
- stride.push_back(lhs_stride[index]);
+ loop_cnt.emplace_back(lhs_loopcnt[index]);
+ stride.emplace_back(lhs_stride[index]);
}
prev_index = index;
}
diff --git a/eval/src/vespa/eval/instruction/generic_rename.h b/eval/src/vespa/eval/instruction/generic_rename.h
index 7834c967488..4d8ca54a248 100644
--- a/eval/src/vespa/eval/instruction/generic_rename.h
+++ b/eval/src/vespa/eval/instruction/generic_rename.h
@@ -6,6 +6,7 @@
#include <vespa/eval/eval/value_type.h>
#include <vespa/eval/eval/interpreted_function.h>
#include <vespa/vespalib/stllike/string.h>
+#include <vespa/vespalib/util/small_vector.h>
#include <vector>
namespace vespalib::eval { struct ValueBuilderFactory; }
@@ -13,8 +14,8 @@ namespace vespalib::eval { struct ValueBuilderFactory; }
namespace vespalib::eval::instruction {
struct DenseRenamePlan {
- std::vector<size_t> loop_cnt;
- std::vector<size_t> stride;
+ SmallVector<size_t> loop_cnt;
+ SmallVector<size_t> stride;
const size_t subspace_size;
DenseRenamePlan(const ValueType &lhs_type,
const ValueType &output_type,
@@ -28,7 +29,7 @@ struct DenseRenamePlan {
struct SparseRenamePlan {
size_t mapped_dims;
- std::vector<size_t> output_dimensions;
+ SmallVector<size_t> output_dimensions;
bool can_forward_index;
SparseRenamePlan(const ValueType &input_type,
const ValueType &output_type,
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
index 7e14e94823b..e77e8530f03 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
@@ -35,7 +35,6 @@ import java.util.stream.Collectors;
public class FileReferenceDownloader {
private final static Logger log = Logger.getLogger(FileReferenceDownloader.class.getName());
- private final static Duration rpcTimeout = Duration.ofSeconds(10);
private final ExecutorService downloadExecutor =
Executors.newFixedThreadPool(Math.max(8, Runtime.getRuntime().availableProcessors()),
@@ -47,6 +46,7 @@ public class FileReferenceDownloader {
private final DownloadStatuses downloadStatuses = new DownloadStatuses();
private final Duration downloadTimeout;
private final Duration sleepBetweenRetries;
+ private final Duration rpcTimeout;
FileReferenceDownloader(File downloadDirectory, File tmpDirectory, ConnectionPool connectionPool, Duration timeout, Duration sleepBetweenRetries) {
this.connectionPool = connectionPool;
@@ -54,6 +54,8 @@ public class FileReferenceDownloader {
this.sleepBetweenRetries = sleepBetweenRetries;
// Needed to receive RPC calls receiveFile* from server after asking for files
new FileReceiver(connectionPool.getSupervisor(), this, downloadDirectory, tmpDirectory);
+ String timeoutString = System.getenv("VESPA_CONFIGPROXY_FILEDOWNLOAD_RPC_TIMEOUT");
+ this.rpcTimeout = Duration.ofSeconds(timeoutString == null ? 30 : Integer.parseInt(timeoutString));
}
private void startDownload(FileReferenceDownload fileReferenceDownload) {
@@ -128,8 +130,8 @@ public class FileReferenceDownloader {
}
} else {
log.log(logLevel, () -> "Request failed. Req: " + request + "\nSpec: " + connection.getAddress() +
- ", error code: " + request.errorCode() + ", set error for spec, use another spec for next request" +
- ", retry count " + retryCount);
+ ", error code: " + request.errorCode() + ", will use another spec for next request" +
+ ", retry count " + retryCount + ", rpc timeout " + rpcTimeout.getSeconds());
connectionPool.setError(connection, request.errorCode());
return false;
}
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
index d3ca08c5dba..e53195e3a71 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -102,7 +102,7 @@ public class Flags {
public static final UnboundBooleanFlag USE_THREE_PHASE_UPDATES = defineFeatureFlag(
"use-three-phase-updates", false,
- List.of("vekterli"), "2020-12-02", "2021-03-01",
+ List.of("vekterli"), "2020-12-02", "2021-04-01",
"Whether to enable the use of three-phase updates when bucket replicas are out of sync.",
"Takes effect at redeployment",
ZONE_ID, APPLICATION_ID);
diff --git a/vespalib/src/tests/small_vector/small_vector_test.cpp b/vespalib/src/tests/small_vector/small_vector_test.cpp
index 808571acef6..6d8238fefb4 100644
--- a/vespalib/src/tests/small_vector/small_vector_test.cpp
+++ b/vespalib/src/tests/small_vector/small_vector_test.cpp
@@ -243,4 +243,24 @@ TEST(SmallVectorTest, equal_operator) {
SmallVector<EqOnly>({EqOnly{1},EqOnly{5},EqOnly{3}}));
}
+// to check "back() const"
+template<size_t N>
+int last_value_of(const SmallVector<int,N> &v) {
+ return v.back();
+}
+
+TEST(SmallVectorTest, check_back_method) {
+ SmallVector<int> vec;
+ for (int i = 0; i < 1000; ++i) {
+ vec.emplace_back(17);
+ EXPECT_EQ(vec.back(), 17);
+ EXPECT_EQ(last_value_of(vec), 17);
+ vec.back() = 42;
+ EXPECT_EQ(vec[i], 42);
+ vec.back() = i;
+ EXPECT_EQ(last_value_of(vec), i);
+ }
+ EXPECT_EQ(&vec.back(), vec.end() - 1);
+}
+
GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/vespa/vespalib/util/arrayref.h b/vespalib/src/vespa/vespalib/util/arrayref.h
index 03634a7a094..2433f9251cf 100644
--- a/vespalib/src/vespa/vespalib/util/arrayref.h
+++ b/vespalib/src/vespa/vespalib/util/arrayref.h
@@ -2,6 +2,7 @@
#pragma once
#include "array.h"
+#include "small_vector.h"
#include <vector>
namespace vespalib {
@@ -17,6 +18,8 @@ public:
ArrayRef(T * v, size_t sz) noexcept : _v(v), _sz(sz) { }
template<typename A=std::allocator<T>>
ArrayRef(std::vector<T, A> & v) noexcept : _v(&v[0]), _sz(v.size()) { }
+ template<size_t N>
+ ArrayRef(SmallVector<T, N> &v) noexcept : _v(&v[0]), _sz(v.size()) { }
ArrayRef(Array<T> &v) noexcept : _v(&v[0]), _sz(v.size()) { }
T & operator [] (size_t i) { return _v[i]; }
const T & operator [] (size_t i) const { return _v[i]; }
@@ -35,6 +38,8 @@ public:
ConstArrayRef(const T *v, size_t sz) noexcept : _v(v), _sz(sz) { }
template<typename A=std::allocator<T>>
ConstArrayRef(const std::vector<T, A> & v) noexcept : _v(&v[0]), _sz(v.size()) { }
+ template<size_t N>
+ ConstArrayRef(const SmallVector<T, N> &v) noexcept : _v(&v[0]), _sz(v.size()) { }
ConstArrayRef(const ArrayRef<T> & v) noexcept : _v(&v[0]), _sz(v.size()) { }
ConstArrayRef(const Array<T> &v) noexcept : _v(&v[0]), _sz(v.size()) { }
ConstArrayRef() noexcept : _v(nullptr), _sz(0) {}
diff --git a/vespalib/src/vespa/vespalib/util/small_vector.h b/vespalib/src/vespa/vespalib/util/small_vector.h
index 21a21fc2cbb..9cbc10951cf 100644
--- a/vespalib/src/vespa/vespalib/util/small_vector.h
+++ b/vespalib/src/vespa/vespalib/util/small_vector.h
@@ -186,6 +186,8 @@ public:
const T *end() const { return (_data + _size); }
T &operator[](size_t idx) { return _data[idx]; }
const T &operator[](size_t idx) const { return _data[idx]; }
+ T &back() { return _data[_size - 1]; }
+ const T &back() const { return _data[_size - 1]; }
void clear() {
small_vector::destroy_objects(_data, _size);
_size = 0;