diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java
index b1e7722..247b610 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java
@@ -171,7 +171,7 @@
                             } catch (BKException e) {
                                 rc = e.getCode();
                             }
-                            if (rc != BKException.Code.NoSuchLedgerExistsException) {
+                            if (rc != BKException.Code.NoSuchLedgerExistsOnMetadataServerException) {
                                 LOG.warn("Ledger {} Missing in metadata list, but ledgerManager returned rc: {}.",
                                          bkLid, rc);
                                 continue;
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BKException.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BKException.java
index 781a07b..a3f03c2 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BKException.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BKException.java
@@ -72,6 +72,8 @@
             return new BKNotEnoughBookiesException();
         case Code.NoSuchLedgerExistsException:
             return new BKNoSuchLedgerExistsException();
+        case Code.NoSuchLedgerExistsOnMetadataServerException:
+            return new BKNoSuchLedgerExistsOnMetadataServerException();
         case Code.BookieHandleNotAvailableException:
             return new BKBookieHandleNotAvailableException();
         case Code.ZKException:
@@ -279,6 +281,14 @@
             super(BKException.Code.NoSuchLedgerExistsException);
         }
     }
+    /**
+     * Bookkeeper no such ledger exists on metadata server exception.
+     */
+    public static class BKNoSuchLedgerExistsOnMetadataServerException extends BKException {
+        public BKNoSuchLedgerExistsOnMetadataServerException() {
+            super(Code.NoSuchLedgerExistsOnMetadataServerException);
+        }
+    }
 
     /**
      * Bookkeeper bookie handle not available exception.
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
index 9303ffd..6d2319c 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeperAdmin.java
@@ -492,7 +492,7 @@
                 bkc.getLedgerManager().readLedgerMetadata(lid)
                     .whenComplete((metadata, exception) -> {
                             if (BKException.getExceptionCode(exception)
-                                == BKException.Code.NoSuchLedgerExistsException) {
+                                == BKException.Code.NoSuchLedgerExistsOnMetadataServerException) {
                                 // the ledger was deleted during this iteration.
                                 cb.processResult(BKException.Code.OK, null, null);
                                 return;
@@ -1541,7 +1541,8 @@
             throw new RuntimeException(ie);
         } catch (ExecutionException e) {
             if (e.getCause() != null
-                    && e.getCause().getClass().equals(BKException.BKNoSuchLedgerExistsException.class)) {
+                    && e.getCause().getClass()
+                    .equals(BKException.BKNoSuchLedgerExistsOnMetadataServerException.class)) {
                 LOG.debug("Ledger: {} has been deleted", ledgerId);
                 return false;
             } else {
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java
index b9745a9..fe6370b 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerChecker.java
@@ -264,7 +264,8 @@
 
         public void readEntryComplete(int rc, long ledgerId, long entryId,
                                       ByteBuf buffer, Object ctx) {
-            if (BKException.Code.NoSuchEntryException != rc && BKException.Code.NoSuchLedgerExistsException != rc) {
+            if (BKException.Code.NoSuchEntryException != rc && BKException.Code.NoSuchLedgerExistsException != rc
+                    && BKException.Code.NoSuchLedgerExistsOnMetadataServerException != rc) {
                 entryMayExist.set(true);
             }
 
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/UpdateLedgerOp.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/UpdateLedgerOp.java
index 6fce7e1..268eff6 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/UpdateLedgerOp.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/UpdateLedgerOp.java
@@ -116,7 +116,7 @@
             outstanding.add(writePromise);
             writePromise.whenComplete((metadata, ex) -> {
                         if (ex != null
-                            && !(ex instanceof BKException.BKNoSuchLedgerExistsException)) {
+                            && !(ex instanceof BKException.BKNoSuchLedgerExistsOnMetadataServerException)) {
                             String error = String.format("Failed to update ledger metadata %s, replacing %s with %s",
                                                          ledgerId, oldBookieId, newBookieId);
                             LOG.error(error, ex);
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/api/BKException.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/api/BKException.java
index 058a9a7..0ec0997 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/api/BKException.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/api/BKException.java
@@ -116,7 +116,9 @@
         case Code.NotEnoughBookiesException:
             return "Not enough non-faulty bookies available";
         case Code.NoSuchLedgerExistsException:
-            return "No such ledger exists";
+            return "No such ledger exists on Bookies";
+        case Code.NoSuchLedgerExistsOnMetadataServerException:
+            return "No such ledger exists on Metadata Server";
         case Code.BookieHandleNotAvailableException:
             return "Bookie handle is not available";
         case Code.ZKException:
@@ -242,6 +244,9 @@
         int TimeoutException = -23;
         int SecurityException = -24;
 
+        /** No such ledger exists one metadata server. */
+        int NoSuchLedgerExistsOnMetadataServerException = -25;
+
         /**
          * Operation is illegal.
          */
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/impl/OpenBuilderBase.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/impl/OpenBuilderBase.java
index c2c4c35..07e8615 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/impl/OpenBuilderBase.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/impl/OpenBuilderBase.java
@@ -66,7 +66,7 @@
     protected int validate() {
         if (ledgerId < 0) {
             LOG.error("invalid ledgerId {} < 0", ledgerId);
-            return Code.NoSuchLedgerExistsException;
+            return Code.NoSuchLedgerExistsOnMetadataServerException;
         }
         return Code.OK;
     }
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java
index 9308bfb..79a4f50 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java
@@ -129,7 +129,8 @@
                             }
                         });
                 }
