/** * Close the Writer. Resources will be released regardless of the exceptions * being thrown. Future close calls will have no effect. * * The underlying FSDataOutputStream is not closed. */ @Override public void close() throws IOException { if ((state == State.CLOSED)) { return; } try { // First try the normal finish. // Terminate upon the first Exception. if (errorCount == 0) { if (state != State.READY) { throw new IllegalStateException( "Cannot close TFile in the middle of key-value insertion."); } finishDataBlock(true); // first, write out data:TFile.meta BlockAppender outMeta = writerBCF .prepareMetaBlock(TFileMeta.BLOCK_NAME, COMPRESSION_NONE); try { tfileMeta.write(outMeta); } finally { outMeta.close(); } // second, write out data:TFile.index BlockAppender outIndex = writerBCF.prepareMetaBlock(TFileIndex.BLOCK_NAME); try { tfileIndex.write(outIndex); } finally { outIndex.close(); } writerBCF.close(); } } finally { IOUtils.cleanup(LOG, blkAppender, writerBCF); blkAppender = null; writerBCF = null; state = State.CLOSED; } }
/** * Close the Writer. Resources will be released regardless of the exceptions * being thrown. Future close calls will have no effect. * * The underlying FSDataOutputStream is not closed. */ public void close() throws IOException { if ((state == State.CLOSED)) { return; } try { // First try the normal finish. // Terminate upon the first Exception. if (errorCount == 0) { if (state != State.READY) { throw new IllegalStateException( "Cannot close TFile in the middle of key-value insertion."); } finishDataBlock(true); // first, write out data:TFile.meta BlockAppender outMeta = writerBCF .prepareMetaBlock(TFileMeta.BLOCK_NAME, COMPRESSION_NONE); try { tfileMeta.write(outMeta); } finally { outMeta.close(); } // second, write out data:TFile.index BlockAppender outIndex = writerBCF.prepareMetaBlock(TFileIndex.BLOCK_NAME); try { tfileIndex.write(outIndex); } finally { outIndex.close(); } writerBCF.close(); } } finally { IOUtils.cleanup(LOG, blkAppender, writerBCF); blkAppender = null; writerBCF = null; state = State.CLOSED; } }