Package kr.co.vcnc.haeinsa.thrift.generated

Examples of kr.co.vcnc.haeinsa.thrift.generated.TRowLock


        int recoverCount = 0;
        while (true) {
            if (recoverCount > RECOVER_MAX_RETRY_COUNT) {
                throw new ConflictException("recover retry count is exceeded.");
            }
            TRowLock currentRowLock = getRowLock(row);
            try {
                if (checkAndIsShouldRecover(currentRowLock)) {
                    recover(tx, row);
                    recoverCount++;
                } else {
View Full Code Here


        Put put = new Put(row);
        HaeinsaPut haeinsaPut = (HaeinsaPut) rowState.getMutations().remove(0);
        for (HaeinsaKeyValue kv : Iterables.concat(haeinsaPut.getFamilyMap().values())) {
            put.add(kv.getFamily(), kv.getQualifier(), tx.getCommitTimestamp(), kv.getValue());
        }
        TRowLock newRowLock = new TRowLock(ROW_LOCK_VERSION, TRowLockState.STABLE, tx.getCommitTimestamp());
        put.add(LOCK_FAMILY, LOCK_QUALIFIER, tx.getCommitTimestamp(), TRowLocks.serialize(newRowLock));

        byte[] currentRowLockBytes = TRowLocks.serialize(rowState.getCurrent());
        if (!table.checkAndPut(row, LOCK_FAMILY, LOCK_QUALIFIER, currentRowLockBytes, put)) {
            throw new ConflictException("can't acquire row's lock, commitSingleRowPutOnly failed");
View Full Code Here

     * @throws NullPointException if oldLock is null (haven't read lock from
     *         HBase)
     */
    @Override
    public void checkSingleRowLock(HaeinsaRowTransaction rowState, byte[] row) throws IOException {
        TRowLock currentRowLock = getRowLock(row);
        if (!rowState.getCurrent().equals(currentRowLock)) {
            HaeinsaTransaction tx = rowState.getTableTransaction().getTransaction();
            HaeinsaTransaction currentTx = tx.getManager().getTransaction(tx.getPrimary().getTableName(), tx.getPrimary().getRow());
            if (currentTx != null) {
                currentTx.recover(true);
View Full Code Here

            for (HaeinsaMutation mutation : rowState.getMutations()) {
                remaining.add(mutation.toTMutation());
            }
        }

        TRowLock newRowLock = new TRowLock(ROW_LOCK_VERSION, TRowLockState.PREWRITTEN,
                tx.getCommitTimestamp()).setCurrentTimestamp(tx.getPrewriteTimestamp());
        if (isPrimary) {
            // for primary row
            for (Entry<TRowKey, HaeinsaRowTransaction> rowStateEntry : tx.getMutationRowStates().entrySet()) {
                TRowKey rowKey = rowStateEntry.getKey();
                if (Bytes.equals(rowKey.getTableName(), getTableName()) && Bytes.equals(rowKey.getRow(), row)) {
                    // if this is primaryRow
                    continue;
                }
                newRowLock.addToSecondaries(new TRowKey().setTableName(rowKey.getTableName()).setRow(rowKey.getRow()));
            }
        } else {
            // for secondary rows
            newRowLock.setPrimary(tx.getPrimary());
        }

        newRowLock.setPrewriteTimestamp(tx.getPrewriteTimestamp());
        newRowLock.setPrewritten(Lists.newArrayList(prewritten));
        newRowLock.setMutations(remaining);
        newRowLock.setExpiry(tx.getExpiry());
        put.add(LOCK_FAMILY, LOCK_QUALIFIER, tx.getPrewriteTimestamp(), TRowLocks.serialize(newRowLock));

        byte[] currentRowLockBytes = TRowLocks.serialize(rowState.getCurrent());

        if (!table.checkAndPut(row, LOCK_FAMILY, LOCK_QUALIFIER, currentRowLockBytes, put)) {
View Full Code Here

            long mutationTimestamp = currentTimestamp + mutationOffset;

            TMutation mutation = remaining.get(i);
            switch (mutation.getType()) {
            case PUT: {
                TRowLock newRowLock = rowTxState.getCurrent().deepCopy();
                newRowLock.setCurrentTimestamp(mutationTimestamp);
                newRowLock.setMutations(remaining.subList(mutationOffset, remaining.size()));
                // Maintain prewritten state and extend lock by ROW_LOCK_TIMEOUT
                newRowLock.setExpiry(tx.getExpiry());
                Put put = new Put(row);
                put.add(LOCK_FAMILY, LOCK_QUALIFIER, newRowLock.getCurrentTimestamp(), TRowLocks.serialize(newRowLock));
                for (TKeyValue kv : mutation.getPut().getValues()) {
                    put.add(kv.getKey().getFamily(), kv.getKey().getQualifier(), newRowLock.getCurrentTimestamp(), kv.getValue());
                }
                if (!table.checkAndPut(row, LOCK_FAMILY, LOCK_QUALIFIER, currentRowLockBytes, put)) {
                    // Consider as conflict because another transaction might acquire lock of this row.
                    throw new ConflictException("can't acquire row's lock");
                } else {
View Full Code Here

    @Override
    public void makeStable(HaeinsaRowTransaction rowTxState, byte[] row) throws IOException {
        byte[] currentRowLockBytes = TRowLocks.serialize(rowTxState.getCurrent());
        HaeinsaTransaction transaction = rowTxState.getTableTransaction().getTransaction();
        long commitTimestamp = transaction.getCommitTimestamp();
        TRowLock newRowLock = new TRowLock(ROW_LOCK_VERSION, TRowLockState.STABLE, commitTimestamp);
        byte[] newRowLockBytes = TRowLocks.serialize(newRowLock);
        Put put = new Put(row);
        put.add(LOCK_FAMILY, LOCK_QUALIFIER, commitTimestamp, newRowLockBytes);

        if (!table.checkAndPut(row, LOCK_FAMILY, LOCK_QUALIFIER, currentRowLockBytes, put)) {
View Full Code Here

    @Override
    public void commitPrimary(HaeinsaRowTransaction rowTxState, byte[] row) throws IOException {
        byte[] currentRowLockBytes = TRowLocks.serialize(rowTxState.getCurrent());
        HaeinsaTransaction transaction = rowTxState.getTableTransaction().getTransaction();
        long commitTimestamp = transaction.getCommitTimestamp();
        TRowLock newRowLock = rowTxState.getCurrent().deepCopy();
        newRowLock.setCommitTimestamp(commitTimestamp);
        newRowLock.setState(TRowLockState.COMMITTED);
        // if tx is already committed, we can't change current timestamp.
        if (rowTxState.getCurrent().getState() != TRowLockState.COMMITTED) {
            newRowLock.setCurrentTimestamp(newRowLock.getCurrentTimestamp() + 1);
        }
        // make prewritten to null
        newRowLock.setPrewrittenIsSet(false);
        // extend expiry by ROW_LOCK_TIMEOUT
        newRowLock.setExpiry(transaction.getExpiry());

        byte[] newRowLockBytes = TRowLocks.serialize(newRowLock);
        Put put = new Put(row);
        put.add(LOCK_FAMILY, LOCK_QUALIFIER, newRowLock.getCurrentTimestamp(), newRowLockBytes);

        if (!table.checkAndPut(row, LOCK_FAMILY, LOCK_QUALIFIER, currentRowLockBytes, put)) {
            // We don't need abort current transaction. Because the transaction is already aborted.
            // Consider as conflict because another transaction might acquire lock of primary row.
            throw new ConflictException("can't acquire primary row's lock");
View Full Code Here

    @Override
    public void abortPrimary(HaeinsaRowTransaction rowTxState, byte[] row) throws IOException {
        byte[] currentRowLockBytes = TRowLocks.serialize(rowTxState.getCurrent());
        HaeinsaTransaction transaction = rowTxState.getTableTransaction().getTransaction();
        long commitTimestamp = transaction.getCommitTimestamp();
        TRowLock newRowLock = rowTxState.getCurrent().deepCopy();
        newRowLock.setCommitTimestamp(commitTimestamp);
        // if tx is already aborted, we can't change current timestamp.
        if (rowTxState.getCurrent().getState() != TRowLockState.ABORTED) {
            newRowLock.setCurrentTimestamp(newRowLock.getCurrentTimestamp() + 1);
        }
        newRowLock.setState(TRowLockState.ABORTED);
        newRowLock.setMutationsIsSet(false);
        newRowLock.setExpiry(transaction.getExpiry());

        byte[] newRowLockBytes = TRowLocks.serialize(newRowLock);
        Put put = new Put(row);
        put.add(LOCK_FAMILY, LOCK_QUALIFIER, newRowLock.getCurrentTimestamp(), newRowLockBytes);

        if (!table.checkAndPut(row, LOCK_FAMILY, LOCK_QUALIFIER, currentRowLockBytes, put)) {
            // Consider as conflict because another transaction might acquire lock of primary row.
            throw new ConflictException("can't acquire primary row's lock");
        } else {
View Full Code Here

    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) {
View Full Code Here

TOP

Related Classes of kr.co.vcnc.haeinsa.thrift.generated.TRowLock

Copyright © 2018 www.massapicom. 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.