Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 4FD972009E2 for ; Wed, 1 Jun 2016 19:49:11 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 4EAB9160A4C; Wed, 1 Jun 2016 17:49:11 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 9599E160A45 for ; Wed, 1 Jun 2016 19:49:10 +0200 (CEST) Received: (qmail 62535 invoked by uid 500); 1 Jun 2016 17:49:09 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 62526 invoked by uid 99); 1 Jun 2016 17:49:09 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Jun 2016 17:49:09 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 96D37E0498; Wed, 1 Jun 2016 17:49:09 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: vozerov@apache.org To: commits@ignite.apache.org Message-Id: <9bf65129c881495b8a382f92baf9be8a@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: ignite git commit: WIP. Date: Wed, 1 Jun 2016 17:49:09 +0000 (UTC) archived-at: Wed, 01 Jun 2016 17:49:11 -0000 Repository: ignite Updated Branches: refs/heads/ignite-3228-1 7155ffbde -> 4309a7c43 WIP. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4309a7c4 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4309a7c4 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4309a7c4 Branch: refs/heads/ignite-3228-1 Commit: 4309a7c439f89d3864aec6460ec8d648b1d99099 Parents: 7155ffb Author: thatcoach Authored: Wed Jun 1 20:48:58 2016 +0300 Committer: thatcoach Committed: Wed Jun 1 20:48:58 2016 +0300 ---------------------------------------------------------------------- .../shuffle/collections/HadoopMultimapBase.java | 38 ++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4309a7c4/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopMultimapBase.java ---------------------------------------------------------------------- diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopMultimapBase.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopMultimapBase.java index 2a56884..cbd8971 100644 --- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopMultimapBase.java +++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopMultimapBase.java @@ -223,9 +223,11 @@ public abstract class HadoopMultimapBase implements HadoopMultimap { private long allocateNextPage(long requestedSize) { int writtenSize = writtenSize(); - long newPageSize = ((writtenSize + requestedSize) % pageSize + 1) * pageSize; + long newPageSize = nextPageSize(writtenSize + requestedSize); long newPagePtr = mem.allocate(newPageSize); + System.out.println("ALLOCATED: " + newPageSize); + HadoopOffheapBuffer b = out.buffer(); b.set(newPagePtr, newPageSize); @@ -245,13 +247,43 @@ public abstract class HadoopMultimapBase implements HadoopMultimap { if (oldPage != null) allPages.add(oldPage); - // TODO: Must deallocate at this point. -// deallocate(oldPage); return b.move(requestedSize); } /** + * Get next page size. + * + * @param required Required amount of data. + * @return Next page size. + */ + private long nextPageSize(long required) { + long pages = (required / pageSize) + 1; + + long pagesPow2 = nextPowerOfTwo(pages); + + return pagesPow2 * pageSize; + } + + /** + * Get next power of two which greater or equal to the given number. Naive implementation. + * + * @param val Number + * @return Nearest pow2. + */ + private long nextPowerOfTwo(long val) { + long res = 1; + + while (res < val) + res = res << 1; + + if (res < 0) + throw new IllegalArgumentException("Value is too big to find positive pow2: " + val); + + return res; + } + + /** * @return Fixed pointer. */ private long fixAlignment() {