You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2016/12/29 09:37:54 UTC
[50/50] [abbrv] ignite git commit: GG-11764 - refreshPage() assertion
fix
GG-11764 - refreshPage() assertion fix
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9776f3f4
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9776f3f4
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9776f3f4
Branch: refs/heads/ignite-3477
Commit: 9776f3f4925f27d6639a7381c5151ebe8e58b683
Parents: 5c106da
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Thu Dec 29 12:25:09 2016 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Thu Dec 29 12:25:09 2016 +0300
----------------------------------------------------------------------
.../ignite/internal/pagemem/FullPageId.java | 29 ++++++++++++++++----
1 file changed, 24 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9776f3f4/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java
index 31028cd..20677ea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/FullPageId.java
@@ -77,16 +77,35 @@ public class FullPageId {
* @return Hash code.
*/
private static int hashCode0(int cacheId, long effectivePageId) {
- int pageIdx = (int)PageIdUtils.pageId(effectivePageId);
- int partId = PageIdUtils.partId(effectivePageId);
+ return (int)(mix64(effectivePageId) ^ mix32(cacheId));
+ }
- // Take a prime number larger than total number of partitions.
- int res = 65537 * partId + cacheId;
+ /**
+ * MH3's plain finalization step.
+ */
+ private static int mix32(int k) {
+ k = (k ^ (k >>> 16)) * 0x85ebca6b;
+ k = (k ^ (k >>> 13)) * 0xc2b2ae35;
- return res * 31 + pageIdx;
+ return k ^ (k >>> 16);
}
/**
+ * Computes David Stafford variant 9 of 64bit mix function (MH3 finalization step,
+ * with different shifts and constants).
+ *
+ * Variant 9 is picked because it contains two 32-bit shifts which could be possibly
+ * optimized into better machine code.
+ *
+ * @see "http://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html"
+ */
+ private static long mix64(long z) {
+ z = (z ^ (z >>> 32)) * 0x4cd6944c5cc20b6dL;
+ z = (z ^ (z >>> 29)) * 0xfc12c5b19d3259e9L;
+
+ return z ^ (z >>> 32);
+ }
+ /**
* @param pageId Page ID.
* @param cacheId Cache ID.
*/