use of com.navercorp.pinpoint.hbase.schema.reader.core.TableChange in project pinpoint by naver.
the class HbaseSchemaCommandManager method applyChangeSet.
public void applyChangeSet(ChangeSet changeSet) {
Objects.requireNonNull(changeSet, "changeSet");
List<TableChange> tableChanges = changeSet.getTableChanges();
try {
for (TableChange tableChange : tableChanges) {
applyTableChange(tableChange);
}
} catch (Exception e) {
throw new InvalidHbaseSchemaException("Error applying changeSet : " + changeSet.getId(), e);
}
}
use of com.navercorp.pinpoint.hbase.schema.reader.core.TableChange in project pinpoint by naver.
the class XmlHbaseSchemaParserTest method parseSchema.
@Test
public void parseSchema() {
final String schemaFile = "hbase-schema/test-hbase-schema.xml";
TableConfiguration expectedChangeSet1_tableConfiguration = new TableConfiguration.Builder().durability(TableConfiguration.Durability.ASYNC_WAL).build();
List<ColumnFamilyChange> expectedChangeSet1_columnFamilies = Arrays.asList(new CreateColumnFamilyChange("CF1", new ColumnFamilyConfiguration.Builder().timeToLive(86400).dataBlockEncoding(ColumnFamilyConfiguration.DataBlockEncoding.NONE).build()), new CreateColumnFamilyChange("CF2", ColumnFamilyConfiguration.EMPTY_CONFIGURATION));
CreateTableChange.SplitOption expectedChangeSet1_tableSplitOption = new CreateTableChange.SplitOption.Auto(16);
TableChange expectedChangeSet1_tableChange = new CreateTableChange("Table1", expectedChangeSet1_tableConfiguration, expectedChangeSet1_columnFamilies, expectedChangeSet1_tableSplitOption);
List<ColumnFamilyChange> expectedChangeSet2_columnFamilies = Arrays.asList(new CreateColumnFamilyChange("CF3", ColumnFamilyConfiguration.EMPTY_CONFIGURATION));
TableChange expectedChangeSet2_tableChange = new ModifyTableChange("Table1", TableConfiguration.EMPTY_CONFIGURATION, expectedChangeSet2_columnFamilies);
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(schemaFile);
XmlHbaseSchemaParseResult parseResult = parser.parseSchema(new InputSource(inputStream));
List<String> includeFiles = new ArrayList<>(parseResult.getIncludeFiles());
assertThat(includeFiles.size(), is(1));
String includeFile = includeFiles.get(0);
assertThat(includeFile, is("test-hbase-schema-include.xml"));
List<ChangeSet> changeSets = new ArrayList<>(parseResult.getChangeSets());
assertThat(changeSets.size(), is(2));
ChangeSet changeSet1 = changeSets.get(0);
assertThat(changeSet1.getId(), is("id-1"));
assertThat(changeSet1.getTableChanges(), is(Arrays.asList(expectedChangeSet1_tableChange)));
ChangeSet changeSet2 = changeSets.get(1);
assertThat(changeSet2.getId(), is("id-2"));
assertThat(changeSet2.getTableChanges(), is(Arrays.asList(expectedChangeSet2_tableChange)));
}
use of com.navercorp.pinpoint.hbase.schema.reader.core.TableChange in project pinpoint by naver.
the class HbaseSchemaCommandManagerTest method creatingExistingTableShouldFail.
@Test(expected = InvalidHbaseSchemaException.class)
public void creatingExistingTableShouldFail() {
String namespace = "namespace";
String tableName = "table";
HTableDescriptor existingTable = createHtd(namespace, tableName, "CF");
HbaseSchemaCommandManager manager = new HbaseSchemaCommandManager(namespace, null, Arrays.asList(existingTable));
TableChange createTableChange = newTableChange(ChangeType.CREATE, tableName);
ChangeSet createTableChangeSet = newChangeSet(createTableChange);
manager.applyChangeSet(createTableChangeSet);
}
use of com.navercorp.pinpoint.hbase.schema.reader.core.TableChange in project pinpoint by naver.
the class HbaseSchemaCommandManagerTest method failedChangesShouldNotAffectTheSchema.
@Test
public void failedChangesShouldNotAffectTheSchema() {
String namespace = "namespace";
String tableName = "table";
String columnFamilyName = "CF";
HbaseSchemaCommandManager manager = new HbaseSchemaCommandManager(namespace, null);
// initial create table
ColumnFamilyChange columnFamilyChange = newColumnFamilyChange(columnFamilyName);
TableChange createTableChange = newTableChange(ChangeType.CREATE, tableName, columnFamilyChange);
ChangeSet createTableChangeSet = newChangeSet(createTableChange);
manager.applyChangeSet(createTableChangeSet);
List<HTableDescriptor> initialSnapshot = manager.getSchemaSnapshot();
// modify non-existing table
TableChange modifyNonExistingTableChange = newTableChange(ChangeType.MODIFY, "nonExistingTable", newColumnFamilyChange("newCF"));
ChangeSet modifyNonExistingTableChangeSet = newChangeSet(modifyNonExistingTableChange);
try {
manager.applyChangeSet(modifyNonExistingTableChangeSet);
fail("Expected an InvalidHbaseSchemaException to be thrown");
} catch (InvalidHbaseSchemaException expected) {
List<HTableDescriptor> currentSnapshot = manager.getSchemaSnapshot();
assertThat(currentSnapshot, equalTo(initialSnapshot));
}
// create existing table
TableChange createExistingTableChange = newTableChange(ChangeType.CREATE, tableName);
ChangeSet createExistingTableChangeSet = newChangeSet(createExistingTableChange);
try {
manager.applyChangeSet(createExistingTableChangeSet);
fail("Expected an InvalidHbaseSchemaException to be thrown");
} catch (InvalidHbaseSchemaException expected) {
List<HTableDescriptor> currentSnapshot = manager.getSchemaSnapshot();
assertThat(currentSnapshot, equalTo(initialSnapshot));
}
// create existing column family
ColumnFamilyChange createExistingColumnFamilyChange = newColumnFamilyChange(columnFamilyName);
TableChange createExistingColumnFamilyTableChange = newTableChange(ChangeType.MODIFY, tableName, createExistingColumnFamilyChange);
ChangeSet createExistingColumnFamilyChangeSet = newChangeSet(createExistingColumnFamilyTableChange);
try {
manager.applyChangeSet(createExistingColumnFamilyChangeSet);
fail("Expected an InvalidHbaseSchemaException to be thrown");
} catch (InvalidHbaseSchemaException expected) {
List<HTableDescriptor> currentSnapshot = manager.getSchemaSnapshot();
assertThat(currentSnapshot, equalTo(initialSnapshot));
}
}
use of com.navercorp.pinpoint.hbase.schema.reader.core.TableChange in project pinpoint by naver.
the class HbaseSchemaCommandManagerTest method shouldFilterTablesFromDifferentNamespace.
@Test
public void shouldFilterTablesFromDifferentNamespace() {
String namespace = "namespace";
String differentNamespace = "differentNamespace";
String tableName = "table1";
HTableDescriptor sameNamespaceHtd = createHtd(namespace, tableName, "CF1");
HTableDescriptor differentNamespaceHtd = createHtd(differentNamespace, tableName, "CF1");
List<HTableDescriptor> htds = Arrays.asList(sameNamespaceHtd, differentNamespaceHtd);
HbaseSchemaCommandManager manager = new HbaseSchemaCommandManager(namespace, null, htds);
ColumnFamilyChange createColumnFamilyChange = newColumnFamilyChange("CF2");
TableChange modifyTableChange = newTableChange(ChangeType.MODIFY, tableName, createColumnFamilyChange);
ChangeSet modifyTableChangeSet = newChangeSet(modifyTableChange);
manager.applyChangeSet(modifyTableChangeSet);
List<HTableDescriptor> schemaSnapshot = manager.getSchemaSnapshot();
assertThat(schemaSnapshot, contains(sameNamespaceHtd));
assertThat(schemaSnapshot, not(contains(differentNamespaceHtd)));
}
Aggregations