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;
 

Reply via email to