You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Status

Current state: "Under Discussion"

Discussion thread: here [Change the link from the KIP proposal email archive to your own email thread]

JIRA: here

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

Interactive-Query APIs are designed for usability. Instant-based methods where introduced in KIP-358 to represent time ranges.

On the other hand, read-write interfaces used by Processor API are tuned for performance. Therefore, long-based methods are kept to avoid performance penalties caused by object allocation.

ReadOnlySessionStore API is misaligned with the improvements introduced into ReadOnlyWindowStore in KIP-358.

This proposal aims to solve this issue, adding Instant-based alternative methods to the interactive query API for Session Stores.

KIP-617 is already moving read methods from SessionStore into ReadOnlySessionStore

Public Interfaces

  • org.apache.kafka.streams.state.ReadOnlySessionStore
    • add method: KeyValueIterator<Windowed<K>, AGG> findSessions(final K key, final Instant earliestSessionEndTime, final Instant latestSessionStartTime)
    • add method: KeyValueIterator<Windowed<K>, AGG> findSessions(final K keyFrom, final K keyTo, final Instant earliestSessionEndTime, final Instant latestSessionStartTime)
    • add method: AGG fetchSession(final K key, final long startTime, final Instant sessionEndTime)
    • add method: KeyValueIterator<Windowed<K>, AGG> backwardFindSessions(final K key, final Instant earliestSessionEndTime, final Instant latestSessionStartTime)
    • add method: KeyValueIterator<Windowed<K>, AGG> backwardFindSessions(final K keyFrom, final K keyTo, final Instant earliestSessionEndTime, final Instant latestSessionStartTime)

Proposed Changes

Changes to ReadOnlySessionStore, considering new methods added on KIP-617:

public interface ReadOnlySessionStore<K, AGG> {
    // Moving read functions from SessionStore to ReadOnlySessionStore
    default KeyValueIterator<Windowed<K>, AGG> findSessions(final K key, final Instant earliestSessionEndTime, final Instant latestSessionStartTime) {
        throw new UnsupportedOperationException("Moved from SessionStore");
    }
 
    default KeyValueIterator<Windowed<K>, AGG> findSessions(final K keyFrom, final K keyTo, final Instant earliestSessionEndTime, final Instant latestSessionStartTime) {
        throw new UnsupportedOperationException("Moved from SessionStore");
    }

    default AGG fetchSession(final K key, final long startTime, final Instant sessionEndTime) {
        throw new UnsupportedOperationException("Moved from SessionStore");
    }
 
    // New APIs added as part of KIP-617
    default KeyValueIterator<Windowed<K>, AGG> backwardFindSessions(final K key, final Instant earliestSessionEndTime, final Instant latestSessionStartTime) {
        throw new UnsupportedOperationException();
    }

    default KeyValueIterator<Windowed<K>, AGG> backwardFindSessions(final K keyFrom, final K keyTo, final Instant earliestSessionEndTime, final Instant latestSessionStartTime) {
        throw new UnsupportedOperationException();
    }
}


Compatibility, Deprecation, and Migration Plan

  • Default implementations will avoid changes on custom IQ Session Stores

Rejected Alternatives

None yet.

  • No labels