This is an automated email from the ASF dual-hosted git repository.
technoboy pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new e8bb6ca492c [fix][broker] Fix getMessageById throws 500 (#21919)
e8bb6ca492c is described below
commit e8bb6ca492c2a82dc3bec4e24453a190ccfdf2e5
Author: Zixuan Liu <[email protected]>
AuthorDate: Fri Jan 19 11:18:02 2024 +0800
[fix][broker] Fix getMessageById throws 500 (#21919)
Signed-off-by: Zixuan Liu <[email protected]>
---
.../broker/admin/impl/PersistentTopicsBase.java | 3 +++
.../pulsar/broker/admin/PersistentTopicsTest.java | 21 ++++++---------------
.../pulsar/client/admin/internal/TopicsImpl.java | 16 +---------------
3 files changed, 10 insertions(+), 30 deletions(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
index 53c412bcf1d..780537b9cb0 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java
@@ -2915,6 +2915,9 @@ public class PersistentTopicsBase extends AdminResource {
@Override
public void readEntryFailed(ManagedLedgerException
exception,
Object ctx) {
+ if (exception instanceof
ManagedLedgerException.LedgerNotExistException) {
+ throw new RestException(Status.NOT_FOUND,
"Message id not found");
+ }
throw new RestException(exception);
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/PersistentTopicsTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/PersistentTopicsTest.java
index 8dee90af4af..80a493188d1 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/PersistentTopicsTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/PersistentTopicsTest.java
@@ -1370,21 +1370,12 @@ public class PersistentTopicsTest extends
MockedPulsarServiceBaseTest {
Message<byte[]> message2 = admin.topics().getMessageById(topicName2,
id2.getLedgerId(), id2.getEntryId());
Assert.assertEquals(message2.getData(), data2.getBytes());
- Message<byte[]> message3 = null;
- try {
- message3 = admin.topics().getMessageById(topicName2,
id1.getLedgerId(), id1.getEntryId());
- Assert.fail();
- } catch (Exception e) {
- Assert.assertNull(message3);
- }
-
- Message<byte[]> message4 = null;
- try {
- message4 = admin.topics().getMessageById(topicName1,
id2.getLedgerId(), id2.getEntryId());
- Assert.fail();
- } catch (Exception e) {
- Assert.assertNull(message4);
- }
+ Assert.expectThrows(PulsarAdminException.NotFoundException.class, ()
-> {
+ admin.topics().getMessageById(topicName2, id1.getLedgerId(),
id1.getEntryId());
+ });
+ Assert.expectThrows(PulsarAdminException.NotFoundException.class, ()
-> {
+ admin.topics().getMessageById(topicName1, id2.getLedgerId(),
id2.getEntryId());
+ });
}
@Test
diff --git
a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/TopicsImpl.java
b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/TopicsImpl.java
index 33d1cd17858..2d9754a0748 100644
---
a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/TopicsImpl.java
+++
b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/TopicsImpl.java
@@ -964,21 +964,7 @@ public class TopicsImpl extends BaseResource implements
Topics {
@Override
public CompletableFuture<Message<byte[]>> getMessageByIdAsync(String
topic, long ledgerId, long entryId) {
- CompletableFuture<Message<byte[]>> future = new CompletableFuture<>();
- getRemoteMessageById(topic, ledgerId, entryId).handle((r, ex) -> {
- if (ex != null) {
- if (ex instanceof NotFoundException) {
- log.warn("Exception '{}' occurred while trying to get
message.", ex.getMessage());
- future.complete(r);
- } else {
- future.completeExceptionally(ex);
- }
- return null;
- }
- future.complete(r);
- return null;
- });
- return future;
+ return getRemoteMessageById(topic, ledgerId, entryId);
}
private CompletableFuture<Message<byte[]>> getRemoteMessageById(String
topic, long ledgerId, long entryId) {