Search in sources :

Example 1 with ChainWALEntryFilter

use of org.apache.hadoop.hbase.replication.ChainWALEntryFilter in project hbase by apache.

the class ReplicationSource method run.

@Override
public void run() {
    // mark we are running now
    this.sourceRunning = true;
    try {
        // start the endpoint, connect to the cluster
        Service.State state = replicationEndpoint.start().get();
        if (state != Service.State.RUNNING) {
            LOG.warn("ReplicationEndpoint was not started. Exiting");
            uninitialize();
            return;
        }
    } catch (Exception ex) {
        LOG.warn("Error starting ReplicationEndpoint, exiting", ex);
        throw new RuntimeException(ex);
    }
    // get the WALEntryFilter from ReplicationEndpoint and add it to default filters
    ArrayList<WALEntryFilter> filters = Lists.newArrayList((WALEntryFilter) new SystemTableWALEntryFilter());
    WALEntryFilter filterFromEndpoint = this.replicationEndpoint.getWALEntryfilter();
    if (filterFromEndpoint != null) {
        filters.add(filterFromEndpoint);
    }
    this.walEntryFilter = new ChainWALEntryFilter(filters);
    int sleepMultiplier = 1;
    // delay this until we are in an asynchronous thread
    while (this.isSourceActive() && this.peerClusterId == null) {
        this.peerClusterId = replicationEndpoint.getPeerUUID();
        if (this.isSourceActive() && this.peerClusterId == null) {
            if (sleepForRetries("Cannot contact the peer's zk ensemble", sleepMultiplier)) {
                sleepMultiplier++;
            }
        }
    }
    // peerClusterId value, which is the same as the source clusterId
    if (clusterId.equals(peerClusterId) && !replicationEndpoint.canReplicateToSameCluster()) {
        this.terminate("ClusterId " + clusterId + " is replicating to itself: peerClusterId " + peerClusterId + " which is not allowed by ReplicationEndpoint:" + replicationEndpoint.getClass().getName(), null, false);
        this.manager.closeQueue(this);
        return;
    }
    LOG.info("Replicating " + clusterId + " -> " + peerClusterId);
    // start workers
    for (Map.Entry<String, PriorityBlockingQueue<Path>> entry : queues.entrySet()) {
        String walGroupId = entry.getKey();
        PriorityBlockingQueue<Path> queue = entry.getValue();
        final ReplicationSourceShipperThread worker = new ReplicationSourceShipperThread(walGroupId, queue, replicationQueueInfo, this);
        ReplicationSourceShipperThread extant = workerThreads.putIfAbsent(walGroupId, worker);
        if (extant != null) {
            LOG.debug("Someone has beat us to start a worker thread for wal group " + walGroupId);
        } else {
            LOG.debug("Starting up worker for wal group " + walGroupId);
            worker.startup();
        }
    }
}
Also used : Path(org.apache.hadoop.fs.Path) Service(com.google.common.util.concurrent.Service) ReplicationException(org.apache.hadoop.hbase.replication.ReplicationException) IOException(java.io.IOException) ReplicationEndpoint(org.apache.hadoop.hbase.replication.ReplicationEndpoint) PriorityBlockingQueue(java.util.concurrent.PriorityBlockingQueue) SystemTableWALEntryFilter(org.apache.hadoop.hbase.replication.SystemTableWALEntryFilter) ChainWALEntryFilter(org.apache.hadoop.hbase.replication.ChainWALEntryFilter) SystemTableWALEntryFilter(org.apache.hadoop.hbase.replication.SystemTableWALEntryFilter) WALEntryFilter(org.apache.hadoop.hbase.replication.WALEntryFilter) ChainWALEntryFilter(org.apache.hadoop.hbase.replication.ChainWALEntryFilter) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap)

Example 2 with ChainWALEntryFilter

use of org.apache.hadoop.hbase.replication.ChainWALEntryFilter in project hbase by apache.

the class RegionReplicaReplicationEndpoint method getWALEntryfilter.

@Override
public WALEntryFilter getWALEntryfilter() {
    WALEntryFilter superFilter = super.getWALEntryfilter();
    WALEntryFilter skipReplayedEditsFilter = getSkipReplayedEditsFilter();
    if (superFilter == null) {
        return skipReplayedEditsFilter;
    }
    if (skipReplayedEditsFilter == null) {
        return superFilter;
    }
    ArrayList<WALEntryFilter> filters = Lists.newArrayList();
    filters.add(superFilter);
    filters.add(skipReplayedEditsFilter);
    return new ChainWALEntryFilter(filters);
}
Also used : ChainWALEntryFilter(org.apache.hadoop.hbase.replication.ChainWALEntryFilter) BaseWALEntryFilter(org.apache.hadoop.hbase.replication.BaseWALEntryFilter) WALEntryFilter(org.apache.hadoop.hbase.replication.WALEntryFilter) ChainWALEntryFilter(org.apache.hadoop.hbase.replication.ChainWALEntryFilter)

Aggregations

ChainWALEntryFilter (org.apache.hadoop.hbase.replication.ChainWALEntryFilter)2 WALEntryFilter (org.apache.hadoop.hbase.replication.WALEntryFilter)2 Service (com.google.common.util.concurrent.Service)1 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 PriorityBlockingQueue (java.util.concurrent.PriorityBlockingQueue)1 Path (org.apache.hadoop.fs.Path)1 BaseWALEntryFilter (org.apache.hadoop.hbase.replication.BaseWALEntryFilter)1 ReplicationEndpoint (org.apache.hadoop.hbase.replication.ReplicationEndpoint)1 ReplicationException (org.apache.hadoop.hbase.replication.ReplicationException)1 SystemTableWALEntryFilter (org.apache.hadoop.hbase.replication.SystemTableWALEntryFilter)1