docs: protected void gossipKey(Node node, String key) {
          if(logger.isDebugEnabled()) {
              logger.debug("Gossiping key " + key);
          }
  
          /*
           * Retrieve local and remote versions of the key. Uses AdminClient for
           * remote as well as local operations (rather than going directly to
           * MetadataStore for local operations), to avoid having to convert back
           * and forth between byte[] and String.
           */
          Versioned<String> remoteVersioned = adminClient.metadataMgmtOps.getRemoteMetadata(node.getId(),
                                                                                     key);
          Versioned<String> localVersioned = adminClient.metadataMgmtOps.getRemoteMetadata(metadataStore.getNodeId(),
                                                                                    key);
          switch(remoteVersioned.getVersion().compare(localVersioned.getVersion())) {
  
          // If remote version came after local version, update with remote
          // version
              case AFTER: {
                  logger.info("Updating key " + key + " from " + node);
                  adminClient.metadataMgmtOps.updateRemoteMetadata(metadataStore.getNodeId(),
                                                            key,
                                                            remoteVersioned);
                  if(logger.isDebugEnabled()) {
                      logger.debug("Updated key " + key + ": " + remoteVersioned);
                  }
  
                  break;
              }
  
              // If remote version came before the local version, do nothing and
              // wait for the other
              // node to gossip with us.
              case BEFORE: {
                  if(logger.isDebugEnabled()) {
                      logger.debug("Remote(" + remoteVersioned
                                   + ") came before, allowing them to initiate Gossip");
                  }
  
                  break;
              }
  
              /*
               * If we can't establish a causal relationship between two versions,
               * there's a conflict. Ideally we should perform sensible
               * reconciliation, but for simplicity's sake we will just log an
               * error.
               */
              case CONCURRENTLY: {
                  logger.error(key + " is concurrent between local node(" + localVersioned
                               + ") and remote at " + node + "(" + remoteVersioned + ")");
  
                  break;
              }
          }
      }