org.apache.accumulo.server.replication.DistributedWorkQueueWorkAssignerHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.accumulo.server.replication.DistributedWorkQueueWorkAssignerHelper.java

Source

/*
 * 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.accumulo.server.replication;

import static java.util.Objects.requireNonNull;

import java.util.Map.Entry;

import org.apache.accumulo.core.replication.ReplicationTarget;
import org.apache.accumulo.server.zookeeper.DistributedWorkQueue;

import com.google.common.collect.Maps;

/**
 *
 */
public class DistributedWorkQueueWorkAssignerHelper {

    public static final String KEY_SEPARATOR = "|";

    /**
     * Serialize a filename and a {@link ReplicationTarget} into the expected key format for use with the {@link DistributedWorkQueue}
     *
     * @param filename
     *          Filename for data to be replicated
     * @param replTarget
     *          Information about replication peer
     * @return Key for identifying work in queue
     */
    public static String getQueueKey(String filename, ReplicationTarget replTarget) {
        return filename + KEY_SEPARATOR + replTarget.getPeerName() + KEY_SEPARATOR
                + replTarget.getRemoteIdentifier() + KEY_SEPARATOR + replTarget.getSourceTableId();
    }

    /**
     * @param queueKey
     *          Key from the work queue
     * @return Components which created the queue key
     */
    public static Entry<String, ReplicationTarget> fromQueueKey(String queueKey) {
        requireNonNull(queueKey);

        int index = queueKey.indexOf(KEY_SEPARATOR);
        if (-1 == index) {
            throw new IllegalArgumentException("Could not find expected separator in queue key '" + queueKey + "'");
        }

        String filename = queueKey.substring(0, index);

        int secondIndex = queueKey.indexOf(KEY_SEPARATOR, index + 1);
        if (-1 == secondIndex) {
            throw new IllegalArgumentException("Could not find expected separator in queue key '" + queueKey + "'");
        }

        int thirdIndex = queueKey.indexOf(KEY_SEPARATOR, secondIndex + 1);
        if (-1 == thirdIndex) {
            throw new IllegalArgumentException("Could not find expected seperator in queue key '" + queueKey + "'");
        }

        return Maps.immutableEntry(filename, new ReplicationTarget(queueKey.substring(index + 1, secondIndex),
                queueKey.substring(secondIndex + 1, thirdIndex), queueKey.substring(thirdIndex + 1)));
    }
}