[jira] [Created] (FLINK-14793) Add SPI interface to discovery state backend and establish well-known names

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Created] (FLINK-14793) Add SPI interface to discovery state backend and establish well-known names

Shang Yuanchun (Jira)
Kezhu Wang created FLINK-14793:
----------------------------------

             Summary: Add SPI interface to discovery state backend and establish well-known names
                 Key: FLINK-14793
                 URL: https://issues.apache.org/jira/browse/FLINK-14793
             Project: Flink
          Issue Type: New Feature
          Components: Runtime / State Backends
            Reporter: Kezhu Wang


Currently, {{StateBackendLoader.loadStateBackendFromConfig}} uses hybrid of hardcoded state backend name and class path to construct {{StateBackendFactory}}.

I think we can provide a SPI interface, say \{{StateBackendProvider}}, to accomplish this.

{code:title=StateBackendProvider.java}
/**
 * SPI interface for {@link StateBackend} discovery and naming.
 *
 * @param <T> StateBackend
 */
@PublicEvolving
public interface StateBackendProvider<T extends StateBackend> extends StateBackendFactory<T> {
        /**
         * Name of provided {@link StateBackend}.
         *
         * @return name of provided {@link StateBackend}
         */
        @Nonnull
        String name();

        /**
         * Aliases for provided {@link StateBackend}. Implementations can use this for deprecated names.
         *
         * @return aliases for provided {@link StateBackend}
         */
        default Set<String> aliases() {
                return Collections.emptySet();
        }
}
{code}

With above spi, we gain several benefits over current hardcode and class path approach:
 * Explicit and established state backend naming and discovery instead of hardcoded. We can know exactly which state backends are avaiable and whether they are provided by user jars or not.
 * In state backend configuration, we can simply use established state backend name while not tied to fragile class path which is easily refactored out without great caution. These established state backend names could be flink community level, such as `jobmanager`, `filesystem` and `rocksdb`, and corporation level, such as `corporation-a.product.state-backend-basename`. Together with FLINK-14790, we can switch among state backends without knowledge of concrete implementation of target state backends in source code level.
 * More compatible with java module shipped in java 9 and above.

Discovery of state backend can be restricted in {{StateBackendLoader}}, and we can fallback to class path approach if no matching state backend found in discovered state backends.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)