[Bug] REST catalog drop_table serializes purgeRequested as "True" instead of "true"

Đang mở Phù hợp với người mới
#3,836 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
api

Hướng nghiên cứu

Bắt đầu trong pyiceberg/catalog/rest/init.py tại RestCatalog.drop_table và kiểm tra các vị trí xuất hiện khác của params= được đề xuất trong issue. Tái hiện request hoặc chạy các kiểm tra REST catalog liên quan, sau đó xác minh rằng purgeRequested được serialize thành true hoặc false viết thường và server chấp nhận nó.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Apache Iceberg version

None

Please describe the bug 🐞
### Description

`RestCatalog.drop_table()` passes a Python `bool` directly to `requests` query params. Python's `requests` library 
serializes `True` as the string `"True"` (capitalized). This violates the OpenAPI 3.0 specification for boolean 
query parameters and causes 400 errors on spec-compliant servers.

### Steps to Reproduce

```python
from pyiceberg.catalog import load_catalog

catalog = load_catalog("my_catalog", **{
    "type": "rest",
    "uri": "http://my-rest-catalog/iceberg",
    ...
})

catalog.drop_table("my_db.my_table", purge_requested=True)
# → 400 Bad Request

Evidence

Enabled wire-level logging via http.client.HTTPConnection.debuglevel = 1:
send: b'DELETE /iceberg/v1//namespaces/my_db/tables/my_table?purgeRequested=True HTTP/1.1\r\n...'

reply: 'HTTP/1.1 400 Bad Request\r\n'
header: x-amzn-errortype: purge_enabled
body: {"error":{"type":"BadRequestException","message":"purge_enabled: DropTable operation failed. OSS Tables only 
supports dropping tables with purge enabled."}}

The server receives purgeRequested=True (capital T) and does not interpret it as boolean true.

Root Cause

pyiceberg/catalog/rest/init.py, drop_table method (~line 1135):
def drop_table(self, identifier: str | Identifier, purge_requested: bool = False) -> None:
response = self._session.delete(
self.url(Endpoints.drop_table, prefixed=True, **self._split_identifier_for_path(identifier)),
params={"purgeRequested": purge_requested}, # Python bool True → requests serializes as "True"
)
Python's requests library calls str() on param values: str(True) → "True".

Why This Is a Bug

The Iceberg REST catalog OpenAPI spec (rest-catalog-open-api.yaml
(https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml)) defines purgeRequested as:
- name: purgeRequested
in: query
schema:
type: boolean
Per the specification chain:

"True" (capitalized) is not a valid serialization of a JSON boolean.

Suggested Fix
params={"purgeRequested": str(purge_requested).lower()},
Or more explicitly:
params={"purgeRequested": "true" if purge_requested else "false"},
Scope

This pattern may exist elsewhere in the REST catalog client. A grep for params={ in
pyiceberg/catalog/rest/init.py would identify other occurrences where Python bools are passed as query
parameters.

Environment

  • PyIceberg: 0.11.1
  • Python: 3.10.21
  • Server: Aliyun OSS Tables (Iceberg REST compatible, strictly validates boolean query params)
  • requests: 2.x (serializes bool via str())
Willingness to contribute
  • I can contribute a fix for this bug independently
  • I would be willing to contribute a fix for this bug with guidance from the Iceberg community
  • I cannot contribute a fix for this bug at this time
Ngôn ngữ chính
Python
Star
1.1k
Fork
589
Merge trung bình
2 ngày 4 giờ
Pull request đã merge (30 ngày)
72

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của apache/iceberg-python

Tất cả issue của apache/iceberg-python

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.