Ruibin Xing created FLINK-33863:
-----------------------------------

             Summary: Compressed Operator state restore failed
                 Key: FLINK-33863
                 URL: https://issues.apache.org/jira/browse/FLINK-33863
             Project: Flink
          Issue Type: Bug
          Components: Runtime / State Backends
    Affects Versions: 1.18.0
            Reporter: Ruibin Xing


We encountered an issue when using Flink 1.18.0. Our job enabled Snapshot 
Compression and used multiple Operator States in an operator. When recovering 
Operator State from a Savepoint, the following error occurred: 
"org.xerial.snappy.SnappyFramedInputStream: encountered EOF while reading 
stream header."

After researching, I believe the error is due to Flink 1.18.0's support for 
Snapshot Compression on Operator State (see 
https://issues.apache.org/jira/browse/FLINK-30113 ). When writing a Savepoint, 
SnappyFramedInputStream adds a header to the beginning of the data. When 
recovering Operator State from a Savepoint, SnappyFramedInputStream verifies 
the header from the beginning of the data.

Currently, when recovering Operator State with Snapshot Compression enabled, 
the logic is as follows:
For each OperatorStateHandle:
1. Verify if the current Savepoint stream's offset is the Snappy header.
2. Seek to the state's start offset.
3. Read the state's data and finally seek to the state's end offset.
(See: 
https://github.com/apache/flink/blob/ef2b626d67147797e992ec3b338bafdb4e5ab1c7/flink-runtime/src/main/java/org/apache/flink/runtime/state/OperatorStateRestoreOperation.java#L172
 )

Furthermore, when there are multiple Operator States, they are not sorted 
according to the Operator State's offset. Therefore, if the Operator States are 
out of order and the final offset is recovered first, the Savepoint stream will 
be seeked to the end, resulting in an EOF error.

I propose a solution: sort the OperatorStateHandle by offset and then recover 
the Operator State in order. After testing, this approach resolves the issue.

I will submit a PR. This is my first time contributing code, so any help is 
really appreciated.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to