You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Ashu Pachauri (JIRA)" <ji...@apache.org> on 2017/06/27 23:11:00 UTC

[jira] [Created] (HBASE-18282) ReplicationLogCleaner can delete WALs not yet replicated in case of a KeeperException

Ashu Pachauri created HBASE-18282:
-------------------------------------

             Summary: ReplicationLogCleaner can delete WALs not yet replicated in case of a KeeperException
                 Key: HBASE-18282
                 URL: https://issues.apache.org/jira/browse/HBASE-18282
             Project: HBase
          Issue Type: Bug
          Components: Replication
    Affects Versions: 2.0.0-alpha-1, 1.1.11, 1.2.6, 1.3.1
            Reporter: Ashu Pachauri
            Assignee: Ashu Pachauri
            Priority: Critical


ReplicationStateZKBase#getListOfReplicators does not rethrow a KeeperException and returns null in such a case. ReplicationLogCleaner just assumes that there are no replicators and deletes everything.

ReplicationStateZKBase:
{code:java}
public List<String> getListOfReplicators() {
    List<String> result = null;
    try {
      result = ZKUtil.listChildrenNoWatch(this.zookeeper, this.queuesZNode);
    } catch (KeeperException e) {
      this.abortable.abort("Failed to get list of replicators", e);
    }
    return result;
  }
{code}

ReplicationLogCleaner:
{code:java}
private Set<String> loadWALsFromQueues() throws KeeperException {
    for (int retry = 0; ; retry++) {
      int v0 = replicationQueues.getQueuesZNodeCversion();
      List<String> rss = replicationQueues.getListOfReplicators();
      if (rss == null) {
        LOG.debug("Didn't find any region server that replicates, won't prevent any deletions.");
        return ImmutableSet.of();
      }
      ...
{code}





--
This message was sent by Atlassian JIRA
(v6.4.14#64029)