You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ma...@apache.org on 2009/06/30 03:32:12 UTC
svn commit: r789532 - in /hadoop/zookeeper/trunk: CHANGES.txt
src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java
src/java/test/org/apache/zookeeper/test/ClientBase.java
src/java/test/org/apache/zookeeper/test/SessionTest.java
Author: mahadev
Date: Tue Jun 30 01:32:11 2009
New Revision: 789532
URL: http://svn.apache.org/viewvc?rev=789532&view=rev
Log:
ZOOKEEPER-450. emphemeral cleanup not happening with session timeout. (breed via mahadev)
Modified:
hadoop/zookeeper/trunk/CHANGES.txt
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ClientBase.java
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java
Modified: hadoop/zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=789532&r1=789531&r2=789532&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/CHANGES.txt (original)
+++ hadoop/zookeeper/trunk/CHANGES.txt Tue Jun 30 01:32:11 2009
@@ -145,6 +145,9 @@
ZOOKEEPER-452. zookeeper performance graph should have percentage of reads
rather than percentage of writes - zkperfRW-3.2.jpg (mahadev)
+ ZOOKEEPER-450. emphemeral cleanup not happening with session timeout. (breed
+via mahadev)
+
IMPROVEMENTS:
ZOOKEEPER-308. improve the atomic broadcast performance 3x.
(breed via mahadev)
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java?rev=789532&r1=789531&r2=789532&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/PrepRequestProcessor.java Tue Jun 30 01:32:11 2009
@@ -361,7 +361,10 @@
case OpCode.closeSession:
txnHeader = new TxnHeader(request.sessionId, request.cxid, zks
.getNextZxid(), zks.getTime(), OpCode.closeSession);
- zks.sessionTracker.checkSession(request.sessionId, request.getOwner());
+ // We don't want to do this check since the session expiration thread
+ // queues up this operation without being the session owner.
+ // this request is the last of the session so it should be ok
+ //zks.sessionTracker.checkSession(request.sessionId, request.getOwner());
HashSet<String> es = zks.dataTree
.getEphemerals(request.sessionId);
synchronized (zks.outstandingChanges) {
Modified: hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ClientBase.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ClientBase.java?rev=789532&r1=789531&r2=789532&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ClientBase.java (original)
+++ hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ClientBase.java Tue Jun 30 01:32:11 2009
@@ -47,7 +47,7 @@
public abstract class ClientBase extends TestCase {
protected static final Logger LOG = Logger.getLogger(ClientBase.class);
- public static final int CONNECTION_TIMEOUT = 30000;
+ public static int CONNECTION_TIMEOUT = 30000;
static final File BASETEST =
new File(System.getProperty("build.test.dir", "build"));
Modified: hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java?rev=789532&r1=789531&r2=789532&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java (original)
+++ hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java Tue Jun 30 01:32:11 2009
@@ -50,11 +50,15 @@
private CountDownLatch startSignal;
+ File tmpDir;
+
@Override
protected void setUp() throws Exception {
LOG.info("STARTING " + getName());
- File tmpDir = ClientBase.createTmpDir();
+ if (tmpDir == null) {
+ tmpDir = ClientBase.createTmpDir();
+ }
ClientBase.setupTestEnv();
ZooKeeperServer zs = new ZooKeeperServer(tmpDir, tmpDir, 3000);
@@ -179,6 +183,35 @@
zk.close();
}
+ @Test
+ /**
+ * Make sure ephemerals get cleaned up when a session times out.
+ */
+ public void testSessionTimeout() throws Exception {
+ int oldTimeout = CONNECTION_TIMEOUT;
+ CONNECTION_TIMEOUT = 5000;
+ try {
+ DisconnectableZooKeeper zk = createClient();
+ zk.create("/stest", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
+ zk.disconnect();
+ Thread.sleep(CONNECTION_TIMEOUT*2);
+ zk = createClient();
+ System.err.println("This test fails");
+ zk.create("/stest", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
+ tearDown();
+ zk.close();
+ zk.disconnect();
+ setUp();
+ zk = createClient();
+ assertTrue(zk.exists("/stest", false) != null);
+ Thread.sleep(CONNECTION_TIMEOUT * 2);
+ assertTrue(zk.exists("/stest", false) == null);
+ zk.close();
+ } finally {
+ CONNECTION_TIMEOUT = oldTimeout;
+ }
+ }
+
/**
* Make sure that we cannot have two connections with the same
* session id.