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 2010/03/12 23:36:12 UTC

svn commit: r922442 - in /hadoop/zookeeper/trunk: ./ src/java/main/org/apache/zookeeper/server/ src/java/main/org/apache/zookeeper/server/persistence/ src/java/test/org/apache/zookeeper/test/

Author: mahadev
Date: Fri Mar 12 22:36:12 2010
New Revision: 922442

URL: http://svn.apache.org/viewvc?rev=922442&view=rev
Log:
ZOOKEEPER-121. SyncRequestProcessor is not closing log stream during shutdown (mahadev)

Modified:
    hadoop/zookeeper/trunk/CHANGES.txt
    hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SyncRequestProcessor.java
    hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZKDatabase.java
    hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileSnap.java
    hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnLog.java
    hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java
    hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/SnapShot.java
    hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/TxnLog.java
    hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/ClientBase.java

Modified: hadoop/zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=922442&r1=922441&r2=922442&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/CHANGES.txt (original)
+++ hadoop/zookeeper/trunk/CHANGES.txt Fri Mar 12 22:36:12 2010
@@ -273,6 +273,9 @@ BUGFIXES: 
   ZOOKEEPER-604. zk needs to prevent export of any symbol not listed in their
   api (mahadev)
 
+  ZOOKEEPER-121. SyncRequestProcessor is not closing log stream during
+  shutdown (mahadev)
+
 IMPROVEMENTS:
   ZOOKEEPER-473. cleanup junit tests to eliminate false positives due to
   "socket reuse" and failure to close client (phunt via mahadev)

Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SyncRequestProcessor.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SyncRequestProcessor.java?rev=922442&r1=922441&r2=922442&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SyncRequestProcessor.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/SyncRequestProcessor.java Fri Mar 12 22:36:12 2010
@@ -166,6 +166,11 @@ public class SyncRequestProcessor extend
     }
 
     public void shutdown() {
+        try{
+            zks.getZKDatabase().close();
+        } catch (IOException ie) {
+            LOG.warn("Error closing logs ", ie);
+        }
         queuedRequests.add(requestOfDeath);
         nextProcessor.shutdown();
     }

Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZKDatabase.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZKDatabase.java?rev=922442&r1=922441&r2=922442&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZKDatabase.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZKDatabase.java Fri Mar 12 22:36:12 2010
@@ -450,5 +450,12 @@ public class ZKDatabase {
         this.snapLog.commit();
     }
     
+    /**
+     * close this database. free the resources
+     * @throws IOException
+     */
+    public void close() throws IOException {
+        this.snapLog.close();
+    }
     
 }
\ No newline at end of file

Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileSnap.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileSnap.java?rev=922442&r1=922441&r2=922442&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileSnap.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileSnap.java Fri Mar 12 22:36:12 2010
@@ -49,6 +49,7 @@ import org.apache.zookeeper.server.util.
  */
 public class FileSnap implements SnapShot {
     File snapDir;
+    private volatile boolean close = false;
     private static final int VERSION=2;
     private static final long dbId=-1;
     private static final Logger LOG = Logger.getLogger(FileSnap.class);
@@ -217,20 +218,32 @@ public class FileSnap implements SnapSho
      * @param sessions the sessions to be serialized
      * @param snapShot the file to store snapshot into
      */
-    public void serialize(DataTree dt, Map<Long, Integer> sessions, File snapShot)
+    public synchronized void serialize(DataTree dt, Map<Long, Integer> sessions, File snapShot)
             throws IOException {
-        OutputStream sessOS = new BufferedOutputStream(new FileOutputStream(snapShot));
-        CheckedOutputStream crcOut = new CheckedOutputStream(sessOS, new Adler32());
-        //CheckedOutputStream cout = new CheckedOutputStream()
-        OutputArchive oa = BinaryOutputArchive.getArchive(crcOut);
-        FileHeader header = new FileHeader(SNAP_MAGIC, VERSION, dbId);
-        serialize(dt,sessions,oa, header);
-        long val = crcOut.getChecksum().getValue();
-        oa.writeLong(val, "val");
-        oa.writeString("/", "path");
-        sessOS.flush();
-        crcOut.close();
-        sessOS.close();
+        if (!close) {
+            OutputStream sessOS = new BufferedOutputStream(new FileOutputStream(snapShot));
+            CheckedOutputStream crcOut = new CheckedOutputStream(sessOS, new Adler32());
+            //CheckedOutputStream cout = new CheckedOutputStream()
+            OutputArchive oa = BinaryOutputArchive.getArchive(crcOut);
+            FileHeader header = new FileHeader(SNAP_MAGIC, VERSION, dbId);
+            serialize(dt,sessions,oa, header);
+            long val = crcOut.getChecksum().getValue();
+            oa.writeLong(val, "val");
+            oa.writeString("/", "path");
+            sessOS.flush();
+            crcOut.close();
+            sessOS.close();
+        }
+    }
+
+    /**
+     * synchronized close just so that if serialize is in place
+     * the close operation will block and will wait till serialize
+     * is done and will set the close flag
+     */
+    @Override
+    public synchronized void close() throws IOException {
+        close = true;
     }
 
  }
