Hey everyone, I've written up https://docs.google.com/document/d/1F1xh6SJhS-opgWRe1pPvWh01j8VHNHRocfCCFttKNf0/edit to provide an easier way of giving feedback to the proposal. Please take a look so that we can discuss how we'd like to handle the default fallback behavior (*tables* vs *everything that's currently in the spec*) when a newer client talks to an older server.
Eduard On Mon, Jul 15, 2024 at 4:24 PM Dmitri Bourlatchkov <dmitri.bourlatch...@dremio.com.invalid> wrote: > So I would argue to define the current set of APIs and specs as the >> default if the `capabilities` field is missing. > > > There have been two sides to this in prior discussions. Having *tables* > as the default vs having what's *currently in the spec* as the default. > The argument for having *tables* as the default is because we can't > assume that every REST server out there already supports views. > > > Can we assume that a server that does not declare capabilities does NOT > implement views? IMHO, that assumption is too strong and will break use > cases when the client is upgraded, but the server is not. > > Before capabilities were introduced, clients used to work in a certain > way. I think when the client starts interpreting capabilities, but the > server does not declare the capabilities property at all, the client should > (by default) work the same way as when it did not expect capabilities to be > declared. > > > Hence we're opting for the middle ground with *tables* + having a > *configurable > fallback mechanism*. Servers that already support views can configure > their clients to default to *tables / views*, meaning that no additional > (manual) configuration from a client's perspective is required to get table > & view behavior. > > > Forcing a server upgrade when users just want to upgrade the client is too > much of a burden, I think. Servers and clients are often managed by > different groups of people. > > In the end, IIRC previous posts in this thread correctly, declaring server > capabilities is an optimization to allow more efficient / less error-prone > client operation. I do not think it should impose additional functional / > interoperability requirements on servers. > > Cheers, > Dmitri. > > On Mon, Jul 15, 2024 at 10:11 AM Eduard Tudenhöfner < > etudenhoef...@apache.org> wrote: > >> Current servers do not send a `capabilities` field at all. You're >>> suggesting to use a new `rest-default-capabilities` property to let newer >>> clients assume `1`. Once the table/view/etc-spec capabilities are needed, >>> those newer clients would assume table-spec v1. That's wrong IMO. >> >> >> That statement I mentioned only applies to the capabilities that are >> currently in the PR and not to *table-spec / view-spec*. >> >> >> I'm not a fan of a `rest-default-capabilities` property at all, because >>> every user has to configure it explicitly and correctly >>> >> >> As I mentioned, servers can configure this for *all* of their clients >> via the *config* endpoint, so clients wouldn't have to do this *manually* >> . >> >> >> So I would argue to define the current set of APIs and specs as the >>> default if the `capabilities` field is missing. >> >> >> There have been two sides to this in prior discussions. Having *tables* >> as the default vs having what's *currently in the spec* as the default. >> The argument for having *tables* as the default is because we can't >> assume that every REST server out there already supports views. >> >> Hence we're opting for the middle ground with *tables* + having a >> *configurable >> fallback mechanism*. Servers that already support views can configure >> their clients to default to *tables / views*, meaning that no additional >> (manual) configuration from a client's perspective is required to get table >> & view behavior. >> >> Eduard >> >> On Mon, Jul 15, 2024 at 3:00 PM Robert Stupp <sn...@snazy.de> wrote: >> >>> Sorry, I don't understand the two suggestions, especially when used in >>> combination. Current servers do not send a `capabilities` field at all. >>> You're suggesting to use a new `rest-default-capabilities` property to let >>> newer clients assume `1`. Once the table/view/etc-spec capabilities are >>> needed, those newer clients would assume table-spec v1. That's wrong IMO. >>> >>> I'm not a fan of a `rest-default-capabilities` property at all, because >>> every user has to configure it explicitly and correctly. I predict quite >>> some users not doing this or not doing it correctly, causing some trouble >>> that can be prevented. The way things are configured is already quite >>> complex, and yet adding another option adds more complexity to Iceberg. So >>> I would argue to define the current set of APIs and specs as the default if >>> the `capabilities` field is missing. >>> >>> Just because the *current* implementation doesn't use >>> table-spec/view-spec doesn't mean near future clients would need it - >>> table-spec v3 isn't that far away. And with new data types, view-spec v2 >>> isn't far away either. >>> >>> Adding table-spec + view-spec capabilities now saves a lot of headaches >>> for Iceberg users in the near future. >>> >>> >>> On 15.07.24 11:27, Eduard Tudenhöfner wrote: >>> >>> I would suggest adding *table-spec / view-spec / udf-spec *capabilities >>> later when new requirements/updates get added. The current implementation >>> wouldn't make any use of these capabilities, so I don't see a good enough >>> reason to add them at this point. >>> >>> The PR currently says: "tables -> default capability in case the >>>> `capabilities` property doesn't exist or is empty in the response" - >>>> meaning: the server would _only_ support tables. This phrase in the spec >>>> proposal effectively removes the view functionality from all currently >>>> existing Iceberg REST implementations. >>> >>> >>> This is why the configurable fallback mechanism was mentioned in the >>> Catalog sync, which can be realized with *r* >>> *est-default-capabilities=tables,views,abc,xyz* (all of them defaulting >>> to version 1). A server could send that property via the config route >>> without having clients to change anything. >>> >>> >>> On Mon, Jul 15, 2024 at 10:24 AM Robert Stupp <sn...@snazy.de> wrote: >>> >>>> Hi, >>>> >>>> I still have concerns regarding the missing table-spec/view-spec >>>> capabilities. Newer clients can send create/update requests with >>>> requirements/updates of newer Iceberg table/view/udf specs to a server that >>>> doesn't support those spec versions - the outcome is rather undefined. What >>>> should a server do? Ignore the unknown fields and requirement/update types >>>> and hence do what it's potentially _not_ supposed to do? Reply with a then >>>> ambiguous 501 (is it the endpoint that's not implemented or the request >>>> content not supported)? Similar, what if a server decides to not support >>>> for example table-spec v1 and just drop the manifest-file list in a table >>>> snapshot leading to data loss? >>>> >>>> IMO capabilities must contain the table/view/... spec versions >>>> supported by the server. >>>> >>>> There's also the concern about the behavior if the `capabilties` field >>>> is missing (see >>>> https://github.com/apache/iceberg/pull/9940/files#r1676113409, not >>>> sure why the comment thread's resolved). The PR currently says: "tables -> >>>> default capability in case the `capabilities` property doesn't exist or is >>>> empty in the response" - meaning: the server would _only_ support tables. >>>> This phrase in the spec proposal effectively removes the view functionality >>>> from all currently existing Iceberg REST implementations. >>>> >>>> >>>> On 11.07.24 08:42, Eduard Tudenhöfner wrote: >>>> >>>> Are there any other concerns with the proposal or should we start a >>>> VOTE thread? >>>> >>>> Eduard >>>> >>>> On Wed, Jul 10, 2024 at 5:20 PM Dmitri Bourlatchkov >>>> <dmitri.bourlatch...@dremio.com.invalid> >>>> <dmitri.bourlatch...@dremio.com.invalid> wrote: >>>> >>>>> Re: remote signing, I agree that it does not look like a server >>>>>> capability that a client can / should discover. It is more like something >>>>>> that the server instructs / configures the client to do. >>>>> >>>>> >>>>> While a server can control this behavior and instruct the client to >>>>> use remote signing, technically nothing is preventing a client from >>>>> configuring s3.remote-signing-enabled=true. In such a case it seems >>>>> more appropriate to indicate that this capability isn't supported rather >>>>> than a generic 501, because not every server will support remote signing. >>>>> >>>>> >>>>> Good point regarding clients taking initiative and using request >>>>> singing without an explicit server-provided config. It moves the client >>>>> operations into a mode where the server has more control (over having >>>>> longer term client-side credentials), so it looks like a reasonable mode >>>>> to >>>>> support from the security perspective. >>>>> >>>>> Let's keep that capability flag. >>>>> >>>>> Cheers, >>>>> Dmitri. >>>>> >>>>> On Wed, Jul 10, 2024 at 5:48 AM Eduard Tudenhöfner < >>>>> etudenhoef...@apache.org> wrote: >>>>> >>>>>> Hey everyone, >>>>>> >>>>>> I've added a few inline comments below. >>>>>> >>>>>> >>>>>> >>>>>>> Re: remote signing, I agree that it does not look like a server >>>>>>> capability that a client can / should discover. It is more like >>>>>>> something >>>>>>> that the server instructs / configures the client to do. >>>>>> >>>>>> >>>>>> While a server can control this behavior and instruct the client to >>>>>> use remote signing, technically nothing is preventing a client from >>>>>> configuring s3.remote-signing-enabled=true. In such a case it seems >>>>>> more appropriate to indicate that this capability isn't supported rather >>>>>> than a generic 501, because not every server will support remote signing. >>>>>> >>>>>> The *vended-credentials* capability on the other hand is more >>>>>> informative in its nature and a server indeed configures a client. I >>>>>> think >>>>>> that was also one of the reasons I removed this capability but added it >>>>>> later back due to a comment from Jack. >>>>>> >>>>>> I'm ok either way in terms of removing / keeping *vended-credentials* >>>>>> as a capability but given that we'd want to include *actionable* >>>>>> capabilities >>>>>> at this point, I'd just remove it (nothing is preventing us from adding >>>>>> it >>>>>> later if necessary). >>>>>> >>>>>> >>>>>> In that case, why do we need all these other capabilities like >>>>>>> tables, remote-signing, etc. in the first place? >>>>>> >>>>>> >>>>>> Given that capabilities also carry versioning information, clients >>>>>> can make more informed decisions on which endpoints to call. One could >>>>>> argue that generally throwing a 501 on everything that isn't supported >>>>>> might be sufficient, but that doesn't necessarily help a client in >>>>>> knowing >>>>>> which versions of a capability are safe to call/use. >>>>>> >>>>>> Regarding the control of client-side fallback behavior: >>>>>> I think the default fallback behavior should be *tables* (with >>>>>> version 1) with a property in the REST catalog that allows configuring >>>>>> this >>>>>> to e.g. *rest-default-capabilities=tables,views,abc,xyz* (all of >>>>>> them defaulting to version 1). >>>>>> >>>>>> >>>>>> Eduard >>>>>> >>>>>> >>>>>> On Tue, Jul 9, 2024 at 7:00 PM Jack Ye <yezhao...@gmail.com> wrote: >>>>>> >>>>>>> Yes I agree that sounds like a valid use case. So the criteria so >>>>>>> far is that capabilities are used for: >>>>>>> - controlling client-side fallback behavior >>>>>>> - failing expensive operations early if we know it will eventually >>>>>>> fail due to missing capability >>>>>>> >>>>>>> Do we agree if this is the criteria we should use? What about the >>>>>>> other capabilities, namly tables, remote-signing, credential-vending? >>>>>>> >>>>>>> -Jack >>>>>>> >>>>>>> >>>>>>> On Tue, Jul 9, 2024 at 9:27 AM Ryan Blue >>>>>>> <b...@databricks.com.invalid> <b...@databricks.com.invalid> wrote: >>>>>>> >>>>>>>> > does it make a difference if I declare the capability or not? >>>>>>>> >>>>>>>> I think that it does in other cases. Multi-table commits, for >>>>>>>> example, are a building block for multi-statement transactions. If a >>>>>>>> service doesn't support multi-table commits then we ideally want >>>>>>>> clients to >>>>>>>> know that ahead of time so that they don't run a big transaction and >>>>>>>> then >>>>>>>> fail because the commit is not supported. >>>>>>>> >>>>>>>> On Tue, Jul 9, 2024 at 9:12 AM Dmitri Bourlatchkov >>>>>>>> <dmitri.bourlatch...@dremio.com.invalid> >>>>>>>> <dmitri.bourlatch...@dremio.com.invalid> wrote: >>>>>>>> >>>>>>>>> Re: remote signing, I agree that it does not look like a server >>>>>>>>> capability that a client can / should discover. It is more like >>>>>>>>> something >>>>>>>>> that the server instructs / configures the client to do. >>>>>>>>> >>>>>>>>> Cheers, >>>>>>>>> Dmitri. >>>>>>>>> >>>>>>>>> On Tue, Jul 9, 2024 at 12:05 PM Jack Ye <yezhao...@gmail.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> I was reconciling the discussion yesterday, one point that was >>>>>>>>>> interesting to me was that we agreed the purpose of these >>>>>>>>>> capabilities is >>>>>>>>>> to "control client-side fallback behavior", or at least the client >>>>>>>>>> should >>>>>>>>>> behave differently based on these capabilities. However, this seems >>>>>>>>>> to be >>>>>>>>>> only needed so far for views, or more specifically, for loadView API >>>>>>>>>> only >>>>>>>>>> because it impacts the fallback behavior to resolve the identifier >>>>>>>>>> as a >>>>>>>>>> table or not. >>>>>>>>>> >>>>>>>>>> For all the other capabilities listed, and even the other >>>>>>>>>> endpoints in view, because a server can decide to implement it >>>>>>>>>> partially >>>>>>>>>> anyway and just document the behavior, does it make a difference if I >>>>>>>>>> declare the capability or not? The client will not stop the request, >>>>>>>>>> the >>>>>>>>>> server will just error out if it is not supported. Maybe the error >>>>>>>>>> is not >>>>>>>>>> in the expected code or message, but it is still an error. In that >>>>>>>>>> case, >>>>>>>>>> why do we need all these other capabilities like tables, >>>>>>>>>> remote-signing, >>>>>>>>>> etc. in the first place? >>>>>>>>>> >>>>>>>>>> Maybe it is too extreme of a thought, but could anyone help >>>>>>>>>> describe how the other capabilities could be used beyond potentially >>>>>>>>>> returning an error earlier? >>>>>>>>>> >>>>>>>>>> -Jack >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Tue, Jul 9, 2024 at 8:02 AM Dmitri Bourlatchkov >>>>>>>>>> <dmitri.bourlatch...@dremio.com.invalid> >>>>>>>>>> <dmitri.bourlatch...@dremio.com.invalid> wrote: >>>>>>>>>> >>>>>>>>>>> Hi Eduard, >>>>>>>>>>> >>>>>>>>>>> > I've also added the 501 error to the response of the >>>>>>>>>>> respective endpoints but worth mentioning that *HEAD* / *GET >>>>>>>>>>> *requests >>>>>>>>>>> must not return a 501 >>>>>>>>>>> <https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501> (this >>>>>>>>>>> implies that the server impl would e.g. return a *404* in such >>>>>>>>>>> a case). >>>>>>>>>>> >>>>>>>>>>> My reading on the Mozilla page makes me think that it is phrased >>>>>>>>>>> too narrowly. Reading RFC 2616 [1] I believe that it does not >>>>>>>>>>> preclude >>>>>>>>>>> responding with 501 to GET and HEAD requests. I think it means that >>>>>>>>>>> GET and >>>>>>>>>>> HEAD methods must be supported by "general purpose" servers. The >>>>>>>>>>> Iceberg >>>>>>>>>>> REST server is not a general purpose server for resources. So, I >>>>>>>>>>> think it >>>>>>>>>>> should be fine to respond with 501 to unimplemented endpoints. >>>>>>>>>>> >>>>>>>>>>> Cheers, >>>>>>>>>>> Dmitri. >>>>>>>>>>> >>>>>>>>>>> [1] https://www.rfc-editor.org/rfc/rfc2616#section-5.1.1 >>>>>>>>>>> >>>>>>>>>>> On Tue, Jul 9, 2024 at 9:44 AM Eduard Tudenhöfner < >>>>>>>>>>> etudenhoef...@apache.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hey everyone, >>>>>>>>>>>> >>>>>>>>>>>> I watched the catalog sync recording today and updated the PR >>>>>>>>>>>> <https://github.com/apache/iceberg/pull/9940> to remove >>>>>>>>>>>> fine-grained capabilities like *register-table / table-metrics*. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> The current capabilities (with versioning information) in the >>>>>>>>>>>> PR are: >>>>>>>>>>>> >>>>>>>>>>>> - tables >>>>>>>>>>>> - views >>>>>>>>>>>> - remote-signing >>>>>>>>>>>> - vended-credentials >>>>>>>>>>>> - multi-table-commit >>>>>>>>>>>> >>>>>>>>>>>> For servers that only *partially* implement endpoints under a >>>>>>>>>>>> capability the spec requires the server to throw a *501 Not >>>>>>>>>>>> Implemented*. I've also added the 501 error to the response of >>>>>>>>>>>> the respective endpoints but worth mentioning that *HEAD* / *GET >>>>>>>>>>>> *requests must not return a 501 >>>>>>>>>>>> <https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501> >>>>>>>>>>>> (this >>>>>>>>>>>> implies that the server impl would e.g. return a *404* in such >>>>>>>>>>>> a case). >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Regards >>>>>>>>>>>> Eduard >>>>>>>>>>>> >>>>>>>>>>>> On Thu, Jul 4, 2024 at 3:59 PM Jean-Baptiste Onofré < >>>>>>>>>>>> j...@nanthrax.net> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Eduard, >>>>>>>>>>>>> >>>>>>>>>>>>> It makes sense to return 501 for servers which don't implement >>>>>>>>>>>>> all >>>>>>>>>>>>> endpoints. It means that the server will at least have to >>>>>>>>>>>>> implement >>>>>>>>>>>>> empty endpoints if needed (that makes sense to me). >>>>>>>>>>>>> >>>>>>>>>>>>> I think we should focus on only "identified capabilities". I >>>>>>>>>>>>> think >>>>>>>>>>>>> that I proposed before that the capabilities can be >>>>>>>>>>>>> overridden/provided by server implementation. Else, I'm afraid >>>>>>>>>>>>> we >>>>>>>>>>>>> won't be flexible enough or always behind the implementation >>>>>>>>>>>>> (if an >>>>>>>>>>>>> implementation wants to add "my-foo-cap"). >>>>>>>>>>>>> >>>>>>>>>>>>> Regards >>>>>>>>>>>>> JB >>>>>>>>>>>>> >>>>>>>>>>>>> On Thu, Jul 4, 2024 at 9:32 AM Eduard Tudenhöfner >>>>>>>>>>>>> <etudenhoef...@apache.org> wrote: >>>>>>>>>>>>> > >>>>>>>>>>>>> > I have clarified the wording in #9940 around the requirement >>>>>>>>>>>>> on having to implement all endpoints under a particular >>>>>>>>>>>>> capability. >>>>>>>>>>>>> > >>>>>>>>>>>>> > For servers that only partially implement endpoints under a >>>>>>>>>>>>> capability the spec requires the server to throw a 501 Not >>>>>>>>>>>>> Implemented. >>>>>>>>>>>>> This was suggested by Jack and it seems reasonable to do that. >>>>>>>>>>>>> > >>>>>>>>>>>>> > Regarding the inclusion of table-spec / view-spec as a >>>>>>>>>>>>> capability: I think this might make sense for the next iteration >>>>>>>>>>>>> of the >>>>>>>>>>>>> REST spec but as I mentioned earlier I don't see any clear >>>>>>>>>>>>> benefit for the >>>>>>>>>>>>> current REST spec as the client wouldn't do anything with that >>>>>>>>>>>>> information. >>>>>>>>>>>>> > If there is a clear benefit of having this, then this can >>>>>>>>>>>>> still be added later to the current REST spec but I believe we >>>>>>>>>>>>> should >>>>>>>>>>>>> rather have a few well-defined and actionable capabilities rather >>>>>>>>>>>>> than too >>>>>>>>>>>>> many. >>>>>>>>>>>>> > >>>>>>>>>>>>> > Eduard >>>>>>>>>>>>> > >>>>>>>>>>>>> > On Wed, Jul 3, 2024 at 5:44 AM Renjie Liu < >>>>>>>>>>>>> liurenjie2...@gmail.com> wrote: >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> Spec is an interesting topic we did not discuss. Robert, >>>>>>>>>>>>> how do you envision this to be used? >>>>>>>>>>>>> >>> In my mind, if a new table format v3 is launched, there >>>>>>>>>>>>> are 2 approaches we can go with, taking CreateTable as an example: >>>>>>>>>>>>> >>> (1) increment the related operation version, which means >>>>>>>>>>>>> that POST /v2/{prefix}/namespaces/{ns}/tables will be created and >>>>>>>>>>>>> allow >>>>>>>>>>>>> creating tables in the v3 version. >>>>>>>>>>>>> >>> (2) update the existing table metadata model to support >>>>>>>>>>>>> both v2 and v3 fields, and the server enforces the payload >>>>>>>>>>>>> differently >>>>>>>>>>>>> based on the TableMetadata.format-version field. If the server >>>>>>>>>>>>> does not >>>>>>>>>>>>> support v3, it can return unsupported at that time. >>>>>>>>>>>>> >>> Either way we go, the table-spec version does not need to >>>>>>>>>>>>> be a capability. (1) seems to be cleaner, but has some overhead in >>>>>>>>>>>>> provisioning a new endpoint compared to (2). >>>>>>>>>>>>> >>> Do you see another way to do this leveraging the >>>>>>>>>>>>> table-spec version? >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> 2 is cleaner but maybe inconsistent with current behavior, >>>>>>>>>>>>> since /v1/tables operation supports both v1 and v3. We should >>>>>>>>>>>>> only go to 2 >>>>>>>>>>>>> only when we have incompatible fields/break changes according to >>>>>>>>>>>>> discussion. >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> Generally I agree with adding table-spec into capabilities. >>>>>>>>>>>>> For example, we can expose this to user in api so that user could >>>>>>>>>>>>> choose a >>>>>>>>>>>>> supported table format version without throwing exception. >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> On Wed, Jul 3, 2024 at 12:18 AM Jack Ye < >>>>>>>>>>>>> yezhao...@gmail.com> wrote: >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> Spec is an interesting topic we did not discuss. Robert, >>>>>>>>>>>>> how do you envision this to be used? >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> In my mind, if a new table format v3 is launched, there >>>>>>>>>>>>> are 2 approaches we can go with, taking CreateTable as an example: >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> (1) increment the related operation version, which means >>>>>>>>>>>>> that POST /v2/{prefix}/namespaces/{ns}/tables will be created and >>>>>>>>>>>>> allow >>>>>>>>>>>>> creating tables in the v3 version. >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> (2) update the existing table metadata model to support >>>>>>>>>>>>> both v2 and v3 fields, and the server enforces the payload >>>>>>>>>>>>> differently >>>>>>>>>>>>> based on the TableMetadata.format-version field. If the server >>>>>>>>>>>>> does not >>>>>>>>>>>>> support v3, it can return unsupported at that time. >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> Either way we go, the table-spec version does not need to >>>>>>>>>>>>> be a capability. (1) seems to be cleaner, but has some overhead in >>>>>>>>>>>>> provisioning a new endpoint compared to (2). >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> Do you see another way to do this leveraging the >>>>>>>>>>>>> table-spec version? >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> -Jack >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> >>>>>>>>>>>>> >>> On Tue, Jul 2, 2024 at 6:03 AM Eduard Tudenhöfner >>>>>>>>>>>>> <eduard.tudenhoef...@databricks.com.invalid> >>>>>>>>>>>>> <eduard.tudenhoef...@databricks.com.invalid> wrote: >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>> I couldn't make it to the catalog sync meeting yesterday >>>>>>>>>>>>> but I watched the recording today (thanks for providing that). >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>>> The missing piece is how (new, capabilities-aware) >>>>>>>>>>>>> clients handle the case when a service does _not_ return the >>>>>>>>>>>>> capabilities >>>>>>>>>>>>> field (absent). My proposal would be that a client should in this >>>>>>>>>>>>> case >>>>>>>>>>>>> assume that all _currently_ existing capabilities are supported. >>>>>>>>>>>>> >>>>> >>>>>>>>>>>>> >>>>> - tables: [1] >>>>>>>>>>>>> >>>>> - views: [1] >>>>>>>>>>>>> >>>>> - remote-signing: [1] >>>>>>>>>>>>> >>>>> - multi-table-commit: [1] >>>>>>>>>>>>> >>>>> - register-table: [1] >>>>>>>>>>>>> >>>>> - table-metrics: [1] >>>>>>>>>>>>> >>>>> - table-spec: [1,2] >>>>>>>>>>>>> >>>>> - view-spec: [1,2] >>>>>>>>>>>>> >>>>> >>>>>>>>>>>>> >>>>> >>>>>>>>>>>>> >>>> The one thing I would like to add here is that the >>>>>>>>>>>>> current PR uses the tables capability (as version 1) as the >>>>>>>>>>>>> default when a >>>>>>>>>>>>> server doesn't return capabilities but it might be also ok to >>>>>>>>>>>>> include views >>>>>>>>>>>>> (as version 1) because the current client impl has some code to >>>>>>>>>>>>> deal with >>>>>>>>>>>>> errors in case endpoints don't exist. >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>> Unless we agree that the currently existing functionality >>>>>>>>>>>>> in the REST spec is the default behavior to be assumed for older >>>>>>>>>>>>> server, >>>>>>>>>>>>> I'm not sure about including remote-signing / multi-table-commit / >>>>>>>>>>>>> register-table / table-metrics as it has been indicated in >>>>>>>>>>>>> earlier comments >>>>>>>>>>>>> on the PR/ML that not every REST server supports these. >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>> That being said, we should discuss whether we want the >>>>>>>>>>>>> default behavior (when an older server doesn't send back >>>>>>>>>>>>> capabilities) to be >>>>>>>>>>>>> >>>> a) tables (version 1) only >>>>>>>>>>>>> >>>> b) the currently existing functionality as defined in the >>>>>>>>>>>>> REST spec (as version 1) >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>> On another note: Including table-spec / view-spec seems >>>>>>>>>>>>> to be more informative in its nature as I don't think a client >>>>>>>>>>>>> would act >>>>>>>>>>>>> differently right now when seeing these. >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>> Thanks >>>>>>>>>>>>> >>>> Eduard >>>>>>>>>>>>> >>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Ryan Blue >>>>>>>> Databricks >>>>>>>> >>>>>>> -- >>>> Robert Stupp >>>> @snazy >>>> >>>> -- >>> Robert Stupp >>> @snazy >>> >>>