public void multiGroupSnapshotTest() throws Exception {
        final File backupDir = new File("multi-backup");
        if (backupDir.exists()) {
            FileUtils.deleteDirectory(backupDir);
        }

        final List<Region> regions = Lists.newArrayList();
        regions.add(new Region(1, makeKey("0"), makeKey("1"), null, null));
        regions.add(new Region(2, makeKey("1"), makeKey("2"), null, null));
        regions.add(new Region(3, makeKey("2"), makeKey("3"), null, null));
        regions.add(new Region(4, makeKey("3"), makeKey("4"), null, null));
        regions.add(new Region(5, makeKey("4"), makeKey("5"), null, null));

        for (int i = 0; i < 5; i++) {
            final String v = String.valueOf(i);
            this.kvStore.put(makeKey(v), makeValue(v), null);
        }
        for (int i = 0; i < 5; i++) {
            this.kvStore.getSequence(makeKey(i + "_seq_test"), 10, null);
        }

        KVStoreSnapshotFile kvStoreSnapshotFile = KVStoreSnapshotFileFactory.getKVStoreSnapshotFile(this.kvStore);
        final ExecutorService snapshotPool = StoreEngineHelper.createSnapshotExecutor(1, 5);
        final List<TestSnapshotWriter> writers = Lists.newArrayList();
        for (int i = 0; i < 4; i++) {
            final Path p = Paths.get(backupDir.getAbsolutePath(), String.valueOf(i));
            final TestSnapshotWriter snapshotWriter = new TestSnapshotWriter(p.toString());
            writers.add(snapshotWriter);
            final CountDownLatch latch = new CountDownLatch(1);
            final Closure done = status -> {
                assertTrue(status.isOk());
                latch.countDown();
            };
            kvStoreSnapshotFile.save(snapshotWriter, regions.get(i), done, snapshotPool);
            latch.await();
            final LocalFileMeta meta = (LocalFileMeta) snapshotWriter.getFileMeta(SNAPSHOT_ARCHIVE);
            assertNotNull(meta);
        }

        this.kvStore.shutdown();
        FileUtils.deleteDirectory(new File(this.tempPath));
        FileUtils.forceMkdir(new File(this.tempPath));
        this.kvStore = new RocksRawKVStore("test");
        this.kvStore.init(this.dbOptions);

        kvStoreSnapshotFile = KVStoreSnapshotFileFactory.getKVStoreSnapshotFile(this.kvStore);
        for (int i = 0; i < 4; i++) {
            final Path p = Paths.get(backupDir.getAbsolutePath(), String.valueOf(i));
            final TestSnapshotReader snapshotReader = new TestSnapshotReader(writers.get(i).metaTable, p.toString());
            final boolean ret = kvStoreSnapshotFile.load(snapshotReader, regions.get(i));
            assertTrue(ret);
        }

        for (int i = 0; i < 4; i++) {
            final String v = String.valueOf(i);
            final byte[] seqKey = makeKey(i + "_seq_test");
            assertArrayEquals(makeValue(v), get(makeKey(v)));
            final Sequence sequence = new SyncKVStore<Sequence>() {
                @Override
                public void execute(RawKVStore kvStore, KVStoreClosure closure) {
                    kvStore.getSequence(seqKey, 10, closure);
                }
            }.apply(this.kvStore);
            assertEquals(10L, sequence.getStartValue());
            assertEquals(20L, sequence.getEndValue());
        }

        assertNull(get(makeKey("5")));
        final Sequence sequence = new SyncKVStore<Sequence>() {
            @Override
            public void execute(RawKVStore kvStore, KVStoreClosure closure) {
                kvStore.getSequence(makeKey("4_seq_test"), 10, closure);
            }
        }.apply(this.kvStore);
        assertEquals(0L, sequence.getStartValue());

        FileUtils.deleteDirectory(backupDir);
        ExecutorServiceHelper.shutdownAndAwaitTermination(snapshotPool);
    }
Test method: {@link RocksRawKVStore#delete(List, KVStoreClosure)}
jraft-rheakv/rheakv-core/src/test/java/com/alipay/sofa/jraft/rhea/storage/rocksdb/RocksKVStoreTest.java