|
31 | 31 | import org.apache.hadoop.hbase.HBaseTestingUtil;
|
32 | 32 | import org.apache.hadoop.hbase.HConstants;
|
33 | 33 | import org.apache.hadoop.hbase.TableName;
|
| 34 | +import org.apache.hadoop.hbase.regionserver.DataTieringManager; |
| 35 | +import org.apache.hadoop.hbase.regionserver.DataTieringType; |
| 36 | +import org.apache.hadoop.hbase.regionserver.StoreEngine; |
34 | 37 | import org.apache.hadoop.hbase.testclassification.ClientTests;
|
35 | 38 | import org.apache.hadoop.hbase.testclassification.LargeTests;
|
36 | 39 | import org.apache.hadoop.hbase.util.Bytes;
|
@@ -187,6 +190,48 @@ public void testIllegalTableDescriptor() throws Exception {
|
187 | 190 | + "cause very frequent flushing."));
|
188 | 191 | }
|
189 | 192 |
|
| 193 | + @Test |
| 194 | + public void testIllegalTableDescriptorWithDataTiering() throws IOException { |
| 195 | + // table level configuration changes |
| 196 | + TableDescriptorBuilder builder = |
| 197 | + TableDescriptorBuilder.newBuilder(TableName.valueOf(name.getMethodName())); |
| 198 | + ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(FAMILY); |
| 199 | + builder.setColumnFamily(cfBuilder.build()); |
| 200 | + |
| 201 | + // First scenario: DataTieringType set to TIME_RANGE without DateTieredStoreEngine |
| 202 | + builder.setValue(DataTieringManager.DATATIERING_KEY, DataTieringType.TIME_RANGE.name()); |
| 203 | + checkTableIsIllegal(builder.build()); |
| 204 | + |
| 205 | + // Second scenario: DataTieringType set to TIME_RANGE with DateTieredStoreEngine |
| 206 | + builder.setValue(StoreEngine.STORE_ENGINE_CLASS_KEY, |
| 207 | + "org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine"); |
| 208 | + checkTableIsLegal(builder.build()); |
| 209 | + |
| 210 | + // Third scenario: Disabling DateTieredStoreEngine while Time Range DataTiering is active |
| 211 | + builder.setValue(StoreEngine.STORE_ENGINE_CLASS_KEY, |
| 212 | + "org.apache.hadoop.hbase.regionserver.DefaultStoreEngine"); |
| 213 | + checkTableIsIllegal(builder.build()); |
| 214 | + |
| 215 | + // column family level configuration changes |
| 216 | + builder = TableDescriptorBuilder.newBuilder(TableName.valueOf(name.getMethodName())); |
| 217 | + cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(FAMILY); |
| 218 | + |
| 219 | + // First scenario: DataTieringType set to TIME_RANGE without DateTieredStoreEngine |
| 220 | + cfBuilder.setConfiguration(DataTieringManager.DATATIERING_KEY, |
| 221 | + DataTieringType.TIME_RANGE.name()); |
| 222 | + checkTableIsIllegal(builder.setColumnFamily(cfBuilder.build()).build()); |
| 223 | + |
| 224 | + // Second scenario: DataTieringType set to TIME_RANGE with DateTieredStoreEngine |
| 225 | + cfBuilder.setConfiguration(StoreEngine.STORE_ENGINE_CLASS_KEY, |
| 226 | + "org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine"); |
| 227 | + checkTableIsLegal(builder.modifyColumnFamily(cfBuilder.build()).build()); |
| 228 | + |
| 229 | + // Third scenario: Disabling DateTieredStoreEngine while Time Range DataTiering is active |
| 230 | + cfBuilder.setConfiguration(StoreEngine.STORE_ENGINE_CLASS_KEY, |
| 231 | + "org.apache.hadoop.hbase.regionserver.DefaultStoreEngine"); |
| 232 | + checkTableIsIllegal(builder.modifyColumnFamily(cfBuilder.build()).build()); |
| 233 | + } |
| 234 | + |
190 | 235 | private void checkTableIsLegal(TableDescriptor tableDescriptor) throws IOException {
|
191 | 236 | Admin admin = TEST_UTIL.getAdmin();
|
192 | 237 | admin.createTable(tableDescriptor);
|
|
0 commit comments