Search in sources :

Example 1 with RenewLeaseTask

use of org.apache.phoenix.query.ConnectionQueryServicesImpl.RenewLeaseTask in project phoenix by apache.

the class ScannerLeaseRenewalTest method testRenewLeaseTaskBehavior.

@Test
public void testRenewLeaseTaskBehavior() throws Exception {
    // add connection to the queue
    PhoenixConnection pconn = DriverManager.getConnection(getUrl(), PropertiesUtil.deepCopy(TEST_PROPERTIES)).unwrap(PhoenixConnection.class);
    LinkedBlockingQueue<WeakReference<PhoenixConnection>> connectionsQueue = new LinkedBlockingQueue<>();
    connectionsQueue.add(new WeakReference<PhoenixConnection>(pconn));
    // create a scanner and add it to the queue
    int numLeaseRenewals = 4;
    int skipRenewLeaseCount = 2;
    int failToAcquireLockAt = 3;
    RenewLeaseOnlyTableIterator itr = new RenewLeaseOnlyTableIterator(numLeaseRenewals, skipRenewLeaseCount, failToAcquireLockAt, -1);
    LinkedBlockingQueue<WeakReference<TableResultIterator>> scannerQueue = pconn.getScanners();
    scannerQueue.add(new WeakReference<TableResultIterator>(itr));
    RenewLeaseTask task = new RenewLeaseTask(connectionsQueue);
    assertTrue(connectionsQueue.size() == 1);
    assertTrue(scannerQueue.size() == 1);
    task.run();
    assertTrue(connectionsQueue.size() == 1);
    // lease renewed
    assertTrue(scannerQueue.size() == 1);
    assertEquals(RENEWED, itr.getLastRenewLeaseStatus());
    task.run();
    assertTrue(scannerQueue.size() == 1);
    // renew lease skipped but scanner still in the queue
    assertTrue(connectionsQueue.size() == 1);
    assertEquals(THRESHOLD_NOT_REACHED, itr.getLastRenewLeaseStatus());
    task.run();
    assertTrue(scannerQueue.size() == 1);
    assertTrue(connectionsQueue.size() == 1);
    // lock couldn't be acquired
    assertEquals(LOCK_NOT_ACQUIRED, itr.getLastRenewLeaseStatus());
    task.run();
    assertTrue(scannerQueue.size() == 1);
    assertTrue(connectionsQueue.size() == 1);
    // lease renewed
    assertEquals(RENEWED, itr.getLastRenewLeaseStatus());
    task.run();
    assertTrue(scannerQueue.size() == 0);
    assertTrue(connectionsQueue.size() == 1);
    // scanner closed and removed from the queue
    assertEquals(CLOSED, itr.getLastRenewLeaseStatus());
    pconn.close();
    task.run();
    assertTrue(scannerQueue.size() == 0);
    assertTrue("Closing the connection should have removed it from the queue", connectionsQueue.size() == 0);
}
Also used : RenewLeaseOnlyTableIterator(org.apache.phoenix.iterate.RenewLeaseOnlyTableIterator) PhoenixConnection(org.apache.phoenix.jdbc.PhoenixConnection) RenewLeaseTask(org.apache.phoenix.query.ConnectionQueryServicesImpl.RenewLeaseTask) WeakReference(java.lang.ref.WeakReference) TableResultIterator(org.apache.phoenix.iterate.TableResultIterator) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Test(org.junit.Test)

Example 2 with RenewLeaseTask

use of org.apache.phoenix.query.ConnectionQueryServicesImpl.RenewLeaseTask in project phoenix by apache.

the class ScannerLeaseRenewalTest method testRenewLeaseTaskBehaviorOnError.

@Test
public void testRenewLeaseTaskBehaviorOnError() throws Exception {
    // add connection to the queue
    PhoenixConnection pconn = DriverManager.getConnection(getUrl(), PropertiesUtil.deepCopy(TEST_PROPERTIES)).unwrap(PhoenixConnection.class);
    LinkedBlockingQueue<WeakReference<PhoenixConnection>> connectionsQueue = new LinkedBlockingQueue<>();
    connectionsQueue.add(new WeakReference<PhoenixConnection>(pconn));
    // create a scanner and add it to the queue
    int numLeaseRenewals = 4;
    int lockNotAcquiredAt = 1;
    int thresholdNotReachedCount = 2;
    int failLeaseRenewalAt = 3;
    RenewLeaseOnlyTableIterator itr = new RenewLeaseOnlyTableIterator(numLeaseRenewals, thresholdNotReachedCount, lockNotAcquiredAt, failLeaseRenewalAt);
    LinkedBlockingQueue<WeakReference<TableResultIterator>> scannerQueue = pconn.getScanners();
    scannerQueue.add(new WeakReference<TableResultIterator>(itr));
    RenewLeaseTask task = new RenewLeaseTask(connectionsQueue);
    assertTrue(connectionsQueue.size() == 1);
    assertTrue(scannerQueue.size() == 1);
    task.run();
    assertTrue(connectionsQueue.size() == 1);
    // lock not acquired
    assertTrue(scannerQueue.size() == 1);
    assertEquals(LOCK_NOT_ACQUIRED, itr.getLastRenewLeaseStatus());
    task.run();
    assertTrue(scannerQueue.size() == 1);
    // renew lease skipped but scanner still in the queue
    assertTrue(connectionsQueue.size() == 1);
    assertEquals(THRESHOLD_NOT_REACHED, itr.getLastRenewLeaseStatus());
    task.run();
    assertTrue(scannerQueue.size() == 0);
    // there was only one connection in the connectionsQueue and it wasn't added back because of error
    assertTrue(connectionsQueue.size() == 0);
    pconn.close();
    task.run();
    assertTrue(scannerQueue.size() == 0);
    assertTrue("Closing the connection should have removed it from the queue", connectionsQueue.size() == 0);
}
Also used : RenewLeaseOnlyTableIterator(org.apache.phoenix.iterate.RenewLeaseOnlyTableIterator) PhoenixConnection(org.apache.phoenix.jdbc.PhoenixConnection) RenewLeaseTask(org.apache.phoenix.query.ConnectionQueryServicesImpl.RenewLeaseTask) WeakReference(java.lang.ref.WeakReference) TableResultIterator(org.apache.phoenix.iterate.TableResultIterator) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Test(org.junit.Test)

Aggregations

WeakReference (java.lang.ref.WeakReference)2 LinkedBlockingQueue (java.util.concurrent.LinkedBlockingQueue)2 RenewLeaseOnlyTableIterator (org.apache.phoenix.iterate.RenewLeaseOnlyTableIterator)2 TableResultIterator (org.apache.phoenix.iterate.TableResultIterator)2 PhoenixConnection (org.apache.phoenix.jdbc.PhoenixConnection)2 RenewLeaseTask (org.apache.phoenix.query.ConnectionQueryServicesImpl.RenewLeaseTask)2 Test (org.junit.Test)2