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<Long, Integer> sessions = new ConcurrentHashMap<Long, Integer>();
+ 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<File> snapFiles = snap.findNRecentSnapshots(2);
+ snapFile = snapFiles.get(0);
corruptFile(snapFile);
- DataTree dt = new DataTree();
- Map<Long, Integer> sessions =
- new ConcurrentHashMap<Long, Integer>();
- 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) {