public SplitFileInserterCrossSegmentStorage(SplitFileInserterStorage parent, int segNo, boolean persistent, int segLen, int crossCheckBlocks) { this.parent = parent; this.segNo = segNo; this.dataBlockCount = segLen; this.crossCheckBlockCount = crossCheckBlocks; this.totalBlocks = dataBlockCount + crossCheckBlocks; segments = new SplitFileInserterSegmentStorage[totalBlocks]; blockNumbers = new int[totalBlocks]; try { CountedOutputStream cos = new CountedOutputStream(new NullOutputStream()); DataOutputStream dos = new DataOutputStream(cos); innerStoreStatus(dos); dos.close(); statusLength = (int) cos.written() + parent.checker.checksumLength(); } catch (IOException e) { throw new Error(e); // Impossible } }
public void storeStatus() { if(!parent.persistent) return; DataOutputStream dos; try { dos = new DataOutputStream(parent.writeChecksummedTo(parent.crossSegmentStatusOffset(segNo), statusLength)); innerStoreStatus(dos); } catch (IOException e) { Logger.error(this, "Impossible: "+e, e); return; } try { dos.close(); } catch (IOException e) { Logger.error(this, "I/O error writing segment status?: "+e, e); parent.failOnDiskError(e); } }
CountedOutputStream cos = new CountedOutputStream(new NullOutputStream()); DataOutputStream dos = new DataOutputStream(cos); innerStoreStatus(dos); dos.close(); int computedStatusLength = (int) cos.written() + parent.checker.checksumLength();