To avoid confusion: I mean `polaris-test` is for the integration kind of
tests that require some support from the environment, like starting a
Polaris server.

On Wed, Nov 13, 2024 at 4:27 PM Dmitri Bourlatchkov <
dmitri.bourlatch...@dremio.com> wrote:

> Re: test classes - I'd propose to make a new module, e.g. `polaris-test`
> to contain abstract (actually or in spirit) test code, which would then be
> picked up by DW and Quarkus-specific actual test classes.
>
> I'm sure we can isolate env. details in JUnit5 extensions and inject
> relevant access objects (e.g. REST clients / URLs / etc) in runtime.
>
> Cheers,
> Dmitri.
>
> On Wed, Nov 13, 2024 at 2:13 PM Alex Dutra <alex.du...@dremio.com.invalid>
> wrote:
>
>> Hi Michael, hi all,
>>
>> I had a look at your branch and am very pleased to see that it was
>> relatively easy to get DI working with DW + HK2. Good news!
>>
>> Digging a bit into the details, I see that most beans are annotated with
>> @Named now. This is probably OK for Quarkus too, although there are other
>> techniques that allow to select a specific implementation at runtime.
>>
>> I also think that the @RealmContext annotation is very smart, and
>> resonates
>> with how I handled that in Quarkus. Although, I wonder if this custom
>> context isn't identical to the standard request context? IOW, is it
>> possible for the Polaris context to change during an HTTP call to Polaris
>> API? I don't think so, which leads me to think that, at least in Quarkus,
>> we'd use the standard @RequestScoped annotation for passing things like
>> this.
>>
>> But now taking a step back and looking at the big picture, I think that
>> what we need now is a plan forward. Given that many of us voiced concerns
>> around an all-or-nothing switch from DW to Quarkus (quite understandably
>> so), and assuming that there is agreement to maintain both runtimes (DW
>> and
>> Quarkus) for some time, I'd like to suggest the phased approach below:
>>
>>    1. Remove the dependency to DW from polaris-core – there is a PR for
>>    that already: https://github.com/apache/polaris/pull/435
>>    2. Refactor polaris-service into 2 modules: e.g.
>> "polaris-service-common"
>>    and "polaris-service-dropwizard" – I believe Dmitri is already working
>>    on this
>>    3. Introduce DI + HK2 in polaris-service-dropwizard – that would come
>>    from your branch basically
>>    4. Introduce polaris-service-quarkus – that would come mostly from JB's
>>    branch
>>
>> Regarding step #2, it seems we can easily put 80 to 90% of the actual
>> polaris-service production classes into the common module. The dropwizard
>> runtime module would contain just a handful of DW-specific classes.
>>
>> The biggest issue to solve with step #2 is imho test classes. Quarkus and
>> DW have diverse requirements for tests, but we may still be able to
>> refactor things using abstract classes or extensions, and reuse most of
>> them. In any case, I think that if, at least at the beginning, test
>> classes
>> are duplicated in each runtime module, that's acceptable until we figure
>> out a better way.
>>
>> And to circle back to DI, whether this common module would contain classes
>> annotated with Jakarta CDI annotations is imho up for debate. This would
>> simplify things for sure, but on the flip side, would require both
>> runtimes
>> to use the exact same CDI mechanisms (e.g. both runtimes would use @Named
>> beans). I think that this is going to be too restrictive. An alternative
>> would be to keep the common classes clean of CDI annotations and let the
>> runtime modules create subclasses annotated with their own annotations.
>>
>> And back to the @RealmContext topic, that's the other big aspect that we
>> will need to solve (maybe step #5?): CallContext is heavily reliant on
>> ThreadLocal, and that is not very CDI-friendly, as you've seen. For now, I
>> did a patchy workaround for Quarkus. But we'd need to refactor that code
>> cleanly, either by creating a custom context as you did, or by making
>> CallContext a request-scoped bean that is evaluated for each HTTP request.
>> Either way, it then needs to be propagated to other threads (e.g. in
>> TaskExecutorImpl); for Quarkus, this will require using proper context
>> propagation <https://quarkus.io/guides/context-propagation> (for DW,
>> maybe
>> ThreadLocal is fine here). And since CallContext is in the core module, we
>> will likely need to remove the static methods getCurrentContext() and
>> setCurrentContext() and retrieve the context only by scope resolution
>> (which, in turn, may use ThreadLocal under the hood if that's appropriate
>> for DW).
>>
>> If everybody is on board with the plan above, how about we create GH
>> issues
>> for each step, and maybe even a GH Project to track progress on this front
>> and split the effort?
>>
>> Thanks,
>>
>> Alex
>>
>>
>> On Sat, Nov 9, 2024 at 10:15 AM Jean-Baptiste Onofré <j...@nanthrax.net>
>> wrote:
>>
>> > Hi Michael
>> >
>> > Thanks for the update !
>> >
>> > As discussed during the last community meeting:
>> > 1. I will open the draft PR with Quarkus in the meantime
>> > 2. I will take a look on your branch powered by Glassfish HK2 CDI
>> > (give me a few days as I was travelling this week :))
>> >
>> > Thanks !
>> > Regards
>> >
>> > On Fri, Nov 8, 2024 at 2:36 AM 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