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);