Search in sources :

Example 1 with TableNotEnabledException

use of org.apache.hadoop.hbase.TableNotEnabledException in project hbase by apache.

the class ScannerResultGenerator method next.

public Cell next() {
    if (cache != null) {
        Cell kv = cache;
        cache = null;
        return kv;
    }
    boolean loop;
    do {
        loop = false;
        if (rowI != null) {
            if (rowI.hasNext()) {
                return rowI.next();
            } else {
                rowI = null;
            }
        }
        if (cached != null) {
            rowI = cached.listCells().iterator();
            loop = true;
            cached = null;
        } else {
            Result result = null;
            try {
                result = scanner.next();
            } catch (UnknownScannerException e) {
                throw new IllegalArgumentException(e);
            } catch (TableNotEnabledException tnee) {
                throw new IllegalStateException(tnee);
            } catch (TableNotFoundException tnfe) {
                throw new IllegalArgumentException(tnfe);
            } catch (IOException e) {
                LOG.error(StringUtils.stringifyException(e));
            }
            if (result != null && !result.isEmpty()) {
                rowI = result.listCells().iterator();
                loop = true;
            }
        }
    } while (loop);
    return null;
}
Also used : TableNotFoundException(org.apache.hadoop.hbase.TableNotFoundException) IOException(java.io.IOException) Cell(org.apache.hadoop.hbase.Cell) UnknownScannerException(org.apache.hadoop.hbase.UnknownScannerException) Result(org.apache.hadoop.hbase.client.Result) TableNotEnabledException(org.apache.hadoop.hbase.TableNotEnabledException)

Example 2 with TableNotEnabledException

use of org.apache.hadoop.hbase.TableNotEnabledException in project hbase by apache.

the class TestAdmin1 method testDisableAndEnableTable.

@Test(timeout = 300000)
public void testDisableAndEnableTable() throws IOException {
    final byte[] row = Bytes.toBytes("row");
    final byte[] qualifier = Bytes.toBytes("qualifier");
    final byte[] value = Bytes.toBytes("value");
    final TableName table = TableName.valueOf(name.getMethodName());
    Table ht = TEST_UTIL.createTable(table, HConstants.CATALOG_FAMILY);
    Put put = new Put(row);
    put.addColumn(HConstants.CATALOG_FAMILY, qualifier, value);
    ht.put(put);
    Get get = new Get(row);
    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);
    ht.get(get);
    this.admin.disableTable(ht.getName());
    assertTrue("Table must be disabled.", TEST_UTIL.getHBaseCluster().getMaster().getTableStateManager().isTableState(ht.getName(), TableState.State.DISABLED));
    assertEquals(TableState.State.DISABLED, getStateFromMeta(table));
    // Test that table is disabled
    get = new Get(row);
    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);
    boolean ok = false;
    try {
        ht.get(get);
    } catch (TableNotEnabledException e) {
        ok = true;
    }
    ok = false;
    // verify that scan encounters correct exception
    Scan scan = new Scan();
    try {
        ResultScanner scanner = ht.getScanner(scan);
        Result res = null;
        do {
            res = scanner.next();
        } while (res != null);
    } catch (TableNotEnabledException e) {
        ok = true;
    }
    assertTrue(ok);
    this.admin.enableTable(table);
    assertTrue("Table must be enabled.", TEST_UTIL.getHBaseCluster().getMaster().getTableStateManager().isTableState(ht.getName(), TableState.State.ENABLED));
    assertEquals(TableState.State.ENABLED, getStateFromMeta(table));
    // Test that table is enabled
    try {
        ht.get(get);
    } catch (RetriesExhaustedException e) {
        ok = false;
    }
    assertTrue(ok);
    ht.close();
}
Also used : TableName(org.apache.hadoop.hbase.TableName) TableNotEnabledException(org.apache.hadoop.hbase.TableNotEnabledException) Test(org.junit.Test)

Example 3 with TableNotEnabledException

use of org.apache.hadoop.hbase.TableNotEnabledException in project hbase by apache.

the class DisableTableProcedure method prepareDisable.

/**
   * Action before any real action of disabling table. Set the exception in the procedure instead
   * of throwing it.  This approach is to deal with backward compatible with 1.0.
   * @param env MasterProcedureEnv
   * @throws IOException
   */
