@Override
    default WindowStoreIterator<V> fetch(final K key,
                                         final Instant timeFrom,
                                         final Instant timeTo) throws IllegalArgumentException {
        return fetch(
            key,
            ApiUtils.validateMillisecondInstant(timeFrom, prepareMillisCheckFailMsgPrefix(timeFrom, "timeFrom")),
            ApiUtils.validateMillisecondInstant(timeTo, prepareMillisCheckFailMsgPrefix(timeTo, "timeTo")));
    }
Get all the key-value pairs with the given key and the time range from all the existing windows.
<p>
This iterator must be closed after use.
<p>
The time range is inclusive and applies to the starting timestamp of the window.
For example, if we have the following windows:
<pre>
+-------------------------------+
|  key  | start time | end time |
+-------+------------+----------+
|   A   |     10     |    20    |
+-------+------------+----------+
|   A   |     15     |    25    |
+-------+------------+----------+
|   A   |     20     |    30    |
+-------+------------+----------+
|   A   |     25     |    35    |
+--------------------------------
</pre>
And we call {@code store.fetch("A", 10, 20)} then the results will contain the first
three windows from the table above, i.e., all those where 10 &lt;= start time &lt;= 20.
<p>
For each key, the iterator guarantees ordering of windows, starting from the oldest/earliest
available window to the newest/latest window.

@param key      the key to fetch
@param timeFrom time range start (inclusive)
@param timeTo   time range end (inclusive)
@return an iterator over key-value pairs {@code <timestamp, value>}
@throws InvalidStateStoreException if the store is not initialized
@throws NullPointerException       if the given key is {@code null}
streams/src/main/java/org/apache/kafka/streams/state/WindowStore.java