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 497EA200D3C for ; Tue, 14 Nov 2017 13:26:41 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 47A1C160BF4; Tue, 14 Nov 2017 12:26:41 +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 3F6A21609EF for ; Tue, 14 Nov 2017 13:26:40 +0100 (CET) Received: (qmail 59830 invoked by uid 500); 14 Nov 2017 12:26:39 -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 59816 invoked by uid 99); 14 Nov 2017 12:26:39 -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; Tue, 14 Nov 2017 12:26:39 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 5A691DFCF9; Tue, 14 Nov 2017 12:26:39 +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: X-Mailer: ASF-Git Admin Mailer Subject: ignite git commit: IGNITE-6901: Fixed assertion during IgniteH2Indexing.rebuildIndexesFromHash. This closes #3027. Date: Tue, 14 Nov 2017 12:26:39 +0000 (UTC) archived-at: Tue, 14 Nov 2017 12:26:41 -0000 Repository: ignite Updated Branches: refs/heads/master ec85cc05e -> 930384553 IGNITE-6901: Fixed assertion during IgniteH2Indexing.rebuildIndexesFromHash. This closes #3027. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/93038455 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/93038455 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/93038455 Branch: refs/heads/master Commit: 93038455391aa19d342cd1a7df5ad65b2848c491 Parents: ec85cc0 Author: devozerov Authored: Tue Nov 14 15:26:31 2017 +0300 Committer: devozerov Committed: Tue Nov 14 15:26:31 2017 +0300 ---------------------------------------------------------------------- .../cache/IgniteCacheOffheapManagerImpl.java | 4 ++-- .../cache/query/GridCacheQueryManager.java | 5 +++-- .../internal/processors/query/GridQueryIndexing.java | 5 +++-- .../processors/query/GridQueryProcessor.java | 11 +++++++---- .../IgniteClientCacheInitializationFailTest.java | 2 +- .../processors/query/h2/IgniteH2Indexing.java | 4 ++-- .../processors/query/h2/opt/GridH2Table.java | 15 ++++++++++++--- 7 files changed, 30 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/93038455/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java index 7944c50..c85ba1d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java @@ -1340,7 +1340,7 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager int cacheId = grp.sharedGroup() ? cctx.cacheId() : CU.UNDEFINED_CACHE_ID; if (qryMgr.enabled()) - qryMgr.store(newRow, oldRow); + qryMgr.store(newRow, oldRow, true); if (oldRow != null) { assert oldRow.link() != 0 : oldRow; @@ -1372,7 +1372,7 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager GridCacheQueryManager qryMgr = cctx.queries(); - qryMgr.store(row, null); + qryMgr.store(row, null, false); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/93038455/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java index dc4d7e0..063f096 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java @@ -381,9 +381,10 @@ public abstract class GridCacheQueryManager extends GridCacheManagerAdapte /** * @param newRow New row. * @param prevRow Previous row. + * @param prevRowAvailable Whether previous row is available. * @throws IgniteCheckedException In case of error. */ - public void store(CacheDataRow newRow, @Nullable CacheDataRow prevRow) + public void store(CacheDataRow newRow, @Nullable CacheDataRow prevRow, boolean prevRowAvailable) throws IgniteCheckedException { assert enabled(); assert newRow != null && newRow.value() != null && newRow.link() != 0 : newRow; @@ -403,7 +404,7 @@ public abstract class GridCacheQueryManager extends GridCacheManagerAdapte } if (qryProcEnabled) - qryProc.store(cctx, newRow, prevRow); + qryProc.store(cctx, newRow, prevRow, prevRowAvailable); } finally { invalidateResultCache(); http://git-wip-us.apache.org/repos/asf/ignite/blob/93038455/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java index 4a9ee7f..4610025 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryIndexing.java @@ -218,10 +218,11 @@ public interface GridQueryIndexing { * @param type Type descriptor. * @param row New row. * @param prevRow Previous row. + * @param prevRowAvailable Whether previous row is available. * @throws IgniteCheckedException If failed. */ - public void store(GridCacheContext cctx, GridQueryTypeDescriptor type, CacheDataRow row, CacheDataRow prevRow) - throws IgniteCheckedException; + public void store(GridCacheContext cctx, GridQueryTypeDescriptor type, CacheDataRow row, CacheDataRow prevRow, + boolean prevRowAvailable) throws IgniteCheckedException; /** * Removes index entry by key. http://git-wip-us.apache.org/repos/asf/ignite/blob/93038455/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java index b8c5ffa..7ad95a6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java @@ -1704,10 +1704,12 @@ public class GridQueryProcessor extends GridProcessorAdapter { * @throws IgniteCheckedException In case of error. */ @SuppressWarnings({"unchecked", "ConstantConditions"}) - public void store(GridCacheContext cctx, CacheDataRow newRow, @Nullable CacheDataRow prevRow) + public void store(GridCacheContext cctx, CacheDataRow newRow, @Nullable CacheDataRow prevRow, + boolean prevRowAvailable) throws IgniteCheckedException { assert cctx != null; assert newRow != null; + assert prevRowAvailable || prevRow == null; KeyCacheObject key = newRow.key(); @@ -1727,7 +1729,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { QueryTypeDescriptorImpl desc = typeByValue(cacheName, coctx, key, newRow.value(), true); - if (prevRow != null) { + if (prevRowAvailable && prevRow != null) { QueryTypeDescriptorImpl prevValDesc = typeByValue(cacheName, coctx, key, @@ -1738,14 +1740,15 @@ public class GridQueryProcessor extends GridProcessorAdapter { if (prevValDesc != null) idx.remove(cctx, prevValDesc, prevRow); - prevRow = null; // Row has already been removed from another table indexes + // Row has already been removed from another table indexes + prevRow = null; } } if (desc == null) return; - idx.store(cctx, desc, newRow, prevRow); + idx.store(cctx, desc, newRow, prevRow, prevRowAvailable); } finally { busyLock.leaveBusy(); http://git-wip-us.apache.org/repos/asf/ignite/blob/93038455/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java index a9c8e5c..366230d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java @@ -311,7 +311,7 @@ public class IgniteClientCacheInitializationFailTest extends GridCommonAbstractT /** {@inheritDoc} */ @Override public void store(GridCacheContext cctx, GridQueryTypeDescriptor type, CacheDataRow row, - CacheDataRow prevRow) { + CacheDataRow prevRow, boolean prevRowAvailable) { // No-op. } http://git-wip-us.apache.org/repos/asf/ignite/blob/93038455/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java index 52185f4..450ee20 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java @@ -570,7 +570,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { /** {@inheritDoc} */ @Override public void store(GridCacheContext cctx, GridQueryTypeDescriptor type, CacheDataRow row, - @Nullable CacheDataRow prevRow) throws IgniteCheckedException { + @Nullable CacheDataRow prevRow, boolean prevRowAvailable) throws IgniteCheckedException { String cacheName = cctx.name(); H2TableDescriptor tbl = tableDescriptor(schema(cacheName), cacheName, type.name()); @@ -578,7 +578,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { if (tbl == null) return; // Type was rejected. - tbl.table().update(row, prevRow); + tbl.table().update(row, prevRow, prevRowAvailable); if (tbl.luceneIndex() != null) { long expireTime = row.expireTime(); http://git-wip-us.apache.org/repos/asf/ignite/blob/93038455/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java index 87e6f3d..cdffa16 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java @@ -426,9 +426,10 @@ public class GridH2Table extends TableBase { * * @param row Row to be updated. * @param prevRow Previous row. + * @param prevRowAvailable Whether previous row is available. * @throws IgniteCheckedException If failed. */ - public void update(CacheDataRow row, @Nullable CacheDataRow prevRow) + public void update(CacheDataRow row, @Nullable CacheDataRow prevRow, boolean prevRowAvailable) throws IgniteCheckedException { assert desc != null; @@ -446,9 +447,17 @@ public class GridH2Table extends TableBase { try { ensureNotDestroyed(); - boolean replaced = pk().putx(row0); + boolean replaced; - assert (replaced && prevRow != null) || (!replaced && prevRow == null) : "Replaced: " + replaced; + if (prevRowAvailable) + replaced = pk().putx(row0); + else { + prevRow0 = (GridH2KeyValueRowOnheap)pk().put(row0); + + replaced = prevRow0 != null; + } + + assert (replaced && prevRow0 != null) || (!replaced && prevRow0 == null) : "Replaced: " + replaced; if (!replaced) size.increment();