private boolean prepareDisable(final MasterProcedureEnv env) throws IOException {
    boolean canTableBeDisabled = true;
    if (tableName.equals(TableName.META_TABLE_NAME)) {
        setFailure("master-disable-table", new ConstraintException("Cannot disable catalog table"));
        canTableBeDisabled = false;
    } else if (!MetaTableAccessor.tableExists(env.getMasterServices().getConnection(), tableName)) {
        setFailure("master-disable-table", new TableNotFoundException(tableName));
        canTableBeDisabled = false;
    } else if (!skipTableStateCheck) {
        // There could be multiple client requests trying to disable or enable
        // the table at the same time. Ensure only the first request is honored
        // After that, no other requests can be accepted until the table reaches
        // DISABLED or ENABLED.
        //
        // Note: in 1.0 release, we called TableStateManager.setTableStateIfInStates() to set
        // the state to DISABLING from ENABLED. The implementation was done before table lock
        // was implemented. With table lock, there is no need to set the state here (it will
        // set the state later on). A quick state check should be enough for us to move forward.
        TableStateManager tsm = env.getMasterServices().getTableStateManager();
        TableState.State state = tsm.getTableState(tableName);
        if (!state.equals(TableState.State.ENABLED)) {
            LOG.info("Table " + tableName + " isn't enabled;is " + state.name() + "; skipping disable");
            setFailure("master-disable-table", new TableNotEnabledException(tableName + " state is " + state.name()));
            canTableBeDisabled = false;
        }
    }
    // We are done the check. Future actions in this procedure could be done asynchronously.
    releaseSyncLatch();
    return canTableBeDisabled;
}
Also used : TableNotFoundException(org.apache.hadoop.hbase.TableNotFoundException) TableStateManager(org.apache.hadoop.hbase.master.TableStateManager) ConstraintException(org.apache.hadoop.hbase.constraint.ConstraintException) TableState(org.apache.hadoop.hbase.client.TableState) DisableTableState(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.DisableTableState) TableNotEnabledException(org.apache.hadoop.hbase.TableNotEnabledException)

Example 4 with TableNotEnabledException

use of org.apache.hadoop.hbase.TableNotEnabledException in project hbase by apache.

the class TestAsyncTableAdminApi method testDisableAndEnableTable.

@Test(timeout = 300000)
public void testDisableAndEnableTable() throws Exception {
    final byte[] row = Bytes.toBytes("row");
    final byte[] qualifier = Bytes.toBytes("qualifier");
    final byte[] value = Bytes.toBytes("value");
    final TableName tableName = TableName.valueOf(name.getMethodName());
    Table ht = TEST_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY);
    Put put = new Put(row);
    put.addColumn(HConstants.CATALOG_FAMILY, qualifier, value);
    ht.put(put);
    Get get = new Get(row);
    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);
    ht.get(get);
    this.admin.disableTable(ht.getName()).join();
    assertTrue("Table must be disabled.", TEST_UTIL.getHBaseCluster().getMaster().getTableStateManager().isTableState(ht.getName(), TableState.State.DISABLED));
    assertEquals(TableState.State.DISABLED, getStateFromMeta(tableName));
    // Test that table is disabled
    get = new Get(row);
    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);
    boolean ok = false;
    try {
        ht.get(get);
    } catch (TableNotEnabledException e) {
        ok = true;
    }
    ok = false;
    // verify that scan encounters correct exception
    Scan scan = new Scan();
    try {
        ResultScanner scanner = ht.getScanner(scan);
        Result res = null;
        do {
            res = scanner.next();
        } while (res != null);
    } catch (TableNotEnabledException e) {
        ok = true;
    }
    assertTrue(ok);
    this.admin.enableTable(tableName).join();
    assertTrue("Table must be enabled.", TEST_UTIL.getHBaseCluster().getMaster().getTableStateManager().isTableState(ht.getName(), TableState.State.ENABLED));
    assertEquals(TableState.State.ENABLED, getStateFromMeta(tableName));
    // Test that table is enabled
    try {
        ht.get(get);
    } catch (RetriesExhaustedException e) {
        ok = false;
    }
    assertTrue(ok);
    ht.close();
}
Also used : TableName(org.apache.hadoop.hbase.TableName) TableNotEnabledException(org.apache.hadoop.hbase.TableNotEnabledException) Test(org.junit.Test)

