databus icon indicating copy to clipboard operation
databus copied to clipboard

skip endOfPeriodMarker in stream method

Open mikewuhao opened this issue 8 years ago • 0 comments

the windowOffset calculate method is diffrent between relay and client . Client filters the endOfPeriodMarker event as follows: if (e.isEndOfPeriodMarker()) { ... } else if (e.isCheckpointMessage()) { ... } else // regular dbusEvent { if (currentWindowScn == e.sequence()) { ++currentWindowOffset; } else { currentWindowScn = e.sequence(); currentWindowOffset = 1L; } } but when the client stream events from relay , the filter method like this: if (state == EventScanningState.FOUND_WINDOW_ZONE) { if (skippedMessages < messagesToSkip) { ++skippedMessages; continue; } else { state = EventScanningState.VALID_ZONE; } } } so when transaction has a lot events and the client's buffer is full.the windowOffset may be not right and the consumer may consume a event twice.

mikewuhao avatar Jul 25 '17 15:07 mikewuhao