You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by al...@apache.org on 2018/09/10 22:18:45 UTC
[1/2] kudu git commit: [gutil] add LookupOrEmplace()
Repository: kudu
Updated Branches:
refs/heads/master 953a09b82 -> edde4bebe
[gutil] add LookupOrEmplace()
Added LookupOrEmplace() which is similar to LookupOrInsert() but
uses the r-value mechanics. Also, added unit tests for new
functionality.
Change-Id: I3a177f410c1d4ed33e6f44cb7d6c33d6141f84fc
Reviewed-on: http://gerrit.cloudera.org:8080/11401
Reviewed-by: Adar Dembo <ad...@cloudera.com>
Tested-by: Kudu Jenkins
Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/38a48476
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/38a48476
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/38a48476
Branch: refs/heads/master
Commit: 38a48476ee98e180d09e71cd0547119ff43423e4
Parents: 953a09b
Author: Alexey Serbin <as...@cloudera.com>
Authored: Fri Sep 7 13:50:29 2018 -0700
Committer: Alexey Serbin <as...@cloudera.com>
Committed: Mon Sep 10 21:18:25 2018 +0000
----------------------------------------------------------------------
src/kudu/gutil/map-util.h | 15 ++++++++++
src/kudu/util/map-util-test.cc | 59 +++++++++++++++++++++++++++++++++++++
2 files changed, 74 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kudu/blob/38a48476/src/kudu/gutil/map-util.h
----------------------------------------------------------------------
diff --git a/src/kudu/gutil/map-util.h b/src/kudu/gutil/map-util.h
index 82d266f..ef6baae 100644
--- a/src/kudu/gutil/map-util.h
+++ b/src/kudu/gutil/map-util.h
@@ -495,6 +495,21 @@ LookupOrInsert(Collection* const collection,
collection, typename Collection::value_type(key, value));
}
+// It's similar to LookupOrInsert() but uses the emplace and r-value mechanics
+// to achieve the desired results. The constructor of the new element is called
+// with exactly the same arguments as supplied to emplace, forwarded via
+// std::forward<Args>(args). The element may be constructed even if there
+// already is an element with the same key in the container, in which case the
+// newly constructed element will be destroyed immediately.
+// For details, see
+// https://en.cppreference.com/w/cpp/container/map/emplace
+// https://en.cppreference.com/w/cpp/container/unordered_map/emplace
+template <class Collection, class... Args>
+typename Collection::mapped_type&
+LookupOrEmplace(Collection* const collection, Args&&... args) {
+ return collection->emplace(std::forward<Args>(args)...).first->second;
+}
+
// Counts the number of equivalent elements in the given "sequence", and stores
// the results in "count_map" with element as the key and count as the value.
//
http://git-wip-us.apache.org/repos/asf/kudu/blob/38a48476/src/kudu/util/map-util-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/util/map-util-test.cc b/src/kudu/util/map-util-test.cc
index b074007..78a3484 100644
--- a/src/kudu/util/map-util-test.cc
+++ b/src/kudu/util/map-util-test.cc
@@ -123,4 +123,63 @@ TEST(EmplaceTest, TestEmplace) {
ASSERT_EQ("foobar", *FindOrDie(my_map, key2));
}
+TEST(LookupOrEmplaceTest, IntMap) {
+ const string key = "mega";
+ map<string, int> int_map;
+
+ {
+ const auto& val = LookupOrEmplace(&int_map, key, 0);
+ ASSERT_EQ(0, val);
+ auto* val_ptr = FindOrNull(int_map, key);
+ ASSERT_NE(nullptr, val_ptr);
+ ASSERT_EQ(0, *val_ptr);
+ }
+
+ {
+ auto& val = LookupOrEmplace(&int_map, key, 10);
+ ASSERT_EQ(0, val);
+ ++val;
+ auto* val_ptr = FindOrNull(int_map, key);
+ ASSERT_NE(nullptr, val_ptr);
+ ASSERT_EQ(1, *val_ptr);
+ }
+
+ {
+ LookupOrEmplace(&int_map, key, 100) += 1000;
+ auto* val_ptr = FindOrNull(int_map, key);
+ ASSERT_NE(nullptr, val_ptr);
+ ASSERT_EQ(1001, *val_ptr);
+ }
+}
+
+TEST(LookupOrEmplaceTest, UniquePtrMap) {
+ constexpr int key = 0;
+ const string ref_str = "turbo";
+ map<int, unique_ptr<string>> uptr_map;
+
+ {
+ unique_ptr<string> val(new string(ref_str));
+ const auto& lookup_val = LookupOrEmplace(&uptr_map, key, std::move(val));
+ ASSERT_EQ(nullptr, val.get());
+ ASSERT_NE(nullptr, lookup_val.get());
+ ASSERT_EQ(ref_str, *lookup_val);
+ }
+
+ {
+ unique_ptr<string> val(new string("giga"));
+ auto& lookup_val = LookupOrEmplace(&uptr_map, key, std::move(val));
+ ASSERT_NE(nullptr, lookup_val.get());
+ ASSERT_EQ(ref_str, *lookup_val);
+ // Update the stored value.
+ *lookup_val = "giga";
+ }
+
+ {
+ unique_ptr<string> val(new string(ref_str));
+ const auto& lookup_val = LookupOrEmplace(&uptr_map, key, std::move(val));
+ ASSERT_NE(nullptr, lookup_val.get());
+ ASSERT_EQ("giga", *lookup_val);
+ }
+}
+
} // namespace kudu
[2/2] kudu git commit: [jepsen] set default admin operation timeout
to 2 minutes
Posted by al...@apache.org.
[jepsen] set default admin operation timeout to 2 minutes
Increased the default admin operation timeout for the Kudu client
used in Jepsen tests up to 2 minutes. That's to work around slow DNS
resolutions (sometimes up to 30 seconds) that happen intermittently
while running the tests at VMs provisioned in GCE.
Change-Id: Iaa9ade5cf38b4f3247749fa33bd40ada9616f21f
Reviewed-on: http://gerrit.cloudera.org:8080/11405
Reviewed-by: Hao Hao <ha...@cloudera.com>
Tested-by: Kudu Jenkins
Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/edde4beb
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/edde4beb
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/edde4beb
Branch: refs/heads/master
Commit: edde4bebea8e309a43e3316f78c45df6e6c8c9fe
Parents: 38a4847
Author: Alexey Serbin <as...@cloudera.com>
Authored: Fri Sep 7 18:33:30 2018 -0700
Committer: Alexey Serbin <as...@cloudera.com>
Committed: Mon Sep 10 22:18:21 2018 +0000
----------------------------------------------------------------------
java/kudu-jepsen/src/main/clojure/jepsen/kudu/client.clj | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kudu/blob/edde4beb/java/kudu-jepsen/src/main/clojure/jepsen/kudu/client.clj
----------------------------------------------------------------------
diff --git a/java/kudu-jepsen/src/main/clojure/jepsen/kudu/client.clj b/java/kudu-jepsen/src/main/clojure/jepsen/kudu/client.clj
index 65b6e5a..c50201c 100644
--- a/java/kudu-jepsen/src/main/clojure/jepsen/kudu/client.clj
+++ b/java/kudu-jepsen/src/main/clojure/jepsen/kudu/client.clj
@@ -41,9 +41,9 @@
(defn sync-client
"Builds and returns a new synchronous Kudu client."
[master-addresses]
- (let [builder (new KuduClient$KuduClientBuilder master-addresses)
- client (. builder build)]
- client))
+ (let [builder (new KuduClient$KuduClientBuilder master-addresses)]
+ (.defaultAdminOperationTimeoutMs builder 120000)
+ (.build builder)))
(defn close-client
[sync-client]