-            } else if (BKException.getExceptionCode(exception) == BKException.Code.NoSuchLedgerExistsException) {
+            } else if (BKException.getExceptionCode(exception)
+                    == BKException.Code.NoSuchLedgerExistsOnMetadataServerException) {
                 // the ledger is removed, do nothing
                 Set<LedgerMetadataListener> listenerSet = listeners.remove(ledgerId);
                 if (null != listenerSet) {
@@ -437,7 +438,7 @@
                         LOG.debug("No such ledger: " + ledgerId,
                                   KeeperException.create(KeeperException.Code.get(rc), path));
                     }
-                    promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsException());
+                    promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsOnMetadataServerException());
                     return;
                 }
                 if (rc != KeeperException.Code.OK.intValue()) {
@@ -494,7 +495,7 @@
                     promise.complete(new Versioned<>(metadata, new LongVersion(stat.getVersion())));
                 } else if (KeeperException.Code.NONODE.intValue() == rc) {
                     LOG.warn("Ledger node does not exist in ZooKeeper: ledgerId={}", ledgerId);
-                    promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsException());
+                    promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsOnMetadataServerException());
                 } else {
                     LOG.warn("Conditional update ledger metadata failed: {}", KeeperException.Code.get(rc));
                     promise.completeExceptionally(new BKException.ZKException());
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManager.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManager.java
index 039ff7c..15da14b 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManager.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerManager.java
@@ -65,7 +65,7 @@
      * @return Future which, when completed, denotes that the ledger metadata has been removed.
      *         Completed with an exception:<ul>
      *          <li>{@link BKException.BKMetadataVersionException} if version doesn't match</li>
-     *          <li>{@link BKException.BKNoSuchLedgerExistsException} if ledger not exist</li>
+     *          <li>{@link BKException.BKNoSuchLedgerExistsOnMetadataServerException} if ledger not exist</li>
      *          <li>{@link BKException.ZKException} for other issues</li>
      *          </ul>
      */
@@ -78,7 +78,7 @@
      *          Ledger Id
      * @return Future which, when completed, contains the requested versioned metadata.
      *         Completed with an exception::<ul>
-     *          <li>{@link BKException.BKNoSuchLedgerExistsException} if ledger not exist</li>
+     *          <li>{@link BKException.BKNoSuchLedgerExistsOnMetadataServerException} if ledger not exist</li>
      *          <li>{@link BKException.ZKException} for other issues</li>
      *          </ul>
      */
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java
index 266db3a..201a0a3 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java
@@ -263,7 +263,8 @@
                                 }
                             });
                     }
