public static void acquireConnectionsAndDestroyEntriesK1andK2() { try { Region r1 = cache.getRegion(Region.SEPARATOR + REGION_NAME); assertNotNull(r1); String poolName = r1.getAttributes().getPoolName(); assertNotNull(poolName); PoolImpl pool = (PoolImpl) PoolManager.find(poolName); assertNotNull(pool); Connection conn = pool.acquireConnection(); final Connection conn1; if (conn.getServer().getPort() != PORT2) { conn1 = pool.acquireConnection(); // Ensure we have a server with the proper port } else { conn1 = conn; } assertNotNull(conn1); assertEquals(PORT2, conn1.getServer().getPort()); ServerRegionProxy srp = new ServerRegionProxy(Region.SEPARATOR + REGION_NAME, pool); srp.destroyOnForTestsOnly( conn1, "key1", null, Operation.DESTROY, new EntryEventImpl(new EventID(new byte[] {1}, 100000, 1)), null); srp.destroyOnForTestsOnly( conn1, "key2", null, Operation.DESTROY, new EntryEventImpl(new EventID(new byte[] {1}, 100000, 2)), null); } catch (Exception ex) { throw new TestException("Failed while setting acquireConnectionsAndDestroyEntry ", ex); } }
/** * This test performs the following:<br> * 1)create server<br> * 2)initialize proxy object and create region for client<br> * 3)perform a PUT on client by acquiring Connection through proxy<br> * 4)stop server monitor threads in client to ensure that server treats this as dead client <br> * 5)wait for some time to allow server to clean up the dead client artifacts<br> * 6)again perform a PUT on client through same Connection and verify after the put that the * Connection object used was new one. */ @Test public void testDeadClientRemovalByServer() throws Exception { PORT = createServer(); createProxyAndRegionForClient(); // String connection2String = null; StatisticsType st = this.system.findType("CacheServerStats"); final Statistics s = this.system.findStatisticsByType(st)[0]; assertEquals(0, s.getInt("currentClients")); assertEquals(0, s.getInt("currentClientConnections")); this.system .getLogWriter() .info( "beforeAcquireConnection clients=" + s.getInt("currentClients") + " cnxs=" + s.getInt("currentClientConnections")); Connection connection1 = proxy.acquireConnection(); this.system .getLogWriter() .info( "afterAcquireConnection clients=" + s.getInt("currentClients") + " cnxs=" + s.getInt("currentClientConnections")); this.system.getLogWriter().info("acquired connection " + connection1); WaitCriterion ev = new WaitCriterion() { public boolean done() { return s.getInt("currentClients") != 0; } public String description() { return null; } }; Wait.waitForCriterion(ev, 20 * 1000, 200, true); assertEquals(1, s.getInt("currentClients")); assertEquals(1, s.getInt("currentClientConnections")); // String connection1String = connection1.toString(); ServerRegionProxy srp = new ServerRegionProxy("region1", proxy); srp.putOnForTestsOnly(connection1, "key-1", "value-1", new EventID(new byte[] {1}, 1, 1), null); this.system.getLogWriter().info("did put 1"); // proxy.testfinalizeServerConnectionMonitor(); ev = new WaitCriterion() { public boolean done() { return s.getInt("currentClients") == 0; } public String description() { return null; } }; Wait.waitForCriterion(ev, TIME_BETWEEN_PINGS * 5, 200, true); { this.system .getLogWriter() .info( "currentClients=" + s.getInt("currentClients") + " currentClientConnections=" + s.getInt("currentClientConnections")); assertEquals(0, s.getInt("currentClients")); assertEquals(0, s.getInt("currentClientConnections")); } addExceptions(); // the connection should now fail since the server timed it out try { srp.putOnForTestsOnly(connection1, "key-1", "fail", new EventID(new byte[] {1}, 1, 2), null); fail("expected EOF"); } catch (ServerConnectivityException expected) { } // The rest of this test no longer works. // connection1.finalizeConnection(); // proxy.release(); // connection1 = proxy.acquireConnection(); // connection2String = connection1.toString(); // this.system.getLogWriter().info("connection is now " + connection2String); // if (connection1String.equals(connection2String)) { // fail("New connection object was not obtained"); // } // connection1.putObject("region1", "key-1", "value-2", new EventID(new byte[] {1},1,3), // null); // this.system.getLogWriter().info("did put 2"); // assertEquals(1, s.getInt("currentClients")); // assertEquals(1, s.getInt("currentClientConnections")); // // now lets see what happens when we close our connection // // note we use a nasty close which just closes the socket instead // // of sending a nice message to the server telling him we are going away // ((ConnectionImpl)connection1).finalizeConnection(); // { // int retry = (TIME_BETWEEN_PINGS*5) / 100; // while (s.getInt("currentClients") > 0 && retry-- > 0) { // Thread.sleep(100); // } // this.system.getLogWriter().info("currentClients=" // + s.getInt("currentClients") // + " currentClientConnections=" // + s.getInt("currentClientConnections")); // assertEquals(0, s.getInt("currentClients")); // assertEquals(0, s.getInt("currentClientConnections")); // } }