From 217743abc1fd4bb84f8bf4a10d96f7e773d8fab8 Mon Sep 17 00:00:00 2001 From: "Chen, YinChin | Angus | ISDOD" Date: Thu, 27 Oct 2016 10:34:03 +0900 Subject: [PATCH 1/3] invalidate object if connection failed. --- .../roma/romac4j/connection/RomaSocketPool.java | 17 +++++++++++++++++ .../rit/roma/romac4j/routing/Routing.java | 1 + 2 files changed, 18 insertions(+) diff --git a/romac4j/src/main/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPool.java b/romac4j/src/main/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPool.java index 7a96504..b901315 100644 --- a/romac4j/src/main/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPool.java +++ b/romac4j/src/main/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPool.java @@ -76,6 +76,23 @@ public void deleteConnection(String nodeId) { } } + public void invalidateConnection(Connection con) { + GenericObjectPool pool = poolMap.get(con.getNodeId()); + if (pool != null) { + synchronized(pool) { + if(poolMap.containsKey(con.getNodeId())) { + try { + pool.invalidateObject(con); + con.forceClose(); + return; + } catch (Exception e) { + log.error("invalidateConnection() : " + e.getMessage()); + } + } + } + } + } + public void returnConnection(Connection con) { try { con.setSoTimeout(0); diff --git a/romac4j/src/main/java/com/rakuten/rit/roma/romac4j/routing/Routing.java b/romac4j/src/main/java/com/rakuten/rit/roma/romac4j/routing/Routing.java index c4732f0..6371842 100644 --- a/romac4j/src/main/java/com/rakuten/rit/roma/romac4j/routing/Routing.java +++ b/romac4j/src/main/java/com/rakuten/rit/roma/romac4j/routing/Routing.java @@ -123,6 +123,7 @@ public void failCount(Connection con) { return; } failCount(con.getNodeId()); + sps.invalidateConnection(con); con.forceClose(); } From ffb06a482c344c2a61b7b2840451ebc786f9ccc1 Mon Sep 17 00:00:00 2001 From: "Chen, YinChin | Angus | ISDOD" Date: Thu, 27 Oct 2016 15:21:56 +0900 Subject: [PATCH 2/3] add test connection and return connection --- .../connection/RomaSocketPoolTest.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 romac4j/src/test/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPoolTest.java diff --git a/romac4j/src/test/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPoolTest.java b/romac4j/src/test/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPoolTest.java new file mode 100644 index 0000000..4b3a72f --- /dev/null +++ b/romac4j/src/test/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPoolTest.java @@ -0,0 +1,53 @@ +package com.rakuten.rit.roma.romac4j.connection; + +import junit.framework.TestCase; + +/** + * Created by yinchin.chen on 10/27/16. + */ +public class RomaSocketPoolTest extends TestCase { + + RomaSocketPool FIXTURE; + String nodeId = "localhost_11211"; + + public void setUp() { + RomaSocketPool.init(); + FIXTURE = RomaSocketPool.getInstance(); + } + + public void tearDown(){ + FIXTURE.deleteConnection(nodeId); + } + + public void testConnection() throws Exception { + // get connection1 and return connection1 + Connection con1 = FIXTURE.getConnection(nodeId); + FIXTURE.returnConnection(con1); + + // get connection2 + Connection con2 = FIXTURE.getConnection(nodeId); + // con1 must equal con2 + assertEquals(con1, con2); + + // invalid con1 + FIXTURE.invalidateConnection(con1); + // get con3 + Connection con3 = FIXTURE.getConnection(nodeId); + FIXTURE.returnConnection(con3); + assertNotSame(con2, con3); + // test connection. + assertTrue(con1.isClosed()); + assertTrue(con3.isConnected()); + } + + public void testGetConnections() throws Exception{ + Connection con1 = FIXTURE.getConnection(nodeId); + Connection con2 = FIXTURE.getConnection(nodeId); + Connection con3 = FIXTURE.getConnection(nodeId); + Connection con4 = FIXTURE.getConnection(nodeId); + FIXTURE.returnConnection(con1); + FIXTURE.returnConnection(con2); + FIXTURE.returnConnection(con3); + FIXTURE.returnConnection(con4); + } +} \ No newline at end of file From c8e9a0873943a1718df52eed9d233d57d544933b Mon Sep 17 00:00:00 2001 From: "Chen, YinChin | Angus | ISDOD" Date: Thu, 27 Oct 2016 15:29:48 +0900 Subject: [PATCH 3/3] fix unittest --- .../rit/roma/romac4j/connection/RomaSocketPoolTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/romac4j/src/test/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPoolTest.java b/romac4j/src/test/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPoolTest.java index 4b3a72f..af948f3 100644 --- a/romac4j/src/test/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPoolTest.java +++ b/romac4j/src/test/java/com/rakuten/rit/roma/romac4j/connection/RomaSocketPoolTest.java @@ -29,15 +29,15 @@ public void testConnection() throws Exception { // con1 must equal con2 assertEquals(con1, con2); - // invalid con1 - FIXTURE.invalidateConnection(con1); + // invalid con2 + FIXTURE.invalidateConnection(con2); // get con3 Connection con3 = FIXTURE.getConnection(nodeId); - FIXTURE.returnConnection(con3); assertNotSame(con2, con3); // test connection. - assertTrue(con1.isClosed()); + assertTrue(con2.isClosed()); assertTrue(con3.isConnected()); + FIXTURE.returnConnection(con3); } public void testGetConnections() throws Exception{