-                } else if (BKException.getExceptionCode(exception) == BKException.Code.NoSuchLedgerExistsException) {
+                } else if (BKException.getExceptionCode(exception)
+                        == BKException.Code.NoSuchLedgerExistsOnMetadataServerException) {
                     // the ledger is removed, do nothing
                     Set<LedgerMetadataListener> listenerSet = listeners.remove(ledgerId);
                     if (null != listenerSet) {
@@ -416,7 +417,7 @@
                     int bkRc;
                     if (MSException.Code.NoKey.getCode() == rc) {
                         LOG.warn("Ledger entry does not exist in meta table: ledgerId={}", ledgerId);
-                        promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsException());
+                        promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsOnMetadataServerException());
                     } else if (MSException.Code.OK.getCode() == rc) {
                         FutureUtils.complete(promise, null);
                     } else {
@@ -438,7 +439,7 @@
                     if (MSException.Code.NoKey.getCode() == rc) {
                         LOG.error("No ledger metadata found for ledger " + ledgerId + " : ",
                                 MSException.create(MSException.Code.get(rc), "No key " + key + " found."));
-                        promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsException());
+                        promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsOnMetadataServerException());
                         return;
                     }
                     if (MSException.Code.OK.getCode() != rc) {
@@ -489,7 +490,7 @@
                         promise.completeExceptionally(new BKException.BKMetadataVersionException());
                     } else if (MSException.Code.NoKey.getCode() == rc) {
                         LOG.warn("Ledger {} doesn't exist when writing its ledger metadata.", ledgerId);
-                        promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsException());
+                        promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsOnMetadataServerException());
                     } else if (MSException.Code.OK.getCode() == rc) {
                         promise.complete(new Versioned<>(metadata, version));
                     } else {
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java
index ad58849..cbf9b45 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java
@@ -895,7 +895,7 @@
                         numFragmentsPerLedger.registerSuccessfulValue(lh.getNumFragments());
                         numBookiesPerLedger.registerSuccessfulValue(lh.getNumBookies());
                         numLedgersChecked.inc();
-                    } else if (Code.NoSuchLedgerExistsException == rc) {
+                    } else if (Code.NoSuchLedgerExistsOnMetadataServerException == rc) {
                         if (LOG.isDebugEnabled()) {
                             LOG.debug("Ledger {} was deleted before we could check it", ledgerId);
                         }
@@ -966,8 +966,8 @@
                             }
                         }
                         iterCallback.processResult(BKException.Code.OK, null, null);
-                    } else if (BKException
-                            .getExceptionCode(exception) == BKException.Code.NoSuchLedgerExistsException) {
+                    } else if (BKException.getExceptionCode(exception)
+                            == BKException.Code.NoSuchLedgerExistsOnMetadataServerException) {
                         LOG.debug("Ignoring replication of already deleted ledger {}", ledgerId);
                         iterCallback.processResult(BKException.Code.OK, null, null);
                     } else {
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/BookieLedgerIndexer.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/BookieLedgerIndexer.java
index c09a770..026fd72 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/BookieLedgerIndexer.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/BookieLedgerIndexer.java
@@ -76,7 +76,7 @@
                                     }
                                     iterCallback.processResult(BKException.Code.OK, null, null);
                                 } else if (BKException.getExceptionCode(exception)
-                                           == BKException.Code.NoSuchLedgerExistsException) {
+                                           == BKException.Code.NoSuchLedgerExistsOnMetadataServerException) {
                                     LOG.info("Ignoring replication of already deleted ledger {}", ledgerId);
                                     iterCallback.processResult(BKException.Code.OK, null, null);
                                 } else {
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
index 74d2081..1bba2d5 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
@@ -45,7 +45,7 @@
 
 import org.apache.bookkeeper.bookie.BookieThread;
 import org.apache.bookkeeper.client.BKException;
-import org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsException;
+import org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsOnMetadataServerException;
 import org.apache.bookkeeper.client.BKException.BKNotEnoughBookiesException;
 import org.apache.bookkeeper.client.BookKeeper;
 import org.apache.bookkeeper.client.BookKeeperAdmin;
@@ -330,14 +330,14 @@
                 return false;
             }
 
