Search in sources :

Example 11 with TableDefinition

use of com.palantir.atlasdb.table.description.TableDefinition in project atlasdb by palantir.

the class StreamTestSchema method generateSchema.

private static Schema generateSchema() {
    Schema schema = new Schema("StreamTest", StreamTestSchema.class.getPackage().getName() + ".generated", Namespace.DEFAULT_NAMESPACE, OptionalType.JAVA8);
    schema.addTableDefinition("blobs", new TableDefinition() {

        {
            javaTableName("KeyValue");
            rangeScanAllowed();
            rowName();
            rowComponent("key", ValueType.STRING);
            columns();
            column("streamId", "s", ValueType.VAR_LONG);
        }
    });
    schema.addStreamStoreDefinition(new StreamStoreDefinitionBuilder("blob", "Value", ValueType.VAR_LONG).inMemoryThreshold(1024 * 1024).tableNameLogSafety(TableMetadataPersistence.LogSafety.SAFE).build());
    return schema;
}
Also used : StreamStoreDefinitionBuilder(com.palantir.atlasdb.schema.stream.StreamStoreDefinitionBuilder) AtlasSchema(com.palantir.atlasdb.schema.AtlasSchema) Schema(com.palantir.atlasdb.table.description.Schema) TableDefinition(com.palantir.atlasdb.table.description.TableDefinition)

Example 12 with TableDefinition

use of com.palantir.atlasdb.table.description.TableDefinition in project atlasdb by palantir.

the class AbstractTransactionTest method testTableMetadata.

@Test
public void testTableMetadata() {
    keyValueService.dropTable(TEST_TABLE);
    keyValueService.createTable(TEST_TABLE, AtlasDbConstants.GENERIC_TABLE_METADATA);
    byte[] metadataForTable = keyValueService.getMetadataForTable(TEST_TABLE);
    assertTrue(metadataForTable == null || Arrays.equals(AtlasDbConstants.GENERIC_TABLE_METADATA, metadataForTable));
    byte[] bytes = new TableMetadata().persistToBytes();
    keyValueService.putMetadataForTable(TEST_TABLE, bytes);
    byte[] bytesRead = keyValueService.getMetadataForTable(TEST_TABLE);
    assertTrue(Arrays.equals(bytes, bytesRead));
    bytes = new TableDefinition() {

        {
            rowName();
            rowComponent("row", ValueType.FIXED_LONG);
            columns();
            column("col", "c", ValueType.VAR_STRING);
            conflictHandler(ConflictHandler.RETRY_ON_VALUE_CHANGED);
            negativeLookups();
            rangeScanAllowed();
            sweepStrategy(TableMetadataPersistence.SweepStrategy.CONSERVATIVE);
            explicitCompressionRequested();
            explicitCompressionBlockSizeKB(128);
        }
    }.toTableMetadata().persistToBytes();
    keyValueService.putMetadataForTable(TEST_TABLE, bytes);
    bytesRead = keyValueService.getMetadataForTable(TEST_TABLE);
    assertTrue(Arrays.equals(bytes, bytesRead));
}
Also used : TableMetadata(com.palantir.atlasdb.table.description.TableMetadata) TableDefinition(com.palantir.atlasdb.table.description.TableDefinition) Test(org.junit.Test)

Example 13 with TableDefinition

use of com.palantir.atlasdb.table.description.TableDefinition in project atlasdb by palantir.

the class TableMigratorTest method testMigrationToDifferentKvs.

