Search in sources :

Example 31 with TableReference

use of com.palantir.atlasdb.keyvalue.api.TableReference in project atlasdb by palantir.

the class CassandraKeyValueServiceImpl method filterOutNoOpMetadataChanges.

private Map<TableReference, byte[]> filterOutNoOpMetadataChanges(final Map<TableReference, byte[]> tableNamesToTableMetadata) {
    Map<TableReference, byte[]> existingTableMetadata = getMetadataForTables();
    Map<TableReference, byte[]> tableMetadataUpdates = Maps.newHashMap();
    for (Entry<TableReference, byte[]> entry : tableNamesToTableMetadata.entrySet()) {
        TableReference tableReference = entry.getKey();
        byte[] newMetadata = entry.getValue();
        // if no existing table or if existing table's metadata is different
        if (metadataIsDifferent(existingTableMetadata.get(tableReference), newMetadata)) {
            Set<TableReference> matchingTables = Sets.filter(existingTableMetadata.keySet(), existingTableRef -> existingTableRef.getQualifiedName().equalsIgnoreCase(tableReference.getQualifiedName()));
            // completely new table, not an update
            if (matchingTables.isEmpty()) {
                tableMetadataUpdates.put(tableReference, newMetadata);
            } else {
                // existing case-insensitive table, maybe an update
                if (Arrays.equals(existingTableMetadata.get(Iterables.getOnlyElement(matchingTables)), newMetadata)) {
                    log.debug("Case-insensitive matched table already existed with same metadata," + " skipping update to {}", LoggingArgs.tableRef(tableReference));
                } else {
                    // existing table has different metadata, so we should perform an update
                    tableMetadataUpdates.put(tableReference, newMetadata);
                }
            }
        } else {
            log.debug("Table already existed with same metadata, skipping update to {}", LoggingArgs.tableRef(tableReference));
        }
    }
    return tableMetadataUpdates;
}
Also used : TableReference(com.palantir.atlasdb.keyvalue.api.TableReference)

Example 32 with TableReference

use of com.palantir.atlasdb.keyvalue.api.TableReference in project atlasdb by palantir.

the class CassandraSchemaLockTest method shouldCreateTablesConsistentlyWithMultipleCassandraNodes.

@Test
public void shouldCreateTablesConsistentlyWithMultipleCassandraNodes() throws Exception {
    TableReference table1 = TableReference.createFromFullyQualifiedName("ns.table1");
    CassandraKeyValueServiceConfig config = ThreeNodeCassandraCluster.KVS_CONFIG;
    try {
        CyclicBarrier barrier = new CyclicBarrier(THREAD_COUNT);
        for (int i = 0; i < THREAD_COUNT; i++) {
            async(() -> {
                CassandraKeyValueService keyValueService = CassandraKeyValueServiceImpl.create(config, Optional.empty());
                barrier.await();
                keyValueService.createTable(table1, AtlasDbConstants.GENERIC_TABLE_METADATA);
                return null;
            });
        }
    } finally {
        executorService.shutdown();
        assertTrue(executorService.awaitTermination(4, TimeUnit.MINUTES));
    }
    CassandraKeyValueService kvs = CassandraKeyValueServiceImpl.create(config, Optional.empty());
    assertThat(kvs.getAllTableNames(), hasItem(table1));
    assertThat(new File(CONTAINERS.getLogDirectory()), containsFiles(everyItem(doesNotContainTheColumnFamilyIdMismatchError())));
}
Also used : TableReference(com.palantir.atlasdb.keyvalue.api.TableReference) CassandraKeyValueService(com.palantir.atlasdb.keyvalue.cassandra.CassandraKeyValueService) File(java.io.File) CassandraKeyValueServiceConfig(com.palantir.atlasdb.cassandra.CassandraKeyValueServiceConfig) CyclicBarrier(java.util.concurrent.CyclicBarrier) Test(org.junit.Test)

Example 33 with TableReference

use of com.palantir.atlasdb.keyvalue.api.TableReference in project atlasdb by palantir.

the class CassandraKeyValueServiceIntegrationTest method testCreateTableCaseInsensitive.