-        } catch (BKNoSuchLedgerExistsException e) {
+        } catch (BKNoSuchLedgerExistsOnMetadataServerException e) {
             // Ledger might have been deleted by user
-            LOG.info("BKNoSuchLedgerExistsException while opening "
+            LOG.info("BKNoSuchLedgerExistsOnMetadataServerException while opening "
                 + "ledger {} for replication. Other clients "
                 + "might have deleted the ledger. "
                 + "So, no harm to continue", ledgerIdToReplicate);
             underreplicationManager.markLedgerReplicated(ledgerIdToReplicate);
-            getExceptionCounter("BKNoSuchLedgerExistsException").inc();
+            getExceptionCounter("BKNoSuchLedgerExistsOnMetadataServerException").inc();
             return false;
         } catch (BKNotEnoughBookiesException e) {
             logBKExceptionAndReleaseLedger(e, ledgerIdToReplicate);
@@ -456,7 +456,7 @@
                     Thread.currentThread().interrupt();
                     LOG.info("InterruptedException while fencing the ledger {}"
                             + " for rereplication of postponed ledgers", ledgerId, e);
-                } catch (BKNoSuchLedgerExistsException bknsle) {
+                } catch (BKNoSuchLedgerExistsOnMetadataServerException bknsle) {
                     if (LOG.isDebugEnabled()) {
                         LOG.debug("Ledger {} was deleted, safe to continue", ledgerId, bknsle);
                     }
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeper.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeper.java
index c65e070..81212d1 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeper.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeper.java
@@ -163,7 +163,7 @@
 
         MockLedgerHandle lh = ledgers.get(lId);
         if (lh == null) {
-            cb.openComplete(BKException.Code.NoSuchLedgerExistsException, null, ctx);
+            cb.openComplete(BKException.Code.NoSuchLedgerExistsOnMetadataServerException, null, ctx);
         } else if (lh.digest != digestType) {
             cb.openComplete(BKException.Code.DigestMatchException, null, ctx);
         } else if (!Arrays.equals(lh.passwd, passwd)) {
@@ -190,7 +190,7 @@
             ledgers.remove(lId);
             cb.deleteComplete(0, ctx);
         } else {
-            cb.deleteComplete(BKException.Code.NoSuchLedgerExistsException, ctx);
+            cb.deleteComplete(BKException.Code.NoSuchLedgerExistsOnMetadataServerException, ctx);
         }
     }
 
@@ -203,7 +203,7 @@
         }
 
         if (!ledgers.containsKey(lId)) {
-            throw BKException.create(BKException.Code.NoSuchLedgerExistsException);
+            throw BKException.create(BKException.Code.NoSuchLedgerExistsOnMetadataServerException);
         }
 
         ledgers.remove(lId);
@@ -238,7 +238,7 @@
 
                 MockLedgerHandle lh = ledgers.get(ledgerId);
                 if (lh == null) {
-                    promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsException());
+                    promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsOnMetadataServerException());
                 } else if (lh.digest != DigestType.fromApiDigestType(digestType)) {
                     promise.completeExceptionally(new BKException.BKDigestMatchException());
                 } else if (!Arrays.equals(lh.passwd, password)) {
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java
index 69b5635..c5878f1 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java
@@ -379,7 +379,7 @@
             executor.executeOrdered(ledgerId, () -> {
                 LedgerMetadata ledgerMetadata = mockLedgerMetadataRegistry.get(ledgerId);
                 if (ledgerMetadata == null) {
-                    promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsException());
+                    promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsOnMetadataServerException());
                 } else {
                     promise.complete(new Versioned<>(ledgerMetadata, new LongVersion(1)));
                 }
@@ -398,7 +398,7 @@
                     if (mockLedgerMetadataRegistry.remove(ledgerId) != null) {
                         promise.complete(null);
                     } else {
-                        promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsException());
+                        promise.completeExceptionally(new BKException.BKNoSuchLedgerExistsOnMetadataServerException());
                     }
                 });
             return promise;
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/api/BookKeeperApiTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/api/BookKeeperApiTest.java
index 5429c0d..a71002d 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/api/BookKeeperApiTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/api/BookKeeperApiTest.java
@@ -41,7 +41,7 @@
 import org.apache.bookkeeper.client.BKException.BKDigestMatchException;
 import org.apache.bookkeeper.client.BKException.BKDuplicateEntryIdException;
 import org.apache.bookkeeper.client.BKException.BKLedgerFencedException;
