Return-Path: Delivered-To: apmail-hadoop-zookeeper-commits-archive@minotaur.apache.org Received: (qmail 46631 invoked from network); 22 May 2009 07:43:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 22 May 2009 07:43:24 -0000 Received: (qmail 3130 invoked by uid 500); 22 May 2009 07:43:37 -0000 Delivered-To: apmail-hadoop-zookeeper-commits-archive@hadoop.apache.org Received: (qmail 3101 invoked by uid 500); 22 May 2009 07:43:37 -0000 Mailing-List: contact zookeeper-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: zookeeper-dev@ Delivered-To: mailing list zookeeper-commits@hadoop.apache.org Received: (qmail 3091 invoked by uid 99); 22 May 2009 07:43:37 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 May 2009 07:43:37 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 May 2009 07:43:34 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 9A6A0238886C; Fri, 22 May 2009 07:43:14 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r777419 - in /hadoop/zookeeper/trunk: CHANGES.txt src/java/test/org/apache/zookeeper/server/CRCTest.java Date: Fri, 22 May 2009 07:43:14 -0000 To: zookeeper-commits@hadoop.apache.org From: phunt@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090522074314.9A6A0238886C@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: phunt Date: Fri May 22 07:43:14 2009 New Revision: 777419 URL: http://svn.apache.org/viewvc?rev=777419&view=rev Log: ZOOKEEPER-385. crctest failed on hudson patch test Modified: hadoop/zookeeper/trunk/CHANGES.txt hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/CRCTest.java Modified: hadoop/zookeeper/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=777419&r1=777418&r2=777419&view=diff ============================================================================== --- hadoop/zookeeper/trunk/CHANGES.txt (original) +++ hadoop/zookeeper/trunk/CHANGES.txt Fri May 22 07:43:14 2009 @@ -94,6 +94,8 @@ ZOOKEEPER-415. zookeeper c tests hang. (mahadev via phunt) + ZOOKEEPER-385. crctest failed on hudson patch test (mahadev via phunt) + IMPROVEMENTS: ZOOKEEPER-308. improve the atomic broadcast performance 3x. (breed via mahadev) Modified: hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/CRCTest.java URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/CRCTest.java?rev=777419&r1=777418&r2=777419&view=diff ============================================================================== --- hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/CRCTest.java (original) +++ hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/CRCTest.java Fri May 22 07:43:14 2009 @@ -26,6 +26,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; @@ -81,6 +82,33 @@ raf.close(); } + /** return if checksum matches for a snapshot **/ + private boolean getCheckSum(FileSnap snap, File snapFile) throws IOException { + DataTree dt = new DataTree(); + Map sessions = new ConcurrentHashMap(); + InputStream snapIS = new BufferedInputStream(new FileInputStream( + snapFile)); + CheckedInputStream crcIn = new CheckedInputStream(snapIS, new Adler32()); + InputArchive ia = BinaryInputArchive.getArchive(crcIn); + try { + snap.deserialize(dt, sessions, ia); + } catch (IOException ie) { + // we failed on the most recent snapshot + // must be incomplete + // try reading the next one + // after corrupting + snapIS.close(); + crcIn.close(); + throw ie; + } + + long checksum = crcIn.getChecksum().getValue(); + long val = ia.readLong("val"); + snapIS.close(); + crcIn.close(); + return (val != checksum); + } + /** test checksums for the logs and snapshots. * the reader should fail on reading * a corrupt snapshot and a corrupt log @@ -134,21 +162,21 @@ itr.close(); // find the last snapshot FileSnap snap = new FileSnap(versionDir); - snapFile = snap.findMostRecentSnapshot(); - // corrupt this file + List snapFiles = snap.findNRecentSnapshots(2); + snapFile = snapFiles.get(0); corruptFile(snapFile); - DataTree dt = new DataTree(); - Map sessions = - new ConcurrentHashMap(); - InputStream snapIS = new BufferedInputStream(new FileInputStream(snapFile)); - CheckedInputStream crcIn = new CheckedInputStream(snapIS, new Adler32()); - InputArchive ia=BinaryInputArchive.getArchive(crcIn); - snap.deserialize(dt,sessions, ia); - long checkSum = crcIn.getChecksum().getValue(); - long val = ia.readLong("val"); - snapIS.close(); - crcIn.close(); - assertTrue(val != checkSum); + boolean cfile = false; + try { + cfile = getCheckSum(snap, snapFile); + } catch(IOException ie) { + //the last snapshot seems incompelte + // corrupt the last but one + // and use that + snapFile = snapFiles.get(1); + corruptFile(snapFile); + cfile = getCheckSum(snap, snapFile); + } + assertTrue(cfile); } public void process(WatchedEvent event) {