From a6958951dfd63750c06e3d15e56ce8213affab47 Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Mon, 12 Aug 2013 19:28:28 -0700 Subject: [PATCH] Reset Recorder state when uri processing is finished (had been seeing cases where a url's entry in crawl.log would sometimes have nonzero size value if the url was erroring out and RecordingOutputStream.open() was never called) --- .../org/archive/io/RecordingInputStream.java | 4 +++ .../org/archive/io/RecordingOutputStream.java | 29 +++++++++++-------- .../main/java/org/archive/util/Recorder.java | 12 ++++++++ 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/commons/src/main/java/org/archive/io/RecordingInputStream.java b/commons/src/main/java/org/archive/io/RecordingInputStream.java index 8fea7f52..b46905ed 100644 --- a/commons/src/main/java/org/archive/io/RecordingInputStream.java +++ b/commons/src/main/java/org/archive/io/RecordingInputStream.java @@ -348,4 +348,8 @@ public class RecordingInputStream public int getRecordedBufferLength() { return recordingOutputStream.getBufferLength(); } + + public void clearForReuse() throws IOException { + recordingOutputStream.clearForReuse(); + } } diff --git a/commons/src/main/java/org/archive/io/RecordingOutputStream.java b/commons/src/main/java/org/archive/io/RecordingOutputStream.java index d3756da0..4d0713da 100644 --- a/commons/src/main/java/org/archive/io/RecordingOutputStream.java +++ b/commons/src/main/java/org/archive/io/RecordingOutputStream.java @@ -181,19 +181,8 @@ public class RecordingOutputStream extends OutputStream { throw new IOException("ROS already open for " +Thread.currentThread().getName()); } + clearForReuse(); this.out = wrappedStream; - this.position = 0; - this.markPosition = 0; - this.maxPosition = 0; - this.size = 0; - this.messageBodyBeginMark = -1; - // ensure recording turned on - this.recording = true; - // Always begins false; must use startDigest() to begin - this.shouldDigest = false; - if (this.diskStream != null) { - closeDiskStream(); - } if (this.diskStream == null) { // TODO: Fix so we only make file when its actually needed. FileOutputStream fis = new FileOutputStream(this.backingFilename); @@ -567,5 +556,21 @@ public class RecordingOutputStream extends OutputStream { public long getRemainingLength() { return maxLength - position; } + + public void clearForReuse() throws IOException { + this.out = null; + this.position = 0; + this.markPosition = 0; + this.maxPosition = 0; + this.size = 0; + this.messageBodyBeginMark = -1; + // ensure recording turned on + this.recording = true; + // Always begins false; must use startDigest() to begin + this.shouldDigest = false; + if (this.diskStream != null) { + closeDiskStream(); + } + } } diff --git a/commons/src/main/java/org/archive/util/Recorder.java b/commons/src/main/java/org/archive/util/Recorder.java index 298481ea..425344bb 100644 --- a/commons/src/main/java/org/archive/util/Recorder.java +++ b/commons/src/main/java/org/archive/util/Recorder.java @@ -577,5 +577,17 @@ public class Recorder { public void endReplays() { ArchiveUtils.closeQuietly(replayCharSequence); replayCharSequence = null; + + // like closeQuietly + try { + ris.clearForReuse(); + } catch (IOException ioe) { + } + + // like closeQuietly + try { + ros.clearForReuse(); + } catch (IOException e) { + } } }