asafm commented on code in PR #20469:
URL: https://github.com/apache/pulsar/pull/20469#discussion_r1220959803


##########
pip/pip-269.md:
##########
@@ -0,0 +1,247 @@
+# Background knowledge
+
+The Cursor is used to read data from ledgers, there are three scenarios for 
reading messages(we can call these scenarios Read-Scenario):
+- **Sequentially Read**: Read entries from `read position`(include), after the 
read is complete, set `read position` to the next position of the last entry of 
this read, then the next round of **Sequentially Read**. Note: In addition to 
delivering messages to consumers, some internal apis are also using 
**Sequentially Read**, such as `Compaction`, `TopicTransactionBufferRecover`, 
`Replicator` and so on.
+- **Message Replay Read**: Normally consumers will acknowledge messages all 
they received, but sometimes the consumer can not handle messages and asks the 
broker to redeliver these messages(these messages are always earlier than `read 
position`). E.g. call `consumer.negativeAcknowledge`; close a consumer and 
there are some messages held by this consumer, these messages will be 
redelivered to other consumers. Message Dispatcher will cache the position of 
messages which should be redelivered, and Cursor will read messages which were 
cached in the memory of Message Dispatcher in the next round. In general, 
**Message Replay Read** does not modify the `read position`, except in the 
scenario **A compensation mechanism of Message Replay Read** below.
+- **Specified Read**(Read directly using Managed Ledger): there are some APIs 
that can read messages at a specified position, but generally do not affect the 
attributes of the Cursor or Message Dispatcher. E.g.
+  - [`pulsar-admin topics 
examine-messages`](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#examine-messages)
+  - [`pulsar-admin topics 
get-message-by-id`](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#get-message-by-id)
+
+Summarize: The `read position` of the Cursor is a marker, reads above or equal 
to this marker are called **Sequentially Read**, and reads below this marker 
are called **Message Replay Read**(these messages have been read once by 
**Sequentially Read** before), and **Specified Read** does not care about this 
marker(in fact, **Specified Read** does not even care about Cursor).

Review Comment:
   Summarize --> summary
   
   I highly recommend working with grammar tools like Grammarly, LanguageTool, 
or others - many are free.



##########
pip/pip-269.md:
##########
@@ -0,0 +1,247 @@
+# Background knowledge
+
+The Cursor is used to read data from ledgers, there are three scenarios for 
reading messages(we can call these scenarios Read-Scenario):
+- **Sequentially Read**: Read entries from `read position`(include), after the 
read is complete, set `read position` to the next position of the last entry of 
this read, then the next round of **Sequentially Read**. Note: In addition to 
delivering messages to consumers, some internal apis are also using 
**Sequentially Read**, such as `Compaction`, `TopicTransactionBufferRecover`, 
`Replicator` and so on.
+- **Message Replay Read**: Normally consumers will acknowledge messages all 
they received, but sometimes the consumer can not handle messages and asks the 
broker to redeliver these messages(these messages are always earlier than `read 
position`). E.g. call `consumer.negativeAcknowledge`; close a consumer and 
there are some messages held by this consumer, these messages will be 
redelivered to other consumers. Message Dispatcher will cache the position of 
messages which should be redelivered, and Cursor will read messages which were 
cached in the memory of Message Dispatcher in the next round. In general, 
**Message Replay Read** does not modify the `read position`, except in the 
scenario **A compensation mechanism of Message Replay Read** below.
+- **Specified Read**(Read directly using Managed Ledger): there are some APIs 
that can read messages at a specified position, but generally do not affect the 
attributes of the Cursor or Message Dispatcher. E.g.
+  - [`pulsar-admin topics 
examine-messages`](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#examine-messages)
+  - [`pulsar-admin topics 
get-message-by-id`](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#get-message-by-id)
+
+Summarize: The `read position` of the Cursor is a marker, reads above or equal 
to this marker are called **Sequentially Read**, and reads below this marker 
are called **Message Replay Read**(these messages have been read once by 
**Sequentially Read** before), and **Specified Read** does not care about this 
marker(in fact, **Specified Read** does not even care about Cursor).
+
+**Read Position Reset**: As described above, the `read position` is very 
important to **Sequentially Read**, **Sequentially Read** expects the `read 
position` always be changed by itself. There have some cases that will also 
change the `read position` of the Cursor, causing the Incorrect **Sequentially 
Read** and Incorrect **Message Replay Read**. For example:
+- [pulsar-admin topics 
reset-cursor](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#reset-cursor):
  set `read position` to a specified value.
+- 
[consumer.seek](https://github.com/apache/pulsar/blob/master/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Consumer.java#L482):
 same as [pulsar-admin topics 
reset-cursor](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#reset-cursor),
 but it used by the Pulsar Client.
+- [pulsar-admin topics 
skip](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#skip-messages): 
skip many messages.
+- [pulsar-admin topics 
clear-backlog](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#skip-all-messages)
+- 
[cursor.rewind](https://github.com/apache/pulsar/blob/master/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java#L2477)<sup>[1]</sup>(it
 is an internal API): set the `read position` to the next of `mark deleted 
position.` It is used by `Dispatcher` and `Compactor`
+- 
[cursor.seek](https://github.com/apache/pulsar/blob/master/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java#L2493)(it
 is an internal API): just set the `read position` to a specified point. It is 
only used by `CompactedTopic` now.
+- A compensation mechanism of **Message Replay Read**: Something wrong makes 
there a position the same as `read position` in the replay queue, 
https://github.com/apache/pulsar/issues/6403 provides an additional mechanism 
to increase the `read position` before reading to avoid repeated read(read by 
Message Replay Read once and read by Sequentially Read once).

Review Comment:
   I couldn't figure this out. Can you try to explain this a bit better?



##########
pip/pip-269.md:
##########
@@ -0,0 +1,247 @@
+# Background knowledge
+
+The Cursor is used to read data from ledgers, there are three scenarios for 
reading messages(we can call these scenarios Read-Scenario):
+- **Sequentially Read**: Read entries from `read position`(include), after the 
read is complete, set `read position` to the next position of the last entry of 
this read, then the next round of **Sequentially Read**. Note: In addition to 
delivering messages to consumers, some internal apis are also using 
**Sequentially Read**, such as `Compaction`, `TopicTransactionBufferRecover`, 
`Replicator` and so on.
+- **Message Replay Read**: Normally consumers will acknowledge messages all 
they received, but sometimes the consumer can not handle messages and asks the 
broker to redeliver these messages(these messages are always earlier than `read 
position`). E.g. call `consumer.negativeAcknowledge`; close a consumer and 
there are some messages held by this consumer, these messages will be 
redelivered to other consumers. Message Dispatcher will cache the position of 
messages which should be redelivered, and Cursor will read messages which were 
cached in the memory of Message Dispatcher in the next round. In general, 
**Message Replay Read** does not modify the `read position`, except in the 
scenario **A compensation mechanism of Message Replay Read** below.
+- **Specified Read**(Read directly using Managed Ledger): there are some APIs 
that can read messages at a specified position, but generally do not affect the 
attributes of the Cursor or Message Dispatcher. E.g.
+  - [`pulsar-admin topics 
examine-messages`](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#examine-messages)
+  - [`pulsar-admin topics 
get-message-by-id`](https://pulsar.apache.org/docs/3.0.x/admin-api-topics/#get-message-by-id)
+
+Summarize: The `read position` of the Cursor is a marker, reads above or equal 
to this marker are called **Sequentially Read**, and reads below this marker 
are called **Message Replay Read**(these messages have been read once by 
**Sequentially Read** before), and **Specified Read** does not care about this 
marker(in fact, **Specified Read** does not even care about Cursor).
+
+**Read Position Reset**: As described above, the `read position` is very 
important to **Sequentially Read**, **Sequentially Read** expects the `read 
position` always be changed by itself. There have some cases that will also 
change the `read position` of the Cursor, causing the Incorrect **Sequentially 
Read** and Incorrect **Message Replay Read**. For example:

Review Comment:
   "Sequentially Read" --> "Sequential Read"



##########
pip/pip-269.md:
##########
@@ -0,0 +1,239 @@
+# Background knowledge
+
+The Cursor is used to read data from ledgers, there are three scenarios for 
reading messages(we can call these scenarios Read-Scenario):
+- **Sequentially Read**: reading some entries backward from the `read 
position` and updating the read position to the next position to be read when 
reading is finished.
+    - Read entries from `read position`(include), after the read is complete, 
set `read position` to the next position of the last entry of this read, then 
the next round of **Sequentially Read**.
+- **Message Replay Read**: Normally consumers will acknowledge messages all 
they received, but sometimes the consumer can not handle messages and asks the 
broker to redeliver these messages(these messages are always earlier than `read 
position`). E.g. call `consumer.negativeAcknowledge`; close a consumer and 
there are some messages held by this consumer, these messages will be 
redelivered to other consumers. Message Dispatcher will cache the position of 
messages which should be redelivered, and Cursor will read messages which were 
cached in the memory of Message Dispatcher in the next round.
+- **Specified Read**(Read directly using Managed Ledger): there are some APIs 
that can read messages at a specified position, but generally do not affect the 
attributes of the Cursor or Message Dispatcher. E.g.

Review Comment:
   Great. Let's change the name "Specified Read" (which I think you meant 
specific read) --> "Direct read"?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to