@Test
public void testCreateTableCaseInsensitive() throws TException {
    TableReference table1 = TableReference.createFromFullyQualifiedName("ns.tAbLe");
    TableReference table2 = TableReference.createFromFullyQualifiedName("ns.table");
    TableReference table3 = TableReference.createFromFullyQualifiedName("ns.TABle");
    keyValueService.createTable(table1, AtlasDbConstants.GENERIC_TABLE_METADATA);
    keyValueService.createTable(table2, AtlasDbConstants.GENERIC_TABLE_METADATA);
    keyValueService.createTable(table3, AtlasDbConstants.GENERIC_TABLE_METADATA);
    Set<TableReference> allTables = keyValueService.getAllTableNames();
    Preconditions.checkArgument(allTables.contains(table1));
    Preconditions.checkArgument(!allTables.contains(table2));
    Preconditions.checkArgument(!allTables.contains(table3));
}
Also used : TableReference(com.palantir.atlasdb.keyvalue.api.TableReference) AbstractKeyValueServiceTest(com.palantir.atlasdb.keyvalue.impl.AbstractKeyValueServiceTest) Test(org.junit.Test)

Example 34 with TableReference

use of com.palantir.atlasdb.keyvalue.api.TableReference in project atlasdb by palantir.

the class StreamTableTypeTest method getIndexTableFromValueTableWorksWithTableWithEmptyNamespace.

@Test
public void getIndexTableFromValueTableWorksWithTableWithEmptyNamespace() {
    String valueTableName = StreamTableType.VALUE.getTableName(TEST_TABLE);
    TableReference valueTable = TableReference.createWithEmptyNamespace(valueTableName);
    String indexTableName = StreamTableType.INDEX.getTableName(TEST_TABLE);
    TableReference expectedIndexTable = TableReference.createWithEmptyNamespace(indexTableName);
    TableReference indexTableFromValueTable = StreamTableType.getIndexTableFromValueTable(valueTable);
    assertThat(indexTableFromValueTable).isNotEqualTo(valueTable);
    assertEquals(expectedIndexTable, indexTableFromValueTable);
}
Also used : TableReference(com.palantir.atlasdb.keyvalue.api.TableReference) Test(org.junit.Test)

Example 35 with TableReference

use of com.palantir.atlasdb.keyvalue.api.TableReference in project atlasdb by palantir.

the class StreamTableTypeTest method getIndexTableFromValueTableWorksWithTableWithNamespace.

@Test
public void getIndexTableFromValueTableWorksWithTableWithNamespace() {
    String valueTableName = StreamTableType.VALUE.getTableName(TEST_TABLE);
    TableReference valueTable = TableReference.create(TEST_NAMESPACE, valueTableName);
    String indexTableName = StreamTableType.INDEX.getTableName(TEST_TABLE);
    TableReference expectedIndexTable = TableReference.create(TEST_NAMESPACE, indexTableName);
    TableReference indexTableFromValueTable = StreamTableType.getIndexTableFromValueTable(valueTable);
    assertThat(indexTableFromValueTable).isNotEqualTo(valueTable);
    assertEquals(expectedIndexTable, indexTableFromValueTable);
}
Also used : TableReference(com.palantir.atlasdb.keyvalue.api.TableReference) Test(org.junit.Test)

Aggregations

TableReference (com.palantir.atlasdb.keyvalue.api.TableReference)112 Cell (com.palantir.atlasdb.keyvalue.api.Cell)41 Test (org.junit.Test)41 Map (java.util.Map)17 ImmutableMap (com.google.common.collect.ImmutableMap)13 Multimap (com.google.common.collect.Multimap)13 Entry (java.util.Map.Entry)13 Set (java.util.Set)13 RowResult (com.palantir.atlasdb.keyvalue.api.RowResult)12 Value (com.palantir.atlasdb.keyvalue.api.Value)12 Collection (java.util.Collection)12 List (java.util.List)12 ImmutableSet (com.google.common.collect.ImmutableSet)11 KeyValueService (com.palantir.atlasdb.keyvalue.api.KeyValueService)11 RangeRequest (com.palantir.atlasdb.keyvalue.api.RangeRequest)11 SortedMap (java.util.SortedMap)11 Lists (com.google.common.collect.Lists)10 AtlasDbConstants (com.palantir.atlasdb.AtlasDbConstants)10 Sets (com.google.common.collect.Sets)9 InsufficientConsistencyException (com.palantir.atlasdb.keyvalue.api.InsufficientConsistencyException)9