public static TableDescriptor tableDescriptorFromThrift(TTableDescriptor in) { TableDescriptorBuilder builder = TableDescriptorBuilder .newBuilder(tableNameFromThrift(in.getTableName())); for (TColumnFamilyDescriptor column : in.getColumns()) { builder.setColumnFamily(columnFamilyDescriptorFromThrift(column)); } if (in.isSetAttributes()) { for (Map.Entry<ByteBuffer, ByteBuffer> attribute : in.getAttributes().entrySet()) { builder.setValue(attribute.getKey().array(), attribute.getValue().array()); } } if (in.isSetDurability()) { builder.setDurability(durabilityFromThrift(in.getDurability())); } return builder.build(); }
@Test (expected=IOException.class) public void testAddCoprocessorTwice() throws IOException { String cpName = "a.b.c.d"; TableDescriptor htd = TableDescriptorBuilder.newBuilder(TableName.META_TABLE_NAME) .setCoprocessor(cpName) .setCoprocessor(cpName) .build(); }
List<ColumnFamilyDescriptor> existingFamilies = Arrays.asList(newTableDescriptor.getColumnFamilies()); TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(newTableDescriptor); boolean schemaChangeNeeded = false; for (ColumnFamilyDescriptor family : families) { if (!existingFamilies.contains(family)) { builder.setColumnFamily(family); schemaChangeNeeded = true; builder.removeColumnFamily(family.getName()); schemaChangeNeeded = true; modifyTableSync(conn, builder.build()); LOG.info("Changed " + newTableDescriptor.getTableName() + " to: " + newTableDescriptor);
public static TableDescriptor createHTD(final TableName tableName, final String... family) { TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName); for (int i = 0; i < family.length; ++i) { builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family[i])); } return builder.build(); }
private TableDescriptor getBasic3FamilyHTableDescriptor(TableName tableName) { TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName); Arrays.stream(TEST_FAMILY).map(ColumnFamilyDescriptorBuilder::of) .forEachOrdered(builder::setColumnFamily); return builder.build(); }
@Override public TableDescriptor get() throws IOException { TableDescriptor old = getTableDescriptors().get(tableName); if (!old.hasColumnFamily(descriptor.getName())) { throw new InvalidFamilyOperationException("Family '" + descriptor.getNameAsString() + "' does not exist, so it cannot be modified"); } return TableDescriptorBuilder.newBuilder(old).modifyColumnFamily(descriptor).build(); } }, nonceGroup, nonce);
/** * Converts a TableSchema to TableDescriptor * @param ts A pb TableSchema instance. * @return An {@link TableDescriptor} made from the passed in pb <code>ts</code>. */ public static TableDescriptor toTableDescriptor(final TableSchema ts) { TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(ProtobufUtil.toTableName(ts.getTableName())); ts.getColumnFamiliesList() .stream() .map(ProtobufUtil::toColumnFamilyDescriptor) .forEach(builder::setColumnFamily); ts.getAttributesList() .forEach(a -> builder.setValue(a.getFirst().toByteArray(), a.getSecond().toByteArray())); ts.getConfigurationList() .forEach(a -> builder.setValue(a.getName(), a.getValue())); return builder.build(); }
@Test public void testMasterObserverToModifyTableSchema() throws IOException { TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(TABLENAME); for (int i = 1; i <= 3; i++) { builder.setColumnFamily( ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf" + i)).setMaxVersions(i) .build()); } try (Admin admin = UTIL.getAdmin()) { admin.createTable(builder.build()); assertOneVersion(admin.getDescriptor(TABLENAME)); builder.modifyColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf1")) .setMaxVersions(Integer.MAX_VALUE).build()); admin.modifyTable(builder.build()); assertOneVersion(admin.getDescriptor(TABLENAME)); } }
ColumnFamilyDescriptor cf4 = ColumnFamilyDescriptorBuilder.of("cf4"); TableDescriptor td = TableDescriptorBuilder .newBuilder(TableName.valueOf("test")) .setColumnFamilies(Arrays.asList(cf1, cf2, cf3, cf4)) .build(); ColumnFamilyDescriptor cf7 = ColumnFamilyDescriptorBuilder.of("cf7"); TableDescriptor newTd = TableDescriptorBuilder .newBuilder(td) .removeColumnFamily(Bytes.toBytes("cf1")) .modifyColumnFamily(modCf2) .modifyColumnFamily(modCf3) .setColumnFamily(cf5) .setColumnFamily(cf6) .setColumnFamily(cf7) .build();
/** * Test cps in the table description * @throws Exception */ @Test public void testGetSetRemoveCP() throws Exception { // simple CP String className = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver"; TableDescriptor desc = TableDescriptorBuilder.newBuilder(TableName.valueOf(name.getMethodName())) .setCoprocessor(className) // add and check that it is present .build(); assertTrue(desc.hasCoprocessor(className)); desc = TableDescriptorBuilder.newBuilder(desc) .removeCoprocessor(className) // remove it and check that it is gone .build(); assertFalse(desc.hasCoprocessor(className)); }
TableDescriptor newDescriptor = TableDescriptorBuilder.newBuilder(oldDescriptor) .setCompactionEnabled(!oldDescriptor.isCompactionEnabled()) .setColumnFamily(ColumnFamilyDescriptorBuilder.of(cf2)) .removeColumnFamily(Bytes.toBytes(cf3)) .setRegionReplication(3) .build();
private Table setupTable(TableName tableName) throws Exception { TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName); // Flush many files, but do not compact immediately // Make sure that the region does not split builder .setMemStoreFlushSize(5000) .setRegionSplitPolicyClassName(ConstantSizeRegionSplitPolicy.class.getName()) .setMaxFileSize(100 * 1024 * 1024) .setValue("hbase.hstore.compactionThreshold", "250"); TableDescriptor td = builder.build(); byte[] fam = Bytes.toBytes("fam"); Table table = TEST_UTIL.createTable(td, new byte[][] {fam}, TEST_UTIL.getConfiguration()); TEST_UTIL.loadTable(table, fam); return table; } }
@Override public TableDescriptor get() throws IOException { TableDescriptor old = getTableDescriptors().get(tableName); if (!old.hasColumnFamily(columnName)) { throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName) + "' does not exist, so it cannot be deleted"); } if (old.getColumnFamilyCount() == 1) { throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName) + "' is the only column family in the table, so it cannot be deleted"); } return TableDescriptorBuilder.newBuilder(old).removeColumnFamily(columnName).build(); } }, nonceGroup, nonce);
private static void createTable(final TableName tableName) throws IOException { TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName); builder.setRegionReplication(3); // create a table with 3 replication table = HTU.createTable(builder.build(), new byte[][] { f }, getSplits(2), new Configuration(HTU.getConfiguration())); }
/** * Test that we add and remove strings from settings properly. * @throws Exception */ @Test public void testRemoveString() throws Exception { byte[] key = Bytes.toBytes("Some"); byte[] value = Bytes.toBytes("value"); TableDescriptor desc = TableDescriptorBuilder.newBuilder(TableName.valueOf(name.getMethodName())) .setValue(key, value) .build(); assertTrue(Bytes.equals(value, desc.getValue(key))); desc = TableDescriptorBuilder.newBuilder(desc) .removeValue(key) .build(); assertTrue(desc.getValue(key) == null); }
return TableDescriptorBuilder.newBuilder(TableName.META_TABLE_NAME) .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(HConstants.CATALOG_FAMILY) .setMaxVersions(conf.getInt(HConstants.HBASE_META_VERSIONS, HConstants.DEFAULT_HBASE_META_VERSIONS)) .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(HConstants.TABLE_FAMILY) .setMaxVersions(conf.getInt(HConstants.HBASE_META_VERSIONS, HConstants.DEFAULT_HBASE_META_VERSIONS)) .setColumnFamily(ColumnFamilyDescriptorBuilder .newBuilder(HConstants.REPLICATION_BARRIER_FAMILY) .setMaxVersions(HConstants.ALL_VERSIONS) .setColumnFamily(ColumnFamilyDescriptorBuilder .newBuilder(HConstants.NAMESPACE_FAMILY) .setMaxVersions(conf.getInt(HConstants.HBASE_META_VERSIONS, .setCoprocessor(CoprocessorDescriptorBuilder.newBuilder( MultiRowMutationEndpoint.class.getName()) .setPriority(Coprocessor.PRIORITY_SYSTEM).build());
@Test public void testStoreUsesConfigurationFromHcdAndHtd() throws Exception { final String CONFIG_KEY = "hbase.regionserver.thread.compaction.throttle"; long anyValue = 10; // We'll check that it uses correct config and propagates it appropriately by going thru // the simplest "real" path I can find - "throttleCompaction", which just checks whether // a number we pass in is higher than some config value, inside compactionPolicy. Configuration conf = HBaseConfiguration.create(); conf.setLong(CONFIG_KEY, anyValue); init(name.getMethodName() + "-xml", conf); assertTrue(store.throttleCompaction(anyValue + 1)); assertFalse(store.throttleCompaction(anyValue)); // HTD overrides XML. --anyValue; init(name.getMethodName() + "-htd", conf, TableDescriptorBuilder .newBuilder(TableName.valueOf(table)).setValue(CONFIG_KEY, Long.toString(anyValue)), ColumnFamilyDescriptorBuilder.of(family)); assertTrue(store.throttleCompaction(anyValue + 1)); assertFalse(store.throttleCompaction(anyValue)); // HCD overrides them both. --anyValue; init(name.getMethodName() + "-hcd", conf, TableDescriptorBuilder.newBuilder(TableName.valueOf(table)).setValue(CONFIG_KEY, Long.toString(anyValue)), ColumnFamilyDescriptorBuilder.newBuilder(family).setValue(CONFIG_KEY, Long.toString(anyValue)) .build()); assertTrue(store.throttleCompaction(anyValue + 1)); assertFalse(store.throttleCompaction(anyValue)); }
@Test public void testRollbackAndDoubleExecutionOnMobTable() throws Exception { final TableName tableName = TableName.valueOf(name.getMethodName()); TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, F1, F2); TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd) .modifyColumnFamily(ColumnFamilyDescriptorBuilder .newBuilder(htd.getColumnFamily(Bytes.toBytes(F1))) .setMobEnabled(true) .build()); testRollbackAndDoubleExecution(builder); }
public TableDescriptorBuilder setCoprocessor(String className) throws IOException { return setCoprocessor(CoprocessorDescriptorBuilder.of(className)); }
public TableDescriptor createHtd(final String tableName) { return TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)) .setColumnFamily(ColumnFamilyDescriptorBuilder.of(TEST_FAMILY)) .build(); }