Search in sources :

Example 11 with ShowLocksRequest

use of org.apache.hadoop.hive.metastore.api.ShowLocksRequest in project hive by apache.

the class ShowLocksOperation method getLocksForNewFormat.

private ShowLocksResponse getLocksForNewFormat(HiveLockManager lockMgr) throws HiveException, LockException {
    if (!(lockMgr instanceof DbLockManager)) {
        throw new HiveException("New lock format only supported with db lock manager.");
    }
    ShowLocksRequest request = new ShowLocksRequest();
    if (desc.getDbName() == null && desc.getTableName() != null) {
        request.setDbname(SessionState.get().getCurrentDatabase());
    } else {
        request.setDbname(desc.getDbName());
    }
    request.setTablename(desc.getTableName());
    if (desc.getPartSpec() != null) {
        List<String> keyList = new ArrayList<String>();
        List<String> valList = new ArrayList<String>();
        for (String partKey : desc.getPartSpec().keySet()) {
            String partVal = desc.getPartSpec().get(partKey);
            keyList.add(partKey);
            valList.add(partVal);
        }
        String partName = FileUtils.makePartName(keyList, valList);
        request.setPartname(partName);
    }
    return ((DbLockManager) lockMgr).getLocks(request);
}
Also used : ShowLocksRequest(org.apache.hadoop.hive.metastore.api.ShowLocksRequest) HiveException(org.apache.hadoop.hive.ql.metadata.HiveException) DbLockManager(org.apache.hadoop.hive.ql.lockmgr.DbLockManager) ArrayList(java.util.ArrayList)

Example 12 with ShowLocksRequest

use of org.apache.hadoop.hive.metastore.api.ShowLocksRequest in project hive by apache.

the class TestTxnHandler method showLocks.

@Test
public void showLocks() throws Exception {
    long begining = System.currentTimeMillis();
    LockComponent comp = new LockComponent(LockType.EXCLUSIVE, LockLevel.DB, "mydb");
    comp.setOperationType(DataOperationType.NO_TXN);
    List<LockComponent> components = new ArrayList<LockComponent>(1);
    components.add(comp);
    LockRequest req = new LockRequest(components, "me", "localhost");
    LockResponse res = txnHandler.lock(req);
    // Open txn
    long txnid = openTxn();
    comp = new LockComponent(LockType.SHARED_READ, LockLevel.TABLE, "mydb");
    comp.setTablename("mytable");
    comp.setOperationType(DataOperationType.SELECT);
    components = new ArrayList<LockComponent>(1);
    components.add(comp);
    req = new LockRequest(components, "me", "localhost");
    req.setTxnid(txnid);
    res = txnHandler.lock(req);
    // Locks not associated with a txn
    components = new ArrayList<LockComponent>(1);
    comp = new LockComponent(LockType.SHARED_READ, LockLevel.PARTITION, "yourdb");
    comp.setTablename("yourtable");
    comp.setPartitionname("yourpartition=yourvalue");
    comp.setOperationType(DataOperationType.INSERT);
    components.add(comp);
    req = new LockRequest(components, "you", "remotehost");
    res = txnHandler.lock(req);
    ShowLocksResponse rsp = txnHandler.showLocks(new ShowLocksRequest());
    List<ShowLocksResponseElement> locks = rsp.getLocks();
    assertEquals(3, locks.size());
    boolean[] saw = new boolean[locks.size()];
    for (int i = 0; i < saw.length; i++) saw[i] = false;
    for (ShowLocksResponseElement lock : locks) {
        if (lock.getLockid() == 1) {
            assertEquals(0, lock.getTxnid());
            assertEquals("mydb", lock.getDbname());
            assertNull(lock.getTablename());
            assertNull(lock.getPartname());
            assertEquals(LockState.ACQUIRED, lock.getState());
            assertEquals(LockType.EXCLUSIVE, lock.getType());
            assertTrue(lock.toString(), 0 != lock.getLastheartbeat());
            assertTrue("Expected acquired at " + lock.getAcquiredat() + " to be between " + begining + " and " + System.currentTimeMillis(), begining <= lock.getAcquiredat() && System.currentTimeMillis() >= lock.getAcquiredat());
            assertEquals("me", lock.getUser());
            assertEquals("localhost", lock.getHostname());
            saw[0] = true;
        } else if (lock.getLockid() == 2) {
            assertEquals(1, lock.getTxnid());
            assertEquals("mydb", lock.getDbname());
            assertEquals("mytable", lock.getTablename());
            assertNull(lock.getPartname());
            assertEquals(LockState.WAITING, lock.getState());
            assertEquals(LockType.SHARED_READ, lock.getType());
            assertTrue(lock.toString(), 0 == lock.getLastheartbeat() && lock.getTxnid() != 0);
            assertEquals(0, lock.getAcquiredat());
            assertEquals("me", lock.getUser());
            assertEquals("localhost", lock.getHostname());
            saw[1] = true;
        } else if (lock.getLockid() == 3) {
            assertEquals(0, lock.getTxnid());
            assertEquals("yourdb", lock.getDbname());
            assertEquals("yourtable", lock.getTablename());
            assertEquals("yourpartition=yourvalue", lock.getPartname());
            assertEquals(LockState.ACQUIRED, lock.getState());
            assertEquals(LockType.SHARED_READ, lock.getType());
            assertTrue(lock.toString(), begining <= lock.getLastheartbeat() && System.currentTimeMillis() >= lock.getLastheartbeat());
            assertTrue(begining <= lock.getAcquiredat() && System.currentTimeMillis() >= lock.getAcquiredat());
            assertEquals("you", lock.getUser());
            assertEquals("remotehost", lock.getHostname());
            saw[2] = true;
        } else {
            fail("Unknown lock id");
        }
    }
    for (int i = 0; i < saw.length; i++) assertTrue("Didn't see lock id " + i, saw[i]);
}
Also used : LockComponent(org.apache.hadoop.hive.metastore.api.LockComponent) ArrayList(java.util.ArrayList) ShowLocksResponseElement(org.apache.hadoop.hive.metastore.api.ShowLocksResponseElement) ShowLocksRequest(org.apache.hadoop.hive.metastore.api.ShowLocksRequest) LockResponse(org.apache.hadoop.hive.metastore.api.LockResponse) ShowLocksResponse(org.apache.hadoop.hive.metastore.api.ShowLocksResponse) LockRequest(org.apache.hadoop.hive.metastore.api.LockRequest) CheckLockRequest(org.apache.hadoop.hive.metastore.api.CheckLockRequest) Test(org.junit.Test)

