Skip to content

Conversation

@mikewuhao
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant