Hi Michael Thanks for the update. It's great ! Using CDI annotation is way neater than yaml bean verbose definition :) We can always improve step by step (about the PolarisMetaStoreManager and the CallContext).
NB: the Quarkus PR is also there to have side/side comparison. My comment is that we should also consider the framework ecosystem: I see new Polaris PRs (like the one about dynamic config) that reimplement from scratch what already provided by Quarkus (thanks to the extensions). I think it's urgent to have a consensus here to know in which direction we are going. Let's chat together about that. Thanks ! Regards JB On Tue, Nov 26, 2024 at 6:06 AM Michael Collado <collado.m...@gmail.com> wrote: > > FYI, I updated the branch to exclude HK2 dependencies from the core module > - > https://github.com/apache/polaris/compare/main...collado-mike:polaris:mcollado-hk2-di > . The Factory implementations are defined in the polaris-service module. > > I also created another branch at > https://github.com/collado-mike/polaris/compare/mcollado-hk2-di...mcollado-hk2-di-grantmanager > that merged the PR I have at https://github.com/apache/polaris/pull/465 > using the CDI annotations rather than the extra factories I had created in > the initial PR. This is still moving us toward supporting different > implementations of the various Polaris*Manager interfaces - still relying > on the current concrete PolarisMetaStoreManager, but we can easily extend > the HK2 service-locator file to support different manager implementations > in future PRs. (I prefer smaller incremental moves before we go with > fully-swappable implementations). > > Mike > > On Tue, Nov 19, 2024 at 8:37 PM Michael Collado <collado.m...@gmail.com> > wrote: > > > Hey thanks for calling that out. It’s strictly a convenience change and > > actually isn’t necessary. I added that in because, at the end of the day, > > most components need a PolarisMetaStoreManager, not a > > MetaStoreManagerFactory. Registering it as a factory meant that components > > could declare a dependency on the PolarisMetaStoreManager interface and it > > would use the factory to create the right instance. Because the factory > > method is annotated @RealmScope, the instance it creates is specific to the > > realm. I could have done it in the PolarisApplication, as I did the > > PolarisGrantManagerFactory at > > https://github.com/collado-mike/polaris/blob/mcollado-hk2-di/polaris-service/src/main/java/org/apache/polaris/service/PolarisApplication.java#L518-L531 > > . I was just lazy when I did that one :) We can keep all the hk2-specific > > code out of the core module. > > > > I do want to point out where the @RealmScope differs from @RequestScope - > > the beans defined in @RequestScope are cleaned up at the end of the > > request. The ones defined in the @RealmScope are reused across requests. > > This makes a difference with classes like the EntityCache that depends on > > being able to reuse, e.g., catalogs, but ensure the cache is specific to > > the current realm. We can, of course, pass around a bunch of > > @ApplicationScope factories that return the realm-specific beans, but that > > means we can't do things like add the PolarisGrantManager interface without > > also adding a new realm-specific factory, even if the PolarisGrantManager > > implementation is really just the PolarisMetaStoreManager itself. I think, > > ideally, we avoid declaring dependencies on factories and have components > > declare dependencies on the specific realm-scoped beans they need and let > > the CDI framework work out where the beans come from. This is basically > > what I was doing with the MetaStoreManagerFactory interface - as I said, I > > was just being lazy by extending Factory directly. > > > > Mike > > > > > > > > On Tue, Nov 19, 2024 at 5:08 PM Dmitri Bourlatchkov > > <dmitri.bourlatch...@dremio.com.invalid> wrote: > > > >> I had a quite brief look at Mike's HK2 branch, so apologies if I'm missing > >> the bigger picture. > >> > >> Still, I see that MetaStoreManagerFactory no longer extends the DW > >> Discoverable, but it extends the HK2 Factory class now. So we're basically > >> trading one framework for another as a code-level runtime dependency. I > >> would really like it if we could avoid that. > >> > >> I think one of the key benefits of Quarkus is abstracting from framework > >> code in our class hierarchies. Granted, Quarkus requires certain Web App > >> frameworks, but that's at another level. As for CDI, our code under > >> Quarkus > >> would only have to have certain annotations, without having to > >> extend/implement framework interfaces. > >> > >> Cheers, > >> Dmitri. > >> > >> On Thu, Nov 7, 2024 at 8:37 PM Michael Collado <collado.m...@gmail.com> > >> wrote: > >> > >> > FYI, I took a stab at seeing how Polaris would work with HK2 as a CDI > >> impl. > >> > I only spent yesterday and today on this, so it's not complete, but it > >> is > >> > functional and the tests pass :) > >> > > >> > I took a lot of the common ideas from the Quarkus branch (e.g., deleted > >> all > >> > the HasXXX and XXXAware interfaces), but kept the JSON/Yaml config. I > >> > figured out how to use the Dropwizard Yaml to specify the > >> > implementation of, e.g. the Authenticator and the > >> MetaStoreManagerFactory, > >> > but have the instances managed and injectable by HK2. The goal there > >> was to > >> > just keep the existing configuration format, but change the impl under > >> the > >> > hood. I'm not married to the idea and I'm interested to see if the > >> > jakarta.enterprise.inject.* annotations/interfaces that are used in the > >> > Quarkus branch can make this simpler. However, I do think it would > >> ideal if > >> > we can get it working with the existing Yaml configuration, at least in > >> the > >> > short term. > >> > > >> > I did add support for a @RealmScope annotation to support restricting > >> items > >> > to a given realm, such as the EntityCache and the PolarisGrantManager. > >> This > >> > allowed me to do things like hide the grant lookups from the > >> EntityCache so > >> > that the Resolver doesn't have to pass around the ResolvedPolarisEntity, > >> > but instead the grants are found from the cache without making it overt > >> in > >> > the PolarisAuthorizer API. This was one of my original goals with > >> breaking > >> > up the PolarisMetaStoreManager API into multiple interfaces. Right now, > >> > everything still ties back to the configured PolarisMetaStoreManager > >> > implementation, but eventually we can get to where the GrantManager, > >> > CredentialVendor, etc. can all be swapped out for different > >> > implementations. > >> > > >> > Please take a look at the changes at > >> > > >> > > >> https://github.com/collado-mike/polaris/compare/c0e8dae5182d33e046216510e2b02b7cf923ffe8...collado-mike:polaris:mcollado-hk2-di > >> > and let me know what you think. > >> > > >> > Mike > >> > > >> > On Tue, Nov 5, 2024 at 9:42 AM Michael Collado <collado.m...@gmail.com> > >> > wrote: > >> > > >> > > I added a table to the README with the differences that were called > >> out. > >> > I > >> > > added some details that I think are worth understanding better. E.g., > >> the > >> > > Json layout we added has specific custom functionality we wanted for > >> > > supporting key/value pairs and the micrometer annotation was added for > >> > some > >> > > custom support we wanted aside from what is supported with the default > >> > > dropwizard metrics support. > >> > > > >> > > > >> > > > >> > > >> https://github.com/collado-mike/polaris/blob/14865a97ad8f790a9992432d79975c05ff5c36fa/polaris-service-quarkus/README.md > >> > > > >> > > I think it would be great if others could add to the table with > >> features > >> > > that would be impacted by the migration and to call out the level of > >> > effort > >> > > in both dropwizard and quarkus. > >> > > > >> > > Another possible consideration would be upgrading our Dropwizard > >> > > dependency to the latest development version. It may be the case that > >> > doing > >> > > so would address some of the targeted features with less effort in > >> > > migrating. > >> > > > >> > > Mike > >> > > > >> > > On Tue, Oct 29, 2024 at 5:50 AM Jean-Baptiste Onofré <j...@nanthrax.net > >> > > >> > > wrote: > >> > > > >> > >> Hi folks, > >> > >> > >> > >> Following the last community sync meeting, we create a branch > >> > >> demonstrating use of Quarkus to powered Apache Polaris: > >> > >> > >> > >> https://github.com/jbonofre/polaris/tree/QUARKUS > >> > >> > >> > >> We still have work to do, but you can already take a look and > >> > >> experiment (in the polaris-service-quarkus module). > >> > >> > >> > >> We added a README.md file to: > >> > >> 1. Highlight the main differences (in terms of code) between > >> > >> Dropwizard and Quarkus > >> > >> 2. To build and run Polaris powered by Quarkus > >> > >> 3. The list of TODO items > >> > >> > >> > >> > >> > >> > >> > > >> https://github.com/jbonofre/polaris/blob/QUARKUS/polaris-service-quarkus/README.md > >> > >> > >> > >> If anyone wants to contribute on the branch before creating the PR, > >> > >> please let me know, I will add you as contributor on the branch. > >> > >> > >> > >> Any comments or questions are welcome ! > >> > >> > >> > >> Thanks, > >> > >> Regards > >> > >> JB > >> > >> > >> > > > >> > > >> > >