Xiaobing Fang created FLINK-41201:
-------------------------------------

             Summary: Fluss pipeline sink error counters remain zero after 
write failures
                 Key: FLINK-41201
                 URL: https://issues.apache.org/jira/browse/FLINK-41201
             Project: Flink
          Issue Type: Bug
          Components: Flink CDC
            Reporter: Xiaobing Fang


h2. Description

The Fluss pipeline sink updates unregistered error counters after an 
asynchronous write failure. The registered numRecordsOutErrors and 
numRecordsSendErrors counters remain zero, so metric reporters do not observe 
the error count even though the writer propagates the failure.

Both FlussSink.createWriter overloads call 
InternalSinkWriterMetricGroup.wrap(context.metricGroup()). However, Flink has 
already created the sink writer metric group before passing it to the connector.

The additional wrap attempts to register four counters again. Flink retains the 
previously registered metrics on name collisions, but the new wrapper holds a 
different error counter. FlussSinkWriter.checkAsyncException() increments this 
unregistered counter.

On the verified Flink versions, numRecordsSend and numBytesSend reuse the 
underlying operator IO counters and do not suffer from this counter separation.

h2. Steps to reproduce

# Create a FlussSink writer with a framework-provided SinkWriterMetricGroup.
# Submit a record targeting a nonexistent Fluss table to trigger a write 
failure.
# Execute the queued mailbox error callback or call flush().
# Inspect the counters captured through MetricRegistry.register().

The failure is propagated, but the registered numRecordsOutErrors and 
numRecordsSendErrors counters remain at 0 instead of increasing to 1.

The regression reproducer covers both createWriter overloads and both error 
propagation paths.

h2. Expected behavior and proposed fix

Pass context.metricGroup() directly to FlussSinkWriter.initialize() in both 
createWriter overloads.

The writer should update the same counters that Flink registered with metric 
reporters. This removes duplicate registration and restores error metric 
reporting without changing write behavior, exception propagation, or checkpoint 
semantics.

h2. Validation

Before the fix, all six new regression cases fail on the expected metric 
assertions.

After the fix, the regression tests pass with Flink 1.20.3 on Java 11 and Java 
17, and with Flink 2.2.0 on Java 17.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to