You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2016/09/09 08:43:26 UTC

ignite git commit: Read entries and apply changes

Repository: ignite
Updated Branches:
  refs/heads/ignite-3199-1 4f552f2cf -> 6f3ffcfc8


Read entries and apply changes


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/6f3ffcfc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/6f3ffcfc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/6f3ffcfc

Branch: refs/heads/ignite-3199-1
Commit: 6f3ffcfc875df0efd5d4bfe486c63591db7a103d
Parents: 4f552f2
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Fri Sep 9 11:43:13 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Fri Sep 9 11:43:13 2016 +0300

----------------------------------------------------------------------
 .../platform/cache/PlatformCacheInvoker.java    | 16 ++++++++++++---
 .../websession/PlatformDotnetSessionData.java   | 17 ++++++++++++++--
 ...tformDotnetSessionSetAndUnlockProcessor.java | 21 ++++++++++++--------
 3 files changed, 41 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6f3ffcfc/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCacheInvoker.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCacheInvoker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCacheInvoker.java
index 3d99f0d..df56991 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCacheInvoker.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCacheInvoker.java
@@ -18,12 +18,14 @@
 package org.apache.ignite.internal.processors.platform.cache;
 
 import org.apache.ignite.IgniteCache;
+import org.apache.ignite.binary.BinaryRawReader;
 import org.apache.ignite.internal.binary.BinaryRawReaderEx;
 import org.apache.ignite.internal.processors.platform.websession.PlatformDotnetSessionLockProcessor;
 import org.apache.ignite.internal.processors.platform.websession.PlatformDotnetSessionSetAndUnlockProcessor;
 
 import java.sql.Timestamp;
 import java.util.Map;
+import java.util.TreeMap;
 import java.util.UUID;
 
 /**
@@ -45,7 +47,7 @@ public class PlatformCacheInvoker {
      * @return Result.
      */
     @SuppressWarnings("unchecked")
-    public static Object invoke(BinaryRawReaderEx reader, IgniteCache cache) {
+    public static Object invoke(BinaryRawReader reader, IgniteCache cache) {
         int opCode = reader.readInt();
 
         String key = reader.readString();
@@ -70,12 +72,20 @@ public class PlatformCacheInvoker {
                 PlatformDotnetSessionSetAndUnlockProcessor proc;
 
                 if (reader.readBoolean()) {
+                    boolean isDiff = !reader.readBoolean();
+
+                    int count = reader.readInt();
+
+                    Map<String, byte[]> entries = new TreeMap<>();
+
+                    for (int i = 0; i < count; i++)
+                        entries.put(reader.readString(), reader.readByteArray());
 
-                    Map<String, byte[]> items = null; // TODO: Read sorted map.
                     byte[] staticData = reader.readByteArray();
                     int timeout = reader.readInt();
 
-                    proc = new PlatformDotnetSessionSetAndUnlockProcessor(lockNodeId, lockId, items, staticData, timeout);
+                    proc = new PlatformDotnetSessionSetAndUnlockProcessor(lockNodeId, lockId, entries, isDiff,
+                        staticData, timeout);
                 }
                 else
                     proc = new PlatformDotnetSessionSetAndUnlockProcessor(lockNodeId, lockId);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6f3ffcfc/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionData.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionData.java
index b1dca1f..d198ebf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionData.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionData.java
@@ -145,12 +145,25 @@ public class PlatformDotnetSessionData implements Binarylizable {
      * @return Result.
      */
     public PlatformDotnetSessionData updateAndUnlock(UUID lockNodeId, long lockId, Map<String, byte[]> items,
-        byte[] staticObjects, int timeout) {
+        boolean isDiff, byte[] staticObjects, int timeout) {
         assert items != null;
 
         PlatformDotnetSessionData res = unlock(lockNodeId, lockId);
 
-        // TODO: Process new items. May be additional flag to clear all data will be required.
+        if (!isDiff) {
+            // Not a diff: remove all
+            this.items.clear();
+        }
+
+        for (Map.Entry<String, byte[]> e : items.entrySet()) {
+            String key = e.getKey();
+            byte[] value = e.getValue();
+
+            if (value != null)
+                this.items.put(key, value);
+            else
+                this.items.remove(key);   // Null value indicates removed key.
+        }
 
         res.staticObjects = staticObjects;
         res.timeout = timeout;

http://git-wip-us.apache.org/repos/asf/ignite/blob/6f3ffcfc/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionSetAndUnlockProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionSetAndUnlockProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionSetAndUnlockProcessor.java
index 7ce9996..ad3f3f9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionSetAndUnlockProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotnetSessionSetAndUnlockProcessor.java
@@ -46,6 +46,9 @@ public class PlatformDotnetSessionSetAndUnlockProcessor implements
     /** Data. */
     private Map<String, byte[]> items;
 
+    /** Whether items collection represents a diff. */
+    private boolean isDiff;
+
     /** Static data. */
     private byte[] staticData;
 
@@ -59,7 +62,7 @@ public class PlatformDotnetSessionSetAndUnlockProcessor implements
      * @param lockId Lock ID.
      */
     public PlatformDotnetSessionSetAndUnlockProcessor(UUID lockNodeId, long lockId) {
-        this(lockNodeId, lockId, false, null, null, -1);
+        this(lockNodeId, lockId, false, null, false, null, -1);
     }
 
     /**
@@ -68,12 +71,13 @@ public class PlatformDotnetSessionSetAndUnlockProcessor implements
      * @param lockNodeId Lock node ID.
      * @param lockId Lock ID.
      * @param items Items.
+     * @param isDiff Whether items is a diff.
      * @param staticData Static data.
      * @param timeout Timeout.
      */
     public PlatformDotnetSessionSetAndUnlockProcessor(UUID lockNodeId, long lockId,
-        Map<String, byte[]> items, byte[] staticData, int timeout) {
-        this(lockNodeId, lockId, true, items, staticData, timeout);
+        Map<String, byte[]> items, boolean isDiff, byte[] staticData, int timeout) {
+        this(lockNodeId, lockId, true, items, isDiff, staticData, timeout);
     }
 
     /**
@@ -83,15 +87,17 @@ public class PlatformDotnetSessionSetAndUnlockProcessor implements
      * @param lockId Lock ID.
      * @param update Whether to perform update.
      * @param items Items.
+     * @param isDiff Whether items is a diff.
      * @param staticData Static data.
      * @param timeout Timeout.
      */
     public PlatformDotnetSessionSetAndUnlockProcessor(UUID lockNodeId, long lockId, boolean update,
-        Map<String, byte[]> items, byte[] staticData, int timeout) {
+        Map<String, byte[]> items, boolean isDiff, byte[] staticData, int timeout) {
         this.lockNodeId = lockNodeId;
         this.lockId = lockId;
         this.update = update;
         this.items = items;
+        this.isDiff = isDiff;
         this.staticData = staticData;
         this.timeout = timeout;
     }
@@ -106,10 +112,9 @@ public class PlatformDotnetSessionSetAndUnlockProcessor implements
         assert data != null;
 
         // Unlock and update.
-        if (update)
-            data = data.updateAndUnlock(lockNodeId, lockId, items, staticData, timeout);
-        else
-            data = data.unlock(lockNodeId, lockId);
+        data = update
+            ? data.updateAndUnlock(lockNodeId, lockId, items, isDiff, staticData, timeout)
+            : data.unlock(lockNodeId, lockId);
 
         // Apply.
         entry.setValue(data);