[fix][client] fix Reader.hasMessageAvailable might return true after seeking to latest #30
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Java client has the same issue with
apache/pulsar-client-python#199
After a seek operation is done, the
startMessageId
will be updated until the reconnection due to the seek is done inconnectionOpened
. So before it's updated,hasMessageAvailable
could compare with an outdatedstartMessageId
and return a wrong value.Modifications
Replace
duringSeek
with aSeekStatus
field:NOT_STARTED
: initial, or a seek operation is done.seek
could only succeed in this status.IN_PROGRESS
: A seek operation has started but the client does not receive the response from broker.COMPLETED
: The client has received the seek response but the seek future is not done.After the status becomes
COMPLETED
, next time the connection is established, the status will change fromCOMPLETED
toNOT_STARTED
and then seek future will be completed in the internal executor.Add
testHasMessageAvailableAfterSeek
to cover this change.