You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by "315157973 (via GitHub)" <gi...@apache.org> on 2024/01/22 06:41:22 UTC
[PR] [fix] [broker] Fix TTL base on client's publish time [pulsar]
315157973 opened a new pull request, #21940:
URL: https://github.com/apache/pulsar/pull/21940
Main Issue: https://github.com/apache/pulsar/issues/21347
### Motivation
When the client machine's clock is incorrect (eg: set to 1 year later) and the Broker does not set the AppendBrokerTimestampMetadataInterceptor, the Ledger will not be cleaned up.
Because if the Broker's timestamp is not set, the expiration check will be based on the client's publish time.
As we discuss in https://lists.apache.org/thread/0vtjt436xvlg0fr4ogchkjdvjcp56mvz
### Modifications
TTL not base the on wrong client publish time
### Verifying this change
- [x] Make sure that the change passes the CI checks.
### Documentation
- [x] `doc-not-needed` <!-- Your PR changes do not impact docs -->
### Matching PR in forked repository
PR in forked repository: <!-- ENTER URL HERE -->
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Fix TTL base on client's publish time [pulsar]
Posted by "codelipenghui (via GitHub)" <gi...@apache.org>.
codelipenghui commented on code in PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#discussion_r1461500826
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java:
##########
@@ -100,6 +108,33 @@ public boolean expireMessages(int messageTTLInSeconds) {
}
}
+ private long getEntryTimestamp(Entry entry,
+ Map<Long, MLDataFormats.ManagedLedgerInfo.LedgerInfo> ledgerIdToInfoCache,
+ ManagedCursor cursor) throws IOException {
+ long entryTimestamp = Commands.getEntryTimestamp(entry.getDataBuffer());
+ ManagedLedger managedLedger = cursor.getManagedLedger();
+ ManagedLedgerConfig config = managedLedger.getConfig();
+ MLDataFormats.ManagedLedgerInfo.LedgerInfo ledgerInfo = ledgerIdToInfoCache.computeIfAbsent(
+ entry.getLedgerId(), (ledgerId) -> {
+ try {
+ return managedLedger.getLedgerInfo(ledgerId)
+ .get(config.getMetadataOperationsTimeoutSeconds(), TimeUnit.SECONDS);
Review Comment:
The method `managedLedger.getOptionalLedgerInfo()` can be used to avoid the complexity of using the async API.
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java:
##########
@@ -100,6 +108,33 @@ public boolean expireMessages(int messageTTLInSeconds) {
}
}
+ private long getEntryTimestamp(Entry entry,
+ Map<Long, MLDataFormats.ManagedLedgerInfo.LedgerInfo> ledgerIdToInfoCache,
+ ManagedCursor cursor) throws IOException {
+ long entryTimestamp = Commands.getEntryTimestamp(entry.getDataBuffer());
+ ManagedLedger managedLedger = cursor.getManagedLedger();
+ ManagedLedgerConfig config = managedLedger.getConfig();
+ MLDataFormats.ManagedLedgerInfo.LedgerInfo ledgerInfo = ledgerIdToInfoCache.computeIfAbsent(
+ entry.getLedgerId(), (ledgerId) -> {
+ try {
+ return managedLedger.getLedgerInfo(ledgerId)
+ .get(config.getMetadataOperationsTimeoutSeconds(), TimeUnit.SECONDS);
+ } catch (Exception e) {
+ return null;
+ }
+ });
+ if (ledgerInfo == null) {
+ return entryTimestamp;
+ }
+ long maxAvailableTimestamp = ledgerInfo.getTimestamp() + config.getMaximumRolloverTimeMs();
Review Comment:
The `ledgerInfo.getTimestamp()` is the ledger closure time. Do we need to consider the maximum rollover time?
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java:
##########
@@ -78,10 +86,10 @@ public boolean expireMessages(int messageTTLInSeconds) {
if (expirationCheckInProgressUpdater.compareAndSet(this, FALSE, TRUE)) {
log.info("[{}][{}] Starting message expiry check, ttl= {} seconds", topicName, subName,
messageTTLInSeconds);
-
+ Map<Long, MLDataFormats.ManagedLedgerInfo.LedgerInfo> ledgerIdToInfoCache = new ConcurrentHashMap<>();
cursor.asyncFindNewestMatching(ManagedCursor.FindPositionConstraint.SearchActiveEntries, entry -> {
try {
- long entryTimestamp = Commands.getEntryTimestamp(entry.getDataBuffer());
+ long entryTimestamp = getEntryTimestamp(entry, ledgerIdToInfoCache, cursor);
Review Comment:
Is it better to split the message expiration into 2 steps?
1. Expire the closed ledgers if `ledger close time < current time - ttl`
2. Expire the entries (the existing method)
So that we don't need to touch the existing expire entries logic and this way will be more efficient since we don't need to read entries if the whole ledger is expired.
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "codelipenghui (via GitHub)" <gi...@apache.org>.
codelipenghui commented on PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#issuecomment-1916061942
It looks like related to this change?
```
Error: Run 2: MessageTTLTest.testMessageExpiryAfterTopicUnload:106 » ConditionTimeout Assertion condition defined as a org.apache.pulsar.broker.service.MessageTTLTest expected [5:49] but found [5:-1] within 30 seconds.
```
I have re-triggered the test.
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "315157973 (via GitHub)" <gi...@apache.org>.
315157973 commented on PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#issuecomment-1926214862
@codelipenghui @coderzc PTAL
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "codelipenghui (via GitHub)" <gi...@apache.org>.
codelipenghui commented on code in PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#discussion_r1495854131
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java:
##########
@@ -81,9 +81,9 @@ public boolean expireMessages(int messageTTLInSeconds) {
if (expirationCheckInProgressUpdater.compareAndSet(this, FALSE, TRUE)) {
log.info("[{}][{}] Starting message expiry check, ttl= {} seconds", topicName, subName,
messageTTLInSeconds);
- if (checkExpiryByLedgerClosureTime(cursor, messageTTLInSeconds)) {
- return true;
- }
+ // First filter the entire Ledger reached TTL based on the Ledger closing time to avoid client clock skew
+ checkExpiryByLedgerClosureTime(cursor, messageTTLInSeconds);
Review Comment:
It looks like the returned value is not used by any places. Do we need to change it to `void`?
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "dao-jun (via GitHub)" <gi...@apache.org>.
dao-jun commented on PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#issuecomment-1954763943
seems there is a test keeps failing, please check
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "codelipenghui (via GitHub)" <gi...@apache.org>.
codelipenghui commented on code in PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#discussion_r1467418275
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java:
##########
@@ -100,6 +105,27 @@ public boolean expireMessages(int messageTTLInSeconds) {
}
}
+ private boolean checkExpiryByLedgerClosureTime(ManagedCursor cursor, int messageTTLInSeconds) {
+ if (cursor instanceof ManagedCursorImpl managedCursor) {
+ ManagedLedgerImpl managedLedger = (ManagedLedgerImpl) managedCursor.getManagedLedger();
+ Position deletedPosition = managedCursor.getMarkDeletedPosition();
+ SortedMap<Long, MLDataFormats.ManagedLedgerInfo.LedgerInfo> ledgerInfoSortedMap =
+ managedLedger.getLedgersInfo()
+ .subMap(deletedPosition.getLedgerId(), managedLedger.getLedgersInfo().lastKey());
+ long expiryLedgerId = -1;
+ for (MLDataFormats.ManagedLedgerInfo.LedgerInfo ledgerInfo : ledgerInfoSortedMap.values()) {
+ if (!MessageImpl.isEntryExpired(messageTTLInSeconds, ledgerInfo.getTimestamp())) {
+ break;
+ }
+ expiryLedgerId = ledgerInfo.getLedgerId();
Review Comment:
```suggestion
if (!ledgerInfo.hasTimestamp()) {
break;
}
if (!MessageImpl.isEntryExpired(messageTTLInSeconds, ledgerInfo.getTimestamp())) {
break;
}
expiryLedgerId = ledgerInfo.getLedgerId();
```
Is it better to add a check to make sure the ledger has timestamp to avoid a potential NPE?
I know it shouldn't happen because the loop will not touch the last ledger.
##########
pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentMessageFinderTest.java:
##########
@@ -437,6 +440,28 @@ void testMessageExpiryWithTimestampNonRecoverableException() throws Exception {
}
+ @Test
+ public void testIncorrectClientClock() throws Exception {
+ final String ledgerAndCursorName = "testIncorrectClientClock";
+ int maxRollOverTimeMs = 1;
+ int maxTTLSeconds = 1;
+ ManagedLedgerConfig config = new ManagedLedgerConfig();
+ config.setMaximumRolloverTime(maxRollOverTimeMs, TimeUnit.MICROSECONDS);
+ ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open(ledgerAndCursorName, config);
+ ManagedCursorImpl c1 = (ManagedCursorImpl) ledger.openCursor(ledgerAndCursorName);
+ // set client clock to 10 days later
+ long incorrectPublishTimestamp = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(10);
+ for (int i = 0; i < 10; i++) {
+ ledger.addEntry(createMessageWrittenToLedger("msg" + i, incorrectPublishTimestamp));
+ }
+ PersistentTopic mock = mock(PersistentTopic.class);
+ when(mock.getName()).thenReturn("topicname");
+ when(mock.getLastPosition()).thenReturn(PositionImpl.EARLIEST);
+ PersistentMessageExpiryMonitor monitor = new PersistentMessageExpiryMonitor(mock, c1.getName(), c1, null);
+ Thread.sleep(Math.max(config.getMaximumRolloverTimeMs(), TimeUnit.SECONDS.toMillis(maxTTLSeconds)));
+ assertTrue(monitor.expireMessages(maxTTLSeconds));
Review Comment:
```suggestion
assertTrue(monitor.expireMessages(maxTTLSeconds));
assertEquals(c1.getNumberOfEntriesInBacklog(true), 0);
```
##########
pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentMessageFinderTest.java:
##########
@@ -437,6 +440,28 @@ void testMessageExpiryWithTimestampNonRecoverableException() throws Exception {
}
+ @Test
+ public void testIncorrectClientClock() throws Exception {
Review Comment:
It looks like the issue is we can't use `assertTrue(monitor.expireMessages(maxTTLSeconds));`
It doesn't mean there are messages is expired. It will return true if there is no in-progress expiration task.
Maybe we can try to check the backlog of the
```
assertEquals(c1.getNumberOfEntriesInBacklog(true), 0);
```
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java:
##########
@@ -100,6 +105,27 @@ public boolean expireMessages(int messageTTLInSeconds) {
}
}
+ private boolean checkExpiryByLedgerClosureTime(ManagedCursor cursor, int messageTTLInSeconds) {
+ if (cursor instanceof ManagedCursorImpl managedCursor) {
+ ManagedLedgerImpl managedLedger = (ManagedLedgerImpl) managedCursor.getManagedLedger();
+ Position deletedPosition = managedCursor.getMarkDeletedPosition();
+ SortedMap<Long, MLDataFormats.ManagedLedgerInfo.LedgerInfo> ledgerInfoSortedMap =
+ managedLedger.getLedgersInfo()
+ .subMap(deletedPosition.getLedgerId(), managedLedger.getLedgersInfo().lastKey());
+ long expiryLedgerId = -1;
+ for (MLDataFormats.ManagedLedgerInfo.LedgerInfo ledgerInfo : ledgerInfoSortedMap.values()) {
+ if (!MessageImpl.isEntryExpired(messageTTLInSeconds, ledgerInfo.getTimestamp())) {
+ break;
+ }
+ expiryLedgerId = ledgerInfo.getLedgerId();
+ }
+ if (expiryLedgerId > -1) {
+ findEntryComplete(PositionImpl.get(managedLedger.getNextValidLedger(expiryLedgerId), 0), null);
Review Comment:
```suggestion
findEntryComplete(PositionImpl.get(managedLedger.getNextValidLedger(expiryLedgerId), 0), null);
return true;
```
##########
pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentMessageFinderTest.java:
##########
@@ -437,6 +440,28 @@ void testMessageExpiryWithTimestampNonRecoverableException() throws Exception {
}
+ @Test
+ public void testIncorrectClientClock() throws Exception {
Review Comment:
It looks like the test can't cover the issue?
<img width="1686" alt="image" src="https://github.com/apache/pulsar/assets/12592133/ca5869e7-4663-460f-9b3a-4e076d84a588">
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "coderzc (via GitHub)" <gi...@apache.org>.
coderzc commented on code in PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#discussion_r1473754516
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java:
##########
@@ -100,6 +105,35 @@ public boolean expireMessages(int messageTTLInSeconds) {
}
}
+ private boolean checkExpiryByLedgerClosureTime(ManagedCursor cursor, int messageTTLInSeconds) {
+ if (cursor instanceof ManagedCursorImpl managedCursor) {
+ ManagedLedgerImpl managedLedger = (ManagedLedgerImpl) managedCursor.getManagedLedger();
+ Position deletedPosition = managedCursor.getMarkDeletedPosition();
+ SortedMap<Long, MLDataFormats.ManagedLedgerInfo.LedgerInfo> ledgerInfoSortedMap =
+ managedLedger.getLedgersInfo()
+ .subMap(deletedPosition.getLedgerId(), managedLedger.getLedgersInfo().lastKey());
+ MLDataFormats.ManagedLedgerInfo.LedgerInfo info = null;
+ for (MLDataFormats.ManagedLedgerInfo.LedgerInfo ledgerInfo : ledgerInfoSortedMap.values()) {
+ if (!ledgerInfo.hasTimestamp() || !MessageImpl.isEntryExpired(messageTTLInSeconds,
+ ledgerInfo.getTimestamp())) {
+ break;
+ }
+ info = ledgerInfo;
+ }
+ if (info != null && info.getLedgerId() > -1) {
+ PositionImpl position = PositionImpl.get(info.getLedgerId(), info.getEntries() - 1);
+ PositionImpl newPosition = managedLedger.getNextValidPosition(position);
Review Comment:
Why mark delete next position? The next position may not have expired yet.
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "dao-jun (via GitHub)" <gi...@apache.org>.
dao-jun merged PR #21940:
URL: https://github.com/apache/pulsar/pull/21940
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#issuecomment-1916105910
## [Codecov](https://app.codecov.io/gh/apache/pulsar/pull/21940?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
Attention: `16 lines` in your changes are missing coverage. Please review.
> Comparison is base [(`17bb322`)](https://app.codecov.io/gh/apache/pulsar/commit/17bb3227536f891d4f2ef234da596bdb5bb46bbb?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) 73.59% compared to head [(`e2459a6`)](https://app.codecov.io/gh/apache/pulsar/pull/21940?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) 36.45%.
> Report is 20 commits behind head on master.
<details><summary>Additional details and impacted files</summary>
[](https://app.codecov.io/gh/apache/pulsar/pull/21940?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
```diff
@@ Coverage Diff @@
## master #21940 +/- ##
=============================================
- Coverage 73.59% 36.45% -37.14%
+ Complexity 32417 12398 -20019
=============================================
Files 1861 1727 -134
Lines 138678 131899 -6779
Branches 15188 14423 -765
=============================================
- Hits 102060 48089 -53971
- Misses 28715 77405 +48690
+ Partials 7903 6405 -1498
```
| [Flag](https://app.codecov.io/gh/apache/pulsar/pull/21940/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
|---|---|---|
| [inttests](https://app.codecov.io/gh/apache/pulsar/pull/21940/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `24.17% <8.00%> (+0.04%)` | :arrow_up: |
| [systests](https://app.codecov.io/gh/apache/pulsar/pull/21940/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `23.62% <8.00%> (-0.06%)` | :arrow_down: |
| [unittests](https://app.codecov.io/gh/apache/pulsar/pull/21940/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `31.97% <36.00%> (-40.89%)` | :arrow_down: |
Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
| [Files](https://app.codecov.io/gh/apache/pulsar/pull/21940?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
|---|---|---|
| [...n/java/org/apache/pulsar/broker/PulsarService.java](https://app.codecov.io/gh/apache/pulsar/pull/21940?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cHVsc2FyLWJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcHVsc2FyL2Jyb2tlci9QdWxzYXJTZXJ2aWNlLmphdmE=) | `68.96% <100.00%> (-13.36%)` | :arrow_down: |
| [...g/apache/pulsar/broker/admin/impl/BrokersBase.java](https://app.codecov.io/gh/apache/pulsar/pull/21940?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cHVsc2FyLWJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcHVsc2FyL2Jyb2tlci9hZG1pbi9pbXBsL0Jyb2tlcnNCYXNlLmphdmE=) | `36.08% <0.00%> (-34.79%)` | :arrow_down: |
| [...ache/pulsar/client/admin/internal/BrokersImpl.java](https://app.codecov.io/gh/apache/pulsar/pull/21940?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cHVsc2FyLWNsaWVudC1hZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcHVsc2FyL2NsaWVudC9hZG1pbi9pbnRlcm5hbC9Ccm9rZXJzSW1wbC5qYXZh) | `25.00% <0.00%> (-62.50%)` | :arrow_down: |
| [...ice/persistent/PersistentMessageExpiryMonitor.java](https://app.codecov.io/gh/apache/pulsar/pull/21940?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cHVsc2FyLWJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcHVsc2FyL2Jyb2tlci9zZXJ2aWNlL3BlcnNpc3RlbnQvUGVyc2lzdGVudE1lc3NhZ2VFeHBpcnlNb25pdG9yLmphdmE=) | `41.88% <36.84%> (-28.53%)` | :arrow_down: |
... and [1441 files with indirect coverage changes](https://app.codecov.io/gh/apache/pulsar/pull/21940/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
</details>
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Expire messages according to ledger close time to avoid client clock skew [pulsar]
Posted by "heesung-sn (via GitHub)" <gi...@apache.org>.
heesung-sn commented on PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#issuecomment-1967417523
@315157973 could you help to cherry-pick this PR to branch-3.0? I see conflicts.
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [fix] [broker] Fix TTL base on client's publish time [pulsar]
Posted by "codelipenghui (via GitHub)" <gi...@apache.org>.
codelipenghui commented on PR #21940:
URL: https://github.com/apache/pulsar/pull/21940#issuecomment-1903501295
Regarding the PR title, I think we can change it to
[fix] [broker] Expire messages according to ledger close time to avoid client clock skew
--
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: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org