@Override
    public KeyValueIterator<K, V> reverseRange(final K from, final K to) {
        final NextIteratorFunction<K, V, ReadOnlyKeyValueStore<K, V>> nextIteratorFunction = new NextIteratorFunction<K, V, ReadOnlyKeyValueStore<K, V>>() {
            @Override
            public KeyValueIterator<K, V> apply(final ReadOnlyKeyValueStore<K, V> store) {
                try {
                    return store.reverseRange(from, to);
                } catch (final InvalidStateStoreException e) {
                    throw new InvalidStateStoreException("State store is not available anymore and may have been migrated to another instance; please re-discover its location from the state metadata.");
                }
            }
        };
        final List<ReadOnlyKeyValueStore<K, V>> stores = storeProvider.stores(storeName, storeType);
        return new DelegatingPeekingKeyValueIterator<>(
            storeName,
            new CompositeKeyValueIterator<>(stores.iterator(), nextIteratorFunction));
    }
@Test
    public void shouldReturnValueOnReverseRangeNullToKey() {
        stubOneUnderlying.put("0", "zero");
        stubOneUnderlying.put("1", "one");
        stubOneUnderlying.put("2", "two");

        final LinkedList<KeyValue<String, String>> expectedContents = new LinkedList<>();
        expectedContents.add(new KeyValue<>("2", "two"));
        expectedContents.add(new KeyValue<>("1", "one"));

        try (final KeyValueIterator<String, String> iterator = theStore.reverseRange("1", null)) {
            assertEquals(expectedContents, Utils.toList(iterator));
        }
    }