I agree TreeMap and its associated transactional stack should be deprecated. It’s test-only, confusing, and not used by JDBC production paths.
I’m less convinced that NoSQL + InMemory is a clearly superior replacement for TreeMap in tests. At the storage layer it’s essentially the same class of thing: an in-memory, non-durable backend. The difference is that it exercises a completely different MetaStoreManager/persistence stack (NoSqlMetaStoreManager vs TransactionalMetaStoreManagerImpl), not the JDBC path most deployments use. It replaces a relatively simple, self-contained implementation with something that is part of a much more complicated persistence stack, while remaining non-durable and test-only at the storage layer. For the problems originally raised (test-grade defaults, dead production path, developer confusion), JDBC + H2 seems like an actual fix. On Mon, Jun 29, 2026 at 2:06 PM Dmitri Bourlatchkov <[email protected]> wrote: > Hi Alex, > > I tend to agree that the DataSource discussion related to H2 became a bit > convoluted, and it's a lot simpler to use the NoSQL in-memory persistence > instead. > > Cheers, > Dmitri. > > On Mon, Jun 29, 2026 at 1:57 PM Alexandre Dutra <[email protected]> wrote: > > > Hi all, > > > > Some updates on this: > > > > I recently started a separate discussion regarding dynamic datasource > > activation at runtime [1]. This was intended as a prerequisite for > > adopting H2 as the default JDBC driver, as suggested on this thread. > > > > However, that proposal may end up being rejected. > > > > Given this situation, we should reconsider our options. If the > > PostgreSQL + H2 approach is no longer a viable replacement to the > > TreeMapMetaStore, I propose an alternative: let's use the NoSQL > > metastore with an InMemory backend. > > > > My reasoning is as follows: > > > > 1. It remains a production-ready metastore, so strictly superior to > > TreeMapMetaStore. > > > > 2. The metastore state update logic is the same regardless of the > > backend, so we're still close to a real production setup (same as with > > an in-memory JDBC driver). > > > > 3. It doesn't require any external dependencies (no bundled driver). > > > > I'd also note that while the NoSQL metastore is already included > > today, it is not actionable because no backend is available. This goes > > against the onboarding UX that we're trying to achieve, as users > > interested in Polaris with the NoSQL metastore cannot test this setup > > with the official image. > > > > Therefore, I think NoSQL + InMemory would serve as a more appropriate > > default setup for the official Polaris image. > > > > From what I see, it would boil down to adding one line to > > polaris-server or polaris-service: > > > > runtimeOnly(project(":polaris-persistence-nosql-db-inmemory")) > > > > What are your thoughts on this? > > > > Thanks, > > Alex > > > > [1]: https://lists.apache.org/thread/jy6wb186h94n9q86kv01shbn68ppr6gv > > > > > > On Fri, Jun 19, 2026 at 12:07 PM Alexandre Dutra <[email protected]> > > wrote: > > > > > > Hi all, > > > > > > I wanted to give an update on this topic: I have started working on > > > this, but I would like to have [4812] merged first, since that's a > > > prerequisite. > > > > > > Thanks, > > > Alex > > > > > > [4812]: https://github.com/apache/polaris/pull/4812 > > > > > > On Tue, Jun 16, 2026 at 5:15 PM Russell Spitzer > > > <[email protected]> wrote: > > > > > > > > I believe the original idea of TreeMapMetastore was that it looked > very > > > > similar to FoundationDB from an API perspective, so it served well > as > > a > > > > test system for the original backend being developed at SF. > > > > > > > > I agree that H2 + JDBC makes sense to me now for the project. > > > > > > > > On Tue, Jun 16, 2026 at 10:03 AM Alexandre Dutra <[email protected]> > > wrote: > > > > > > > > > Hi all, > > > > > > > > > > Thank you for your feedback. > > > > > > > > > > There seems to be a general agreement on the idea of deprecating > > > > > TreeMapMetaStore, coupled with the JDBC + H2 solution for tests. > > > > > > > > > > In most modules, the tests migration won't pose any serious > > > > > challenges, as replacing the metastore is generally just a matter > of > > > > > changing the configuration, and making sure the realm is properly > > > > > bootstrapped. > > > > > > > > > > There will be, however, a few tricky situations in polaris-core: a > > few > > > > > tests rely on the TreeMapMetaStore, mostly as a test convenience; > but > > > > > there is no obvious replacement for it in that module. I am however > > > > > confident that we can find a solution for that, either based on > > mocks, > > > > > or by bringing in a real metastore. > > > > > > > > > > If no objections are raised, I am going to prepare a PR for this. > > > > > > > > > > Thanks, > > > > > Alex > > > > > > > > > > On Tue, Jun 16, 2026 at 3:28 PM Dmitri Bourlatchkov < > > [email protected]> > > > > > wrote: > > > > > > > > > > > > Hi Alex, > > > > > > > > > > > > Thanks for starting this thread. > > > > > > > > > > > > I also find the TransactionalMetaStoreManagerImpl and related > call > > paths > > > > > > conuising in Apache Polaris code. > > > > > > > > > > > > I support promoting H2 to the default (in memory) Persistence > > backend for > > > > > > getting started cases. This should also resolve the old H2 > > evolution > > > > > thread > > > > > > [1] by ensuring it is used regularly on the same code paths as > > > > > PostgreSQL. > > > > > > > > > > > > Deprecating TransactionalMetaStoreManagerImpl for removal also > > sounds > > > > > > reasonable to me. Existing downstream users > > > > > > of TransactionalMetaStoreManagerImpl will have time to migrate, > or > > even > > > > > > embed that code (per ASF license) into local builds, during the > > > > > deprecation > > > > > > phase. > > > > > > > > > > > > [1] > > https://lists.apache.org/thread/g1gg2w8hn9gvlmwrdh0x218whoh2wd39 > > > > > > > > > > > > Cheers, > > > > > > Dmitri. > > > > > > > > > > > > On Fri, Jun 12, 2026 at 11:24 AM Alexandre Dutra < > > [email protected]> > > > > > wrote: > > > > > > > > > > > > > Hi all, > > > > > > > > > > > > > > I am writing to ask the community whether it is OK to deprecate > > > > > > > TreeMapMetaStore, as well as all the in-memory metastore > manager, > > > > > > > metastore manager factory, and persistence types that rely > > solely on > > > > > > > TreeMapMetaStore. > > > > > > > > > > > > > > As we know, these components are test-grade only, and not > > suitable for > > > > > > > production. They trigger a production readiness alert on > Polaris > > > > > > > startup. It's a considerable amount of code that is virtually > > dead in > > > > > > > production. > > > > > > > > > > > > > > It's also confusing for developers. E.g. the "transactional" > > metastore > > > > > > > is not transactional in the JDBC sense of the term, and thus > not > > used > > > > > > > by JDBC persistence. It also has its quirks: some return > > statuses are > > > > > > > only returned by that manager. > > > > > > > > > > > > > > However, these components are used in tests, and I agree that > > it's > > > > > > > useful to have an in-memory version of the persistence layer > for > > > > > > > tests. But we have today two alternatives that are imho > superior > > for > > > > > > > tests in polaris-runtime-service: > > > > > > > > > > > > > > - JDBC persistence with H2 backend. There are already a few > tests > > > > > > > using this setup. > > > > > > > - NoSQL persistence with InMemory backend. > > > > > > > > > > > > > > Both alternatives test real production-grade persistence code. > > > > > > > > > > > > > > And finally, TreeMapMetaStore is currently the default runtime > > > > > > > persistence in application.properties; and the Helm chart also > > > > > > > advertises it as the default. These are not sane defaults, > imho. > > It's > > > > > > > always tricky to provide a good default for datastores, but > > since JDBC > > > > > > > persistence is included by default in the server image, I think > > that > > > > > > > including the H2 driver by default could give us a saner > default > > while > > > > > > > keeping the out-of-the-box experience intact (the license is > > Category > > > > > > > A). > > > > > > > > > > > > > > Concretely: > > > > > > > > > > > > > > On the MetaStoreManagerFactory hierarchy, the following > > > > > > > implementations are completely in-memory: > > > > > > > > > > > > > > - InMemoryPolarisMetaStoreManagerFactory: could be removed > > > > > > > > > > > > > > - InMemoryAtomicOperationMetaStoreManagerFactory: could be > > removed > > > > > > > > > > > > > > - LocalPolarisMetaStoreManagerFactory: is the base class of the > > two > > > > > > > above; imho it can be removed, but since it's an abstract > class, > > it > > > > > > > may have been extended outside Polaris. But neither JDBC nor > > NoSQL use > > > > > > > it. > > > > > > > > > > > > > > On the PolarisMetaStoreManager hierarchy: > > > > > > > > > > > > > > - TransactionalMetaStoreManagerImpl: is only used by > > > > > > > LocalPolarisMetaStoreManagerFactory. JDBC and NoSQL do not use > > it. > > > > > > > Could be removed. > > > > > > > > > > > > > > - TransactionWorkspaceMetaStoreManager however is a different > > beast, > > > > > > > in spite of the similar name. It is in use today on the commit > > path, > > > > > > > so should not be removed. > > > > > > > > > > > > > > On the BasePersistence hierarchy: > > > > > > > > > > > > > > - TreeMapTransactionalPersistenceImpl and its TreeMapMetaStore > > are > > > > > > > only used by InMemoryPolarisMetaStoreManagerFactory, and could > be > > > > > > > removed; > > > > > > > > > > > > > > - TransactionalPersistence and > AbstractTransactionalPersistence: > > these > > > > > > > are supertypes of TreeMapTransactionalPersistenceImpl and thus > > only > > > > > > > used for in-memory. They imo can be removed, but they might > have > > been > > > > > > > extended or implemented outside Polaris. > > > > > > > > > > > > > > I think it's important to keep Polaris code tidy by removing > > unused, > > > > > > > unimplementable, or test-grade only components. > > > > > > > > > > > > > > What are your thoughts? > > > > > > > > > > > > > > Thanks, > > > > > > > Alex > > > > > > > > > > > > > > >