// Table/IndexDefinition syntax
@SuppressWarnings({ "checkstyle:Indentation", "checkstyle:RightCurly" })
@Test
public void testMigrationToDifferentKvs() throws TableMappingNotFoundException {
    final TableReference tableRef = TableReference.create(Namespace.DEFAULT_NAMESPACE, "table");
    final TableReference namespacedTableRef = TableReference.createFromFullyQualifiedName("namespace." + tableRef.getTablename());
    TableDefinition definition = new TableDefinition() {

        {
            rowName();
            rowComponent("r", ValueType.BLOB);
            columns();
            column("c", "c", ValueType.BLOB);
        }
    };
    keyValueService.createTable(tableRef, definition.toTableMetadata().persistToBytes());
    keyValueService.createTable(namespacedTableRef, definition.toTableMetadata().persistToBytes());
    keyValueService.putMetadataForTable(namespacedTableRef, definition.toTableMetadata().persistToBytes());
    final Cell theCell = Cell.create(PtBytes.toBytes("r1"), PtBytes.toBytes("c"));
    final byte[] theValue = PtBytes.toBytes("v1");
    txManager.runTaskWithRetry((TransactionTask<Void, RuntimeException>) txn -> {
        Map<Cell, byte[]> values = ImmutableMap.of(theCell, theValue);
        txn.put(tableRef, values);
        txn.put(namespacedTableRef, values);
        return null;
    });
    final InMemoryKeyValueService kvs2 = new InMemoryKeyValueService(false);
    final ConflictDetectionManager cdm2 = ConflictDetectionManagers.createWithNoConflictDetection();
    final SweepStrategyManager ssm2 = SweepStrategyManagers.completelyConservative(kvs2);
    final TestTransactionManagerImpl txManager2 = new TestTransactionManagerImpl(kvs2, timestampService, lockClient, lockService, transactionService, cdm2, ssm2, MultiTableSweepQueueWriter.NO_OP);
    kvs2.createTable(tableRef, definition.toTableMetadata().persistToBytes());
    kvs2.createTable(namespacedTableRef, definition.toTableMetadata().persistToBytes());
    TableReference checkpointTable = TableReference.create(Namespace.DEFAULT_NAMESPACE, "checkpoint");
    GeneralTaskCheckpointer checkpointer = new GeneralTaskCheckpointer(checkpointTable, kvs2, txManager2);
    for (final TableReference name : Lists.newArrayList(tableRef, namespacedTableRef)) {
        TransactionRangeMigrator rangeMigrator = new TransactionRangeMigratorBuilder().srcTable(name).readTxManager(txManager).txManager(txManager2).checkpointer(checkpointer).build();
        TableMigratorBuilder builder = new TableMigratorBuilder().srcTable(name).partitions(1).executor(PTExecutors.newSingleThreadExecutor()).checkpointer(checkpointer).rangeMigrator(rangeMigrator);
        TableMigrator migrator = builder.build();
        migrator.migrate();
    }
    checkpointer.deleteCheckpoints();
    final ConflictDetectionManager verifyCdm = ConflictDetectionManagers.createWithNoConflictDetection();
    final SweepStrategyManager verifySsm = SweepStrategyManagers.completelyConservative(kvs2);
    final TestTransactionManagerImpl verifyTxManager = new TestTransactionManagerImpl(kvs2, timestampService, lockClient, lockService, transactionService, verifyCdm, verifySsm, MultiTableSweepQueueWriter.NO_OP);
    final MutableLong count = new MutableLong();
    for (final TableReference name : Lists.newArrayList(tableRef, namespacedTableRef)) {
        verifyTxManager.runTaskReadOnly((TransactionTask<Void, RuntimeException>) txn -> {
            BatchingVisitable<RowResult<byte[]>> bv = txn.getRange(name, RangeRequest.all());
            bv.batchAccept(1000, AbortingVisitors.batching(new AbortingVisitor<RowResult<byte[]>, RuntimeException>() {

                @Override
                public boolean visit(RowResult<byte[]> item) throws RuntimeException {
                    Iterable<Entry<Cell, byte[]>> cells = item.getCells();
                    Entry<Cell, byte[]> entry = Iterables.getOnlyElement(cells);
                    Assert.assertEquals(theCell, entry.getKey());
                    Assert.assertArrayEquals(theValue, entry.getValue());
                    count.increment();
                    return true;
                }
            }));
            return null;
        });
    }
    Assert.assertEquals(2L, count.longValue());
}
Also used : ConflictDetectionManager(com.palantir.atlasdb.transaction.impl.ConflictDetectionManager) Iterables(com.google.common.collect.Iterables) SweepStrategyManager(com.palantir.atlasdb.transaction.impl.SweepStrategyManager) BatchingVisitable(com.palantir.common.base.BatchingVisitable) InMemoryKeyValueService(com.palantir.atlasdb.keyvalue.impl.InMemoryKeyValueService) AtlasDbTestCase(com.palantir.atlasdb.AtlasDbTestCase) PtBytes(com.palantir.atlasdb.encoding.PtBytes) Lists(com.google.common.collect.Lists) PTExecutors(com.palantir.common.concurrent.PTExecutors) MutableLong(org.apache.commons.lang3.mutable.MutableLong) Map(java.util.Map) TableReference(com.palantir.atlasdb.keyvalue.api.TableReference) AbortingVisitors(com.palantir.common.base.AbortingVisitors) ConflictDetectionManagers(com.palantir.atlasdb.transaction.impl.ConflictDetectionManagers) SweepStrategyManagers(com.palantir.atlasdb.transaction.impl.SweepStrategyManagers) Namespace(com.palantir.atlasdb.keyvalue.api.Namespace) ImmutableMap(com.google.common.collect.ImmutableMap) Cell(com.palantir.atlasdb.keyvalue.api.Cell) Test(org.junit.Test) TableDefinition(com.palantir.atlasdb.table.description.TableDefinition) RangeRequest(com.palantir.atlasdb.keyvalue.api.RangeRequest) RowResult(com.palantir.atlasdb.keyvalue.api.RowResult) ValueType(com.palantir.atlasdb.table.description.ValueType) TransactionTask(com.palantir.atlasdb.transaction.api.TransactionTask) TableMappingNotFoundException(com.palantir.atlasdb.keyvalue.impl.TableMappingNotFoundException) Entry(java.util.Map.Entry) TestTransactionManagerImpl(com.palantir.atlasdb.transaction.impl.TestTransactionManagerImpl) MultiTableSweepQueueWriter(com.palantir.atlasdb.sweep.queue.MultiTableSweepQueueWriter) Assert(org.junit.Assert) AbortingVisitor(com.palantir.common.base.AbortingVisitor) InMemoryKeyValueService(com.palantir.atlasdb.keyvalue.impl.InMemoryKeyValueService) BatchingVisitable(com.palantir.common.base.BatchingVisitable) TableReference(com.palantir.atlasdb.keyvalue.api.TableReference) Entry(java.util.Map.Entry) TableDefinition(com.palantir.atlasdb.table.description.TableDefinition) Cell(com.palantir.atlasdb.keyvalue.api.Cell) SweepStrategyManager(com.palantir.atlasdb.transaction.impl.SweepStrategyManager) TestTransactionManagerImpl(com.palantir.atlasdb.transaction.impl.TestTransactionManagerImpl) RowResult(com.palantir.atlasdb.keyvalue.api.RowResult) MutableLong(org.apache.commons.lang3.mutable.MutableLong) ConflictDetectionManager(com.palantir.atlasdb.transaction.impl.ConflictDetectionManager) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) Test(org.junit.Test)

