You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2017/11/07 21:56:43 UTC

[geode] branch feature/GEODE-3940 updated (273dbf8 -> d758255)

This is an automated email from the ASF dual-hosted git repository.

klund pushed a change to branch feature/GEODE-3940
in repository https://gitbox.apache.org/repos/asf/geode.git.


 discard 273dbf8  fixup
 discard 4faab72  GEODE-3940: fix deadlock in backup messages
     new d758255  GEODE-3940: fix deadlock in backup messages

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (273dbf8)
            \
             N -- N -- N   refs/heads/feature/GEODE-3940 (d758255)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../admin/internal/FinishBackupRequestTest.java    | 25 +++++++++++-----------
 .../admin/internal/FlushToDiskRequestTest.java     | 19 ++++++++--------
 .../admin/internal/PrepareBackupRequestTest.java   | 23 ++++++++++----------
 3 files changed, 35 insertions(+), 32 deletions(-)

-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].

[geode] 01/01: GEODE-3940: fix deadlock in backup messages

Posted by kl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

klund pushed a commit to branch feature/GEODE-3940
in repository https://gitbox.apache.org/repos/asf/geode.git

commit d7582550c222ec92116355fab73b919d5abcdd91
Author: Lynn Gallinat <lg...@pivotal.io>
AuthorDate: Fri Nov 3 17:09:42 2017 -0700

    GEODE-3940: fix deadlock in backup messages
    
    * introduce unit tests for backup messages
    * add unit test for BackupLock
---
 .../geode/admin/internal/FinishBackupRequest.java  |  98 ++++++----
 .../geode/admin/internal/FinishBackupResponse.java |   2 -
 .../geode/admin/internal/FlushToDiskRequest.java   |  48 +++--
 .../geode/admin/internal/PrepareBackupRequest.java |  92 +++++----
 .../org/apache/geode/distributed/internal/DM.java  | 145 +++++++-------
 .../internal/LonerDistributionManager.java         |  19 ++
 .../admin/remote/AddHealthListenerRequest.java     |   2 +-
 .../admin/remote/AddHealthListenerResponse.java    |   4 +-
 .../admin/remote/AddStatListenerRequest.java       |   4 +-
 .../admin/remote/AddStatListenerResponse.java      |   4 +-
 .../admin/remote/AdminFailureResponse.java         |  36 ++--
 .../admin/remote/AdminMultipleReplyProcessor.java  |  51 +----
 .../geode/internal/admin/remote/AdminRequest.java  |   5 +-
 .../internal/admin/remote/BridgeServerRequest.java |   4 +-
 .../admin/remote/BridgeServerResponse.java         |   4 +-
 .../internal/admin/remote/CacheConfigRequest.java  |   2 +-
 .../internal/admin/remote/CacheConfigResponse.java |   6 +-
 .../internal/admin/remote/CacheInfoRequest.java    |   4 +-
 .../internal/admin/remote/CacheInfoResponse.java   |   5 +-
 .../admin/remote/CancelStatListenerRequest.java    |   2 +-
 .../admin/remote/CancelStatListenerResponse.java   |   4 +-
 .../internal/admin/remote/CliLegacyMessage.java    |   2 +-
 .../internal/admin/remote/CompactRequest.java      |  13 +-
 .../admin/remote/DurableClientInfoRequest.java     |   4 +-
 .../admin/remote/DurableClientInfoResponse.java    |   6 +-
 .../admin/remote/FetchDistLockInfoRequest.java     |   4 +-
 .../admin/remote/FetchDistLockInfoResponse.java    |   3 +-
 .../admin/remote/FetchHealthDiagnosisRequest.java  |   2 +-
 .../admin/remote/FetchHealthDiagnosisResponse.java |   4 +-
 .../internal/admin/remote/FetchHostRequest.java    |   2 +-
 .../internal/admin/remote/FetchHostResponse.java   |   5 +-
 .../remote/FetchResourceAttributesRequest.java     |   2 +-
 .../remote/FetchResourceAttributesResponse.java    |  29 +--
 .../internal/admin/remote/FetchStatsRequest.java   |   2 +-
 .../internal/admin/remote/FetchStatsResponse.java  |  20 +-
 .../internal/admin/remote/FetchSysCfgRequest.java  |   2 +-
 .../internal/admin/remote/FetchSysCfgResponse.java |   3 +-
 .../internal/admin/remote/LicenseInfoRequest.java  |   4 +-
 .../internal/admin/remote/LicenseInfoResponse.java |   9 +-
 .../admin/remote/MissingPersistentIDsRequest.java  |  13 +-
 .../admin/remote/ObjectDetailsRequest.java         |   4 +-
 .../admin/remote/ObjectDetailsResponse.java        |   3 +-
 .../internal/admin/remote/ObjectNamesRequest.java  |   4 +-
 .../internal/admin/remote/ObjectNamesResponse.java |   3 +-
 .../remote/PrepareRevokePersistentIDRequest.java   |   3 +-
 .../admin/remote/RefreshMemberSnapshotRequest.java |   2 +-
 .../remote/RefreshMemberSnapshotResponse.java      |   5 +-
 .../admin/remote/RegionAttributesRequest.java      |   4 +-
 .../admin/remote/RegionAttributesResponse.java     |   4 +-
 .../geode/internal/admin/remote/RegionRequest.java |   4 +-
 .../internal/admin/remote/RegionResponse.java      |   2 +-
 .../internal/admin/remote/RegionSizeRequest.java   |   4 +-
 .../internal/admin/remote/RegionSizeResponse.java  |   3 +-
 .../admin/remote/RegionStatisticsRequest.java      |   2 +-
 .../admin/remote/RegionStatisticsResponse.java     |   4 +-
 .../admin/remote/RegionSubRegionSizeRequest.java   |   4 +-
 .../admin/remote/RegionSubRegionsSizeResponse.java |   7 +-
 .../admin/remote/RemoveHealthListenerRequest.java  |   2 +-
 .../admin/remote/RemoveHealthListenerResponse.java |   4 +-
 .../admin/remote/ResetHealthStatusRequest.java     |   4 +-
 .../admin/remote/ResetHealthStatusResponse.java    |   4 +-
 .../admin/remote/RevokePersistentIDRequest.java    |   3 +-
 .../internal/admin/remote/RootRegionRequest.java   |   2 +-
 .../internal/admin/remote/RootRegionResponse.java  |   5 +-
 .../internal/admin/remote/ShutdownAllRequest.java  |   4 +-
 .../internal/admin/remote/StoreSysCfgRequest.java  |   2 +-
 .../internal/admin/remote/StoreSysCfgResponse.java |   3 +-
 .../internal/admin/remote/SubRegionRequest.java    |   4 +-
 .../internal/admin/remote/SubRegionResponse.java   |   3 +-
 .../internal/admin/remote/TailLogRequest.java      |   2 +-
 .../internal/admin/remote/TailLogResponse.java     |   5 +-
 .../internal/admin/remote/VersionInfoRequest.java  |   4 +-
 .../internal/admin/remote/VersionInfoResponse.java |   3 +-
 .../apache/geode/internal/cache/BackupLock.java    |  47 +++--
 .../apache/geode/internal/cache/BackupManager.java |  10 +-
 .../cache/persistence/PersistentMemberManager.java |   8 +-
 .../org/apache/geode/management/BackupStatus.java  |   7 +-
 .../internal/messages/CompactRequest.java          |  12 +-
 .../admin/internal/FinishBackupRequestTest.java    | 212 +++++++++++++++++++++
 .../admin/internal/FlushToDiskRequestTest.java     | 178 +++++++++++++++++
 .../admin/internal/PrepareBackupRequestTest.java   | 206 ++++++++++++++++++++
 .../geode/internal/cache/BackupDUnitTest.java      |   2 +-
 .../geode/internal/cache/BackupLockTest.java       | 108 +++++++++++
 83 files changed, 1172 insertions(+), 404 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/admin/internal/FinishBackupRequest.java b/geode-core/src/main/java/org/apache/geode/admin/internal/FinishBackupRequest.java
index 12f5bb9..5da68c6 100644
--- a/geode-core/src/main/java/org/apache/geode/admin/internal/FinishBackupRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/admin/internal/FinishBackupRequest.java
@@ -32,14 +32,13 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.persistence.PersistentID;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DM;
-import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.ReplyException;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.remote.AdminFailureResponse;
 import org.apache.geode.internal.admin.remote.AdminMultipleReplyProcessor;
 import org.apache.geode.internal.admin.remote.AdminResponse;
 import org.apache.geode.internal.admin.remote.CliLegacyMessage;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.i18n.LocalizedStrings;
 import org.apache.geode.internal.logging.LogService;
