Class RefCountedBufferingFileStream
- java.lang.Object
-
- java.io.OutputStream
-
- org.apache.flink.core.fs.FSDataOutputStream
-
- org.apache.flink.core.fs.RefCountedFSOutputStream
-
- org.apache.flink.core.fs.RefCountedBufferingFileStream
-
- All Implemented Interfaces:
Closeable,Flushable,AutoCloseable,RefCounted
@Internal public class RefCountedBufferingFileStream extends RefCountedFSOutputStream
ARefCountedFileWithStreamthat also uses an in-memory buffer for buffering small writes. This is done to avoid frequent 'flushes' of the file stream to disk.
-
-
Field Summary
Fields Modifier and Type Field Description static intBUFFER_SIZE
-
Constructor Summary
Constructors Constructor Description RefCountedBufferingFileStream(RefCountedFileWithStream file, int bufferSize)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()Closes the output stream.voidflush()Flushes the stream, writing any data currently buffered in stream implementation to the proper output stream.FilegetInputFile()Gets the underlyingFilethat allows to read the contents of the file.longgetPos()Gets the position of the stream (non-negative), defined as the number of bytes from the beginning of the file to the current writing position.intgetReferenceCounter()booleanisClosed()Checks if the file is closed for writes.static RefCountedBufferingFileStreamopenNew(org.apache.flink.util.function.FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider)booleanrelease()Decreases the reference counter.static RefCountedBufferingFileStreamrestore(org.apache.flink.util.function.FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider, File initialTmpFile)voidretain()Increases the reference counter.voidsync()Flushes the data all the way to the persistent non-volatile storage (for example disks).StringtoString()voidwrite(byte[] b, int off, int len)voidwrite(int b)-
Methods inherited from class java.io.OutputStream
nullOutputStream, write
-
-
-
-
Field Detail
-
BUFFER_SIZE
public static final int BUFFER_SIZE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
RefCountedBufferingFileStream
@VisibleForTesting public RefCountedBufferingFileStream(RefCountedFileWithStream file, int bufferSize)
-
-
Method Detail
-
getInputFile
public File getInputFile()
Description copied from class:RefCountedFSOutputStreamGets the underlyingFilethat allows to read the contents of the file.- Specified by:
getInputFilein classRefCountedFSOutputStream- Returns:
- A handle to the File object.
-
getPos
public long getPos()
Description copied from class:FSDataOutputStreamGets the position of the stream (non-negative), defined as the number of bytes from the beginning of the file to the current writing position. The position corresponds to the zero-based index of the next byte that will be written.This method must report accurately report the current position of the stream. Various components of the high-availability and recovery logic rely on the accurate
- Specified by:
getPosin classFSDataOutputStream- Returns:
- The current position in the stream, defined as the number of bytes from the beginning of the file to the current writing position.
-
write
public void write(int b) throws IOException- Specified by:
writein classOutputStream- Throws:
IOException
-
write
public void write(byte[] b, int off, int len) throws IOException- Overrides:
writein classOutputStream- Throws:
IOException
-
flush
public void flush() throws IOExceptionDescription copied from class:FSDataOutputStreamFlushes the stream, writing any data currently buffered in stream implementation to the proper output stream. After this method has been called, the stream implementation must not hold onto any buffered data any more.A completed flush does not mean that the data is necessarily persistent. Data persistence can is only assumed after calls to
FSDataOutputStream.close()orFSDataOutputStream.sync().Implementation note: This overrides the method defined in
OutputStreamas abstract to force implementations of theFSDataOutputStreamto implement this method directly.- Specified by:
flushin interfaceFlushable- Specified by:
flushin classFSDataOutputStream- Throws:
IOException- Thrown if an I/O error occurs while flushing the stream.
-
sync
public void sync() throws IOExceptionDescription copied from class:FSDataOutputStreamFlushes the data all the way to the persistent non-volatile storage (for example disks). The method behaves similar to the fsync function, forcing all data to be persistent on the devices.- Specified by:
syncin classFSDataOutputStream- Throws:
IOException- Thrown if an I/O error occurs
-
isClosed
public boolean isClosed() throws IOExceptionDescription copied from class:RefCountedFSOutputStreamChecks if the file is closed for writes.- Specified by:
isClosedin classRefCountedFSOutputStream- Returns:
- {@link true} if the file is closed, {@link false} otherwise.
- Throws:
IOException
-
close
public void close()
Description copied from class:FSDataOutputStreamCloses the output stream. After this method returns, the implementation must guarantee that all data written to the stream is persistent/visible, as defined in theclass-level docs.The above implies that the method must block until persistence can be guaranteed. For example for distributed replicated file systems, the method must block until the replication quorum has been reached. If the calling thread is interrupted in the process, it must fail with an
IOExceptionto indicate that persistence cannot be guaranteed.If this method throws an exception, the data in the stream cannot be assumed to be persistent.
Implementation note: This overrides the method defined in
OutputStreamas abstract to force implementations of theFSDataOutputStreamto implement this method directly.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Specified by:
closein classFSDataOutputStream
-
retain
public void retain()
Description copied from interface:RefCountedIncreases the reference counter.
-
release
public boolean release()
Description copied from interface:RefCountedDecreases the reference counter.- Returns:
trueif the reference counter reached 0,falseotherwise.
-
getReferenceCounter
@VisibleForTesting public int getReferenceCounter()
-
openNew
public static RefCountedBufferingFileStream openNew(org.apache.flink.util.function.FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider) throws IOException
- Throws:
IOException
-
restore
public static RefCountedBufferingFileStream restore(org.apache.flink.util.function.FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider, File initialTmpFile) throws IOException
- Throws:
IOException
-
-