Example 13 with ShowLocksRequest

use of org.apache.hadoop.hive.metastore.api.ShowLocksRequest in project hive by apache.

the class TestAcidOnTez method testGetSplitsLocksWithMaterializedView.

@Test
public void testGetSplitsLocksWithMaterializedView() throws Exception {
    // Need to test this with LLAP settings, which requires some additional configurations set.
    HiveConf modConf = new HiveConf(hiveConf);
    setupTez(modConf);
    modConf.setVar(ConfVars.HIVE_EXECUTION_ENGINE, "tez");
    modConf.setVar(ConfVars.HIVEFETCHTASKCONVERSION, "more");
    modConf.setVar(HiveConf.ConfVars.LLAP_DAEMON_SERVICE_HOSTS, "localhost");
    // SessionState/Driver needs to be restarted with the Tez conf settings.
    restartSessionAndDriver(modConf);
    TxnStore txnHandler = TxnUtils.getTxnStore(modConf);
    String mvName = "mv_acidTbl";
    try {
        runStatementOnDriver("create materialized view " + mvName + " as select a from " + Table.ACIDTBL + " where a > 5");
        // Request LLAP splits for a table.
        String queryParam = "select a from " + Table.ACIDTBL + " where a > 5";
        runStatementOnDriver("select get_splits(\"" + queryParam + "\", 1)");
        // The get_splits call should have resulted in a lock on ACIDTBL and materialized view mv_acidTbl
        ShowLocksResponse slr = txnHandler.showLocks(new ShowLocksRequest());
        TestDbTxnManager2.checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", Table.ACIDTBL.name, null, slr.getLocks());
        TestDbTxnManager2.checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", mvName, null, slr.getLocks());
        assertEquals(2, slr.getLocksSize());
    } finally {
        // Close the session which should free up the TxnHandler/locks held by the session.
        // Done in the finally block to make sure we free up the locks; otherwise
        // the cleanup in tearDown() will get stuck waiting on the lock held here on ACIDTBL.
        restartSessionAndDriver(hiveConf);
        runStatementOnDriver("drop materialized view if exists " + mvName);
    }
    // Lock should be freed up now.
    ShowLocksResponse slr = txnHandler.showLocks(new ShowLocksRequest());
    assertEquals(0, slr.getLocksSize());
    List<String> rows = runStatementOnDriver("show transactions");
    // Transactions should be committed.
    // No transactions - just the header row
    assertEquals(1, rows.size());
}
Also used : ShowLocksRequest(org.apache.hadoop.hive.metastore.api.ShowLocksRequest) HiveConf(org.apache.hadoop.hive.conf.HiveConf) TxnStore(org.apache.hadoop.hive.metastore.txn.TxnStore) ShowLocksResponse(org.apache.hadoop.hive.metastore.api.ShowLocksResponse) Test(org.junit.Test)

Example 14 with ShowLocksRequest

use of org.apache.hadoop.hive.metastore.api.ShowLocksRequest in project hive by apache.

