Thanks all for your feedback! Since it seems like there's general consensus
and this discussion thread has been open for quite some time at this point,
I will start a vote thread on this.

Thank you,

Amogh Jahagirdar

On Wed, Aug 7, 2024 at 7:17 PM Yufei Gu <flyrain...@gmail.com> wrote:

> Thanks Amogh for starting this discussion. I agree that using 400 makes
> sense, especially since the server might not fully recognize the request.
> It’s a straightforward way to handle these situations and avoid potential
> misunderstanding.
>
> Yufei
>
>
> On Tue, Aug 6, 2024 at 5:53 AM Xianjin YE <xian...@apache.org> wrote:
>
>> Thanks Amogh for driving this discussion. I’m also +1 for 400 status code
>> as others pointed out that the server is unable to determine the request is
>> well formed or not.
>>
>>
>>
>> On Aug 6, 2024, at 05:28, Amogh Jahagirdar <2am...@gmail.com> wrote:
>>
>> I also went back and forth on 400 vs 422 but ultimately concluded that
>> 400 is the correct one to use here. My understanding is that 422 is meant
>> to address semantic issues in the request as opposed to 400 which is
>> typically used for invalid formatted input.
>>
>> As Dan mentioned, in this case the server is actually unable to identify
>> if the request was well formed, since it does not even have an
>> understanding of if the requirement/update is valid. If the server is not
>> able to have a semantic understanding of this requirement/update, then I
>> think from a server perspective it must be concluded that it is invalid
>> input.
>>
>> >(Any other options considered?)
>>
>> I didn't really consider any other high level options tbh since I think
>> they lead to bad behaviors, but for the sake of thinking it through
>> explicitly:
>> The options for handling unknown input range from ignoring it to spec'ing
>> out the required failure mode (this proposal).
>> If servers ignored the update rather than fail, then clients would think
>> their operations would succeed but they really didn't. If a server ignored
>> a requirement it couldn't understand, that could lead to correctness
>> issues!
>>
>> As a result, I think the clearest option is to have a defined failure
>> mode.
>>
>> Thanks,
>>
>> Amogh Jahagirdar
>>
>> On Mon, Aug 5, 2024 at 9:22 AM Daniel Weeks <dwe...@apache.org> wrote:
>>
>>> I feel like this is a little bit of a gray area in terms of 400 vs 422.
>>> While I agree that 422 reads like the right answer just based on the
>>> definition of the codes, I think that it will be hard to implement and may
>>> not make sense in context of how the server evolves.
>>>
>>> If a server has not implemented a new update/requirement, then it would
>>> be seen as a bad/request (400) because the server doesn't have the
>>> ability to determine whether the request is well formatted or not (it knows
>>> nothing about the request).
>>>
>>> I would say the 422 makes sense if the server understands and can parse
>>> the request, but cannot complete the request, which would not be the case.
>>> It would also be hard for a service to determine if the request was well
>>> formed if it does not know about the request.
>>>
>>> I think 400 makes the most sense here.
>>>
>>> -Dan
>>>
>>> On Fri, Aug 2, 2024 at 4:28 PM Dmitri Bourlatchkov
>>> <dmitri.bourlatch...@dremio.com.invalid> wrote:
>>>
>>>> I'd suggest using error code 422 (Unprocessable Content) [1] instead.
>>>>
>>>> 400 generally means the request was not well-formed (e.g. syntax error,
>>>> or using invalid chars, etc.). However, here we have a situation when a
>>>> client actually sends a valid request, but the server is not able to
>>>> properly process some part of it.
>>>>
>>>> Cheers,
>>>> Dmitri.
>>>>
>>>> [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422
>>>>
>>>> On Fri, Aug 2, 2024 at 1:15 PM Amogh Jahagirdar <2am...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hey everyone,
>>>>>
>>>>> I'm starting this thread to discuss clarifying in the REST Spec on
>>>>> what servers should do
>>>>> if as part of a commit operation they receive an update
>>>>> <https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml#L2570C5-L2570C16>
>>>>> or requirement
>>>>> <https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml#L2601>
>>>>>  that
>>>>> is unknown.
>>>>>
>>>>> What I am proposing is to clearly say in the spec that if a server
>>>>> receives an update or requirement which is unknown it must fail with a 400
>>>>> error code. 400 seems the most appropriate code to be able to
>>>>> describe unknown input in the commit table request. Here's the PR
>>>>> https://github.com/apache/iceberg/pull/10848/files
>>>>>
>>>>> This is a simple way to ensure that implementations avoid correctness
>>>>> issues that come from ignoring unknown updates/requirements. It also
>>>>> enables the community to be able to add new operations without any complex
>>>>> versioning schemes.
>>>>>
>>>>> A more concrete example: Recently there's been work on removing
>>>>> inactive partition specs
>>>>> <https://github.com/apache/iceberg/pull/10755>from table metadata.
>>>>> With this proposal, any server which receives a RemovePartitionSpecUpdate
>>>>> and does not recognize it, must fail with a 400.
>>>>>
>>>>> Note: I will propose the specific example of RemovePartitionSpecUpdate
>>>>> spec change in a different thread.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Amogh Jahagirdar
>>>>>
>>>>
>>

Reply via email to