Currently, IQ does only throws InvalidStateStoreException for all errors that occur. However, we have different types of errors and should throw different exceptions for those types.
For example, if a store was migrated it must be rediscovered while if a store cannot be queried yet, because it is still re-created after a rebalance, the user just needs to wait until store recreation is finished.
There might be other examples, too.
The following exceptions have been proposed in KIP-216:
- StreamsNotStartedException (DONE): will be thrown when stream thread state is CREATED, the user can retry until to RUNNING.
- StreamsRebalancingException: will be thrown when stream thread is not running and stream state is REBALANCING, the user just retry and wait until rebalance finished (RUNNING).
- StateStoreMigratedException: will be thrown when state store already closed and stream state is RUNNING. The user need to rediscover the store and cannot blindly retry as the store handle is invalid and a new store handle must be retrieved.
- StateStoreNotAvailableException: will be thrown when state store closed and stream state is PENDING_SHUTDOWN / NOT_RUNNING / ERROR. The user cannot retry when this exception is thrown.
- UnknownStateStoreException (DONE): will be thrown when passing an unknown state store. The user cannot retry when this exception is thrown.
- InvalidStateStorePartitionException (DONE): will be thrown when user requested partition is not available on the stream instance.