Example 5 with TableNotEnabledException

use of org.apache.hadoop.hbase.TableNotEnabledException in project hbase by apache.

the class TestDisableTableProcedure method testDisableTableMultipleTimes.

@Test(timeout = 60000)
public void testDisableTableMultipleTimes() throws Exception {
    final TableName tableName = TableName.valueOf(name.getMethodName());
    final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor();
    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f1", "f2");
    // Disable the table
    long procId1 = procExec.submitProcedure(new DisableTableProcedure(procExec.getEnvironment(), tableName, false));
    // Wait the completion
    ProcedureTestingUtility.waitProcedure(procExec, procId1);
    ProcedureTestingUtility.assertProcNotFailed(procExec, procId1);
    MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), tableName);
    // Disable the table again - expect failure
    long procId2 = procExec.submitProcedure(new DisableTableProcedure(procExec.getEnvironment(), tableName, false));
    // Wait the completion
    ProcedureTestingUtility.waitProcedure(procExec, procId2);
    ProcedureInfo result = procExec.getResult(procId2);
    assertTrue(result.isFailed());
    LOG.debug("Disable failed with exception: " + result.getExceptionFullMessage());
    assertTrue(ProcedureTestingUtility.getExceptionCause(result) instanceof TableNotEnabledException);
    // Disable the table - expect failure from ProcedurePrepareLatch
    try {
        final ProcedurePrepareLatch prepareLatch = new ProcedurePrepareLatch.CompatibilityLatch();
        long procId3 = procExec.submitProcedure(new DisableTableProcedure(procExec.getEnvironment(), tableName, false, prepareLatch));
        prepareLatch.await();
        Assert.fail("Disable should throw exception through latch.");
    } catch (TableNotEnabledException tnee) {
        // Expected
        LOG.debug("Disable failed with expected exception.");
    }
    // Disable the table again with skipping table state check flag (simulate recovery scenario)
    long procId4 = procExec.submitProcedure(new DisableTableProcedure(procExec.getEnvironment(), tableName, true));
    // Wait the completion
    ProcedureTestingUtility.waitProcedure(procExec, procId4);
    ProcedureTestingUtility.assertProcNotFailed(procExec, procId4);
    MasterProcedureTestingUtility.validateTableIsDisabled(UTIL.getHBaseCluster().getMaster(), tableName);
}
Also used : TableName(org.apache.hadoop.hbase.TableName) ProcedureInfo(org.apache.hadoop.hbase.ProcedureInfo) TableNotEnabledException(org.apache.hadoop.hbase.TableNotEnabledException) Test(org.junit.Test)

Aggregations

TableNotEnabledException (org.apache.hadoop.hbase.TableNotEnabledException)13 TableNotFoundException (org.apache.hadoop.hbase.TableNotFoundException)7 TableName (org.apache.hadoop.hbase.TableName)6 IOException (java.io.IOException)5 HTableDescriptor (org.apache.hadoop.hbase.HTableDescriptor)3 Admin (org.apache.hadoop.hbase.client.Admin)3 Test (org.junit.Test)3 PermanentBackendException (com.thinkaurelius.titan.diskstorage.PermanentBackendException)2 TemporaryBackendException (com.thinkaurelius.titan.diskstorage.TemporaryBackendException)2 HColumnDescriptor (org.apache.hadoop.hbase.HColumnDescriptor)2 ProjectInfo (co.cask.cdap.common.utils.ProjectInfo)1 HBaseTableUtil (co.cask.cdap.data2.util.hbase.HBaseTableUtil)1 HTableDescriptorBuilder (co.cask.cdap.data2.util.hbase.HTableDescriptorBuilder)1 HBaseDDLExecutor (co.cask.cdap.spi.hbase.HBaseDDLExecutor)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 DELETE (javax.ws.rs.DELETE)1 Cell (org.apache.hadoop.hbase.Cell)1 ProcedureInfo (org.apache.hadoop.hbase.ProcedureInfo)1 TableExistsException (org.apache.hadoop.hbase.TableExistsException)1 UnknownScannerException (org.apache.hadoop.hbase.UnknownScannerException)1