# gg-10561: tests and fix session

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

Branch: refs/heads/ignite-gg-10561
Commit: 482cfbb8c733305e4d80f1495dd79865682ee4c6
Parents: f30b111
Author: ashutak <ashu...@gridgain.com>
Authored: Wed Jul 22 19:12:15 2015 +0300
Committer: ashutak <ashu...@gridgain.com>
Committed: Wed Jul 22 19:12:15 2015 +0300

----------------------------------------------------------------------
 .../processors/rest/GridRestProcessor.java      | 24 ++++++++++++--------
 1 file changed, 15 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/482cfbb8/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index bf6c0fb..60c7ef4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -278,8 +278,6 @@ public class GridRestProcessor extends GridProcessorAdapter 
{
             clientId2Session.put(ses.clientId, ses);
             sesTokId2Session.put(ses.sesTokId, ses);
 
-            // TODO add checks.
-
             return ses;
         }
 
@@ -291,12 +289,12 @@ public class GridRestProcessor extends 
GridProcessorAdapter {
                 ses.clientId = clientId;
                 ses.sesTokId = UUID.randomUUID();
 
-                clientId2Session.put(ses.clientId, ses);
-                sesTokId2Session.put(ses.sesTokId, ses);
+                Session oldSes = clientId2Session.putIfAbsent(ses.clientId, 
ses);
 
-                // TODO add checks.
+                if (oldSes == null)
+                    sesTokId2Session.put(ses.sesTokId, ses);
 
-                return ses;
+                return oldSes == null ? ses : oldSes;
             }
 
             return ses;
@@ -308,14 +306,22 @@ public class GridRestProcessor extends 
GridProcessorAdapter {
             Session ses = sesTokId2Session.get(sesTokId);
 
             if (ses == null)
-                throw new IgniteCheckedException("Failed to handle request. 
Unknown session token " +
+                throw new IgniteCheckedException("Faile to handle request. 
Unknown session token " +
                     "(maybe expired session). [sessionToken=" + 
U.byteArray2HexString(sesTok) + "]");
 
             return ses;
         }
 
-        if (!F.isEmpty(sesTok) && clientId != null)
-            throw new IgniteCheckedException("Failed to handle request. 
Unsupported case.");
+        if (!F.isEmpty(sesTok) && clientId != null) {
+            Session ses1 = sesTokId2Session.get(U.bytesToUuid(sesTok, 0));
+            Session ses2 = clientId2Session.get(clientId);
+
+            if (ses1 == null || ses2 == null || !ses1.equals(ses2))
+                throw new IgniteCheckedException("Failed to handle request. " +
+                    "Unsupported case (use one: clientId or session token)");
+
+            return ses1;
+        }
 
         throw new IgniteCheckedException("Failed to handle request 
(Unreachable state).");
     }

Reply via email to