-import org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsException;
+import org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsOnMetadataServerException;
 import org.apache.bookkeeper.client.BKException.BKUnauthorizedAccessException;
 import org.apache.bookkeeper.client.MockBookKeeperTestCase;
 import org.apache.bookkeeper.conf.ClientConfiguration;
@@ -339,7 +339,7 @@
         }
     }
 
-    @Test(expected = BKNoSuchLedgerExistsException.class)
+    @Test(expected = BKNoSuchLedgerExistsOnMetadataServerException.class)
     public void testDeleteLedger() throws Exception {
         long lId;
 
@@ -358,7 +358,7 @@
             .execute());
     }
 
-    @Test(expected = BKNoSuchLedgerExistsException.class)
+    @Test(expected = BKNoSuchLedgerExistsOnMetadataServerException.class)
     public void testCannotDeleteLedgerTwice() throws Exception {
         long lId;
 
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/api/BookKeeperBuildersTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/api/BookKeeperBuildersTest.java
index 85cb727..f0e07e2 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/api/BookKeeperBuildersTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/api/BookKeeperBuildersTest.java
@@ -30,7 +30,7 @@
 import java.util.Map;
 import org.apache.bookkeeper.client.BKException.BKClientClosedException;
 import org.apache.bookkeeper.client.BKException.BKIncorrectParameterException;
-import org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsException;
+import org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsOnMetadataServerException;
 import org.apache.bookkeeper.client.BookKeeper;
 import org.apache.bookkeeper.client.LedgerHandle;
 import org.apache.bookkeeper.client.LedgerMetadataBuilder;
@@ -307,12 +307,12 @@
         fail("shoud not be able to create a ledger with such specs");
     }
 
-    @Test(expected = BKNoSuchLedgerExistsException.class)
+    @Test(expected = BKNoSuchLedgerExistsOnMetadataServerException.class)
     public void testOpenLedgerNoId() throws Exception {
         result(newOpenLedgerOp().execute());
     }
 
