IGNITE-6103 - Handle missed partition ID during WAL replay
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/15710a86 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/15710a86 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/15710a86 Branch: refs/heads/ignite-5578 Commit: 15710a86977b803dbecc6c53b4036801c21fdcd9 Parents: c47c365 Author: Alexey Goncharuk <[email protected]> Authored: Thu Aug 17 18:09:50 2017 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Thu Aug 17 18:10:14 2017 +0300 ---------------------------------------------------------------------- .../persistence/GridCacheDatabaseSharedManager.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/15710a86/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java index 3c7ba28..19af87b 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java @@ -1621,7 +1621,12 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan * @param dataEntry Data entry to apply. */ private void applyUpdate(GridCacheContext cacheCtx, DataEntry dataEntry) throws IgniteCheckedException { - GridDhtLocalPartition locPart = cacheCtx.topology().forceCreatePartition(dataEntry.partitionId()); + int partId = dataEntry.partitionId(); + + if (partId == -1) + partId = cacheCtx.affinity().partition(dataEntry.key()); + + GridDhtLocalPartition locPart = cacheCtx.topology().forceCreatePartition(partId); switch (dataEntry.op()) { case CREATE: @@ -1636,15 +1641,15 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan null); if (dataEntry.partitionCounter() != 0) - cacheCtx.offheap().onPartitionInitialCounterUpdated(dataEntry.partitionId(), dataEntry.partitionCounter()); + cacheCtx.offheap().onPartitionInitialCounterUpdated(partId, dataEntry.partitionCounter()); break; case DELETE: - cacheCtx.offheap().remove(cacheCtx, dataEntry.key(), dataEntry.partitionId(), locPart); + cacheCtx.offheap().remove(cacheCtx, dataEntry.key(), partId, locPart); if (dataEntry.partitionCounter() != 0) - cacheCtx.offheap().onPartitionInitialCounterUpdated(dataEntry.partitionId(), dataEntry.partitionCounter()); + cacheCtx.offheap().onPartitionInitialCounterUpdated(partId, dataEntry.partitionCounter()); break;
