public void scanBatch()

in hugegraph-store/hg-store-test/src/main/java/org/apache/hugegraph/store/HgSessionManagerTest.java [612:755]


    public void scanBatch() {
        HgStoreTestUtil.println("--- test scanBatch ---");
        String tableName = "UNIT_SCAN_BATCH_1";
        String keyName = "SCAN-BATCH";
        int keyAmt = 10_000;

        HgStoreSession session = getStoreSession();

        if (HgStoreTestUtil.amountOf(
                session.scanIterator(tableName, HgStoreTestUtil.toAllPartitionKey(keyName),
                                     keyAmt)) < keyAmt) {
            HgStoreTestUtil.batchPut(session, tableName, keyName, keyAmt);
        }

        Assert.assertEquals(keyAmt, HgStoreTestUtil.amountOf(session.scanIterator(tableName)));

        List<HgKvIterator<HgKvEntry>> iterators = null;
        List<HgOwnerKey> prefixes = null;

        List<HgOwnerKey> startList = Arrays.asList(
                HgStoreTestUtil.toAllPartitionKey(keyName + "-001")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-003")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-005")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-007")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-009")
        );

        List<HgOwnerKey> endList = Arrays.asList(
                HgStoreTestUtil.toAllPartitionKey(keyName + "-002")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-004")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-006")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-008")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-010")
        );

        List<HgOwnerKey> prefixList = Arrays.asList(
                HgStoreTestUtil.toAllPartitionKey(keyName + "-001")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-002")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-003")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-004")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-005")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-006")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-007")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-008")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-009")
        );

        HgStoreTestUtil.println("-- test scan-batch all --");

        HgScanQuery scanQuery = HgScanQuery.tableOf(tableName);
        iterators = session.scanBatch(scanQuery);
        Assert.assertEquals(3, iterators.size());

        Assert.assertEquals(keyAmt, HgStoreTestUtil.println(iterators));

        HgStoreTestUtil.println("-- test scan-batch prefix --");


        iterators = session.scanBatch(
                HgScanQuery.prefixOf(tableName, prefixList)
        );
        Assert.assertEquals(3, iterators.size());
        Assert.assertEquals(900,
                            iterators.parallelStream().mapToInt(e -> HgStoreTestUtil.amountOf(e))
                                     .sum()
        );

        HgStoreTestUtil.println("-- test scan-batch range --");

        iterators = session.scanBatch(HgScanQuery.rangeOf(tableName, startList, endList));
        Assert.assertEquals(3, iterators.size());
        Assert.assertEquals(
                HgStoreTestUtil.amountOf(
                        session.scanIterator(tableName
                                , HgStoreTestUtil.toAllPartitionKey(keyName + "-001")
                                , HgStoreTestUtil.toAllPartitionKey(keyName + "-010")
                        )
                )
                ,
                iterators.parallelStream().mapToInt(e -> HgStoreTestUtil.amountOf(e)).sum()
        );

        HgStoreTestUtil.println("-- test scan-batch limit --");

        int limit = 1;
        iterators = session.scanBatch(
                HgScanQuery.rangeOf(tableName, startList, endList)
                           .builder()
                           .setLimit(limit)
                           .build()
        );

        //HgStoreTestUtil.println(iterators);
        Assert.assertEquals(iterators.size() * limit,
                            iterators.parallelStream().mapToInt(e -> HgStoreTestUtil.amountOf(e))
                                     .sum()
        );

        HgStoreTestUtil.println("-- test scan-batch multi-table --");
        if (HgStoreTestUtil.amountOf(
                session.scanIterator("g+oe", HgStoreTestUtil.toAllPartitionKey(keyName), keyAmt)) <
            keyAmt) {
            HgStoreTestUtil.batchPut(session, "g+oe", keyName, keyAmt);
            HgStoreTestUtil.batchPut(session, "g+ie", keyName, keyAmt);
        }

        prefixes = Collections.singletonList(HgStoreTestUtil.toAllPartitionKey(keyName));

        tableName = "g+oe,g+ie";
        iterators = session.scanBatch(
                HgScanQuery.prefixOf(tableName, prefixes)
        );

        //HgStoreTestUtil.println(iterators);
        Assert.assertEquals(keyAmt * 2, HgStoreTestUtil.amountIn(iterators));
        iterators = session.scanBatch(
                HgScanQuery.prefixOf(tableName, prefixList)
        );
        Assert.assertEquals(900 * 2, HgStoreTestUtil.amountIn(iterators));

        HgStoreTestUtil.println("-- test scan-batch per-key-limit --");

        tableName = "PER_KEY_LIMIT_TABLE";
        keyName = "PER_KEY_LIMIT";
        if (HgStoreTestUtil.amountOf(
                session.scanIterator(tableName, HgStoreTestUtil.toAllPartitionKey(keyName),
                                     keyAmt)) < keyAmt) {
            HgStoreTestUtil.batchPut(session, tableName, keyName, keyAmt);
        }
        prefixes = Arrays.asList(
                HgStoreTestUtil.toAllPartitionKey(keyName + "-01")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-02")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-03")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-04")
                , HgStoreTestUtil.toAllPartitionKey(keyName + "-05")
        );

        iterators = session.scanBatch(
                HgScanQuery.prefixOf(tableName, prefixes).builder().setPerKeyLimit(1).build()
        );
        //HgStoreTestUtil.println(iterators);
        Assert.assertEquals(prefixes.size() * 3, HgStoreTestUtil.amountIn(iterators));

    }