@@ -48,34 +47,52 @@ import org.apache.geode.internal.logging.log4j.LocalizedMessage;
 /**
  * A request send from an admin VM to all of the peers to indicate that that should complete the
  * backup operation.
- *
- *
  */
 public class FinishBackupRequest extends CliLegacyMessage {
   private static final Logger logger = LogService.getLogger();
 
+  private final DM dm;
+  private final FinishBackupReplyProcessor replyProcessor;
   private File targetDir;
   private File baselineDir;
   private boolean abort;
 
   public FinishBackupRequest() {
     super();
+    this.dm = null;
+    this.replyProcessor = null;
+  }
+
+  private FinishBackupRequest(DM dm, Set<InternalDistributedMember> recipients, File targetDir,
+      File baselineDir, boolean abort) {
+    this(dm, recipients, new FinishBackupReplyProcessor(dm, recipients), targetDir, baselineDir,
+        abort);
   }
 
-  public FinishBackupRequest(File targetDir, File baselineDir, boolean abort) {
+  FinishBackupRequest(DM dm, Set<InternalDistributedMember> recipients,
+      FinishBackupReplyProcessor replyProcessor, File targetDir, File baselineDir, boolean abort) {
+    this.dm = dm;
     this.targetDir = targetDir;
     this.baselineDir = baselineDir;
     this.abort = abort;
+    setRecipients(recipients);
+    this.replyProcessor = replyProcessor;
+    this.msgId = this.replyProcessor.getProcessorId();
   }
 
   public static Map<DistributedMember, Set<PersistentID>> send(DM dm, Set recipients,
       File targetDir, File baselineDir, boolean abort) {
-    FinishBackupRequest request = new FinishBackupRequest(targetDir, baselineDir, abort);
-    request.setRecipients(recipients);
+    FinishBackupRequest request =
+        new FinishBackupRequest(dm, recipients, targetDir, baselineDir, abort);
+    return request.send();
+  }
+
+  Map<DistributedMember, Set<PersistentID>> send() {
+    dm.putOutgoing(this);
+
+    // invokes doBackup and releases BackupLock
+    AdminResponse response = createResponse(dm);
 
-    FinishBackupReplyProcessor replyProcessor = new FinishBackupReplyProcessor(dm, recipients);
-    request.msgId = replyProcessor.getProcessorId();
-    dm.putOutgoing(request);
     try {
       replyProcessor.waitForReplies();
     } catch (ReplyException e) {
@@ -83,33 +100,39 @@ public class FinishBackupRequest extends CliLegacyMessage {
         throw e;
       }
     } catch (InterruptedException e) {
-      e.printStackTrace();
+      logger.warn(e.getMessage(), e);
     }
-    AdminResponse response = request.createResponse((DistributionManager) dm);
+
+    // adding local member to the results
     response.setSender(dm.getDistributionManagerId());
     replyProcessor.process(response);
-    return replyProcessor.results;
+    return replyProcessor.getResults();
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
+    HashSet<PersistentID> persistentIds;
+    try {
+      persistentIds = doBackup(dm);
+    } catch (IOException e) {
+      logger.error(LocalizedMessage.create(LocalizedStrings.CliLegacyMessage_ERROR, getClass()), e);
+      return AdminFailureResponse.create(getSender(), e);
+    }
+    return new FinishBackupResponse(getSender(), persistentIds);
+  }
+
+  private HashSet<PersistentID> doBackup(DM dm) throws IOException {
     InternalCache cache = dm.getCache();
     HashSet<PersistentID> persistentIds;
     if (cache == null || cache.getBackupManager() == null) {
-      persistentIds = new HashSet<PersistentID>();
+      persistentIds = new HashSet<>();
     } else {
-      try {
-        persistentIds = cache.getBackupManager().doBackup(targetDir, baselineDir, abort);
-      } catch (IOException e) {
-        logger.error(
-            LocalizedMessage.create(LocalizedStrings.CliLegacyMessage_ERROR, this.getClass()), e);
-        return AdminFailureResponse.create(dm, getSender(), e);
-      }
+      persistentIds = cache.getBackupManager().doBackup(targetDir, baselineDir, abort);
     }
-
-    return new FinishBackupResponse(this.getSender(), persistentIds);
+    return persistentIds;
   }
 
+  @Override
   public int getDSFID() {
     return FINISH_BACKUP_REQUEST;
   }
@@ -130,11 +153,12 @@ public class FinishBackupRequest extends CliLegacyMessage {
     DataSerializer.writeBoolean(abort, out);
   }
 
-  private static class FinishBackupReplyProcessor extends AdminMultipleReplyProcessor {
-    Map<DistributedMember, Set<PersistentID>> results =
+  static class FinishBackupReplyProcessor extends AdminMultipleReplyProcessor {
+
+    private Map<DistributedMember, Set<PersistentID>> results =
         Collections.synchronizedMap(new HashMap<DistributedMember, Set<PersistentID>>());
 
-    public FinishBackupReplyProcessor(DM dm, Collection initMembers) {
+    FinishBackupReplyProcessor(DM dm, Collection initMembers) {
       super(dm, initMembers);
     }
 
@@ -143,8 +167,6 @@ public class FinishBackupRequest extends CliLegacyMessage {
       return false;
     }
 
-
-
     @Override
     protected int getAckWaitThreshold() {
       // Disable the 15 second warning if the backup is taking a long time
@@ -158,17 +180,23 @@ public class FinishBackupRequest extends CliLegacyMessage {
     }
 
     @Override
-    protected void process(DistributionMessage msg, boolean warn) {
-      if (msg instanceof FinishBackupResponse) {
-        final HashSet<PersistentID> persistentIds = ((FinishBackupResponse) msg).getPersistentIds();
+    protected void process(DistributionMessage message, boolean warn) {
+      if (message instanceof FinishBackupResponse) {
+        HashSet<PersistentID> persistentIds = ((FinishBackupResponse) message).getPersistentIds();
         if (persistentIds != null && !persistentIds.isEmpty()) {
-          results.put(msg.getSender(), persistentIds);
+          results.put(message.getSender(), persistentIds);
         }
       }
-      super.process(msg, warn);
+      super.process(message, warn);
     }
 
+    @Override
+    protected InternalDistributedMember[] getMembers() {
+      return super.getMembers();
+    }
 
-
+    Map<DistributedMember, Set<PersistentID>> getResults() {
+      return results;
+    }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/admin/internal/FinishBackupResponse.java b/geode-core/src/main/java/org/apache/geode/admin/internal/FinishBackupResponse.java
index 97fdb30..9887327 100644
--- a/geode-core/src/main/java/org/apache/geode/admin/internal/FinishBackupResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/admin/internal/FinishBackupResponse.java
@@ -27,8 +27,6 @@ import org.apache.geode.internal.admin.remote.AdminResponse;
 /**
  * The reply for a {@link FinishBackupRequest}. The reply contains the persistent ids of the disk
  * stores that were backed up on this member.
- *
- *
  */
 public class FinishBackupResponse extends AdminResponse {
 
diff --git a/geode-core/src/main/java/org/apache/geode/admin/internal/FlushToDiskRequest.java b/geode-core/src/main/java/org/apache/geode/admin/internal/FlushToDiskRequest.java
index 3a0048a..f60f29e 100644
--- a/geode-core/src/main/java/org/apache/geode/admin/internal/FlushToDiskRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/admin/internal/FlushToDiskRequest.java
@@ -22,12 +22,11 @@ import org.apache.logging.log4j.Logger;
 import org.apache.geode.CancelException;
 import org.apache.geode.cache.DiskStore;
 import org.apache.geode.distributed.internal.DM;
-import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.ReplyException;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.remote.AdminMultipleReplyProcessor;
 import org.apache.geode.internal.admin.remote.AdminResponse;
 import org.apache.geode.internal.admin.remote.CliLegacyMessage;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.logging.LogService;
 
@@ -39,17 +38,37 @@ import org.apache.geode.internal.logging.LogService;
 public class FlushToDiskRequest extends CliLegacyMessage {
   private static final Logger logger = LogService.getLogger();
 
+  private final DM dm;
+  private final FlushToDiskProcessor replyProcessor;
+
   public FlushToDiskRequest() {
-    // nothing
+    super();
+    this.dm = null;
+    this.replyProcessor = null;
+  }
+
+  private FlushToDiskRequest(DM dm, Set<InternalDistributedMember> recipients) {
+    this(dm, recipients, new FlushToDiskProcessor(dm, recipients));
+  }
+
+  FlushToDiskRequest(DM dm, Set<InternalDistributedMember> recipients,
+      FlushToDiskProcessor replyProcessor) {
+    this.dm = dm;
+    setRecipients(recipients);
+    this.replyProcessor = replyProcessor;
+    this.msgId = this.replyProcessor.getProcessorId();
   }
 
   public static void send(DM dm, Set recipients) {
-    FlushToDiskRequest request = new FlushToDiskRequest();
-    request.setRecipients(recipients);
+    FlushToDiskRequest request = new FlushToDiskRequest(dm, recipients);
+    request.send();
+  }
+
+  void send() {
+    dm.putOutgoing(this);
+
+    AdminResponse response = createResponse(dm);
 
-    FlushToDiskProcessor replyProcessor = new FlushToDiskProcessor(dm, recipients);
-    request.msgId = replyProcessor.getProcessorId();
-    dm.putOutgoing(request);
     try {
       replyProcessor.waitForReplies();
     } catch (ReplyException e) {
@@ -57,21 +76,21 @@ public class FlushToDiskRequest extends CliLegacyMessage {
         throw e;
       }
     } catch (InterruptedException e) {
-      logger.debug(e);
+      logger.warn(e);
     }
-    AdminResponse response = request.createResponse((DistributionManager) dm);
+
     response.setSender(dm.getDistributionManagerId());
     replyProcessor.process(response);
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     InternalCache cache = dm.getCache();
     if (cache != null) {
       cache.listDiskStoresIncludingRegionOwned().forEach(DiskStore::flush);
     }
 
-    return new FlushToDiskResponse(this.getSender());
+    return new FlushToDiskResponse(getSender());
   }
 
   @Override
@@ -79,8 +98,9 @@ public class FlushToDiskRequest extends CliLegacyMessage {
     return FLUSH_TO_DISK_REQUEST;
   }
 
-  private static class FlushToDiskProcessor extends AdminMultipleReplyProcessor {
-    public FlushToDiskProcessor(DM dm, Collection initMembers) {
+  static class FlushToDiskProcessor extends AdminMultipleReplyProcessor {
+
+    FlushToDiskProcessor(DM dm, Collection initMembers) {
       super(dm, initMembers);
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/admin/internal/PrepareBackupRequest.java b/geode-core/src/main/java/org/apache/geode/admin/internal/PrepareBackupRequest.java
index 869f774..bf5762a 100644
--- a/geode-core/src/main/java/org/apache/geode/admin/internal/PrepareBackupRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/admin/internal/PrepareBackupRequest.java
@@ -28,15 +28,13 @@ import org.apache.geode.CancelException;
 import org.apache.geode.cache.persistence.PersistentID;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DM;
-import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.ReplyException;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.remote.AdminFailureResponse;
 import org.apache.geode.internal.admin.remote.AdminMultipleReplyProcessor;
 import org.apache.geode.internal.admin.remote.AdminResponse;
 import org.apache.geode.internal.admin.remote.CliLegacyMessage;
-import org.apache.geode.internal.cache.BackupManager;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.i18n.LocalizedStrings;
 import org.apache.geode.internal.logging.LogService;
@@ -46,23 +44,41 @@ import org.apache.geode.internal.logging.log4j.LocalizedMessage;
  * A request to from an admin VM to all non admin members to start a backup. In the prepare phase of
  * the backup, the members will suspend bucket destroys to make sure buckets aren't missed during
  * the backup.
- *
- *
  */
 public class PrepareBackupRequest extends CliLegacyMessage {
   private static final Logger logger = LogService.getLogger();
 
+  private final DM dm;
+  private final PrepareBackupReplyProcessor replyProcessor;
+
   public PrepareBackupRequest() {
+    super();
+    this.dm = null;
+    this.replyProcessor = null;
+  }
+
+  private PrepareBackupRequest(DM dm, Set<InternalDistributedMember> recipients) {
+    this(dm, recipients, new PrepareBackupReplyProcessor(dm, recipients));
+  }
 
+  PrepareBackupRequest(DM dm, Set<InternalDistributedMember> recipients,
+      PrepareBackupReplyProcessor replyProcessor) {
+    this.dm = dm;
+    setRecipients(recipients);
+    this.replyProcessor = replyProcessor;
+    this.msgId = this.replyProcessor.getProcessorId();
   }
 
   public static Map<DistributedMember, Set<PersistentID>> send(DM dm, Set recipients) {
-    PrepareBackupRequest request = new PrepareBackupRequest();
-    request.setRecipients(recipients);
+    PrepareBackupRequest request = new PrepareBackupRequest(dm, recipients);
+    return request.send();
+  }
+
+  Map<DistributedMember, Set<PersistentID>> send() {
+    dm.putOutgoing(this);
+
+    AdminResponse response = createResponse(dm);
 
-    PrepareBackupReplyProcessor replyProcessor = new PrepareBackupReplyProcessor(dm, recipients);
-    request.msgId = replyProcessor.getProcessorId();
-    dm.putOutgoing(request);
     try {
       replyProcessor.waitForReplies();
     } catch (ReplyException e) {
@@ -70,44 +86,48 @@ public class PrepareBackupRequest extends CliLegacyMessage {
         throw e;
       }
     } catch (InterruptedException e) {
-      e.printStackTrace();
+      logger.warn(e.getMessage(), e);
     }
-    AdminResponse response = request.createResponse((DistributionManager) dm);
+
     response.setSender(dm.getDistributionManagerId());
     replyProcessor.process(response);
-    return replyProcessor.results;
+    return replyProcessor.getResults();
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
+    HashSet<PersistentID> persistentIds;
+    try {
+      persistentIds = prepareForBackup(dm);
+    } catch (IOException e) {
+      logger.error(LocalizedMessage.create(LocalizedStrings.CliLegacyMessage_ERROR, getClass()), e);
+      return AdminFailureResponse.create(getSender(), e);
+    }
+    return new PrepareBackupResponse(getSender(), persistentIds);
+  }
+
+  HashSet<PersistentID> prepareForBackup(DM dm) throws IOException {
     InternalCache cache = dm.getCache();
     HashSet<PersistentID> persistentIds;
     if (cache == null) {
       persistentIds = new HashSet<>();
     } else {
-      try {
-        BackupManager manager = cache.startBackup(getSender());
-        persistentIds = manager.prepareForBackup();
-      } catch (IOException e) {
-        logger.error(
-            LocalizedMessage.create(LocalizedStrings.CliLegacyMessage_ERROR, this.getClass()), e);
-        return AdminFailureResponse.create(dm, getSender(), e);
-      }
+      persistentIds = cache.startBackup(getSender()).prepareForBackup();
     }
-
-
-    return new PrepareBackupResponse(this.getSender(), persistentIds);
+    return persistentIds;
   }
 
+  @Override
   public int getDSFID() {
     return PREPARE_BACKUP_REQUEST;
   }
 
-  private static class PrepareBackupReplyProcessor extends AdminMultipleReplyProcessor {
-    Map<DistributedMember, Set<PersistentID>> results =
+  static class PrepareBackupReplyProcessor extends AdminMultipleReplyProcessor {
+
+    private Map<DistributedMember, Set<PersistentID>> results =
         Collections.synchronizedMap(new HashMap<DistributedMember, Set<PersistentID>>());
 
-    public PrepareBackupReplyProcessor(DM dm, Collection initMembers) {
+    PrepareBackupReplyProcessor(DM dm, Collection initMembers) {
       super(dm, initMembers);
     }
 
@@ -117,18 +137,18 @@ public class PrepareBackupRequest extends CliLegacyMessage {
     }
 
     @Override
-    protected void process(DistributionMessage msg, boolean warn) {
-      if (msg instanceof PrepareBackupResponse) {
-        final HashSet<PersistentID> persistentIds =
-            ((PrepareBackupResponse) msg).getPersistentIds();
+    protected void process(DistributionMessage message, boolean warn) {
+      if (message instanceof PrepareBackupResponse) {
+        HashSet<PersistentID> persistentIds = ((PrepareBackupResponse) message).getPersistentIds();
         if (persistentIds != null && !persistentIds.isEmpty()) {
-          results.put(msg.getSender(), persistentIds);
+          results.put(message.getSender(), persistentIds);
         }
       }
-      super.process(msg, warn);
+      super.process(message, warn);
     }
 
-
-
+    Map<DistributedMember, Set<PersistentID>> getResults() {
+      return results;
+    }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DM.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DM.java
index 1ce7421..bdc18f4 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DM.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DM.java
@@ -24,6 +24,7 @@ import java.util.Set;
 import java.util.concurrent.ExecutorService;
 
 import org.apache.geode.CancelCriterion;
+import org.apache.geode.admin.GemFireHealthConfig;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.Role;
 import org.apache.geode.distributed.internal.locks.ElderState;
@@ -37,31 +38,31 @@ import org.apache.geode.internal.cache.InternalCache;
  */
 public interface DM extends ReplySender {
 
-  public boolean shutdownInProgress();
+  boolean shutdownInProgress();
 
   /**
    * Returns the current "cache time" in milliseconds since the epoch. The "cache time" takes into
    * account skew among the local clocks on the various machines involved in the cache.
    */
-  public long cacheTimeMillis();
+  long cacheTimeMillis();
 
   /**
    * Returns the id of this distribution manager.
    */
-  public InternalDistributedMember getDistributionManagerId();
+  InternalDistributedMember getDistributionManagerId();
 
   /**
    * Get a set of all other members (both admin ones and normal).
    *
    * @since GemFire 5.7
    */
-  public Set getAllOtherMembers();
+  Set getAllOtherMembers();
 
   /**
    * Returns the ID in the membership view that is equal to the argument. If the ID is not in the
    * view, the argument is returned.
    */
-  public InternalDistributedMember getCanonicalId(DistributedMember id);
+  InternalDistributedMember getCanonicalId(DistributedMember id);
 
   /**
    * removes members that have older versions from the given collection, typically a Set from a
@@ -69,7 +70,7 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 8.0
    */
-  public void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
+  void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
       Version version);
 
   /**
@@ -78,20 +79,20 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 8.0
    */
-  public void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
+  void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
       Version version);
 
   /**
    * Returns an unmodifiable set containing the identities of all of the known distribution
    * managers. As of 7.0 this includes locators since they have a cache.
    */
-  public Set getDistributionManagerIds();
+  Set getDistributionManagerIds();
 
   /**
    * Returns an unmodifiable set containing the identities of all of the known "normal" distribution
    * managers. This does not include locators or admin members.
    */
-  public Set getNormalDistributionManagerIds();
+  Set getNormalDistributionManagerIds();
 
   /**
    * Returns an unmodifiable set containing the identities of all of the known distribution managers
@@ -99,22 +100,22 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 5.7
    */
-  public Set getDistributionManagerIdsIncludingAdmin();
+  Set getDistributionManagerIdsIncludingAdmin();
 
   /**
    * Returns a private-memory list containing getDistributionManagerIds() minus our id.
    */
-  public Set getOtherDistributionManagerIds();
+  Set getOtherDistributionManagerIds();
 
   /**
    * Returns a private-memory list containing getNormalDistributionManagerIds() minus our id.
    */
-  public Set getOtherNormalDistributionManagerIds();
+  Set getOtherNormalDistributionManagerIds();
 
   /**
    * Add a membership listener and return other DistribtionManagerIds as an atomic operation
    */
-  public Set addMembershipListenerAndGetDistributionManagerIds(MembershipListener l);
+  Set addMembershipListenerAndGetDistributionManagerIds(MembershipListener l);
 
   /**
    * Add a membership listener for all members and return other DistribtionManagerIds as an atomic
@@ -122,19 +123,19 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 5.7
    */
-  public Set addAllMembershipListenerAndGetAllIds(MembershipListener l);
+  Set addAllMembershipListenerAndGetAllIds(MembershipListener l);
 
   /**
    * Returns the identity of this <code>DistributionManager</code>
    */
-  public InternalDistributedMember getId();
+  InternalDistributedMember getId();
 
   /**
    * Return true if no other distribution manager was in this group when he joined.
    *
    * @since GemFire 4.0
    */
-  public boolean isAdam();
+  boolean isAdam();
 
   /**
    * Returns the identity of the oldest DM in this group.
@@ -144,19 +145,19 @@ public interface DM extends ReplySender {
    * @return the elder member, possibly null
    * @since GemFire 4.0
    */
-  public InternalDistributedMember getElderId();
+  InternalDistributedMember getElderId();
 
   /**
    * Return true if this is the oldest DM in this group.
    *
    * @since GemFire 5.0
    */
-  public boolean isElder();
+  boolean isElder();
 
   /**
    * Return true if this DM is a loner that is not part of a real distributed system.
    */
-  public boolean isLoner();
+  boolean isLoner();
 
   /**
    * Returns the elder state or null if this DM is not the elder.
@@ -169,14 +170,14 @@ public interface DM extends ReplySender {
    * @throws IllegalStateException if elder try lock fails
    * @since GemFire 4.0
    */
-  public ElderState getElderState(boolean force, boolean useTryLock);
+  ElderState getElderState(boolean force, boolean useTryLock);
 
   /**
    * Returns the id of the underlying distribution channel used for communication.
    *
    * @since GemFire 3.0
    */
-  public long getChannelId();
+  long getChannelId();
 
   /**
    * Adds a message to the outgoing queue. Note that <code>message</code> should not be modified
@@ -187,7 +188,7 @@ public interface DM extends ReplySender {
    * @throws NotSerializableException If <code>message</code> cannot be serialized
    * @see #putOutgoing(DistributionMessage)
    */
-  public Set putOutgoingUserData(DistributionMessage message) throws NotSerializableException;
+  Set putOutgoingUserData(DistributionMessage message) throws NotSerializableException;
 
   /**
    * Sends a message, guaranteed to be serialized
@@ -196,24 +197,24 @@ public interface DM extends ReplySender {
    * @param msg
    * @return recipients who did not receive the message
    */
-  public Set putOutgoing(DistributionMessage msg);
+  Set putOutgoing(DistributionMessage msg);
 
   /**
    * Returns the distributed system to which this distribution manager is connected.
    */
-  public InternalDistributedSystem getSystem();
+  InternalDistributedSystem getSystem();
 
   /**
    * Adds a <code>MembershipListener</code> to this distribution manager.
    */
-  public void addMembershipListener(MembershipListener l);
+  void addMembershipListener(MembershipListener l);
 
   /**
    * Removes a <code>MembershipListener</code> from this distribution manager.
    *
    * @throws IllegalArgumentException <code>l</code> was not registered on this distribution manager
    */
-  public void removeMembershipListener(MembershipListener l);
+  void removeMembershipListener(MembershipListener l);
 
   /**
    * Removes a <code>MembershipListener</code> listening for all members from this distribution
@@ -222,11 +223,11 @@ public interface DM extends ReplySender {
    * @throws IllegalArgumentException <code>l</code> was not registered on this distribution manager
    * @since GemFire 5.7
    */
-  public void removeAllMembershipListener(MembershipListener l);
+  void removeAllMembershipListener(MembershipListener l);
 
-  public void addAdminConsole(InternalDistributedMember id);
+  void addAdminConsole(InternalDistributedMember id);
 
-  public DMStats getStats();
+  DMStats getStats();
 
   /**
    * Used to get the DistributionConfig so that Connection can figure out if it is configured for
@@ -234,7 +235,7 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 4.2.1
    */
-  public DistributionConfig getConfig();
+  DistributionConfig getConfig();
 
   /**
    * Makes note of a distribution manager that has shut down. Invokes the appropriate listeners.
@@ -243,28 +244,27 @@ public interface DM extends ReplySender {
    *
    * @see ShutdownMessage#process
    */
-  public void handleManagerDeparture(InternalDistributedMember theId, boolean crashed,
-      String reason);
+  void handleManagerDeparture(InternalDistributedMember theId, boolean crashed, String reason);
 
   /**
    * getThreadPool gets this distribution manager's message-processing thread pool
    */
-  public ExecutorService getThreadPool();
+  ExecutorService getThreadPool();
 
   /**
    * Return the high-priority message-processing executor
    */
-  public ExecutorService getHighPriorityThreadPool();
+  ExecutorService getHighPriorityThreadPool();
 
   /**
    * Return the waiting message-processing executor
    */
-  public ExecutorService getWaitingThreadPool();
+  ExecutorService getWaitingThreadPool();
 
   /**
    * Return the special waiting message-processing executor
    */
-  public ExecutorService getPrMetaDataCleanupThreadPool();
+  ExecutorService getPrMetaDataCleanupThreadPool();
 
   /**
    * gets this distribution manager's message-processing executor for ordered (i.e. serialized)
@@ -272,13 +272,13 @@ public interface DM extends ReplySender {
    */
   // public Executor getSerialExecutor();
 
-  public void close();
+  void close();
 
   /**
    * Returns the ordered list of current DistributionManagers in oldest-to-youngest order. Added for
    * DLockGrantor
    */
-  public List<InternalDistributedMember> getViewMembers();
+  List<InternalDistributedMember> getViewMembers();
 
   /**
    * Returns the oldest member in the given set of distribution managers. The current implementation
@@ -288,27 +288,27 @@ public interface DM extends ReplySender {
    * @throws NoSuchElementException when none of the given members is actually a member of the
    *         distributed system.
    */
-  public DistributedMember getOldestMember(Collection members) throws NoSuchElementException;
+  DistributedMember getOldestMember(Collection members) throws NoSuchElementException;
 
   /**
    * @return Set of Admin VM nodes
    */
-  public Set getAdminMemberSet();
+  Set getAdminMemberSet();
 
   /** Throws ShutdownException if closeInProgress returns true. */
-  public void throwIfDistributionStopped();
+  void throwIfDistributionStopped();
 
   /** Returns count of members filling the specified role */
-  public int getRoleCount(Role role);
+  int getRoleCount(Role role);
 
   /** Returns true if at least one member is filling the specified role */
-  public boolean isRolePresent(Role role);
+  boolean isRolePresent(Role role);
 
   /** Returns a set of all roles currently in the distributed system. */
-  public Set getAllRoles();
+  Set getAllRoles();
 
   /** Returns true if id is a current member of the distributed system */
-  public boolean isCurrentMember(InternalDistributedMember id);
+  boolean isCurrentMember(InternalDistributedMember id);
 
   /**
    * Remove given member from list of members who are pending a startup reply
@@ -316,37 +316,37 @@ public interface DM extends ReplySender {
    * @param m the member
    * @param departed true if we're removing them due to membership
    */
-  public void removeUnfinishedStartup(InternalDistributedMember m, boolean departed);
+  void removeUnfinishedStartup(InternalDistributedMember m, boolean departed);
 
-  public void setUnfinishedStartups(Collection s);
+  void setUnfinishedStartups(Collection s);
 
   /**
    * Return the CancelCriterion for this DM.
    *
    * @return CancelCriterion for this DM
    */
-  public CancelCriterion getCancelCriterion();
+  CancelCriterion getCancelCriterion();
 
   /**
    * Return the membership manager for this DM
    *
    * @return the membership manager
    */
-  public MembershipManager getMembershipManager();
+  MembershipManager getMembershipManager();
 
   /**
    * Set the root cause for DM failure
    *
    * @param t the underlying failure
    */
-  public void setRootCause(Throwable t);
+  void setRootCause(Throwable t);
 
   /**
    * Return the underlying root cause for DM failure, possibly null
    *
    * @return the underlying root cause
    */
-  public Throwable getRootCause();
+  Throwable getRootCause();
 
   /**
    * Return all members that are on the the this host
@@ -354,27 +354,25 @@ public interface DM extends ReplySender {
    * @return set of {@link InternalDistributedMember} including this VM
    * @since GemFire 5.9
    */
-  public Set<InternalDistributedMember> getMembersInThisZone();
+  Set<InternalDistributedMember> getMembersInThisZone();
 
   /**
    * Acquire a permit to request a GII from another member
    */
-  public void acquireGIIPermitUninterruptibly();
+  void acquireGIIPermitUninterruptibly();
 
   /**
    * Release a permit to request a GII from another member.
    */
-  public void releaseGIIPermit();
+  void releaseGIIPermit();
 
-  public int getDistributedSystemId();
+  int getDistributedSystemId();
 
-  public boolean enforceUniqueZone();
+  boolean enforceUniqueZone();
 
-  public Set<InternalDistributedMember> getMembersInSameZone(
-      InternalDistributedMember acceptedMember);
+  Set<InternalDistributedMember> getMembersInSameZone(InternalDistributedMember acceptedMember);
 
-  public boolean areInSameZone(InternalDistributedMember member1,
-      InternalDistributedMember member2);
+  boolean areInSameZone(InternalDistributedMember member1, InternalDistributedMember member2);
 
   /**
    * Returns true is the two members are on the same equivalent host machine based on overlapping IP
@@ -383,12 +381,11 @@ public interface DM extends ReplySender {
    * @param member1 First member
    * @param member2 Second member
    */
-  public boolean areOnEquivalentHost(InternalDistributedMember member1,
-      InternalDistributedMember member2);
+  boolean areOnEquivalentHost(InternalDistributedMember member1, InternalDistributedMember member2);
 
-  public Set<InetAddress> getEquivalents(InetAddress in);
+  Set<InetAddress> getEquivalents(InetAddress in);
 
-  public Set<DistributedMember> getGroupMembers(String group);
+  Set<DistributedMember> getGroupMembers(String group);
 
   /**
    * Adds the entry in hostedLocators for a member with one or more hosted locators. The value is a
@@ -402,7 +399,7 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 6.6.3
    */
-  public void addHostedLocators(InternalDistributedMember member, Collection<String> locators,
+  void addHostedLocators(InternalDistributedMember member, Collection<String> locators,
       boolean isSharedConfigurationEnabled);
 
 
@@ -415,7 +412,7 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 6.6.3
    */
-  public Collection<String> getHostedLocators(InternalDistributedMember member);
+  Collection<String> getHostedLocators(InternalDistributedMember member);
 
   /**
    * Gets the map of all members hosting locators. The key is the member, and the value is a
@@ -428,7 +425,7 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 6.6.3
    */
-  public Map<InternalDistributedMember, Collection<String>> getAllHostedLocators();
+  Map<InternalDistributedMember, Collection<String>> getAllHostedLocators();
 
   /**
    * Gets the map of all members hosting locators with shared configuration. The key is the member,
@@ -439,7 +436,7 @@ public interface DM extends ReplySender {
    *
    * @since GemFire 8.0
    */
-  public Map<InternalDistributedMember, Collection<String>> getAllHostedLocatorsWithSharedConfiguration();
+  Map<InternalDistributedMember, Collection<String>> getAllHostedLocatorsWithSharedConfiguration();
 
   /****
    * Determines if the distributed system has the shared configuration service enabled or not.
@@ -447,24 +444,30 @@ public interface DM extends ReplySender {
    * @return true if the distributed system was started or had a locator with
    *         enable-cluster-configuration = true
    */
-  public boolean isSharedConfigurationServiceEnabledForDS();
+  boolean isSharedConfigurationServiceEnabledForDS();
 
   /**
    * Forces use of UDP for communications in the current thread. UDP is connectionless, so no tcp/ip
    * connections will be created or used for messaging until this setting is released with
    * releaseUDPMessagingForCurrentThread.
    */
-  public void forceUDPMessagingForCurrentThread();
+  void forceUDPMessagingForCurrentThread();
 
   /**
    * Releases use of UDP for all communications in the current thread, as established by
    * forceUDPMessagingForCurrentThread.
    */
-  public void releaseUDPMessagingForCurrentThread();
+  void releaseUDPMessagingForCurrentThread();
 
   int getDMType();
 
   InternalCache getCache();
 
   void setCache(InternalCache instance);
+
+  HealthMonitor getHealthMonitor(InternalDistributedMember owner);
+
+  void removeHealthMonitor(InternalDistributedMember owner, int theId);
+
+  void createHealthMonitor(InternalDistributedMember owner, GemFireHealthConfig cfg);
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
index 8bbe019..b1213ca 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
@@ -22,6 +22,7 @@ import java.util.concurrent.*;
 
 import org.apache.geode.CancelCriterion;
 import org.apache.geode.InternalGemFireError;
+import org.apache.geode.admin.GemFireHealthConfig;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.DurableClientAttributes;
 import org.apache.geode.distributed.Role;
@@ -1387,4 +1388,22 @@ public class LonerDistributionManager implements DM {
   public void setCache(InternalCache instance) {
     this.cache = instance;
   }
+
+  @Override
+  public HealthMonitor getHealthMonitor(InternalDistributedMember owner) {
+    throw new UnsupportedOperationException(
+        "getHealthMonitor is not supported by " + getClass().getSimpleName());
+  }
+
+  @Override
+  public void removeHealthMonitor(InternalDistributedMember owner, int theId) {
+    throw new UnsupportedOperationException(
+        "removeHealthMonitor is not supported by " + getClass().getSimpleName());
+  }
+
+  @Override
+  public void createHealthMonitor(InternalDistributedMember owner, GemFireHealthConfig cfg) {
+    throw new UnsupportedOperationException(
+        "createHealthMonitor is not supported by " + getClass().getSimpleName());
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerRequest.java
index 795b00c..4ffe064 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerRequest.java
@@ -57,7 +57,7 @@ public class AddHealthListenerRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return AddHealthListenerResponse.create(dm, this.getSender(), this.cfg);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerResponse.java
index 3fda3f7..50aed79 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerResponse.java
@@ -35,8 +35,8 @@ public class AddHealthListenerResponse extends AdminResponse {
    * Returns a <code>AddHealthListenerResponse</code> that will be returned to the specified
    * recipient.
    */
-  public static AddHealthListenerResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, GemFireHealthConfig cfg) {
+  public static AddHealthListenerResponse create(DM dm, InternalDistributedMember recipient,
+      GemFireHealthConfig cfg) {
     AddHealthListenerResponse m = new AddHealthListenerResponse();
     m.setRecipient(recipient);
     dm.createHealthMonitor(recipient, cfg);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerRequest.java
index 2165ee8..37111dc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerRequest.java
@@ -47,9 +47,11 @@ public class AddStatListenerRequest extends AdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return AddStatListenerResponse.create(dm, this.getSender(), this.resourceId, this.statName);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerResponse.java
index b5f52a9..19b430e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerResponse.java
@@ -34,8 +34,8 @@ public class AddStatListenerResponse extends AdminResponse {
    * Returns a <code>AddStatListenerResponse</code> that will be returned to the specified
    * recipient. The message will contains a copy of the local manager's system config.
    */
-  public static AddStatListenerResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, long resourceId, String statName) {
+  public static AddStatListenerResponse create(DM dm, InternalDistributedMember recipient,
+      long resourceId, String statName) {
     AddStatListenerResponse m = new AddStatListenerResponse();
     m.setRecipient(recipient);
     GemFireStatSampler sampler = null;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminFailureResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminFailureResponse.java
index fc5556b..b709cf5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminFailureResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminFailureResponse.java
@@ -12,40 +12,38 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-
-
 package org.apache.geode.internal.admin.remote;
 
-import java.io.*;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
 
-import org.apache.geode.*;
-import org.apache.geode.distributed.internal.*;
-import org.apache.geode.distributed.internal.membership.*;
+import org.apache.geode.DataSerializer;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 
 /**
  * A response to a failed request.
  */
 public class AdminFailureResponse extends AdminResponse {
-  // instance variables
-  Exception cause;
+
+  private Exception cause;
 
   /**
-   * Returns a <code>AdminFailureResponse</code> that will be returned to the specified recipient.
-   * The message will contains a copy of the local manager's system config.
+   * Returns a {@code AdminFailureResponse} that will be returned to the specified recipient. The
+   * message will contains a copy of the local manager's system config.
    */
-  public static AdminFailureResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, Exception cause) {
-    AdminFailureResponse m = new AdminFailureResponse();
-    m.setRecipient(recipient);
-    m.cause = cause;
-    return m;
+  public static AdminFailureResponse create(InternalDistributedMember recipient, Exception cause) {
+    AdminFailureResponse message = new AdminFailureResponse();
+    message.setRecipient(recipient);
+    message.cause = cause;
+    return message;
   }
 
-  // instance methods
   public Exception getCause() {
     return this.cause;
   }
 
+  @Override
   public int getDSFID() {
     return ADMIN_FAILURE_RESPONSE;
   }
@@ -59,11 +57,11 @@ public class AdminFailureResponse extends AdminResponse {
   @Override
   public void fromData(DataInput in) throws IOException, ClassNotFoundException {
     super.fromData(in);
-    this.cause = (Exception) DataSerializer.readObject(in);
+    this.cause = DataSerializer.readObject(in);
   }
 
   @Override
   public String toString() {
-    return "AdminFailureResponse from " + this.getRecipient() + " cause=" + this.cause;
+    return "AdminFailureResponse from " + getRecipient() + " cause=" + this.cause;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminMultipleReplyProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminMultipleReplyProcessor.java
index 95efbe7..3a5cff9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminMultipleReplyProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminMultipleReplyProcessor.java
@@ -16,21 +16,15 @@ package org.apache.geode.internal.admin.remote;
 
 import java.util.Collection;
 
-import org.apache.geode.CancelCriterion;
 import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionMessage;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ReplyException;
-import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
-import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-
 
 /**
  * TODO prpersist. This code really needs to be merged with the AdminReplyProcessor. However, we're
  * getting close to the release and I don't want to mess with all of the admin code right now. We
  * need this class to handle failures from admin messages that expect replies from multiple members.
- *
  */
 public class AdminMultipleReplyProcessor extends ReplyProcessor21 {
 
@@ -38,47 +32,16 @@ public class AdminMultipleReplyProcessor extends ReplyProcessor21 {
     super(dm, initMembers);
   }
 
-  public AdminMultipleReplyProcessor(DM dm, InternalDistributedMember member) {
-    super(dm, member);
-  }
-
-  public AdminMultipleReplyProcessor(DM dm, InternalDistributedSystem system,
-      Collection initMembers, CancelCriterion cancelCriterion, boolean register) {
-    super(dm, system, initMembers, cancelCriterion, register);
-  }
-
-  public AdminMultipleReplyProcessor(InternalDistributedSystem system, Collection initMembers,
-      CancelCriterion cancelCriterion) {
-    super(system, initMembers, cancelCriterion);
-  }
-
-  public AdminMultipleReplyProcessor(InternalDistributedSystem system, Collection initMembers) {
-    super(system, initMembers);
-  }
-
-  public AdminMultipleReplyProcessor(InternalDistributedSystem system,
-      InternalDistributedMember member, CancelCriterion cancelCriterion) {
-    super(system, member, cancelCriterion);
-  }
-
-  public AdminMultipleReplyProcessor(InternalDistributedSystem system,
-      InternalDistributedMember member) {
-    super(system, member);
-  }
-
   @Override
-  protected void process(DistributionMessage msg, boolean warn) {
-    if (msg instanceof AdminFailureResponse) {
-      Exception ex = ((AdminFailureResponse) msg).getCause();
+  protected void process(DistributionMessage message, boolean warn) {
+    if (message instanceof AdminFailureResponse) {
+      Exception ex = ((AdminFailureResponse) message).getCause();
       if (ex != null) {
-        ReplyException rex = new ReplyException(ex);
-        rex.setSenderIfNull(msg.getSender());
-        processException(msg, rex);
+        ReplyException replyException = new ReplyException(ex);
+        replyException.setSenderIfNull(message.getSender());
+        processException(message, replyException);
       }
     }
-    super.process(msg, warn);
+    super.process(message, warn);
   }
-
-
-
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminRequest.java
index 6ea7de6..58c078b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminRequest.java
@@ -24,6 +24,7 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.admin.RuntimeAdminException;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.distributed.internal.ReplyException;
@@ -134,7 +135,7 @@ public abstract class AdminRequest extends PooledDistributionMessage {
       cpMgr.jumpToModifiedClassLoader(modifiedClasspath);
       response = createResponse(dm);
     } catch (Exception ex) {
-      response = AdminFailureResponse.create(dm, this.getSender(), ex);
+      response = AdminFailureResponse.create(this.getSender(), ex);
     } finally {
       cpMgr.revertToOldClassLoader();
     }
@@ -150,7 +151,7 @@ public abstract class AdminRequest extends PooledDistributionMessage {
   /**
    * Must return a proper response to this request.
    */
-  protected abstract AdminResponse createResponse(DistributionManager dm);
+  protected abstract AdminResponse createResponse(DM dm);
 
   @Override
   public void toData(DataOutput out) throws IOException {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerRequest.java
index 04c4233..853d5bf 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerRequest.java
@@ -17,7 +17,7 @@ package org.apache.geode.internal.admin.remote;
 import java.io.*;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.internal.admin.CacheInfo;
 import org.apache.geode.internal.i18n.LocalizedStrings;
 
@@ -132,7 +132,7 @@ public class BridgeServerRequest extends AdminRequest {
    * Creates a <Code>BridgeServerResponse</code> to this request
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return BridgeServerResponse.create(dm, this);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerResponse.java
index ddc102d..6e9b32d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerResponse.java
@@ -22,7 +22,7 @@ import org.apache.geode.CancelException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.server.CacheServer;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.CacheServerImpl;
 import org.apache.geode.internal.cache.InternalCache;
@@ -44,7 +44,7 @@ public class BridgeServerResponse extends AdminResponse {
   /**
    * Creates a {@code BridgeServerResponse} in response to the given request.
    */
-  static BridgeServerResponse create(DistributionManager dm, BridgeServerRequest request) {
+  static BridgeServerResponse create(DM dm, BridgeServerRequest request) {
     BridgeServerResponse m = new BridgeServerResponse();
     m.setRecipient(request.getSender());
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigRequest.java
index dba5810..d833507 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigRequest.java
@@ -53,7 +53,7 @@ public class CacheConfigRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return CacheConfigResponse.create(dm, this.getSender(), this.cacheId, this.attributeCode,
         this.newValue);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigResponse.java
index 0aae5ff..098d3f1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigResponse.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import org.apache.geode.CancelException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.InternalCache;
@@ -45,8 +45,8 @@ public class CacheConfigResponse extends AdminResponse {
   /**
    * Returns a {@code CacheConfigResponse} that will be returned to the specified recipient.
    */
-  public static CacheConfigResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, int cacheId, byte attributeCode, int newValue) {
+  public static CacheConfigResponse create(DM dm, InternalDistributedMember recipient, int cacheId,
+      byte attributeCode, int newValue) {
     CacheConfigResponse m = new CacheConfigResponse();
     m.setRecipient(recipient);
     try {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoRequest.java
index db13737..2692d28 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoRequest.java
@@ -42,9 +42,11 @@ public class CacheInfoRequest extends AdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return CacheInfoResponse.create(dm, this.getSender());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoResponse.java
index f6191c5..bc79498 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoResponse.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import org.apache.geode.CancelException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 
@@ -37,8 +37,7 @@ public class CacheInfoResponse extends AdminResponse {
   /**
    * Returns a {@code CacheInfoResponse} that will be returned to the specified recipient.
    */
-  public static CacheInfoResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static CacheInfoResponse create(DM dm, InternalDistributedMember recipient) {
     CacheInfoResponse m = new CacheInfoResponse();
     m.setRecipient(recipient);
     try {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerRequest.java
index 0602fc4..2ac6121 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerRequest.java
@@ -47,7 +47,7 @@ public class CancelStatListenerRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return CancelStatListenerResponse.create(dm, this.getSender(), this.listenerId);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerResponse.java
index d105fa3..73058bb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerResponse.java
@@ -34,8 +34,8 @@ public class CancelStatListenerResponse extends AdminResponse {
    * Returns a <code>CancelStatListenerResponse</code> that will be returned to the specified
    * recipient. The message will contains a copy of the local manager's system config.
    */
-  public static CancelStatListenerResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, int listenerId) {
+  public static CancelStatListenerResponse create(DM dm, InternalDistributedMember recipient,
+      int listenerId) {
     CancelStatListenerResponse m = new CancelStatListenerResponse();
     m.setRecipient(recipient);
     GemFireStatSampler sampler = null;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CliLegacyMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CliLegacyMessage.java
index 3e0fc6e..bf8ff7f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CliLegacyMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CliLegacyMessage.java
@@ -40,7 +40,7 @@ public abstract class CliLegacyMessage extends AdminRequest {
     } catch (Exception ex) {
       logger.error(
           LocalizedMessage.create(LocalizedStrings.CliLegacyMessage_ERROR, this.getClass()), ex);
-      response = AdminFailureResponse.create(dm, this.getSender(), ex);
+      response = AdminFailureResponse.create(this.getSender(), ex);
 
     }
     if (response != null) { // cancellations result in null response
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactRequest.java
index 96c87e2..df197f6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactRequest.java
@@ -35,7 +35,6 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.internal.cache.DiskStoreImpl;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.util.ArrayUtils;
@@ -81,7 +80,7 @@ public class CompactRequest extends CliLegacyMessage {
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     InternalCache cache = dm.getCache();
     HashSet<PersistentID> compactedStores = new HashSet<>();
     if (cache != null && !cache.isClosed()) {
@@ -135,14 +134,14 @@ public class CompactRequest extends CliLegacyMessage {
     }
 
     @Override
-    protected void process(DistributionMessage msg, boolean warn) {
-      if (msg instanceof CompactResponse) {
-        final Set<PersistentID> persistentIds = ((CompactResponse) msg).getPersistentIds();
+    protected void process(DistributionMessage message, boolean warn) {
+      if (message instanceof CompactResponse) {
+        final Set<PersistentID> persistentIds = ((CompactResponse) message).getPersistentIds();
         if (persistentIds != null && !persistentIds.isEmpty()) {
-          this.results.put(msg.getSender(), persistentIds);
+          this.results.put(message.getSender(), persistentIds);
         }
       }
-      super.process(msg, warn);
+      super.process(message, warn);
     }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoRequest.java
index a079d25..5d8abd0 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoRequest.java
@@ -55,8 +55,10 @@ public class DurableClientInfoRequest extends AdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return DurableClientInfoResponse.create(dm, this.getSender(), this);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoResponse.java
index 98837c5..f44109c 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoResponse.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.CacheServerImpl;
 import org.apache.geode.internal.cache.InternalCache;
@@ -40,8 +40,8 @@ public class DurableClientInfoResponse extends AdminResponse {
   /**
    * Returns a {@code DurableClientInfoResponse} that will be returned to the specified recipient.
    */
-  public static DurableClientInfoResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, DurableClientInfoRequest request) {
+  public static DurableClientInfoResponse create(DM dm, InternalDistributedMember recipient,
+      DurableClientInfoRequest request) {
     DurableClientInfoResponse m = new DurableClientInfoResponse();
     m.setRecipient(recipient);
     try {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoRequest.java
index 0e394ae..5a3500f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoRequest.java
@@ -37,9 +37,11 @@ public class FetchDistLockInfoRequest extends AdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return FetchDistLockInfoResponse.create(dm, this.getSender());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoResponse.java
index 4492fb8..5804e65 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoResponse.java
@@ -35,8 +35,7 @@ public class FetchDistLockInfoResponse extends AdminResponse {
    * recipient. The message will contains a copy of the local manager's distributed lock service
    * information.
    */
-  public static FetchDistLockInfoResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static FetchDistLockInfoResponse create(DM dm, InternalDistributedMember recipient) {
     FetchDistLockInfoResponse m = new FetchDistLockInfoResponse();
     InternalDistributedMember id = dm.getDistributionManagerId();
     Set entries = DLockService.snapshotAllServices().entrySet();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisRequest.java
index 37d0a33..05141b4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisRequest.java
@@ -51,7 +51,7 @@ public class FetchHealthDiagnosisRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return FetchHealthDiagnosisResponse.create(dm, this.getSender(), this.id, this.healthCode);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisResponse.java
index 1585907..e134f19 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisResponse.java
@@ -36,8 +36,8 @@ public class FetchHealthDiagnosisResponse extends AdminResponse {
    * Returns a <code>FetchHealthDiagnosisResponse</code> that will be returned to the specified
    * recipient.
    */
-  public static FetchHealthDiagnosisResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, int id, GemFireHealth.Health healthCode) {
+  public static FetchHealthDiagnosisResponse create(DM dm, InternalDistributedMember recipient,
+      int id, GemFireHealth.Health healthCode) {
     FetchHealthDiagnosisResponse m = new FetchHealthDiagnosisResponse();
     m.setRecipient(recipient);
     {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostRequest.java
index ee3d8b6..f27aa66 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostRequest.java
@@ -41,7 +41,7 @@ public class FetchHostRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return FetchHostResponse.create(dm, this.getSender());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostResponse.java
index f41f0ac..e568a47 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostResponse.java
@@ -27,8 +27,8 @@ import java.net.UnknownHostException;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.cache.CacheServerLauncher;
@@ -59,8 +59,7 @@ public class FetchHostResponse extends AdminResponse {
    * Returns a <code>FetchHostResponse</code> that will be returned to the specified recipient. The
    * message will contains a copy of this vm's local host.
    */
-  public static FetchHostResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static FetchHostResponse create(DM dm, InternalDistributedMember recipient) {
     FetchHostResponse m = new FetchHostResponse();
     m.setRecipient(recipient);
     try {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesRequest.java
index 308a759..ed1095a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesRequest.java
@@ -38,7 +38,7 @@ public class FetchResourceAttributesRequest extends AdminRequest {
   }
 
   @Override
-  public AdminResponse createResponse(DistributionManager dm) {
+  public AdminResponse createResponse(DM dm) {
     return FetchResourceAttributesResponse.create(dm, this.getSender(), resourceUniqueId);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesResponse.java
index 7f2be75..709a89d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesResponse.java
@@ -12,23 +12,26 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-
-
 package org.apache.geode.internal.admin.remote;
 
-import java.io.*;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
 
-import org.apache.geode.*;
-import org.apache.geode.distributed.internal.*;
-import org.apache.geode.distributed.internal.membership.*;
+import org.apache.geode.DataSerializer;
+import org.apache.geode.StatisticDescriptor;
+import org.apache.geode.Statistics;
+import org.apache.geode.StatisticsType;
+import org.apache.geode.distributed.internal.DM;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 
 public class FetchResourceAttributesResponse extends AdminResponse {
 
-  // instance variables
   private RemoteStat[] stats;
 
-  public static FetchResourceAttributesResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, long rsrcUniqueId) {
+  public static FetchResourceAttributesResponse create(DM dm, InternalDistributedMember recipient,
+      long rsrcUniqueId) {
     FetchResourceAttributesResponse m = new FetchResourceAttributesResponse();
     m.setRecipient(recipient);
     Statistics s = null;
@@ -53,9 +56,11 @@ public class FetchResourceAttributesResponse extends AdminResponse {
   }
 
   /**
-   * Constructor required by <code>DataSerializable</code>
+   * Constructor required by {@code DataSerializable}
    */
-  public FetchResourceAttributesResponse() {}
+  public FetchResourceAttributesResponse() {
+    // nothing
+  }
 
   public int getDSFID() {
     return FETCH_RESOURCE_ATTRIBUTES_RESPONSE;
@@ -75,6 +80,6 @@ public class FetchResourceAttributesResponse extends AdminResponse {
 
   @Override
   public String toString() {
-    return "FetchResourceAttributesResponse from " + this.getRecipient();
+    return "FetchResourceAttributesResponse from " + getRecipient();
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsRequest.java
index dc98cae..8cd6d1c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsRequest.java
@@ -40,7 +40,7 @@ public class FetchStatsRequest extends AdminRequest {
   }
 
   @Override
-  public AdminResponse createResponse(DistributionManager dm) {
+  public AdminResponse createResponse(DM dm) {
     return FetchStatsResponse.create(dm, this.getSender(), this.statisticsTypeName);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsResponse.java
index f9a861c..665f6c4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsResponse.java
@@ -18,23 +18,19 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.Statistics;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.InternalDistributedSystem.StatisticsVisitor;
-import org.apache.geode.distributed.internal.membership.*;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 
 /**
- * Provides a response of remote statistic resources for a <code>FetchStatsRequest</code>
- *
+ * Provides a response of remote statistic resources for a {@code FetchStatsRequest}
  */
 public class FetchStatsResponse extends AdminResponse {
 
-  // instance variables
   private RemoteStatResource[] stats;
 
   /**
@@ -44,12 +40,11 @@ public class FetchStatsResponse extends AdminResponse {
    * @param recipient the recipient who made the original request
    * @return response containing all remote stat resources
    */
-  public static FetchStatsResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, final String statisticsTypeName) {
-    // LogWriterI18n log = dm.getLogger();
+  public static FetchStatsResponse create(DM dm, InternalDistributedMember recipient,
+      final String statisticsTypeName) {
     FetchStatsResponse m = new FetchStatsResponse();
     m.setRecipient(recipient);
-    final List<RemoteStatResource> statList = new ArrayList<RemoteStatResource>();
+    List<RemoteStatResource> statList = new ArrayList<RemoteStatResource>();
     // get vm-local stats
     // call visitStatistics to fix for bug 40358
     if (statisticsTypeName == null) {
@@ -72,7 +67,6 @@ public class FetchStatsResponse extends AdminResponse {
     return m;
   }
 
-
   @Override
   public boolean sendViaUDP() {
     return true;
@@ -130,7 +124,7 @@ public class FetchStatsResponse extends AdminResponse {
    */
   @Override
   public String toString() {
-    return "FetchStatsResponse from " + this.getRecipient() + " stats.length=" + stats.length;
+    return "FetchStatsResponse from " + getRecipient() + " stats.length=" + stats.length;
   }
 
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgRequest.java
index fa1288f..33d78ff 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgRequest.java
@@ -48,7 +48,7 @@ public class FetchSysCfgRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return FetchSysCfgResponse.create(dm, this.getSender());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgResponse.java
index 57d58c1..e5405bc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgResponse.java
@@ -34,8 +34,7 @@ public class FetchSysCfgResponse extends AdminResponse {
    * Returns a <code>FetchSysCfgResponse</code> that will be returned to the specified recipient.
    * The message will contains a copy of the local manager's config.
    */
-  public static FetchSysCfgResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static FetchSysCfgResponse create(DM dm, InternalDistributedMember recipient) {
     FetchSysCfgResponse m = new FetchSysCfgResponse();
     m.setRecipient(recipient);
     Config conf = dm.getSystem().getConfig();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoRequest.java
index 22a5f67..11877d1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoRequest.java
@@ -40,9 +40,11 @@ public class LicenseInfoRequest extends AdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return LicenseInfoResponse.create(dm, this.getSender());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoResponse.java
index ba05780..edc63d8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoResponse.java
@@ -22,26 +22,23 @@ import java.util.Properties;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogService;
 
-
 /**
  * A message that is sent in response to a {@link LicenseInfoRequest}.
  */
 public class LicenseInfoResponse extends AdminResponse {
   private static final Logger logger = LogService.getLogger();
 
-  // instance variables
   private Properties p;
 
-
   /**
-   * Returns a <code>LicenseInfoResponse</code> that will be returned to the specified recipient.
+   * Returns a {@code LicenseInfoResponse} that will be returned to the specified recipient.
    */
-  public static LicenseInfoResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static LicenseInfoResponse create(DM dm, InternalDistributedMember recipient) {
     LicenseInfoResponse m = new LicenseInfoResponse();
     m.setRecipient(recipient);
     m.p = new Properties();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsRequest.java
index 68ac778..e273824 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsRequest.java
@@ -30,7 +30,6 @@ import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.ReplyException;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.persistence.PersistentMemberID;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
@@ -78,7 +77,7 @@ public class MissingPersistentIDsRequest extends CliLegacyMessage {
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     Set<PersistentID> missingIds = new HashSet<>();
     Set<PersistentID> localPatterns = new HashSet<>();
     InternalCache cache = dm.getCache();
@@ -124,12 +123,12 @@ public class MissingPersistentIDsRequest extends CliLegacyMessage {
     }
 
     @Override
-    protected void process(DistributionMessage msg, boolean warn) {
-      if (msg instanceof MissingPersistentIDsResponse) {
-        this.missing.addAll(((MissingPersistentIDsResponse) msg).getMissingIds());
-        this.existing.addAll(((MissingPersistentIDsResponse) msg).getLocalIds());
+    protected void process(DistributionMessage message, boolean warn) {
+      if (message instanceof MissingPersistentIDsResponse) {
+        this.missing.addAll(((MissingPersistentIDsResponse) message).getMissingIds());
+        this.existing.addAll(((MissingPersistentIDsResponse) message).getLocalIds());
       }
-      super.process(msg, warn);
+      super.process(message, warn);
     }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsRequest.java
index 36dba51..1dd5c26 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsRequest.java
@@ -56,9 +56,11 @@ public class ObjectDetailsRequest extends RegionAdminRequest implements Cancella
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     CancellationRegistry.getInstance().registerMessage(this);
     resp = ObjectDetailsResponse.create(dm, this.getSender());
     if (cancelled) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsResponse.java
index aeb33e5..490a3b1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsResponse.java
@@ -38,8 +38,7 @@ public class ObjectDetailsResponse extends AdminResponse implements Cancellable
    * Returns a <code>ObjectValueResponse</code> that will be returned to the specified recipient.
    * The message will contains a copy of the local manager's system config.
    */
-  public static ObjectDetailsResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static ObjectDetailsResponse create(DM dm, InternalDistributedMember recipient) {
     ObjectDetailsResponse m = new ObjectDetailsResponse();
     m.setRecipient(recipient);
     return m;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesRequest.java
index c51cb2b..5987340 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesRequest.java
@@ -44,9 +44,11 @@ public class ObjectNamesRequest extends RegionAdminRequest implements Cancellabl
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     CancellationRegistry.getInstance().registerMessage(this);
     resp = ObjectNamesResponse.create(dm, this.getSender());
     if (cancelled) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesResponse.java
index 3f02d0b..c916f0d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesResponse.java
@@ -36,8 +36,7 @@ public class ObjectNamesResponse extends AdminResponse implements Cancellable {
    * Returns a <code>ObjectNamesResponse</code> that will be returned to the specified recipient.
    * The message will contains a copy of the local manager's system config.
    */
-  public static ObjectNamesResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static ObjectNamesResponse create(DM dm, InternalDistributedMember recipient) {
     ObjectNamesResponse m = new ObjectNamesResponse();
     m.setRecipient(recipient);
     return m;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/PrepareRevokePersistentIDRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/PrepareRevokePersistentIDRequest.java
index ac9fdbc..6a84143 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/PrepareRevokePersistentIDRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/PrepareRevokePersistentIDRequest.java
@@ -27,7 +27,6 @@ import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
 import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
@@ -90,7 +89,7 @@ public class PrepareRevokePersistentIDRequest extends CliLegacyMessage {
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     InternalCache cache = dm.getCache();
     if (cache != null && !cache.isClosed()) {
       PersistentMemberManager mm = cache.getPersistentMemberManager();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotRequest.java
index 0de8b79..5d76bbb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotRequest.java
@@ -41,7 +41,7 @@ public class RefreshMemberSnapshotRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return RefreshMemberSnapshotResponse.create(dm, this.getSender());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotResponse.java
index 9e973f9..bf0bd6c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotResponse.java
@@ -22,7 +22,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.admin.GemFireMemberStatus;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 
@@ -38,8 +38,7 @@ public class RefreshMemberSnapshotResponse extends AdminResponse {
    * Returns a {@code FetchSysCfgResponse} that will be returned to the specified recipient. The
    * message will contains a copy of the local manager's config.
    */
-  public static RefreshMemberSnapshotResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static RefreshMemberSnapshotResponse create(DM dm, InternalDistributedMember recipient) {
     RefreshMemberSnapshotResponse m = new RefreshMemberSnapshotResponse();
     m.setRecipient(recipient);
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesRequest.java
index 9cf6d3c..16ce17c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesRequest.java
@@ -42,9 +42,11 @@ public class RegionAttributesRequest extends RegionAdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return RegionAttributesResponse.create(dm, this.getSender(), this.getRegion(dm.getSystem()));
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesResponse.java
index f618826..abd2b77 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesResponse.java
@@ -34,8 +34,8 @@ public class RegionAttributesResponse extends AdminResponse {
    * Returns a <code>RegionAttributesResponse</code> that will be returned to the specified
    * recipient. The message will contains a copy of the local manager's system config.
    */
-  public static RegionAttributesResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, Region r) {
+  public static RegionAttributesResponse create(DM dm, InternalDistributedMember recipient,
+      Region r) {
     RegionAttributesResponse m = new RegionAttributesResponse();
     m.setRecipient(recipient);
     m.attributes = new RemoteRegionAttributes(r.getAttributes());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionRequest.java
index ebd176e..596c59c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionRequest.java
@@ -111,9 +111,11 @@ public class RegionRequest extends AdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     // nothing needs to be done. If we got this far then a cache must exist.
     return RegionResponse.create(dm, this.getSender(), this);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionResponse.java
index e444be8..5faefe1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionResponse.java
@@ -48,7 +48,7 @@ public class RegionResponse extends AdminResponse {
    * Returns a <code>RegionResponse</code> that will be returned to the specified recipient. The
    * message will contains a copy of the local manager's system config.
    */
-  public static RegionResponse create(DistributionManager dm, InternalDistributedMember recipient,
+  public static RegionResponse create(DM dm, InternalDistributedMember recipient,
       RegionRequest request) {
     RegionResponse m = new RegionResponse();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeRequest.java
index 73a5b50..94902a4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeRequest.java
@@ -40,9 +40,11 @@ public class RegionSizeRequest extends RegionAdminRequest implements Cancellable
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     Assert.assertTrue(this.getSender() != null);
     CancellationRegistry.getInstance().registerMessage(this);
     resp = RegionSizeResponse.create(dm, this.getSender());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeResponse.java
index 69fbec4..883c1d7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeResponse.java
@@ -35,8 +35,7 @@ public class RegionSizeResponse extends AdminResponse implements Cancellable {
   /**
    * Returns a <code>RegionSizeResponse</code> that will be returned to the specified recipient.
    */
-  public static RegionSizeResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static RegionSizeResponse create(DM dm, InternalDistributedMember recipient) {
     RegionSizeResponse m = new RegionSizeResponse();
     m.setRecipient(recipient);
     return m;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsRequest.java
index 4799b91..e8cc225 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsRequest.java
@@ -44,7 +44,7 @@ public class RegionStatisticsRequest extends RegionAdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return RegionStatisticsResponse.create(dm, this.getSender(), this.getRegion(dm.getSystem()));
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsResponse.java
index 9197eda..4778d15 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsResponse.java
@@ -34,8 +34,8 @@ public class RegionStatisticsResponse extends AdminResponse {
    * Returns a <code>RegionStatisticsResponse</code> that will be returned to the specified
    * recipient. The message will contains a copy of the local manager's system config.
    */
-  public static RegionStatisticsResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, Region r) {
+  public static RegionStatisticsResponse create(DM dm, InternalDistributedMember recipient,
+      Region r) {
     RegionStatisticsResponse m = new RegionStatisticsResponse();
     m.setRecipient(recipient);
     m.regionStatistics = new RemoteCacheStatistics(r.getStatistics());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionSizeRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionSizeRequest.java
index 2306bca..13123d9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionSizeRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionSizeRequest.java
@@ -18,7 +18,7 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 
 /**
  * Admin request to transfer region info for a member
@@ -38,7 +38,7 @@ public class RegionSubRegionSizeRequest extends AdminRequest implements Cancella
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     CancellationRegistry.getInstance().registerMessage(this);
 
     resp = RegionSubRegionsSizeResponse.create(dm, this.getSender());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionsSizeResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionsSizeResponse.java
index 5e24f63..2ee08cd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionsSizeResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionsSizeResponse.java
@@ -26,7 +26,7 @@ import org.apache.geode.admin.RegionSubRegionSnapshot;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.logging.LogService;
@@ -54,8 +54,7 @@ public class RegionSubRegionsSizeResponse extends AdminResponse implements Cance
    * Returns a {@code RegionSubRegionsSizeResponse} that will be returned to the specified
    * recipient. The message will contains a copy of the region snapshot
    */
-  public static RegionSubRegionsSizeResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static RegionSubRegionsSizeResponse create(DM dm, InternalDistributedMember recipient) {
     RegionSubRegionsSizeResponse m = new RegionSubRegionsSizeResponse();
     m.setRecipient(recipient);
     m.snapshot = null;
@@ -64,7 +63,7 @@ public class RegionSubRegionsSizeResponse extends AdminResponse implements Cance
     return m;
   }
 
-  void populateSnapshot(DistributionManager dm) {
+  void populateSnapshot(DM dm) {
     if (this.cancelled) {
       return;
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerRequest.java
index 3a615a5..2225bde 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerRequest.java
@@ -48,7 +48,7 @@ public class RemoveHealthListenerRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return RemoveHealthListenerResponse.create(dm, this.getSender(), this.id);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerResponse.java
index eeb85b2..9c44464 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerResponse.java
@@ -33,8 +33,8 @@ public class RemoveHealthListenerResponse extends AdminResponse {
    * Returns a <code>RemoveHealthListenerResponse</code> that will be returned to the specified
    * recipient.
    */
-  public static RemoveHealthListenerResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, int id) {
+  public static RemoveHealthListenerResponse create(DM dm, InternalDistributedMember recipient,
+      int id) {
     RemoveHealthListenerResponse m = new RemoveHealthListenerResponse();
     m.setRecipient(recipient);
     dm.removeHealthMonitor(recipient, id);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusRequest.java
index 709f069..7a75c36 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusRequest.java
@@ -46,9 +46,11 @@ public class ResetHealthStatusRequest extends AdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return ResetHealthStatusResponse.create(dm, this.getSender(), this.id);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusResponse.java
index 0659b9c..b5a5c22 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusResponse.java
@@ -33,8 +33,8 @@ public class ResetHealthStatusResponse extends AdminResponse {
    * Returns a <code>ResetHealthStatusResponse</code> that will be returned to the specified
    * recipient.
    */
-  public static ResetHealthStatusResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, int id) {
+  public static ResetHealthStatusResponse create(DM dm, InternalDistributedMember recipient,
+      int id) {
     ResetHealthStatusResponse m = new ResetHealthStatusResponse();
     m.setRecipient(recipient);
     {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RevokePersistentIDRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RevokePersistentIDRequest.java
index f425a2b..feb638e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RevokePersistentIDRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RevokePersistentIDRequest.java
@@ -26,7 +26,6 @@ import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
 import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
@@ -74,7 +73,7 @@ public class RevokePersistentIDRequest extends CliLegacyMessage {
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     InternalCache cache = dm.getCache();
     if (cache != null && !cache.isClosed()) {
       PersistentMemberManager mm = cache.getPersistentMemberManager();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionRequest.java
index f6332dd..392fe6b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionRequest.java
@@ -45,7 +45,7 @@ public class RootRegionRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     // nothing needs to be done. If we got this far then a cache must exist.
     return RootRegionResponse.create(dm, this.getSender());
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionResponse.java
index 3dad8f7..64bd67d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionResponse.java
@@ -25,8 +25,8 @@ import org.apache.geode.CancelException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.Region;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.GemFireVM;
 import org.apache.geode.internal.cache.InternalCache;
@@ -43,8 +43,7 @@ public class RootRegionResponse extends AdminResponse {
    * Returns a {@code RootRegionResponse} that will be returned to the specified recipient. The
    * message will contains a copy of the local manager's system config.
    */
-  public static RootRegionResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static RootRegionResponse create(DM dm, InternalDistributedMember recipient) {
     RootRegionResponse m = new RootRegionResponse();
     try {
       InternalCache cache = (InternalCache) CacheFactory.getInstance(dm.getSystem());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java
index b7b2c30..3023a37 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java
@@ -87,7 +87,7 @@ public class ShutdownAllRequest extends AdminRequest {
           if (logger.isDebugEnabled()) {
             logger.debug("caught exception while processing shutdownAll locally", ex);
           }
-          response = AdminFailureResponse.create(dism, myId, ex);
+          response = AdminFailureResponse.create(myId, ex);
         }
         response.setSender(myId);
         replyProcessor.process(response);
@@ -173,7 +173,7 @@ public class ShutdownAllRequest extends AdminRequest {
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     boolean isToShutdown = hasCache();
     if (isToShutdown) {
       boolean isSuccess = false;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgRequest.java
index f05cf9d..b3c6fd3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgRequest.java
@@ -50,7 +50,7 @@ public class StoreSysCfgRequest extends AdminRequest {
    * Must return a proper response to this request.
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return StoreSysCfgResponse.create(dm, this.getSender(), this.sc);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgResponse.java
index 6cbb08d..bf6c41a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgResponse.java
@@ -35,8 +35,7 @@ public class StoreSysCfgResponse extends AdminResponse {
    * Returns a <code>StoreSysCfgResponse</code> that states that a given set of distribution
    * managers are known by <code>dm</code> to be started.
    */
-  public static StoreSysCfgResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, Config sc) {
+  public static StoreSysCfgResponse create(DM dm, InternalDistributedMember recipient, Config sc) {
     StoreSysCfgResponse m = new StoreSysCfgResponse();
     m.setRecipient(recipient);
     InternalDistributedSystem sys = dm.getSystem();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionRequest.java
index 6641941..8f0e88e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionRequest.java
@@ -42,9 +42,11 @@ public class SubRegionRequest extends RegionAdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return SubRegionResponse.create(dm, this.getSender(), this.getRegion(dm.getSystem()));
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionResponse.java
index 513a1fe..e049318 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionResponse.java
@@ -37,8 +37,7 @@ public class SubRegionResponse extends AdminResponse {
    * Returns a <code>SubRegionResponse</code> that will be returned to the specified recipient. The
    * message will contains a copy of the local manager's system config.
    */
-  public static SubRegionResponse create(DistributionManager dm,
-      InternalDistributedMember recipient, Region r) {
+  public static SubRegionResponse create(DM dm, InternalDistributedMember recipient, Region r) {
     SubRegionResponse m = new SubRegionResponse();
     m.setRecipient(recipient);
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogRequest.java
index e79b99c..d911b08 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogRequest.java
@@ -28,7 +28,7 @@ public class TailLogRequest extends AdminRequest {
   }
 
   @Override
-  public AdminResponse createResponse(DistributionManager dm) {
+  public AdminResponse createResponse(DM dm) {
     return TailLogResponse.create(dm, this.getSender());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogResponse.java
index 137c8ba..6e7ee03 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogResponse.java
@@ -21,8 +21,8 @@ import java.io.*;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.i18n.LocalizedStrings;
@@ -38,8 +38,7 @@ public class TailLogResponse extends AdminResponse {
   private String tail;
   private String childTail;
 
-  public static TailLogResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static TailLogResponse create(DM dm, InternalDistributedMember recipient) {
     TailLogResponse m = new TailLogResponse();
     m.setRecipient(recipient);
     try {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoRequest.java
index db4fa42..25ff383 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoRequest.java
@@ -42,9 +42,11 @@ public class VersionInfoRequest extends AdminRequest {
 
   /**
    * Must return a proper response to this request.
+   *
+   * @param dm
    */
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     return VersionInfoResponse.create(dm, this.getSender());
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoResponse.java
index e8a87ed..f67f8e6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoResponse.java
@@ -36,8 +36,7 @@ public class VersionInfoResponse extends AdminResponse {
   /**
    * Returns a <code>VersionInfoResponse</code> that will be returned to the specified recipient.
    */
-  public static VersionInfoResponse create(DistributionManager dm,
-      InternalDistributedMember recipient) {
+  public static VersionInfoResponse create(DM dm, InternalDistributedMember recipient) {
     VersionInfoResponse m = new VersionInfoResponse();
     m.setRecipient(recipient);
     m.verInfo = GemFireVersion.asString();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BackupLock.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BackupLock.java
index 1c130bf..23f075d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BackupLock.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BackupLock.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.internal.cache;
 
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.ReentrantLock;
 
@@ -21,54 +22,68 @@ import java.util.concurrent.locks.ReentrantLock;
  * A lock used for the backup process. This is a reentrant lock that provides a "backup" mode, where
  * the lock is held by a "backup thread" which can be assigned later than the time we lock.
  *
- * We need this because our backup process is two phase. In the first phase we aquire the lock and
+ * <p>
+ * We need this because our backup process is two phase. In the first phase we acquire the lock and
  * in the second phase we actually do the backup. During the second phase we need to reenter the
  * lock and release it with a different thread.
- *
  */
 public class BackupLock extends ReentrantLock {
 
-  private final ThreadLocal<Boolean> isBackupThread = new ThreadLocal<Boolean>();
-  boolean isBackingUp;
-  Condition backupDone = super.newCondition();
+  private final ThreadLocal<Boolean> isBackupThread = new ThreadLocal<>();
+  private boolean isBackingUp;
+  private Condition backupDone = super.newCondition();
 
   // test hook
-  private BackupLockTestHook hook = null;
+  private final AtomicReference<BackupLockTestHook> hook = new AtomicReference<>();
 
   public interface BackupLockTestHook {
     /**
      * Test hook called before the wait for backup to complete
      */
-    public void beforeWaitForBackupCompletion();
+    void beforeWaitForBackupCompletion();
   }
 
   public void setBackupLockTestHook(BackupLockTestHook testHook) {
-    hook = testHook;
+    hook.set(testHook);
   }
 
-  public void lockForBackup() {
+  void lockForBackup() {
     super.lock();
     isBackingUp = true;
     super.unlock();
   }
 
-  public void setBackupThread() {
+  void setBackupThread() {
     isBackupThread.set(true);
   }
 
-  public void unlockForBackup() {
+  void unlockForBackup() {
     super.lock();
     isBackingUp = false;
-    isBackupThread.set(false);
+    isBackupThread.remove();
     backupDone.signalAll();
     super.unlock();
   }
 
-  public boolean isCurrentThreadDoingBackup() {
+  boolean isCurrentThreadDoingBackup() {
     Boolean result = isBackupThread.get();
     return (result != null) && result;
   }
 
+  /**
+   * For testing only
+   */
+  boolean isBackingUp() {
+    return isBackingUp;
+  }
+
+  /**
+   * For testing only
+   */
+  boolean hasThreadLocal() {
+    return isBackupThread.get() != null;
+  }
+
   @Override
   public void unlock() {
     // The backup thread does not need to unlock this lock since it never gets the lock. It is the
@@ -80,7 +95,6 @@ public class BackupLock extends ReentrantLock {
 
   /**
    * Acquire this lock, waiting for a backup to finish the first phase.
-   *
    */
   @Override
   public void lock() {
@@ -89,8 +103,9 @@ public class BackupLock extends ReentrantLock {
     if (!isCurrentThreadDoingBackup()) {
       super.lock();
       while (isBackingUp) {
-        if (hook != null) {
-          hook.beforeWaitForBackupCompletion();
+        BackupLockTestHook testHook = hook.get();
+        if (testHook != null) {
+          testHook.beforeWaitForBackupCompletion();
         }
         backupDone.awaitUninterruptibly();
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BackupManager.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BackupManager.java
index 70a4345..a35bb8b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BackupManager.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BackupManager.java
@@ -354,18 +354,16 @@ public class BackupManager implements MembershipListener {
           diskStore.getPersistentOplogSet().forceRoll(null);
 
           if (logger.isDebugEnabled()) {
-            logger.debug("done snaphotting for disk store {}", diskStore.getName());
+            logger.debug("done backing up disk store {}", diskStore.getName());
           }
           break;
         }
       }
       done = true;
     } finally {
-      if (!done) {
-        if (backup != null) {
-          backupByDiskStore.remove(diskStore);
-          backup.cleanup();
-        }
+      if (!done && backup != null) {
+        backupByDiskStore.remove(diskStore);
+        backup.cleanup();
       }
     }
     return backup;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberManager.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberManager.java
index e0f6173..34b1ecb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberManager.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberManager.java
@@ -24,7 +24,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.cache.persistence.RevokedPersistentDataException;
-import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.distributed.internal.DM;
 import org.apache.geode.distributed.internal.MembershipListener;
 import org.apache.geode.distributed.internal.ProfileListener;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
@@ -164,7 +164,7 @@ public class PersistentMemberManager {
    * @return true if this member is not currently running the chosen disk store. false if the revoke
    *         should be aborted because the disk store is already running.
    */
-  public boolean prepareRevoke(PersistentMemberPattern pattern, DistributionManager dm,
+  public boolean prepareRevoke(PersistentMemberPattern pattern, DM dm,
       InternalDistributedMember sender) {
     if (logger.isDebugEnabled()) {
       logger.debug("Preparing revoke if pattern {}", pattern);
@@ -232,10 +232,10 @@ public class PersistentMemberManager {
   public class PendingRevokeListener implements MembershipListener {
     InternalDistributedMember sender;
     private PersistentMemberPattern pattern;
-    private DistributionManager dm;
+    private DM dm;
 
     public PendingRevokeListener(PersistentMemberPattern pattern, InternalDistributedMember sender,
-        DistributionManager dm) {
+        DM dm) {
       this.dm = dm;
       this.pattern = pattern;
       this.sender = sender;
diff --git a/geode-core/src/main/java/org/apache/geode/management/BackupStatus.java b/geode-core/src/main/java/org/apache/geode/management/BackupStatus.java
index 9ac5b50..fb78607 100644
--- a/geode-core/src/main/java/org/apache/geode/management/BackupStatus.java
+++ b/geode-core/src/main/java/org/apache/geode/management/BackupStatus.java
@@ -19,14 +19,11 @@ import java.util.Set;
 
 import org.apache.geode.cache.persistence.PersistentID;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.distributed.internal.DM;
-import org.apache.geode.internal.cache.BackupUtil;
 
 /**
- * The status of a backup operation, returned by
- * {@link BackupUtil#backupAllMembers(DM, java.io.File,java.io.File)}.
+ * The status of a backup operation.
  *
- * @since GemFire 6.5
+ * @since Geode 1.4
  */
 public interface BackupStatus {
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/messages/CompactRequest.java b/geode-core/src/main/java/org/apache/geode/management/internal/messages/CompactRequest.java
index 2b22d27..72cb1d8 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/messages/CompactRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/messages/CompactRequest.java
@@ -95,7 +95,7 @@ public class CompactRequest extends AdminRequest {
   }
 
   @Override
-  protected AdminResponse createResponse(DistributionManager dm) {
+  protected AdminResponse createResponse(DM dm) {
     PersistentID compactedDiskStore = compactDiskStore(this.diskStoreName);
 
     return new CompactResponse(this.getSender(), compactedDiskStore);
@@ -159,14 +159,14 @@ public class CompactRequest extends AdminRequest {
     }
 
     @Override
-    protected void process(DistributionMessage msg, boolean warn) {
-      if (msg instanceof CompactResponse) {
-        final PersistentID persistentId = ((CompactResponse) msg).getPersistentId();
+    protected void process(DistributionMessage message, boolean warn) {
+      if (message instanceof CompactResponse) {
+        final PersistentID persistentId = ((CompactResponse) message).getPersistentId();
         if (persistentId != null) {
-          results.put(msg.getSender(), persistentId);
+          results.put(message.getSender(), persistentId);
         }
       }
-      super.process(msg, warn);
+      super.process(message, warn);
     }
   }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/admin/internal/FinishBackupRequestTest.java b/geode-core/src/test/java/org/apache/geode/admin/internal/FinishBackupRequestTest.java
new file mode 100644
index 0000000..6d7f2f3
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/admin/internal/FinishBackupRequestTest.java
@@ -0,0 +1,212 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.admin.internal;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.mockito.InOrder;
+
+import org.apache.geode.admin.internal.FinishBackupRequest.FinishBackupReplyProcessor;
+import org.apache.geode.cache.CacheClosedException;
+import org.apache.geode.cache.persistence.PersistentID;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.distributed.internal.DM;
+import org.apache.geode.distributed.internal.ReplyException;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.admin.remote.AdminFailureResponse;
+import org.apache.geode.internal.admin.remote.AdminResponse;
+import org.apache.geode.internal.cache.BackupManager;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class FinishBackupRequestTest {
+
+  private FinishBackupRequest finishBackupRequest;
+
+  private FinishBackupReplyProcessor replyProcessor;
+  private DM dm;
+  private InternalCache cache;
+  private BackupManager backupManager;
+  private File targetDir;
+  private File baselineDir;
+
+  private InternalDistributedMember localMember;
+  private InternalDistributedMember member1;
+  private InternalDistributedMember member2;
+
+  private Set<InternalDistributedMember> recipients;
+
+  @Before
+  public void setUp() throws Exception {
+    // mocks here
+    replyProcessor = mock(FinishBackupReplyProcessor.class);
+    dm = mock(DM.class);
+    cache = mock(InternalCache.class);
+    backupManager = mock(BackupManager.class);
+    targetDir = mock(File.class);
+    baselineDir = mock(File.class);
+
+    when(dm.getCache()).thenReturn(cache);
+    when(dm.getDistributionManagerId()).thenReturn(localMember);
+    when(cache.getBackupManager()).thenReturn(backupManager);
+    when(replyProcessor.getResults()).thenReturn(Collections.emptyMap());
+
+    localMember = mock(InternalDistributedMember.class);
+    member1 = mock(InternalDistributedMember.class);
+    member2 = mock(InternalDistributedMember.class);
+
+    recipients = new HashSet<>();
+    recipients.add(member1);
+    recipients.add(member2);
+
+    finishBackupRequest =
+        new FinishBackupRequest(dm, recipients, replyProcessor, targetDir, baselineDir, false);
+  }
+
+  @Test
+  public void getRecipientsReturnsRecipientMembers() throws Exception {
+    assertThat(finishBackupRequest.getRecipients()).hasSize(2).contains(member1, member2);
+  }
+
+  @Test
+  public void getRecipientsDoesNotIncludeNull() throws Exception {
+    InternalDistributedMember nullMember = null;
+
+    assertThat(finishBackupRequest.getRecipients()).doesNotContain(nullMember);
+  }
+
+  @Test
+  public void sendShouldUseDMToSendMessage() throws Exception {
+    finishBackupRequest.send();
+
+    verify(dm, times(1)).putOutgoing(finishBackupRequest);
+  }
+
+  @Test
+  public void sendShouldWaitForRepliesFromRecipients() throws Exception {
+    finishBackupRequest.send();
+
+    verify(replyProcessor, times(1)).waitForReplies();
+  }
+
+  @Test
+  public void sendShouldReturnResultsContainingRecipientsAndLocalMember() throws Exception {
+    Set<PersistentID> localMember_PersistentIdSet = new HashSet<>();
+    localMember_PersistentIdSet.add(mock(PersistentID.class));
+    Set<PersistentID> member1_PersistentIdSet = new HashSet<>();
+    member1_PersistentIdSet.add(mock(PersistentID.class));
+    Set<PersistentID> member2_PersistentIdSet = new HashSet<>();
+    member2_PersistentIdSet.add(mock(PersistentID.class));
+    member2_PersistentIdSet.add(mock(PersistentID.class));
+    Map<DistributedMember, Set<PersistentID>> expectedResults = new HashMap<>();
+    expectedResults.put(localMember, localMember_PersistentIdSet);
+    expectedResults.put(member1, member1_PersistentIdSet);
+    expectedResults.put(member2, member2_PersistentIdSet);
+    when(replyProcessor.getResults()).thenReturn(expectedResults);
+
+    Map<DistributedMember, Set<PersistentID>> results = finishBackupRequest.send();
+
+    assertThat(results).isEqualTo(expectedResults);
+  }
+
+  @Test
+  public void sendShouldInvokeProcessLocally() throws Exception {
+    finishBackupRequest.send();
+
+    verify(replyProcessor, times(1)).process(any(AdminResponse.class));
+  }
+
+  @Test
+  public void sendShouldInvokeDoBackupLocally() throws Exception {
+    finishBackupRequest.send();
+
+    verify(backupManager, times(1)).doBackup(targetDir, baselineDir, false);
+  }
+
+  /**
+   * Confirms fix for GEODE-3940: Backup can hang while trying to get a lock
+   */
+  @Test
+  public void sendShouldDoBackupInLocalMemberBeforeWaitingForReplies() throws Exception {
+    InOrder inOrder = inOrder(backupManager, replyProcessor);
+
+    finishBackupRequest.send();
+
+    // assert that doBackup which releases BackupLock is invoked before invoking waitForReplies
+    inOrder.verify(backupManager, times(1)).doBackup(targetDir, baselineDir, false);
+    inOrder.verify(replyProcessor, times(1)).waitForReplies();
+  }
+
+  @Test
+  public void repliesWithFinishBackupResponse() throws Exception {
+    finishBackupRequest.send();
+
+    verify(replyProcessor, times(1)).process(any(FinishBackupResponse.class));
+  }
+
+  @Test
+  public void repliesWithAdminFailureResponseWhenDoBackupThrowsIOException() throws Exception {
+    when(backupManager.doBackup(targetDir, baselineDir, false)).thenThrow(new IOException());
+
+    finishBackupRequest.send();
+
+    verify(replyProcessor, times(1)).process(any(AdminFailureResponse.class));
+  }
+
+  @Test
+  public void sendShouldCompleteIfWaitForRepliesThrowsReplyExceptionCausedByCacheClosedException()
+      throws Exception {
+    doThrow(new ReplyException(new CacheClosedException())).when(replyProcessor).waitForReplies();
+
+    finishBackupRequest.send();
+  }
+
+  @Test
+  public void sendShouldThrowIfWaitForRepliesThrowsReplyExceptionNotCausedByCacheClosedException()
+      throws Exception {
+    doThrow(new ReplyException(new NullPointerException())).when(replyProcessor).waitForReplies();
+
+    assertThatThrownBy(() -> finishBackupRequest.send()).isInstanceOf(ReplyException.class)
+        .hasCauseInstanceOf(NullPointerException.class);
+  }
+
+  @Test
+  public void sendCompletesWhenWaitForRepliesThrowsInterruptedException() throws Exception {
+    doThrow(new InterruptedException()).when(replyProcessor).waitForReplies();
+
+    finishBackupRequest.send();
+  }
+
+}
diff --git a/geode-core/src/test/java/org/apache/geode/admin/internal/FlushToDiskRequestTest.java b/geode-core/src/test/java/org/apache/geode/admin/internal/FlushToDiskRequestTest.java
new file mode 100644
index 0000000..5b3cba9
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/admin/internal/FlushToDiskRequestTest.java
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.admin.internal;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.mockito.InOrder;
+
+import org.apache.geode.admin.internal.FlushToDiskRequest.FlushToDiskProcessor;
+import org.apache.geode.cache.CacheClosedException;
+import org.apache.geode.cache.DiskStore;
+import org.apache.geode.distributed.internal.DM;
+import org.apache.geode.distributed.internal.ReplyException;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.admin.remote.AdminResponse;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class FlushToDiskRequestTest {
+
+  private FlushToDiskRequest flushToDiskRequest;
+
+  private FlushToDiskProcessor replyProcessor;
+  private DM dm;
+  private InternalCache cache;
+
+  private DiskStore diskStore1;
+  private DiskStore diskStore2;
+  private Collection<DiskStore> diskStoreCollection;
+
+  private InternalDistributedMember localMember;
+  private InternalDistributedMember member1;
+  private InternalDistributedMember member2;
+
+  private Set<InternalDistributedMember> recipients;
+
+  @Before
+  public void setUp() throws Exception {
+    // mocks here
+    replyProcessor = mock(FlushToDiskProcessor.class);
+    dm = mock(DM.class);
+    cache = mock(InternalCache.class);
+    diskStore1 = mock(DiskStore.class);
+    diskStore2 = mock(DiskStore.class);
+
+    diskStoreCollection = new ArrayList<>();
+    diskStoreCollection.add(diskStore1);
+    diskStoreCollection.add(diskStore2);
+
+    when(dm.getCache()).thenReturn(cache);
+    when(dm.getDistributionManagerId()).thenReturn(localMember);
+    when(cache.listDiskStoresIncludingRegionOwned()).thenReturn(diskStoreCollection);
+
+    localMember = mock(InternalDistributedMember.class);
+    member1 = mock(InternalDistributedMember.class);
+    member2 = mock(InternalDistributedMember.class);
+
+    recipients = new HashSet<>();
+    recipients.add(member1);
+    recipients.add(member2);
+
+    flushToDiskRequest = new FlushToDiskRequest(dm, recipients, replyProcessor);
+  }
+
+  @Test
+  public void getRecipientsReturnsRecipientMembers() throws Exception {
+    assertThat(flushToDiskRequest.getRecipients()).hasSize(2).contains(member1, member2);
+  }
+
+  @Test
+  public void getRecipientsDoesNotIncludeNull() throws Exception {
+    InternalDistributedMember nullMember = null;
+
+    assertThat(flushToDiskRequest.getRecipients()).doesNotContain(nullMember);
+  }
+
+  @Test
+  public void sendShouldUseDMToSendMessage() throws Exception {
+    flushToDiskRequest.send();
+
+    verify(dm, times(1)).putOutgoing(flushToDiskRequest);
+  }
+
+  @Test
+  public void sendShouldWaitForRepliesFromRecipients() throws Exception {
+    flushToDiskRequest.send();
+
+    verify(replyProcessor, times(1)).waitForReplies();
+  }
+
+  @Test
+  public void sendShouldInvokeProcessLocally() throws Exception {
+    flushToDiskRequest.send();
+
+    verify(replyProcessor, times(1)).process(any(AdminResponse.class));
+  }
+
+  @Test
+  public void sendShouldFlushDiskStores() throws Exception {
+    flushToDiskRequest.send();
+
+    verify(diskStore1, times(1)).flush();
+    verify(diskStore2, times(1)).flush();
+  }
+
+  @Test
+  public void sendShouldFlushDiskStoresInLocalMemberBeforeWaitingForReplies() throws Exception {
+    InOrder inOrder = inOrder(diskStore1, diskStore2, replyProcessor);
+
+    flushToDiskRequest.send();
+
+    // assert that prepareForBackup is invoked before invoking waitForReplies
+    inOrder.verify(diskStore1, times(1)).flush();
+    inOrder.verify(diskStore2, times(1)).flush();
+    inOrder.verify(replyProcessor, times(1)).waitForReplies();
+  }
+
+  @Test
+  public void repliesWithFinishBackupResponse() throws Exception {
+    flushToDiskRequest.send();
+
+    verify(replyProcessor, times(1)).process(any(FlushToDiskResponse.class));
+  }
+
+  @Test
+  public void sendShouldCompleteIfWaitForRepliesThrowsReplyExceptionCausedByCacheClosedException()
+      throws Exception {
+    doThrow(new ReplyException(new CacheClosedException())).when(replyProcessor).waitForReplies();
+
+    flushToDiskRequest.send();
+  }
+
+  @Test
+  public void sendShouldThrowIfWaitForRepliesThrowsReplyExceptionNotCausedByCancelException()
+      throws Exception {
+    doThrow(new ReplyException(new NullPointerException())).when(replyProcessor).waitForReplies();
+
+    assertThatThrownBy(() -> flushToDiskRequest.send()).isInstanceOf(ReplyException.class)
+        .hasCauseInstanceOf(NullPointerException.class);
+  }
+
+  @Test
+  public void sendCompletesWhenWaitForRepliesThrowsInterruptedException() throws Exception {
+    doThrow(new InterruptedException()).when(replyProcessor).waitForReplies();
+
+    flushToDiskRequest.send();
+  }
+
+}
diff --git a/geode-core/src/test/java/org/apache/geode/admin/internal/PrepareBackupRequestTest.java b/geode-core/src/test/java/org/apache/geode/admin/internal/PrepareBackupRequestTest.java
new file mode 100644
index 0000000..29ecd69
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/admin/internal/PrepareBackupRequestTest.java
@@ -0,0 +1,206 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.admin.internal;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.mockito.InOrder;
+
+import org.apache.geode.admin.internal.PrepareBackupRequest.PrepareBackupReplyProcessor;
+import org.apache.geode.cache.CacheClosedException;
+import org.apache.geode.cache.persistence.PersistentID;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.distributed.internal.DM;
+import org.apache.geode.distributed.internal.ReplyException;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.admin.remote.AdminFailureResponse;
+import org.apache.geode.internal.admin.remote.AdminResponse;
+import org.apache.geode.internal.cache.BackupManager;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class PrepareBackupRequestTest {
+
+  private PrepareBackupRequest prepareBackupRequest;
+
+  private PrepareBackupReplyProcessor replyProcessor;
+  private DM dm;
+  private InternalCache cache;
+  private BackupManager backupManager;
+
+  private InternalDistributedMember localMember;
+  private InternalDistributedMember member1;
+  private InternalDistributedMember member2;
+
+  private Set<InternalDistributedMember> recipients;
+
+  @Before
+  public void setUp() throws Exception {
+    // mocks here
+    replyProcessor = mock(PrepareBackupReplyProcessor.class);
+    dm = mock(DM.class);
+    cache = mock(InternalCache.class);
+    backupManager = mock(BackupManager.class);
+
+    when(dm.getCache()).thenReturn(cache);
+    when(dm.getDistributionManagerId()).thenReturn(localMember);
+    when(cache.startBackup(any())).thenReturn(backupManager);
+    when(replyProcessor.getResults()).thenReturn(Collections.emptyMap());
+
+    localMember = mock(InternalDistributedMember.class);
+    member1 = mock(InternalDistributedMember.class);
+    member2 = mock(InternalDistributedMember.class);
+
+    recipients = new HashSet<>();
+    recipients.add(member1);
+    recipients.add(member2);
+
+    prepareBackupRequest = new PrepareBackupRequest(dm, recipients, replyProcessor);
+  }
+
+  @Test
+  public void getRecipientsReturnsRecipientMembers() throws Exception {
+    assertThat(prepareBackupRequest.getRecipients()).hasSize(2).contains(member1, member2);
+  }
+
+  @Test
+  public void getRecipientsDoesNotIncludeNull() throws Exception {
+    InternalDistributedMember nullMember = null;
+
+    assertThat(prepareBackupRequest.getRecipients()).doesNotContain(nullMember);
+  }
+
+  @Test
+  public void sendShouldUseDMToSendMessage() throws Exception {
+    prepareBackupRequest.send();
+
+    verify(dm, times(1)).putOutgoing(prepareBackupRequest);
+  }
+
+  @Test
+  public void sendShouldWaitForRepliesFromRecipients() throws Exception {
+    prepareBackupRequest.send();
+
+    verify(replyProcessor, times(1)).waitForReplies();
+  }
+
+  @Test
+  public void sendShouldReturnResultsContainingRecipientsAndLocalMember() throws Exception {
+    Set<PersistentID> localMember_PersistentIdSet = new HashSet<>();
+    localMember_PersistentIdSet.add(mock(PersistentID.class));
+    Set<PersistentID> member1_PersistentIdSet = new HashSet<>();
+    member1_PersistentIdSet.add(mock(PersistentID.class));
+    Set<PersistentID> member2_PersistentIdSet = new HashSet<>();
+    member2_PersistentIdSet.add(mock(PersistentID.class));
+    member2_PersistentIdSet.add(mock(PersistentID.class));
+    Map<DistributedMember, Set<PersistentID>> expectedResults = new HashMap<>();
+    expectedResults.put(localMember, localMember_PersistentIdSet);
+    expectedResults.put(member1, member1_PersistentIdSet);
+    expectedResults.put(member2, member2_PersistentIdSet);
+    when(replyProcessor.getResults()).thenReturn(expectedResults);
+
+    Map<DistributedMember, Set<PersistentID>> results = prepareBackupRequest.send();
+
+    assertThat(results).isEqualTo(expectedResults);
+  }
+
+  @Test
+  public void sendShouldInvokeProcessLocally() throws Exception {
+    prepareBackupRequest.send();
+
+    verify(replyProcessor, times(1)).process(any(AdminResponse.class));
+  }
+
+  @Test
+  public void sendShouldInvokePrepareForBackup() throws Exception {
+    prepareBackupRequest.send();
+
+    verify(backupManager, times(1)).prepareForBackup();
+  }
+
+  @Test
+  public void sendShouldPrepareForBackupInLocalMemberBeforeWaitingForReplies() throws Exception {
+    InOrder inOrder = inOrder(backupManager, replyProcessor);
+
+    prepareBackupRequest.send();
+
+    // assert that prepareForBackup is invoked before invoking waitForReplies
+    inOrder.verify(backupManager, times(1)).prepareForBackup();
+    inOrder.verify(replyProcessor, times(1)).waitForReplies();
+  }
+
+  @Test
+  public void repliesWithFinishBackupResponse() throws Exception {
+    prepareBackupRequest.send();
+
+    verify(replyProcessor, times(1)).process(any(PrepareBackupResponse.class));
+  }
+
+  @Test
+  public void repliesWithAdminFailureResponseWhenPrepareForBackupThrowsIOException()
+      throws Exception {
+    prepareBackupRequest = spy(prepareBackupRequest);
+    doThrow(new IOException()).when(prepareBackupRequest).prepareForBackup(dm);
+
+    prepareBackupRequest.send();
+
+    verify(replyProcessor, times(1)).process(any(AdminFailureResponse.class));
+  }
+
+  @Test
+  public void sendShouldCompleteIfWaitForRepliesThrowsReplyExceptionCausedByCacheClosedException()
+      throws Exception {
+    doThrow(new ReplyException(new CacheClosedException())).when(replyProcessor).waitForReplies();
+
+    prepareBackupRequest.send();
+  }
+
+  @Test
+  public void sendShouldThrowIfWaitForRepliesThrowsReplyExceptionNotCausedByCacheClosedException()
+      throws Exception {
+    doThrow(new ReplyException(new NullPointerException())).when(replyProcessor).waitForReplies();
+
+    assertThatThrownBy(() -> prepareBackupRequest.send()).isInstanceOf(ReplyException.class)
+        .hasCauseInstanceOf(NullPointerException.class);
+  }
+
+  @Test
+  public void sendCompletesWhenWaitForRepliesThrowsInterruptedException() throws Exception {
+    doThrow(new InterruptedException()).when(replyProcessor).waitForReplies();
+
+    prepareBackupRequest.send();
+  }
+
+}
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/BackupDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/BackupDUnitTest.java
index 9c45e2d..5d0cce9 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/BackupDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/BackupDUnitTest.java
@@ -341,7 +341,7 @@ public class BackupDUnitTest extends PersistentPartitionedRegionTestBase {
           DistributionMessageObserver.setInstance(null);
           IOException exception = new IOException("Backup in progess");
           AdminFailureResponse response =
-              AdminFailureResponse.create(dm, message.getSender(), exception);
+              AdminFailureResponse.create(message.getSender(), exception);
           response.setMsgId(((PrepareBackupRequest) message).getMsgId());
           dm.putOutgoing(response);
           throw new RuntimeException("Stop processing");
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/BackupLockTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/BackupLockTest.java
new file mode 100644
index 0000000..a2939eb
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/BackupLockTest.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.internal.cache;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.awaitility.Awaitility.await;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import org.apache.geode.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class BackupLockTest {
+
+  private BackupLock backupLock;
+  private ExecutorService executor;
+
+  @Before
+  public void setUp() throws Exception {
+    backupLock = new BackupLock();
+    executor = Executors.newSingleThreadExecutor();
+  }
+
+  @Test
+  public void lockShouldBlockUntilLockForBackup() throws Exception {
+    backupLock.lockForBackup();
+    backupLock.setBackupThread();
+
+    AtomicBoolean beforeLock = new AtomicBoolean();
+    AtomicBoolean afterLock = new AtomicBoolean();
+
+    backupLock.setBackupLockTestHook(() -> beforeLock.set(true));
+
+    executor.submit(() -> {
+      backupLock.lock(); // beforeLock is set inside lock() method
+      afterLock.set(true);
+    });
+
+    await().atMost(10, SECONDS).until(() -> assertThat(beforeLock).isTrue());
+    assertThat(afterLock).isFalse();
+
+    backupLock.unlockForBackup();
+    await().atMost(10, SECONDS).until(() -> assertThat(afterLock).isTrue());
+  }
+
+  @Test
+  public void otherThreadShouldBeAbleToUnlockForBackup() throws Exception {
+    backupLock.lockForBackup();
+    backupLock.setBackupThread();
+
+    await().atMost(10, SECONDS).until(() -> assertThat(backupLock.isBackingUp()).isTrue());
+    assertThat(backupLock.isCurrentThreadDoingBackup()).isTrue();
+
+    executor.submit(() -> {
+      assertThat(backupLock.isCurrentThreadDoingBackup()).isFalse();
+      backupLock.unlockForBackup();
+    });
+
+    await().atMost(10, SECONDS).until(() -> assertThat(backupLock.isBackingUp()).isFalse());
+  }
+
+  @Test
+  public void isCurrentThreadDoingBackupShouldBeSetAndUnset() throws Exception {
+    backupLock.lockForBackup();
+    backupLock.setBackupThread();
+
+    assertThat(backupLock.isCurrentThreadDoingBackup()).isTrue();
+
+    backupLock.unlockForBackup();
+
+    assertThat(backupLock.isCurrentThreadDoingBackup()).isFalse();
+  }
+
+  @Test
+  public void threadLocalShouldNotLeak() throws Exception {
+    backupLock.lockForBackup();
+    backupLock.setBackupThread();
+
+    assertThat(backupLock.hasThreadLocal()).isTrue();
+
+    backupLock.unlockForBackup();
+
+    assertThat(backupLock.hasThreadLocal()).isFalse();
+  }
+
+}

-- 
To stop receiving notification emails like this one, please contact
"commits@geode.apache.org" <co...@geode.apache.org>.