Search in sources :

Example 1 with ValidTxnWriteIdList

use of org.apache.hadoop.hive.common.ValidTxnWriteIdList in project hive by apache.

the class AcidUtils method getTableValidWriteIdList.

/**
 * Extract the ValidWriteIdList for the given table from the list of tables' ValidWriteIdList.
 */
public static ValidWriteIdList getTableValidWriteIdList(Configuration conf, String fullTableName) {
    String txnString = conf.get(ValidTxnWriteIdList.VALID_TABLES_WRITEIDS_KEY);
    ValidTxnWriteIdList validTxnList = new ValidTxnWriteIdList(txnString);
    return validTxnList.getTableValidWriteIdList(fullTableName);
}
Also used : ValidTxnWriteIdList(org.apache.hadoop.hive.common.ValidTxnWriteIdList)

Example 2 with ValidTxnWriteIdList

use of org.apache.hadoop.hive.common.ValidTxnWriteIdList in project hive by apache.

the class Driver method recordValidWriteIds.

// Write the current set of valid write ids for the operated acid tables into the conf file so
// that it can be read by the input format.
private void recordValidWriteIds(HiveTxnManager txnMgr) throws LockException {
    String txnString = conf.get(ValidTxnList.VALID_TXNS_KEY);
    if ((txnString == null) || (txnString.isEmpty())) {
        throw new IllegalStateException("calling recordValidWritsIdss() without initializing ValidTxnList " + JavaUtils.txnIdToString(txnMgr.getCurrentTxnId()));
    }
    ValidTxnWriteIdList txnWriteIds = txnMgr.getValidWriteIds(getTransactionalTableList(plan), txnString);
    String writeIdStr = txnWriteIds.toString();
    conf.set(ValidTxnWriteIdList.VALID_TABLES_WRITEIDS_KEY, writeIdStr);
    if (plan.getFetchTask() != null) {
        /**
         * This is needed for {@link HiveConf.ConfVars.HIVEFETCHTASKCONVERSION} optimization which
         * initializes JobConf in FetchOperator before recordValidTxns() but this has to be done
         * after locks are acquired to avoid race conditions in ACID.
         * This case is supported only for single source query.
         */
        Operator<?> source = plan.getFetchTask().getWork().getSource();
        if (source instanceof TableScanOperator) {
            TableScanOperator tsOp = (TableScanOperator) source;
            String fullTableName = AcidUtils.getFullTableName(tsOp.getConf().getDatabaseName(), tsOp.getConf().getTableName());
            ValidWriteIdList writeIdList = txnWriteIds.getTableValidWriteIdList(fullTableName);
            if (tsOp.getConf().isTranscationalTable() && (writeIdList == null)) {
                throw new IllegalStateException("ACID table: " + fullTableName + " is missing from the ValidWriteIdList config: " + writeIdStr);
            }
            if (writeIdList != null) {
                plan.getFetchTask().setValidWriteIdList(writeIdList.toString());
            }
        }
    }
    LOG.debug("Encoding valid txn write ids info " + writeIdStr + " txnid:" + txnMgr.getCurrentTxnId());
}
Also used : TableScanOperator(org.apache.hadoop.hive.ql.exec.TableScanOperator) ValidWriteIdList(org.apache.hadoop.hive.common.ValidWriteIdList) ValidTxnWriteIdList(org.apache.hadoop.hive.common.ValidTxnWriteIdList)

Aggregations

ValidTxnWriteIdList (org.apache.hadoop.hive.common.ValidTxnWriteIdList)2 ValidWriteIdList (org.apache.hadoop.hive.common.ValidWriteIdList)1 TableScanOperator (org.apache.hadoop.hive.ql.exec.TableScanOperator)1