Example #1
0
    public async Task TestOpenScanWithDroppedPartition()
    {
        await using var miniCluster = await new MiniKuduClusterBuilder().BuildAsync();
        await using var client      = miniCluster.CreateClient();

        var builder = ClientTestUtil.GetBasicSchema()
                      .SetTableName("TestOpenScanWithDroppedPartition")
                      .CreateBasicRangePartition()
                      .AddRangePartition((lower, upper) =>
        {
            lower.SetInt32("key", 0);
            upper.SetInt32("key", 1000);
        })
                      .AddRangePartition((lower, upper) =>
        {
            lower.SetInt32("key", 1000);
            upper.SetInt32("key", 2000);
        });

        var table = await client.CreateTableAsync(builder);

        // Load rows into both partitions.
        int numRows = 1999;
        await ClientTestUtil.LoadDefaultTableAsync(client, table, numRows);

        // Scan the rows while dropping a partition.
        var scanner = client.NewScanBuilder(table)
                      // Set a small batch size so the first scan doesn't read all the rows.
                      .SetBatchSizeBytes(100)
                      .SetReadMode(ReadMode.ReadYourWrites)
                      .Build();

        long rowsScanned = 0;
        int  batchNum    = 0;

        await foreach (var resultSet in scanner)
        {
            if (batchNum == 1)
            {
                // Drop the partition.
                await client.AlterTableAsync(new AlterTableBuilder(table)
                                             .DropRangePartition((lower, upper) =>
                {
                    lower.SetInt32("key", 0);
                    upper.SetInt32("key", 1000);
                }));

                // Give time for the background drop operations.
                await Task.Delay(1000);

                // TODO: Verify the partition was dropped.
            }

            rowsScanned += resultSet.Count;
            batchNum++;
        }

        Assert.True(batchNum > 1);
        Assert.Equal(numRows, rowsScanned);
    }
Example #2
0
    public async Task TestScanTokenRequestsWithMetadata(
        bool includeTableMetadata, bool includeTabletMetadata)
    {
        var builder = ClientTestUtil.GetBasicSchema()
                      .SetTableName(_tableName)
                      .SetNumReplicas(3);

        var table = await _client.CreateTableAsync(builder);

        await ClientTestUtil.LoadDefaultTableAsync(_client, table, 1);

        var tokens = await _client.NewScanTokenBuilder(table)
                     .IncludeTableMetadata(includeTableMetadata)
                     .IncludeTabletMetadata(includeTabletMetadata)
                     .BuildAsync();

        var token = Assert.Single(tokens);

        // Use a new client to simulate hydrating in a new process.
        var newClient = _harness.CreateClient();

        var scanBuilder = await newClient.NewScanBuilderFromTokenAsync(token.Serialize());

        var scanner = scanBuilder.Build();

        Assert.Equal(1, await scanner.CountAsync());
    }
Example #3
0
    public async Task TestScanTokensWithExtraPredicate()
    {
        int numRows        = 100;
        int predicateIndex = 0;
        int predicateValue = 1;

        var builder = ClientTestUtil.GetBasicSchema()
                      .SetTableName(_tableName)
                      .CreateBasicRangePartition();

        var table = await _client.CreateTableAsync(builder);

        await ClientTestUtil.LoadDefaultTableAsync(_client, table, numRows);

        var tokens = await _client.NewScanTokenBuilder(table).BuildAsync();

        var columnSchema = table.Schema.GetColumn(predicateIndex);
        var predicate    = KuduPredicate.NewComparisonPredicate(
            columnSchema, ComparisonOp.Equal, predicateValue);

        var resultKeys = new List <int>();

        foreach (var token in tokens)
        {
            byte[] serialized  = token.Serialize();
            var    scanBuilder = await _client.NewScanBuilderFromTokenAsync(serialized);

            var scanner = scanBuilder
                          .AddPredicate(predicate)
                          .Build();

            await foreach (var resultSet in scanner)
            {
                foreach (var row in resultSet)
                {
                    resultKeys.Add(row.GetInt32(predicateIndex));
                }
            }
        }

        Assert.Collection(resultKeys, key => Assert.Equal(predicateValue, key));
    }