This is an automated email from the ASF dual-hosted git repository. mmerli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-pulsar.git
The following commit(s) were added to refs/heads/master by this push: new 920ecba Fix C++ MurmurHash3 algorithm (#1795) 920ecba is described below commit 920ecba6fc53c81191fac011212eccac48186e88 Author: massakam <massa...@yahoo-corp.jp> AuthorDate: Fri May 18 01:07:15 2018 +0900 Fix C++ MurmurHash3 algorithm (#1795) * Fix C++ MurmurHash3 algorithm * Add the same test cases to HashTest.java --- pulsar-client-cpp/lib/Murmur3_32Hash.cc | 7 ++++--- pulsar-client-cpp/tests/HashTest.cc | 10 +++++++++- .../src/test/java/org/apache/pulsar/client/impl/HashTest.java | 4 ++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pulsar-client-cpp/lib/Murmur3_32Hash.cc b/pulsar-client-cpp/lib/Murmur3_32Hash.cc index ef88590..d45169c 100644 --- a/pulsar-client-cpp/lib/Murmur3_32Hash.cc +++ b/pulsar-client-cpp/lib/Murmur3_32Hash.cc @@ -70,14 +70,15 @@ uint32_t Murmur3_32Hash::makeHash(const void *key, const int64_t len) { h1 = mixH1(h1, k1); } + const uint8_t *tail = reinterpret_cast<const uint8_t *>(data + nblocks * MACRO_CHUNK_SIZE); uint32_t k1 = 0; switch (len - nblocks * MACRO_CHUNK_SIZE) { case 3: - k1 ^= static_cast<uint32_t>(blocks[2]) << 16; + k1 ^= static_cast<uint32_t>(tail[2]) << 16; case 2: - k1 ^= static_cast<uint32_t>(blocks[1]) << 8; + k1 ^= static_cast<uint32_t>(tail[1]) << 8; case 1: - k1 ^= static_cast<uint32_t>(blocks[0]); + k1 ^= static_cast<uint32_t>(tail[0]); }; h1 ^= mixK1(k1); diff --git a/pulsar-client-cpp/tests/HashTest.cc b/pulsar-client-cpp/tests/HashTest.cc index 97dcb90..bd6de09 100644 --- a/pulsar-client-cpp/tests/HashTest.cc +++ b/pulsar-client-cpp/tests/HashTest.cc @@ -58,10 +58,18 @@ TEST(HashTest, testJavaStringHash) { TEST(HashTest, testMurmur3_32Hash) { Murmur3_32Hash hash; + std::string k1 = "k1"; + std::string k2 = "k2"; std::string key1 = "key1"; std::string key2 = "key2"; + std::string key01 = "key01"; + std::string key02 = "key02"; // Same value as Java client + ASSERT_EQ(2110152746, hash.makeHash(k1)); + ASSERT_EQ(1479966664, hash.makeHash(k2)); ASSERT_EQ(462881061, hash.makeHash(key1)); ASSERT_EQ(1936800180, hash.makeHash(key2)); -} \ No newline at end of file + ASSERT_EQ(39696932, hash.makeHash(key01)); + ASSERT_EQ(751761803, hash.makeHash(key02)); +} diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/HashTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/HashTest.java index f53205d..c10c8d0 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/HashTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/HashTest.java @@ -43,7 +43,11 @@ public class HashTest { Hash h = Murmur3_32Hash.getInstance(); // Same value as C++ client + assertEquals(2110152746, h.makeHash("k1")); + assertEquals(1479966664, h.makeHash("k2")); assertEquals(462881061, h.makeHash("key1")); assertEquals(1936800180, h.makeHash("key2")); + assertEquals(39696932, h.makeHash("key01")); + assertEquals(751761803, h.makeHash("key02")); } } -- To stop receiving notification emails like this one, please contact mme...@apache.org.