HBASE-17245 Replace HTableDescriptor#htd.getColumnFamilies().length with a low-cost implementation. (huaxiang sun)
This commit is contained in:
parent
004f0abb46
commit
e10baacd3e
|
@ -1197,6 +1197,15 @@ public class HTableDescriptor implements Comparable<HTableDescriptor> {
|
||||||
return Collections.unmodifiableSet(this.families.keySet());
|
return Collections.unmodifiableSet(this.families.keySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the count of the column families of the table.
|
||||||
|
*
|
||||||
|
* @return Count of column families of the table
|
||||||
|
*/
|
||||||
|
public int getColumnFamilyCount() {
|
||||||
|
return families.size();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array all the {@link HColumnDescriptor} of the column families
|
* Returns an array all the {@link HColumnDescriptor} of the column families
|
||||||
* of the table.
|
* of the table.
|
||||||
|
|
|
@ -733,7 +733,7 @@ public class IntegrationTestDDLMasterFailover extends IntegrationTestBase {
|
||||||
|
|
||||||
Admin admin = connection.getAdmin();
|
Admin admin = connection.getAdmin();
|
||||||
try {
|
try {
|
||||||
if (selected.getColumnFamilies().length < 2) {
|
if (selected.getColumnFamilyCount() < 2) {
|
||||||
LOG.info("No enough column families to delete in table " + selected.getTableName());
|
LOG.info("No enough column families to delete in table " + selected.getTableName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1694,7 +1694,7 @@ public class HMaster extends HRegionServer implements MasterServices {
|
||||||
warnOrThrowExceptionForFailure(false, CONF_KEY, e.getMessage(), e);
|
warnOrThrowExceptionForFailure(false, CONF_KEY, e.getMessage(), e);
|
||||||
}
|
}
|
||||||
// check that we have at least 1 CF
|
// check that we have at least 1 CF
|
||||||
if (htd.getColumnFamilies().length == 0) {
|
if (htd.getColumnFamilyCount() == 0) {
|
||||||
String message = "Table should have at least one column family.";
|
String message = "Table should have at least one column family.";
|
||||||
warnOrThrowExceptionForFailure(logWarn, CONF_KEY, message, null);
|
warnOrThrowExceptionForFailure(logWarn, CONF_KEY, message, null);
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,7 +231,7 @@ public class CreateTableProcedure
|
||||||
}
|
}
|
||||||
|
|
||||||
// check that we have at least 1 CF
|
// check that we have at least 1 CF
|
||||||
if (hTableDescriptor.getColumnFamilies().length == 0) {
|
if (hTableDescriptor.getColumnFamilyCount() == 0) {
|
||||||
setFailure("master-create-table", new DoNotRetryIOException("Table " +
|
setFailure("master-create-table", new DoNotRetryIOException("Table " +
|
||||||
getTableName().toString() + " should have at least one column family."));
|
getTableName().toString() + " should have at least one column family."));
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -242,7 +242,7 @@ public class DeleteColumnFamilyProcedure
|
||||||
+ "' does not exist, so it cannot be deleted");
|
+ "' does not exist, so it cannot be deleted");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unmodifiedHTableDescriptor.getColumnFamilies().length == 1) {
|
if (unmodifiedHTableDescriptor.getColumnFamilyCount() == 1) {
|
||||||
throw new InvalidFamilyOperationException("Family '" + getColumnFamilyName()
|
throw new InvalidFamilyOperationException("Family '" + getColumnFamilyName()
|
||||||
+ "' is the only column family in the table, so it cannot be deleted");
|
+ "' is the only column family in the table, so it cannot be deleted");
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,7 +237,7 @@ public class ModifyTableProcedure
|
||||||
}
|
}
|
||||||
|
|
||||||
// check that we have at least 1 CF
|
// check that we have at least 1 CF
|
||||||
if (modifiedHTableDescriptor.getColumnFamilies().length == 0) {
|
if (modifiedHTableDescriptor.getColumnFamilyCount() == 0) {
|
||||||
throw new DoNotRetryIOException("Table " + getTableName().toString() +
|
throw new DoNotRetryIOException("Table " + getTableName().toString() +
|
||||||
" should have at least one column family.");
|
" should have at least one column family.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -326,7 +326,7 @@ public class RestoreSnapshotProcedure
|
||||||
env.getMasterServices().checkTableModifiable(tableName);
|
env.getMasterServices().checkTableModifiable(tableName);
|
||||||
|
|
||||||
// Check that we have at least 1 CF
|
// Check that we have at least 1 CF
|
||||||
if (modifiedHTableDescriptor.getColumnFamilies().length == 0) {
|
if (modifiedHTableDescriptor.getColumnFamilyCount() == 0) {
|
||||||
throw new DoNotRetryIOException("Table " + getTableName().toString() +
|
throw new DoNotRetryIOException("Table " + getTableName().toString() +
|
||||||
" should have at least one column family.");
|
" should have at least one column family.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -802,7 +802,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
|
||||||
private long initialize(final CancelableProgressable reporter) throws IOException {
|
private long initialize(final CancelableProgressable reporter) throws IOException {
|
||||||
|
|
||||||
//Refuse to open the region if there is no column family in the table
|
//Refuse to open the region if there is no column family in the table
|
||||||
if (htableDescriptor.getColumnFamilies().length == 0) {
|
if (htableDescriptor.getColumnFamilyCount() == 0) {
|
||||||
throw new DoNotRetryIOException("Table " + htableDescriptor.getNameAsString() +
|
throw new DoNotRetryIOException("Table " + htableDescriptor.getNameAsString() +
|
||||||
" should have at least one column family.");
|
" should have at least one column family.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -246,7 +246,7 @@ public class TestReplicaWithCluster {
|
||||||
HTU.getHBaseAdmin().enableTable(hdt.getTableName());
|
HTU.getHBaseAdmin().enableTable(hdt.getTableName());
|
||||||
HTableDescriptor nHdt = HTU.getHBaseAdmin().getTableDescriptor(hdt.getTableName());
|
HTableDescriptor nHdt = HTU.getHBaseAdmin().getTableDescriptor(hdt.getTableName());
|
||||||
Assert.assertEquals("fams=" + Arrays.toString(nHdt.getColumnFamilies()),
|
Assert.assertEquals("fams=" + Arrays.toString(nHdt.getColumnFamilies()),
|
||||||
bHdt.getColumnFamilies().length + 1, nHdt.getColumnFamilies().length);
|
bHdt.getColumnFamilyCount() + 1, nHdt.getColumnFamilyCount());
|
||||||
|
|
||||||
p = new Put(row);
|
p = new Put(row);
|
||||||
p.addColumn(row, row, row);
|
p.addColumn(row, row, row);
|
||||||
|
@ -270,7 +270,7 @@ public class TestReplicaWithCluster {
|
||||||
Admin admin = HTU.getHBaseAdmin();
|
Admin admin = HTU.getHBaseAdmin();
|
||||||
nHdt =admin.getTableDescriptor(hdt.getTableName());
|
nHdt =admin.getTableDescriptor(hdt.getTableName());
|
||||||
Assert.assertEquals("fams=" + Arrays.toString(nHdt.getColumnFamilies()),
|
Assert.assertEquals("fams=" + Arrays.toString(nHdt.getColumnFamilies()),
|
||||||
bHdt.getColumnFamilies().length + 1, nHdt.getColumnFamilies().length);
|
bHdt.getColumnFamilyCount() + 1, nHdt.getColumnFamilyCount());
|
||||||
|
|
||||||
admin.disableTable(hdt.getTableName());
|
admin.disableTable(hdt.getTableName());
|
||||||
admin.deleteTable(hdt.getTableName());
|
admin.deleteTable(hdt.getTableName());
|
||||||
|
|
|
@ -107,7 +107,7 @@ public class TestDeleteColumnFamilyProcedureFromClient {
|
||||||
assertTrue(admin.isTableAvailable(TABLENAME));
|
assertTrue(admin.isTableAvailable(TABLENAME));
|
||||||
|
|
||||||
// 2 - Check if all three families exist in descriptor
|
// 2 - Check if all three families exist in descriptor
|
||||||
assertEquals(3, beforehtd.getColumnFamilies().length);
|
assertEquals(3, beforehtd.getColumnFamilyCount());
|
||||||
HColumnDescriptor[] families = beforehtd.getColumnFamilies();
|
HColumnDescriptor[] families = beforehtd.getColumnFamilies();
|
||||||
for (int i = 0; i < families.length; i++) {
|
for (int i = 0; i < families.length; i++) {
|
||||||
assertTrue(families[i].getNameAsString().equals("cf" + (i + 1)));
|
assertTrue(families[i].getNameAsString().equals("cf" + (i + 1)));
|
||||||
|
@ -147,7 +147,7 @@ public class TestDeleteColumnFamilyProcedureFromClient {
|
||||||
|
|
||||||
// 5 - Check if only 2 column families exist in the descriptor
|
// 5 - Check if only 2 column families exist in the descriptor
|
||||||
HTableDescriptor afterhtd = admin.getTableDescriptor(TABLENAME);
|
HTableDescriptor afterhtd = admin.getTableDescriptor(TABLENAME);
|
||||||
assertEquals(2, afterhtd.getColumnFamilies().length);
|
assertEquals(2, afterhtd.getColumnFamilyCount());
|
||||||
HColumnDescriptor[] newFamilies = afterhtd.getColumnFamilies();
|
HColumnDescriptor[] newFamilies = afterhtd.getColumnFamilies();
|
||||||
assertTrue(newFamilies[0].getNameAsString().equals("cf1"));
|
assertTrue(newFamilies[0].getNameAsString().equals("cf1"));
|
||||||
assertTrue(newFamilies[1].getNameAsString().equals("cf3"));
|
assertTrue(newFamilies[1].getNameAsString().equals("cf3"));
|
||||||
|
|
|
@ -138,7 +138,7 @@ public final class WALPerformanceEvaluation extends Configured implements Tool {
|
||||||
this.numIterations = numIterations;
|
this.numIterations = numIterations;
|
||||||
this.noSync = noSync;
|
this.noSync = noSync;
|
||||||
this.syncInterval = syncInterval;
|
this.syncInterval = syncInterval;
|
||||||
this.numFamilies = htd.getColumnFamilies().length;
|
this.numFamilies = htd.getColumnFamilyCount();
|
||||||
this.region = region;
|
this.region = region;
|
||||||
this.htd = htd;
|
this.htd = htd;
|
||||||
scopes = new TreeMap<byte[], Integer>(
|
scopes = new TreeMap<byte[], Integer>(
|
||||||
|
|
Loading…
Reference in New Issue