Hi Alex, I was saying that people might *NOT immediately* connect a realmId with a realm. They will figure it out in various ways for sure, like checking code/doc, but that's an inconsistency and unnecessary cognitive burden we can easily avoid.
Yufei On Thu, Jan 30, 2025 at 7:20 AM Alex Dutra <alex.du...@dremio.com.invalid> wrote: > Hi, > > I must say, I am more and more confused by this discussion. This came as a > surprise to me: > > people may keep thinking "realm" and "realmId" are different things > > > Well, for me they are different things. As I said before, the notion behind > the name, regardless of what we call it, seems to change from person to > person. > > But assuming that we rename the current "RealmId" to "Realm", and keep that > object as a wrapper around an identifier; what are we going to call the > fully-fledged object that represents a realm with its identifier, > properties, and internal state? "RealmEntity"? Because we're going to need > that object sooner than later. > > Thanks, > Alex > > On Wed, Jan 29, 2025 at 10:54 PM Yufei Gu <flyrain...@gmail.com> wrote: > > > Having a consistent name across the system is a huge benefit for users > and > > developers. There would be less confusion and less cognitive burden for > > everyone. Otherwise, people may keep thinking "realm" and "realmId" are > > different things. As I said in the proposal, the name "realm" is already > > widely used. I don't think we are going to change them to `realmId`. > > > > Error Messages: > > > > > > - realm: <realm> root principal credentials: > > <client-id>:<client-secret> > > > > Configurations: > > > > - Polaris.realm-context.realms > > - jdbc:h2:file:./build/test_data/polaris/{realm}/db > > > > Documentation: > > <https://polaris.apache.org/in-dev/unreleased/metastores/> > > > > <https://polaris.apache.org/in-dev/unreleased/metastores/> > > - <https://polaris.apache.org/in-dev/unreleased/metastores/ > >Metastores > > <https://polaris.apache.org/in-dev/unreleased/metastores/> > > - Configuring Polaris for Production > > < > > > https://polaris.apache.org/in-dev/unreleased/configuring-polaris-for-production/ > > > > > - Admin Tool < > https://polaris.apache.org/in-dev/unreleased/admin-tool/> > > > > > > Yufei > > > > > > On Wed, Jan 29, 2025 at 1:17 PM Robert Stupp <sn...@snazy.de> wrote: > > > > > Thinking more about this, having a huge change just for a nomenclature > > > thing is really not worth the effort, so I'm against such a rename. > > > > > > On 29.01.25 11:02, Robert Stupp wrote: > > > > Let's take a step back. > > > > > > > > The documented contract of the old `RealmContext` was to provide the > > > > realm-ID from a REST request - nothing more, nothing less - that's > all > > > > what's been implemented. And this is exactly the reason why the > > > > current type is called `RealmId`. > > > > > > > > Renaming `RealmId` to `Realm` and then also add another `RealmXyz` > > > > type makes it difficult to distinguish, causing unnecessary more > > > > confusion. > > > > > > > > Please keep in mind that the code that extracts the realm-ID from a > > > > REST request needs to be self-contained. Adding more functionality to > > > > that unnecessarily complicates the code to extract the realm-ID from > a > > > > REST request. > > > > > > > > If more information is needed, there can always be a CDI-producer > that > > > > provides that in another request-scoped bean based on `RealmId`. > > > > > > > > On 29.01.25 00:59, Yufei Gu wrote: > > > >> Hi Folks, > > > >> > > > >> Thanks for chiming in! I agree that renaming while keeping the > > interface > > > >> intact is the better option. I see realm more as an atomic concept, > > and > > > >> renaming helps maintain consistency across the system. Please take a > > > >> look > > > >> at this renaming PR: https://github.com/apache/polaris/pull/899. > > > >> > > > >> Since the topic of extending the Realm interface came up, here are > my > > > >> thoughts: > > > >> There are two potential approaches for extension: > > > >> 1. Adding new fields directly to the Realm interface. > > > >> > > > >> 1. Works well for private or generated fields. > > > >> 2. Public fields can also be added carefully, though I share > > > >> Robert’s > > > >> concern that some custom beans may not include the new fields. > In > > > >> that > > > >> case, we should make sure that existing functionality remains > > > >> intact, even > > > >> if new fields are empty, so that the backward compatibility is > > > >> still kept. > > > >> > > > >> 2. Creating a new entity that wraps around Realm. This avoids > > modifying > > > >> Realm directly but requires updating all interfaces that interact > > > >> with the > > > >> new entity, making it also a significant change. > > > >> > > > >> Yufei > > > >> > > > >> On Mon, Jan 27, 2025 at 9:37 AM Robert Stupp <sn...@snazy.de> > wrote: > > > >> > > > >>> I'd prefer to keep RealmId for just the ID then, and add a separate > > > >>> Realm type when there's a use case for it in Polaris. > > > >>> > > > >>> Custom realm-specific additions can always produced when needed - > > e.g. > > > >>> using `@Produces @RequestScoped MyRealmData > > produceMyRealmData(RealmId > > > >>> id, OtherBeanOne one, AnotherBean two)` - and then injected where > > it's > > > >>> needed. That allows an extension to reuse existing realm-resolution > > > >>> mechanisms. > > > >>> > > > >>> As mentioned in my previous post, I'm concerned about custom code > > that > > > >>> extends a Polaris interface. That approach requires to hook into > all > > > >>> existing code that produces a (not yet existing) `Realm` type - it > > > >>> would > > > >>> have to replace it everywhere - even in components that an > extension > > > >>> does not know about. In other words: that approach makes an > extension > > > >>> mechanism of Polaris really difficult. > > > >>> > > > >>> On 27.01.25 17:58, Dmitri Bourlatchkov wrote: > > > >>>> Good point about entity injection. I still have reservations, but > I > > > >>>> guess > > > >>>> we can address any specific issues when we hit them. > > > >>>> > > > >>>> If we go with entity injection, I'd think the refactoring has to > go > > > >>> beyond > > > >>>> the class/interface renaming and aim at removing `Realm` method > > > >>> parameters. > > > >>>> I believe Realm will have to be an instance field on the affected > > > >>>> beans. > > > >>>> Consequently, all beans referencing Realm will have to become > > > >>>> request-scoped (if they are not such already). > > > >>>> > > > >>>> Cheers, > > > >>>> Dmitri. > > > >>>> > > > >>>> On Mon, Jan 27, 2025 at 11:10 AM Alex Dutra > > > >>> <alex.du...@dremio.com.invalid> > > > >>>> wrote: > > > >>>> > > > >>>>> Hi all, > > > >>>>> > > > >>>>> I guess we need to align our vision of what "RealmId" (or > whatever > > we > > > >>> call > > > >>>>> it eventually) actually represents. > > > >>>>> > > > >>>>> Some of us seem to consider that this component is really just > the > > > >>> unique > > > >>>>> identifier of a realm entity, pretty much like a primary key. > > > >>>>> Under that > > > >>>>> vision, the component is not expected to exhibit any other state > > > >>>>> and is > > > >>> and > > > >>>>> will ever be a wrapper around the realm's string id. > > > >>>>> > > > >>>>> Others tend to consider that this component represents the whole > > > >>>>> realm > > > >>>>> entity, thus potentially exposing more properties in the future > (I > > > >>>>> mentioned the "state" property as an example of that). > > > >>>>> > > > >>>>> I personally would prefer this component to be the full entity, > > > >>> injected as > > > >>>>> such. This is to avoid injecting things such as primary keys / > > > >>> identifiers, > > > >>>>> forcing consumers to lookup the entity at some point to know more > > > >>>>> about > > > >>> it. > > > >>>>> If we could just inject a proxy to the whole entity directly, > > that's > > > >>> imho > > > >>>>> easier. > > > >>>>> > > > >>>>> Thanks, > > > >>>>> > > > >>>>> Alex > > > >>>>> > > > >>>>> On Mon, Jan 27, 2025 at 4:05 PM Dmitri Bourlatchkov > > > >>>>> <di...@apache.org> > > > >>>>> wrote: > > > >>>>> > > > >>>>>> Thanks for starting this discussion, Yufei! I think it is > > > >>>>>> important to > > > >>>>>> clarify this sooner rather than later. > > > >>>>>> > > > >>>>>> From my POV option 2 (String) is cumbersome. The biggest > > > >>>>>> reasons being > > > >>>>> more > > > >>>>>> complex CDI injection (as already noted by other people) but > also > > > >>>>>> more > > > >>>>>> complicated usage searches in IDEs. > > > >>>>>> > > > >>>>>> As for option 1, I support the renaming to "realm" in CLI > options > > > >>>>>> and > > > >>>>> other > > > >>>>>> user-settable parameters (such as config options). My thinking > is > > > >>>>>> that > > > >>>>> from > > > >>>>>> the user's perspective, the intent is clear that the user wants > to > > > >>>>> select a > > > >>>>>> particular realm by its ID (or name). > > > >>>>>> > > > >>>>>> As for java class changes, RealmId makes more sense to me > because > > it > > > >>>>>> indicates that the object holds the ID and not the whole realm > > (as I > > > >>>>>> commented on the PR). > > > >>>>>> > > > >>>>>> If, for example, we're going to manage Realms as first-class > > > >>>>>> entities > > > >>> in > > > >>>>>> Polaris, there will be a need to represent administrative realm > > > >>>>>> data in > > > >>>>>> memory. Then, there will have to make a distinction between Real > > ID > > > >>>>>> extracted from request parameters and Realm object holding > > persisted > > > >>>>> data. > > > >>>>>> That said, I do not feel too strongly about renaming RealmId to > > > >>>>>> Realm > > > >>> if > > > >>>>>> other people agree on that. > > > >>>>>> > > > >>>>>> Cheers, > > > >>>>>> Dmitri. > > > >>>>>> > > > >>>>>> On Fri, Jan 24, 2025 at 8:51 PM Yufei Gu <flyrain...@gmail.com> > > > >>>>>> wrote: > > > >>>>>> > > > >>>>>>> Hi Folks > > > >>>>>>> > > > >>>>>>> I wanted to share my thoughts on the ongoing discussion in PR > > #741 > > > >>>>>>> <https://github.com/apache/polaris/pull/741>. about whether to > > use > > > >>>>> Realm > > > >>>>>>> or > > > >>>>>>> RealmId. > > > >>>>>>> > > > >>>>>>> The more I consider it, the more it seems that the name Realm > is > > > >>>>>>> the > > > >>>>> more > > > >>>>>>> natural choice. It is more an atomic concept, much like the > > > >>>>>>> concept of > > > >>>>> a > > > >>>>>>> region in AWS. > > > >>>>>>> > > > >>>>>>> If we take a closer look at the current usage across Polaris—in > > > >>>>>>> documentation, error messages, and configurations—realm and > > realmId > > > >>> are > > > >>>>>>> already used interchangeably. In fact, in most cases, we simply > > use > > > >>>>> realm > > > >>>>>>> rather than realmId. > > > >>>>>>> > > > >>>>>>> Here are a few examples in the Polaris repo: > > > >>>>>>> > > > >>>>>>> Error Messages: > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> - realm: <realm> root principal credentials: > > > >>>>>>> <client-id>:<client-secret> > > > >>>>>>> > > > >>>>>>> Configurations: > > > >>>>>>> > > > >>>>>>> - Polaris.realm-context.realms > > > >>>>>>> - jdbc:h2:file:./build/test_data/polaris/{realm}/db > > > >>>>>>> > > > >>>>>>> Documentation: > > > >>>>>>> <https://polaris.apache.org/in-dev/unreleased/metastores/> > > > >>>>>>> > > > >>>>>>> <https://polaris.apache.org/in-dev/unreleased/metastores/> > > > >>>>>>> - < > https://polaris.apache.org/in-dev/unreleased/metastores/ > > > >>>>>>> Metastores > > > >>>>>>> <https://polaris.apache.org/in-dev/unreleased/metastores/> > > > >>>>>>> - Configuring Polaris for Production > > > >>>>>>> < > > > >>>>>>> > > > >>> > > > > > > https://polaris.apache.org/in-dev/unreleased/configuring-polaris-for-production/ > > > >>> > > > >>>>>>> - Admin Tool < > > > >>>>>> https://polaris.apache.org/in-dev/unreleased/admin-tool/> > > > >>>>>>> Proposal > > > >>>>>>> > > > >>>>>>> Based on this consistency and the conceptual clarity it > brings, I > > > >>>>>> proposed > > > >>>>>>> two options: > > > >>>>>>> > > > >>>>>>> Option 1, using the name realm instead of realmId throughout > > > >>>>>>> Polaris > > > >>>>> and > > > >>>>>>> still keeping the interface (public interface Realm) for > > dependency > > > >>>>>>> injection purposes. The interface can be extensible in case we > > > >>>>>>> want to > > > >>>>>> add > > > >>>>>>> any subconcept to the realm, which may never happen to be > honest. > > > >>>>>>> > > > >>>>>>> Option 2, purely using a string for realm instead of an > > interface, > > > >>> this > > > >>>>>> is > > > >>>>>>> simpler ultimately, but not extensible and needs more effort to > > > >>>>> refactor > > > >>>>>>> the current code. > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> Looking forward to hearing your thoughts on this. > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> Yufei > > > >>>>>>> > > > >>> -- > > > >>> Robert Stupp > > > >>> @snazy > > > >>> > > > >>> > > > -- > > > Robert Stupp > > > @snazy > > > > > > > > >