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]