Example 14 with TableDefinition

use of com.palantir.atlasdb.table.description.TableDefinition in project atlasdb by palantir.

the class ProfileSchema method generateSchema.

private static Schema generateSchema() {
    Schema schema = new Schema("Profile", ProfileSchema.class.getPackage().getName() + ".generated", Namespace.DEFAULT_NAMESPACE, OptionalType.JAVA8);
    schema.addTableDefinition("user_profile", new TableDefinition() {

        {
            allSafeForLoggingByDefault();
            rowName();
            rowComponent("id", ValueType.UUID);
            columns();
            column("metadata", "m", ProfilePersistence.UserProfile.class);
            column("create", "c", CreationData.Persister.class);
            column("json", "j", JsonNodePersister.class);
            column("photo_stream_id", "p", ValueType.FIXED_LONG);
        }
    });
    schema.addIndexDefinition("user_birthdays", new IndexDefinition(IndexType.CELL_REFERENCING) {

        {
            onTable("user_profile");
            allSafeForLoggingByDefault();
            rowName();
            componentFromColumn("birthday", ValueType.VAR_SIGNED_LONG, "metadata", "_value.getBirthEpochDay()");
            dynamicColumns();
            componentFromRow("id", ValueType.UUID);
            rangeScanAllowed();
            ignoreHotspottingChecks();
        }
    });
    schema.addIndexDefinition("created", new IndexDefinition(IndexType.CELL_REFERENCING) {

        {
            onTable("user_profile");
            allSafeForLoggingByDefault();
            rowName();
            componentFromColumn("time", ValueType.VAR_LONG, "create", "_value.getTimeCreated()");
            dynamicColumns();
            componentFromRow("id", ValueType.UUID);
            rangeScanAllowed();
            ignoreHotspottingChecks();
        }
    });
    schema.addIndexDefinition("cookies", new IndexDefinition(IndexType.CELL_REFERENCING) {

        {
            onTable("user_profile");
            allSafeForLoggingByDefault();
            rowName();
            componentFromIterableColumn("cookie", ValueType.STRING, ValueByteOrder.ASCENDING, "json", "com.palantir.example.profile.schema.ProfileSchema.getCookies(_value)");
            dynamicColumns();
            componentFromRow("id", ValueType.UUID);
            rangeScanAllowed();
        }
    });
    schema.addStreamStoreDefinition(new StreamStoreDefinitionBuilder("user_photos", "user_photos", ValueType.VAR_LONG).tableNameLogSafety(TableMetadataPersistence.LogSafety.SAFE).build());
    return schema;
}
Also used : IndexDefinition(com.palantir.atlasdb.table.description.IndexDefinition) StreamStoreDefinitionBuilder(com.palantir.atlasdb.schema.stream.StreamStoreDefinitionBuilder) AtlasSchema(com.palantir.atlasdb.schema.AtlasSchema) Schema(com.palantir.atlasdb.table.description.Schema) TableDefinition(com.palantir.atlasdb.table.description.TableDefinition) JsonNodePersister(com.palantir.atlasdb.persister.JsonNodePersister) JsonNodePersister(com.palantir.atlasdb.persister.JsonNodePersister)