the class TestAcidOnTez method testGetSplitsLocks.

@Test
public void testGetSplitsLocks() throws Exception {
    // Need to test this with LLAP settings, which requires some additional configurations set.
    HiveConf modConf = new HiveConf(hiveConf);
    setupTez(modConf);
    modConf.setVar(ConfVars.HIVE_EXECUTION_ENGINE, "tez");
    modConf.setVar(ConfVars.HIVEFETCHTASKCONVERSION, "more");
    modConf.setVar(HiveConf.ConfVars.LLAP_DAEMON_SERVICE_HOSTS, "localhost");
    // SessionState/Driver needs to be restarted with the Tez conf settings.
    restartSessionAndDriver(modConf);
    TxnStore txnHandler = TxnUtils.getTxnStore(modConf);
    try {
        // Request LLAP splits for a table.
        String queryParam = "select * from " + Table.ACIDTBL;
        runStatementOnDriver("select get_splits(\"" + queryParam + "\", 1)");
        // The get_splits call should have resulted in a lock on ACIDTBL
        ShowLocksResponse slr = txnHandler.showLocks(new ShowLocksRequest());
        TestDbTxnManager2.checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", Table.ACIDTBL.name, null, slr.getLocks());
        assertEquals(1, slr.getLocksSize());
        // Try another table.
        queryParam = "select * from " + Table.ACIDTBLPART;
        runStatementOnDriver("select get_splits(\"" + queryParam + "\", 1)");
        // Should now have new lock on ACIDTBLPART
        slr = txnHandler.showLocks(new ShowLocksRequest());
        TestDbTxnManager2.checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", Table.ACIDTBLPART.name, null, slr.getLocks());
        assertEquals(2, slr.getLocksSize());
        // There should be different txn IDs associated with each lock.
        Set<Long> txnSet = new HashSet<Long>();
        for (ShowLocksResponseElement lockResponseElem : slr.getLocks()) {
            txnSet.add(lockResponseElem.getTxnid());
        }
        assertEquals(2, txnSet.size());
        List<String> rows = runStatementOnDriver("show transactions");
        // Header row + 2 transactions = 3 rows
        assertEquals(3, rows.size());
    } finally {
        // Close the session which should free up the TxnHandler/locks held by the session.
        // Done in the finally block to make sure we free up the locks; otherwise
        // the cleanup in tearDown() will get stuck waiting on the lock held here on ACIDTBL.
        restartSessionAndDriver(hiveConf);
    }
    // Lock should be freed up now.
    ShowLocksResponse slr = txnHandler.showLocks(new ShowLocksRequest());
    assertEquals(0, slr.getLocksSize());
    List<String> rows = runStatementOnDriver("show transactions");
    // Transactions should be committed.
    // No transactions - just the header row
    assertEquals(1, rows.size());
}
Also used : ShowLocksRequest(org.apache.hadoop.hive.metastore.api.ShowLocksRequest) HiveConf(org.apache.hadoop.hive.conf.HiveConf) TxnStore(org.apache.hadoop.hive.metastore.txn.TxnStore) ShowLocksResponse(org.apache.hadoop.hive.metastore.api.ShowLocksResponse) HashSet(java.util.HashSet) ShowLocksResponseElement(org.apache.hadoop.hive.metastore.api.ShowLocksResponseElement) Test(org.junit.Test)

Aggregations

ShowLocksRequest (org.apache.hadoop.hive.metastore.api.ShowLocksRequest)14 ShowLocksResponse (org.apache.hadoop.hive.metastore.api.ShowLocksResponse)13 Test (org.junit.Test)9 ShowLocksResponseElement (org.apache.hadoop.hive.metastore.api.ShowLocksResponseElement)5 ArrayList (java.util.ArrayList)4 TxnStore (org.apache.hadoop.hive.metastore.txn.TxnStore)4 DbLockManager (org.apache.hadoop.hive.ql.lockmgr.DbLockManager)4 HashSet (java.util.HashSet)2 HiveConf (org.apache.hadoop.hive.conf.HiveConf)2 HiveLockManager (org.apache.hadoop.hive.ql.lockmgr.HiveLockManager)2 HiveException (org.apache.hadoop.hive.ql.metadata.HiveException)2 DataOutputStream (java.io.DataOutputStream)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 URISyntaxException (java.net.URISyntaxException)1 SQLException (java.sql.SQLException)1 ExecutionException (java.util.concurrent.ExecutionException)1 FSDataOutputStream (org.apache.hadoop.fs.FSDataOutputStream)1 MetastoreTaskThread (org.apache.hadoop.hive.metastore.MetastoreTaskThread)1 AlreadyExistsException (org.apache.hadoop.hive.metastore.api.AlreadyExistsException)1