\ No newline at end of file

Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnLog.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnLog.java?rev=922442&r1=922441&r2=922442&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnLog.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnLog.java Fri Mar 12 22:36:12 2010
@@ -165,6 +165,19 @@ public class FileTxnLog implements TxnLo
     }
 
     /**
+     * close all the open file handles
+     * @throws IOException
+     */
+    public synchronized void close() throws IOException {
+        if (logStream != null) {
+            logStream.close();
+        }
+        for (FileOutputStream log : streamsToFlush) {
+            log.close();
+        }
+    }
+    
+    /**
      * append an entry to the transaction log
      * @param hdr the header of the transaction
      * @param txn the transaction part of the entry

Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java?rev=922442&r1=922441&r2=922442&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/FileTxnSnapLog.java Fri Mar 12 22:36:12 2010
@@ -285,4 +285,12 @@ public class FileTxnSnapLog {
         txnLog.rollLog();
     }
     
+    /**
+     * close the transaction log files
+     * @throws IOException
+     */
+    public void close() throws IOException {
+        txnLog.close();
+        snapLog.close();
+    }
 }

Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/SnapShot.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/SnapShot.java?rev=922442&r1=922441&r2=922442&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/SnapShot.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/SnapShot.java Fri Mar 12 22:36:12 2010
@@ -57,4 +57,10 @@ public interface SnapShot {
      * @throws IOException
      */
     File findMostRecentSnapshot() throws IOException;
+    
+    /**
+     * free resources from this snapshot immediately
+     * @throws IOException
+     */
+    void close() throws IOException;
 } 
\ No newline at end of file

Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/TxnLog.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/TxnLog.java?rev=922442&r1=922441&r2=922442&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/TxnLog.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/persistence/TxnLog.java Fri Mar 12 22:36:12 2010
@@ -83,6 +83,10 @@ public interface TxnLog {
      */
     void commit() throws IOException;
    
+    /** 
+     * close the transactions logs
+     */
+    void close() throws IOException;
     /**
      * an iterating interface for reading 
      * transaction logs. 

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=922442&r1=922441&r2=922442&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 Fri Mar 12 22:36:12 2010
@@ -454,9 +454,7 @@ public abstract class ClientBase extends
         stopServer();
 
         if (tmpDir != null) {
-            //assertTrue("delete " + tmpDir.toString(), recursiveDelete(tmpDir));
-            // FIXME see ZOOKEEPER-121 replace following line with previous
-            recursiveDelete(tmpDir);
+            assertTrue("delete " + tmpDir.toString(), recursiveDelete(tmpDir));
         }
 
         // This has to be set to null when the same instance of this class is reused between test cases
@@ -475,9 +473,7 @@ public abstract class ClientBase extends
         if (d.isDirectory()) {
             File children[] = d.listFiles();
             for (File f : children) {
-                //assertTrue("delete " + f.toString(), recursiveDelete(f));
-                // FIXME see ZOOKEEPER-121 replace following line with previous
-                recursiveDelete(f);
+                assertTrue("delete " + f.toString(), recursiveDelete(f));
             }
         }
         return d.delete();