org.apache.hadoop.hbase.KeyValueTestUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.hadoop.hbase.KeyValueTestUtil.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.hadoop.hbase;

import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Strings;
import org.apache.yetus.audience.InterfaceAudience;
import org.apache.hbase.thirdparty.com.google.common.collect.Lists;
import org.apache.hbase.thirdparty.org.apache.commons.collections4.IterableUtils;

@InterfaceAudience.Private
public class KeyValueTestUtil {

    public static KeyValue create(String row, String family, String qualifier, long timestamp, String value) {
        return create(row, family, qualifier, timestamp, KeyValue.Type.Put, value);
    }

    public static KeyValue create(String row, String family, String qualifier, long timestamp, KeyValue.Type type,
            String value) {
        return new KeyValue(Bytes.toBytes(row), Bytes.toBytes(family), Bytes.toBytes(qualifier), timestamp, type,
                Bytes.toBytes(value));
    }

    public static ByteBuffer toByteBufferAndRewind(final Iterable<? extends KeyValue> kvs,
            boolean includeMemstoreTS) {
        int totalBytes = KeyValueUtil.totalLengthWithMvccVersion(kvs, includeMemstoreTS);
        ByteBuffer bb = ByteBuffer.allocate(totalBytes);
        for (KeyValue kv : IterableUtils.emptyIfNull(kvs)) {
            KeyValueUtil.appendToByteBuffer(bb, kv, includeMemstoreTS);
        }
        bb.rewind();
        return bb;
    }

    /**
     * Checks whether KeyValues from kvCollection2 are contained in kvCollection1.
     *
     * The comparison is made without distinguishing MVCC version of the KeyValues
     *
     * @param kvCollection1
     * @param kvCollection2
     * @return true if KeyValues from kvCollection2 are contained in kvCollection1
     */
    public static boolean containsIgnoreMvccVersion(Collection<? extends Cell> kvCollection1,
            Collection<? extends Cell> kvCollection2) {
        for (Cell kv1 : kvCollection1) {
            boolean found = false;
            for (Cell kv2 : kvCollection2) {
                if (PrivateCellUtil.equalsIgnoreMvccVersion(kv1, kv2))
                    found = true;
            }
            if (!found)
                return false;
        }
        return true;
    }

    public static List<KeyValue> rewindThenToList(final ByteBuffer bb, final boolean includesMemstoreTS,
            final boolean useTags) {
        bb.rewind();
        List<KeyValue> kvs = Lists.newArrayList();
        KeyValue kv = null;
        while (true) {
            kv = KeyValueUtil.nextShallowCopy(bb, includesMemstoreTS, useTags);
            if (kv == null) {
                break;
            }
            kvs.add(kv);
        }
        return kvs;
    }

    /********************* toString ************************************/

    public static String toStringWithPadding(final Collection<? extends KeyValue> kvs, final boolean includeMeta) {
        int maxRowStringLength = 0;
        int maxFamilyStringLength = 0;
        int maxQualifierStringLength = 0;
        int maxTimestampLength = 0;
        for (KeyValue kv : kvs) {
            maxRowStringLength = Math.max(maxRowStringLength, getRowString(kv).length());
            maxFamilyStringLength = Math.max(maxFamilyStringLength, getFamilyString(kv).length());
            maxQualifierStringLength = Math.max(maxQualifierStringLength, getQualifierString(kv).length());
            maxTimestampLength = Math.max(maxTimestampLength, Long.valueOf(kv.getTimestamp()).toString().length());
        }
        StringBuilder sb = new StringBuilder();
        for (KeyValue kv : kvs) {
            if (sb.length() > 0) {
                sb.append("\n");
            }
            String row = toStringWithPadding(kv, maxRowStringLength, maxFamilyStringLength,
                    maxQualifierStringLength, maxTimestampLength, includeMeta);
            sb.append(row);
        }
        return sb.toString();
    }

    protected static String toStringWithPadding(final KeyValue kv, final int maxRowLength, int maxFamilyLength,
            int maxQualifierLength, int maxTimestampLength, boolean includeMeta) {
        String leadingLengths = "";
        String familyLength = kv.getFamilyLength() + " ";
        if (includeMeta) {
            leadingLengths += Strings.padFront(kv.getKeyLength() + "", '0', 4);
            leadingLengths += " ";
            leadingLengths += Strings.padFront(kv.getValueLength() + "", '0', 4);
            leadingLengths += " ";
            leadingLengths += Strings.padFront(kv.getRowLength() + "", '0', 2);
            leadingLengths += " ";
        }
        int spacesAfterRow = maxRowLength - getRowString(kv).length() + 2;
        int spacesAfterFamily = maxFamilyLength - getFamilyString(kv).length() + 2;
        int spacesAfterQualifier = maxQualifierLength - getQualifierString(kv).length() + 1;
        int spacesAfterTimestamp = maxTimestampLength - Long.valueOf(kv.getTimestamp()).toString().length() + 1;
        return leadingLengths + getRowString(kv) + StringUtils.repeat(' ', spacesAfterRow) + familyLength
                + getFamilyString(kv) + StringUtils.repeat(' ', spacesAfterFamily) + getQualifierString(kv)
                + StringUtils.repeat(' ', spacesAfterQualifier) + getTimestampString(kv)
                + StringUtils.repeat(' ', spacesAfterTimestamp) + getTypeString(kv) + " " + getValueString(kv);
    }

    protected static String getRowString(final KeyValue kv) {
        return Bytes.toStringBinary(kv.getRowArray(), kv.getRowOffset(), kv.getRowLength());
    }

    protected static String getFamilyString(final KeyValue kv) {
        return Bytes.toStringBinary(kv.getFamilyArray(), kv.getFamilyOffset(), kv.getFamilyLength());
    }

    protected static String getQualifierString(final KeyValue kv) {
        return Bytes.toStringBinary(kv.getQualifierArray(), kv.getQualifierOffset(), kv.getQualifierLength());
    }

    protected static String getTimestampString(final KeyValue kv) {
        return kv.getTimestamp() + "";
    }

    protected static String getTypeString(final KeyValue kv) {
        return KeyValue.Type.codeToType(kv.getTypeByte()).toString();
    }

    protected static String getValueString(final KeyValue kv) {
        return Bytes.toStringBinary(kv.getValueArray(), kv.getValueOffset(), kv.getValueLength());
    }

}