Example 15 with TableDefinition

use of com.palantir.atlasdb.table.description.TableDefinition in project atlasdb by palantir.

the class BenchmarksSchema method createTables.

private static void createTables(Schema schema) {
    schema.addTableDefinition("KvRows", new TableDefinition() {

        {
            rowName();
            hashFirstRowComponent();
            rowComponent("bucket", ValueType.VAR_STRING);
            rowComponent("key", ValueType.FIXED_LONG);
            columns();
            column("data", "d", ValueType.BLOB);
            rangeScanAllowed();
        }
    });
    schema.addTableDefinition("KvDynamicColumns", new TableDefinition() {

        {
            rowName();
            hashFirstRowComponent();
            rowComponent("bucket", ValueType.VAR_STRING);
            dynamicColumns();
            columnComponent("key", ValueType.FIXED_LONG);
            value(ValueType.BLOB);
            rangeScanAllowed();
        }
    });
    schema.addTableDefinition("Blobs", new TableDefinition() {

        {
            rowName();
            rowComponent("key", ValueType.BLOB);
            columns();
            column("data", "d", ValueType.BLOB);
        }
    });
    schema.addTableDefinition("BlobsSerializable", new TableDefinition() {

        {
            conflictHandler(ConflictHandler.SERIALIZABLE);
            rowName();
            rowComponent("key", ValueType.BLOB);
            columns();
            column("data", "d", ValueType.BLOB);
        }
    });
    schema.addTableDefinition("Metadata", new TableDefinition() {

        {
            rowName();
            hashFirstRowComponent();
            rowComponent("key", ValueType.VAR_STRING);
            columns();
            column("data", "d", ValueType.BLOB);
            rangeScanAllowed();
        }
    });
}
Also used : TableDefinition(com.palantir.atlasdb.table.description.TableDefinition)

Aggregations

TableDefinition (com.palantir.atlasdb.table.description.TableDefinition)17 Schema (com.palantir.atlasdb.table.description.Schema)8 AtlasSchema (com.palantir.atlasdb.schema.AtlasSchema)7 Test (org.junit.Test)4 TableReference (com.palantir.atlasdb.keyvalue.api.TableReference)3 StreamStoreDefinitionBuilder (com.palantir.atlasdb.schema.stream.StreamStoreDefinitionBuilder)3 Cell (com.palantir.atlasdb.keyvalue.api.Cell)2 IndexDefinition (com.palantir.atlasdb.table.description.IndexDefinition)2 ClassName (com.squareup.javapoet.ClassName)2 ImmutableMap (com.google.common.collect.ImmutableMap)1 Iterables (com.google.common.collect.Iterables)1 Lists (com.google.common.collect.Lists)1 AtlasDbTestCase (com.palantir.atlasdb.AtlasDbTestCase)1 PtBytes (com.palantir.atlasdb.encoding.PtBytes)1 Namespace (com.palantir.atlasdb.keyvalue.api.Namespace)1 RangeRequest (com.palantir.atlasdb.keyvalue.api.RangeRequest)1 RowResult (com.palantir.atlasdb.keyvalue.api.RowResult)1 Value (com.palantir.atlasdb.keyvalue.api.Value)1 InMemoryKeyValueService (com.palantir.atlasdb.keyvalue.impl.InMemoryKeyValueService)1 TableMappingNotFoundException (com.palantir.atlasdb.keyvalue.impl.TableMappingNotFoundException)1