Hi Jing Zhang,
I'm using the FileSystem backend. I also implemented ReadObject function to
support proper restart procedure:
private void readObject(ObjectInputStream ois)
throws ClassNotFoundException, IOException {
ois.defaultReadObject();
logger.info("Deserialized MultiStorePacketState: " + this.toString());
// No need to do anything in case of empty file
if (fileName.isEmpty()) {
return;
}
currentFile = new RandomAccessFile(fileName,"rw");
currentFile.seek(fileOffset);
}
However, according to logs this function wasn't called.
Btw, it could be beneficial to add this kind of State object e.g.
FileState which will encapsulate serialization / deserialization for
RandomAccessFile although the concept itself is a bit contradictory to
regular state.
Currently, I implemented and tested a workaround via addition of the
boolean variable isFileOpened, however it's awkward because I need to
check the state of the transient variable every time I use
state.value().
So should it be expected that transient variables in state would be
resetted to default values ?
пн, 11 окт. 2021 г. в 12:33, JING ZHANG <[email protected]>:
> Hi, Alex
> What state backend do you choose?
> If you choose MemoryStateBackend or FsStateBackend, `transient` keyword
> may not have effect because MemoryStateBackend does not serialize state for
> regular read/write accesses but keeps it as objects on the heap.
> If you choose RocksDBStateBackend, I thought it was expected behavior
> because RocksDBStateBackend stores all state as byte arrays in embedded
> RocksDB instances. Therefore, it de/serializes the state of a key for every
> read/write access. CurrentFile is null because the transient variable
> would not be serialized by default.
>
> Best,
> JING ZHANG
>
>
> Alex Drobinsky <[email protected]> 于2021年10月11日周一 下午4:33写道:
>
>> Dear flink community,
>>
>> I have following state class ( irrelevant fields removed )
>> public class MultiStorePacketState implements Serializable {
>>
>> public transient RandomAccessFile currentFile = null;
>> public long timerValue;
>> public String fileName;
>> public String exportedFileName;
>> public String sessionKey;
>> public long fileOffset = 0;
>>
>> }
>>
>> Once in a while, currentFile became *nullified, *this happens after I
>> extract state via
>>
>> MultiStorePacketState so = state.value();
>>
>> The frequency of this behaviour is similar to checkpoint interval (
>> checkpoint interval defined as 5 seconds and first occurence of this problem
>> is also 5 seconds), otherwise I don't have any clues to a possible
>> explanation.
>>
>> Is it an expected side effect of checkpoint procedure ?
>>
>> Best regards,
>> Alex
>>
>>