Package kr.co.vcnc.haeinsa.thrift

Source Code of kr.co.vcnc.haeinsa.thrift.TRowLocks

/**
* Copyright (C) 2013-2014 VCNC Inc.
*
* Licensed 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 kr.co.vcnc.haeinsa.thrift;

import static kr.co.vcnc.haeinsa.HaeinsaConstants.ROW_LOCK_VERSION;

import java.io.IOException;
import java.util.Arrays;

import kr.co.vcnc.haeinsa.thrift.generated.TRowKey;
import kr.co.vcnc.haeinsa.thrift.generated.TRowLock;
import kr.co.vcnc.haeinsa.thrift.generated.TRowLockState;

import org.apache.thrift.TDeserializer;
import org.apache.thrift.TException;
import org.apache.thrift.TSerializer;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocolFactory;

/**
* Static class for TRowLock (Thrift class) Provide static method to
* serialize/deserialize with TCompactProtocol of Thrift
* <p>
* TRowLock(commitTimestamp = Long.MIN_VALUE) <=> byte[] null
*/
public final class TRowLocks {
    private static final TProtocolFactory PROTOCOL_FACTORY = new TCompactProtocol.Factory();

    private static TSerializer createSerializer() {
        return new TSerializer(PROTOCOL_FACTORY);
    }

    private static TDeserializer createDeserializer() {
        return new TDeserializer(PROTOCOL_FACTORY);
    }

    private TRowLocks() {
    }

    public static TRowLock deserialize(byte[] rowLockBytes) throws IOException {
        if (rowLockBytes == null) {
            return new TRowLock(ROW_LOCK_VERSION, TRowLockState.STABLE, Long.MIN_VALUE);
        }
        TRowLock rowLock = new TRowLock();
        TDeserializer deserializer = createDeserializer();
        try {
            deserializer.deserialize(rowLock, rowLockBytes);
            return rowLock;
        } catch (TException e) {
            throw new IOException(e.getMessage(), e);
        }
    }

    public static byte[] serialize(TRowLock rowLock) throws IOException {
        if (rowLock.getCommitTimestamp() == Long.MIN_VALUE) {
            return null;
        }
        TSerializer serializer = createSerializer();
        try {
            return serializer.serialize(rowLock);
        } catch (TException e) {
            throw new IOException(e.getMessage(), e);
        }
    }

    public static boolean isPrimary(TRowLock rowLock) {
        return !rowLock.isSetPrimary();
    }

    public static boolean isSecondaryOf(TRowLock primaryRowLock, TRowKey secondaryRowKey, TRowLock secondaryRowLock) {
        return primaryRowLock.getCommitTimestamp() == secondaryRowLock.getCommitTimestamp()
                && containRowKeyAsSecondary(primaryRowLock, secondaryRowKey);
    }

    /**
     * Check if given rowLock has secondaryRowKey in secondaries.
     *
     * @param primaryRowLock given RowLock
     * @param secondaryRowKey secondaryRowKey to check if given RowLock contains as secondary.
     * @return true if given rowLock contains given secondaryRowKey as secondary.
     */
    public static boolean containRowKeyAsSecondary(TRowLock primaryRowLock, TRowKey secondaryRowKey) {
        // Check if secondaries of rowLock contains secondaryRowKey as element.
        if (primaryRowLock.isSetSecondaries()) {
            for (TRowKey rowKey : primaryRowLock.getSecondaries()) {
                boolean match = rowKey != null
                        && rowKey.isSetTableName()
                        && secondaryRowKey.isSetTableName()
                        && Arrays.equals(rowKey.getTableName(), secondaryRowKey.getTableName())
                        && rowKey.isSetRow()
                        && secondaryRowKey.isSetRow()
                        && Arrays.equals(rowKey.getRow(), secondaryRowKey.getRow());
                if (match) {
                    return true;
                }
            }
        }
        return false;
    }
}
TOP

Related Classes of kr.co.vcnc.haeinsa.thrift.TRowLocks

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.