-    @Test(expected = BKNoSuchLedgerExistsException.class)
+    @Test(expected = BKNoSuchLedgerExistsOnMetadataServerException.class)
     public void testOpenLedgerBadId() throws Exception {
         result(newOpenLedgerOp()
             .withPassword(password)
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/AbstractZkLedgerManagerTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/AbstractZkLedgerManagerTest.java
index 2c0ae4f..0dc2b53 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/AbstractZkLedgerManagerTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/AbstractZkLedgerManagerTest.java
@@ -366,7 +366,7 @@
             result(ledgerManager.readLedgerMetadata(ledgerId));
             fail("Should fail on reading ledger metadata if a ledger doesn't exist");
         } catch (BKException bke) {
-            assertEquals(Code.NoSuchLedgerExistsException, bke.getCode());
+            assertEquals(Code.NoSuchLedgerExistsOnMetadataServerException, bke.getCode());
         }
 
         verify(mockZk, times(1))
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/GcLedgersTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/GcLedgersTest.java
index 37eacf4..10f7048 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/GcLedgersTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/meta/GcLedgersTest.java
@@ -406,7 +406,7 @@
      *
      * ScanAndCompareGarbageCollector/GC should clean data of ledger only if both the LedgerManager.getLedgerRanges says
      * that ledger is not existing and also ledgerManager.readLedgerMetadata fails with error
-     * NoSuchLedgerExistsException.
+     * NoSuchLedgerExistsOnMetadataServerException.
      *
      */
     @Test
@@ -464,7 +464,7 @@
      *
      * ScanAndCompareGarbageCollector/GC should clean data of ledger only if both the LedgerManager.getLedgerRanges says
      * that ledger is not existing and also ledgerManager.readLedgerMetadata fails with error
-     * NoSuchLedgerExistsException.
+     * NoSuchLedgerExistsOnMetadataServerException.
      *
      */
     @Test
@@ -508,7 +508,8 @@
      *
      * ScanAndCompareGarbageCollector/GC should clean data of ledger only if both the LedgerManager.getLedgerRanges says
      * that ledger is not existing and also ledgerManager.readLedgerMetadata fails with error
-     * NoSuchLedgerExistsException, but is shouldn't delete if the readLedgerMetadata fails with any other error.
+     * NoSuchLedgerExistsOnMetadataServerException, but is shouldn't delete if the readLedgerMetadata fails with any
+     * other error.
      */
     @Test
     public void testGcLedgersIfReadLedgerMetadataFailsForDeletedLedgers() throws Exception {
diff --git a/stream/distributedlog/core/src/test/java/org/apache/distributedlog/bk/TestLedgerAllocator.java b/stream/distributedlog/core/src/test/java/org/apache/distributedlog/bk/TestLedgerAllocator.java
index 1786fe4..011562e 100644
--- a/stream/distributedlog/core/src/test/java/org/apache/distributedlog/bk/TestLedgerAllocator.java
+++ b/stream/distributedlog/core/src/test/java/org/apache/distributedlog/bk/TestLedgerAllocator.java
@@ -271,7 +271,7 @@
         try {
             bkc.get().openLedger(lh1.getId(), BookKeeper.DigestType.CRC32, dlConf.getBKDigestPW().getBytes());
             fail("LedgerHandle allocated by allocator1 should be deleted.");
-        } catch (BKException.BKNoSuchLedgerExistsException nslee) {
+        } catch (BKException.BKNoSuchLedgerExistsOnMetadataServerException nslee) {
             // as expected
         }
         long eid = lh2.addEntry("hello world".getBytes());
diff --git a/stream/distributedlog/core/src/test/java/org/apache/distributedlog/tools/TestDistributedLogTool.java b/stream/distributedlog/core/src/test/java/org/apache/distributedlog/tools/TestDistributedLogTool.java
index 553e017..4e03554 100644
--- a/stream/distributedlog/core/src/test/java/org/apache/distributedlog/tools/TestDistributedLogTool.java
+++ b/stream/distributedlog/core/src/test/java/org/apache/distributedlog/tools/TestDistributedLogTool.java
@@ -22,7 +22,7 @@
 import static org.junit.Assert.fail;
 
 import java.net.URI;
-import org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsException;
+import org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsOnMetadataServerException;
 import org.apache.bookkeeper.common.util.ReflectionUtils;
 import org.apache.distributedlog.DLMTestUtil;
 import org.apache.distributedlog.DLSN;
@@ -203,7 +203,7 @@
         // correct functionality.
         try {
             cmd.runCmd();
-        } catch (BKNoSuchLedgerExistsException ex) {
+        } catch (BKNoSuchLedgerExistsOnMetadataServerException ex) {
         }
     }
 
@@ -214,7 +214,7 @@
         cmd.setLedgerId(99999999);
         try {
             cmd.runCmd();
-        } catch (BKNoSuchLedgerExistsException ex) {
+        } catch (BKNoSuchLedgerExistsOnMetadataServerException ex) {
         }
     }
 
diff --git a/tests/integration/smoke/src/test/java/org/apache/bookkeeper/tests/integration/TestBookieShellCluster.java b/tests/integration/smoke/src/test/java/org/apache/bookkeeper/tests/integration/TestBookieShellCluster.java
index c68a3e1..6a6c879 100644
--- a/tests/integration/smoke/src/test/java/org/apache/bookkeeper/tests/integration/TestBookieShellCluster.java
+++ b/tests/integration/smoke/src/test/java/org/apache/bookkeeper/tests/integration/TestBookieShellCluster.java
@@ -211,7 +211,8 @@
                 validateNEntries(bk, ledgerId, numEntries);
                 Assert.fail("Shouldn't have been able to find anything");
             } catch (ExecutionException ee) {
-                Assert.assertEquals(ee.getCause().getClass(), BKException.BKNoSuchLedgerExistsException.class);
+                Assert.assertEquals(ee.getCause().getClass(),
+                        BKException.BKNoSuchLedgerExistsOnMetadataServerException.class);
             }
 
             log.info("Restore the ledger metadata");
