@Test
public void sharedLimiter() {

    fdb.run(context -> {
        RecordScanLimiter limiter = RecordScanLimiterFactory.enforce(4);
        KeyValueCursor.Builder builder =  KeyValueCursor.Builder.withSubspace(subspace)
                .setContext(context)
                .setLow(Tuple.from(3, 3), EndpointType.RANGE_EXCLUSIVE)
                .setHigh(Tuple.from(4, 2), EndpointType.RANGE_EXCLUSIVE)
                .setScanProperties(forwardScanWithLimiter(limiter));
        KeyValueCursor cursor1 = builder.build();
        KeyValueCursor cursor2 = builder.build();
        assertThat(hasNextAndAdvance(cursor1), is(true));
        assertThat(hasNextAndAdvance(cursor2), is(true));
        assertThat(hasNextAndAdvance(cursor1), is(true));
        assertThat(hasNextAndAdvance(cursor2), is(true));
        assertThat(cursor1.getNext().hasNext(), is(false));
        assertThat(cursor2.getNext().hasNext(), is(false));
        assertThat("no next reason should be SCAN_LIMIT_REACHED", cursor1.getNext().getNoNextReason(),
                equalTo(RecordCursor.NoNextReason.SCAN_LIMIT_REACHED));
        assertThat("no next reason should be SCAN_LIMIT_REACHED", cursor2.getNext().getNoNextReason(),
                equalTo(RecordCursor.NoNextReason.SCAN_LIMIT_REACHED));
        return null;
    });
}