This is an automated email from the ASF dual-hosted git repository. penghui pushed a commit to branch branch-2.7 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 426bcc0a0fefbcc90985a990edf8bfeef402b905 Author: Devin Bost <devinb...@users.noreply.github.com> AuthorDate: Wed May 12 19:00:15 2021 -0600 Made OpAddEntry.toString() more robust to nulls to prevent NPEs (#10548) Adding test to show we don't throw NPE Fixed concurrency issue in OpAddEntry.toString() Co-authored-by: Devin Bost <db...@overstock.com> (cherry picked from commit d2b7c5eaee925b253201e2a92fcb91ad7290ff93) --- .../apache/bookkeeper/mledger/impl/OpAddEntry.java | 6 ++++-- .../bookkeeper/mledger/impl/ManagedLedgerTest.java | 25 +++++++++++++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java index e5aa68b..1e9485a 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/OpAddEntry.java @@ -299,9 +299,11 @@ class OpAddEntry extends SafeRunnable implements AddCallback, CloseCallback { @Override public String toString() { + ManagedLedgerImpl ml = this.ml; + LedgerHandle ledger = this.ledger; return "OpAddEntry{" + - "mlName" + ml.getName() + - "ledgerId=" + ledger.getId() + + "mlName=" + ml != null ? ml.getName() : "null" + + ", ledgerId=" + ledger != null ? String.valueOf(ledger.getId()) : "null" + ", entryId=" + entryId + ", startTime=" + startTime + ", dataLength=" + dataLength + diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java index 1cc95b4..7898db1 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java @@ -21,11 +21,8 @@ package org.apache.bookkeeper.mledger.impl; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.*; +import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; @@ -2856,4 +2853,22 @@ public class ManagedLedgerTest extends MockedBookKeeperTestCase { Thread.sleep(intSleepTimeInMillis + (intSleepTimeInMillis * i)); } } + + @Test + public void testOpEntryAdd_toString_doesNotThrowNPE(){ + ManagedLedger ml = mock(ManagedLedger.class); + LedgerHandle ledger = mock(LedgerHandle.class); + when(ml.getName()).thenReturn(null); + when(ledger.getId()).thenReturn(124L); + long entryId = 12L; + long startTime = 1245L; + int dataLength = 566; + String test = "OpAddEntry{" + + "mlName=" + ml != null ? ml.getName() : "null" + + ", ledgerId=" + ledger != null ? String.valueOf(ledger.getId()) : "null" + + ", entryId=" + entryId + + ", startTime=" + startTime + + ", dataLength=" + dataLength + + '}'; + } }