Thanks Dmitri. The jakarta.inject api doesn't include the @Produces
annotation - is it one that's included in the enterprise package used by
Quarkus? I think that would eliminate some of the extra code and complexity
in the current branch (e.g., a class can only implement one Factory<T>, but
I could use @Produces on multiple methods in the same class).

I made some (I think) substantial improvements in the application
bootstrapping - the previous work doesn't work for the bootstrap or purge
commands. I've posted a PR at https://github.com/apache/polaris/pull/493
with the latest. I stripped out the cache stuff, as that's already
implemented in the other PR I opened the other day. Take a look at this one
and let me know what you think.

On Tue, Nov 26, 2024 at 11:50 AM Dmitri Bourlatchkov
<dmitri.bourlatch...@dremio.com.invalid> wrote:

> Hi Mike,
>
> I had a brief, but end-to-end look at your latest HK2 branch. Overall, I
> think it is a good refactoring.
>
> I see that it uses standard jakarta annotations in most places, which
> should work fine with Quarkus too (as Alex already mentioned).
>
> I wonder whether implementing the HK2 Factory interface is actually
> necessary. Would it be able to find `@Produces` annotations automatically?
>
> Let's proceed with the migration path doc (as discussed in other emails in
> this thread).
>
> Cheers,
> Dmitri.
>
>
> On Tue, Nov 26, 2024 at 12:07 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
> > >> > >>
> > >> > >
> > >> >
> > >>
> > >
> >
>

Reply via email to