You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tika.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2025/12/08 16:17:00 UTC

[jira] [Commented] (TIKA-4547) Update tika pipes so that it can be properly clustered

    [ https://issues.apache.org/jira/browse/TIKA-4547?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18043601#comment-18043601 ] 

ASF GitHub Bot commented on TIKA-4547:
--------------------------------------

nddipiazza opened a new pull request, #2424:
URL: https://github.com/apache/tika/pull/2424

   TIKA-4547 - 
   
   **Phase 1: Foundation (TIKA-4547)**
   - Implement StateStore abstraction
   - Refactor ExpiringFetcherStore
   - Add InMemoryStateStore
   - Update documentation
   




> Update tika pipes so that it can be properly clustered
> ------------------------------------------------------
>
>                 Key: TIKA-4547
>                 URL: https://issues.apache.org/jira/browse/TIKA-4547
>             Project: Tika
>          Issue Type: Task
>            Reporter: Nicholas DiPiazza
>            Priority: Major
>
> Plan: Enable Distributed State Management for Tika Pipes Clustering
> The current Tika Pipes architecture stores Fetcher/Emitter/PipesIterator configurations in local memory (ExpiringFetcherStore using synchronized HashMaps), making it impossible to create a fetcher on one server and use it on another. This plan introduces a pluggable distributed state abstraction to enable true clustering for both gRPC and REST servers.
> * Create StateStore abstraction in tika-pipes-api as an interface with methods put(String key, byte[] value), get(String key), delete(String key), list(), and lifecycle operations, allowing pluggable implementations (in-memory, Apache Ignite, Redis, Hazelcast, etc.).
> * Refactor ExpiringFetcherStore to use StateStore in TikaGrpcServerImpl.java, replacing Collections.synchronizedMap with StateStore API calls for fetchers, fetcherConfigs, and fetcherLastAccessed maps to enable cross-server state sharing.
> * Create parallel EmitterStore and PipesIteratorStore abstractions mirroring ExpiringFetcherStore pattern in tika-pipes-core, applying the same StateStore-backed approach for Emitters and PipesIterators to achieve full component distribution.
> * Add StateStoreFactory plugin system in tika-pipes-core using PF4J pattern (similar to FetcherManager and EmitterManager), loading implementations from Tika config's stateStore section with default in-memory implementation.
> * Update PipesConfig to include state store configuration in PipesConfig.java with fields like stateStoreClass and stateStoreParams, ensuring backward compatibility with local-only deployments via sensible defaults.
> Make PipesClient and PipesServer state-aware by injecting StateStore references in PipesClient.java and PipesServer.java, enabling forked processes to retrieve fetcher/emitter configs from distributed store rather than requiring XML rewrites.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)