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
ARefCountedFileWithStream
that 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 int
BUFFER_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 void
close()
Closes the output stream.void
flush()
Flushes the stream, writing any data currently buffered in stream implementation to the proper output stream.File
getInputFile()
Gets the underlyingFile
that allows to read the contents of the file.long
getPos()
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.int
getReferenceCounter()
boolean
isClosed()
Checks if the file is closed for writes.static RefCountedBufferingFileStream
openNew(FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider)
boolean
release()
Decreases the reference counter.static RefCountedBufferingFileStream
restore(FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider, File initialTmpFile)
void
retain()
Increases the reference counter.void
sync()
Flushes the data all the way to the persistent non-volatile storage (for example disks).String
toString()
void
write(byte[] b, int off, int len)
void
write(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:RefCountedFSOutputStream
Gets the underlyingFile
that allows to read the contents of the file.- Specified by:
getInputFile
in classRefCountedFSOutputStream
- Returns:
- A handle to the File object.
-
getPos
public long getPos()
Description copied from class:FSDataOutputStream
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. 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:
getPos
in 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:
write
in classOutputStream
- Throws:
IOException
-
write
public void write(byte[] b, int off, int len) throws IOException
- Overrides:
write
in classOutputStream
- Throws:
IOException
-
flush
public void flush() throws IOException
Description copied from class:FSDataOutputStream
Flushes 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
OutputStream
as abstract to force implementations of theFSDataOutputStream
to implement this method directly.- Specified by:
flush
in interfaceFlushable
- Specified by:
flush
in classFSDataOutputStream
- Throws:
IOException
- Thrown if an I/O error occurs while flushing the stream.
-
sync
public void sync() throws IOException
Description copied from class:FSDataOutputStream
Flushes 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:
sync
in classFSDataOutputStream
- Throws:
IOException
- Thrown if an I/O error occurs
-
isClosed
public boolean isClosed() throws IOException
Description copied from class:RefCountedFSOutputStream
Checks if the file is closed for writes.- Specified by:
isClosed
in classRefCountedFSOutputStream
- Returns:
- {@link true} if the file is closed, {@link false} otherwise.
- Throws:
IOException
-
close
public void close()
Description copied from class:FSDataOutputStream
Closes 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
IOException
to 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
OutputStream
as abstract to force implementations of theFSDataOutputStream
to implement this method directly.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in classFSDataOutputStream
-
retain
public void retain()
Description copied from interface:RefCounted
Increases the reference counter.
-
release
public boolean release()
Description copied from interface:RefCounted
Decreases the reference counter.- Returns:
true
if the reference counter reached 0,false
otherwise.
-
getReferenceCounter
@VisibleForTesting public int getReferenceCounter()
-
openNew
public static RefCountedBufferingFileStream openNew(FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider) throws IOException
- Throws:
IOException
-
restore
public static RefCountedBufferingFileStream restore(FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider, File initialTmpFile) throws IOException
- Throws:
IOException
-
-