Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Failed to sign request 412 - Expect: ['100-continue']

Offen
#3,291 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Muss geklärt werden
Aktivitätsstatus
Ruhig
Tech-Stack
python
Bereich
databases

Rechercherichtung

Reproduziere den Fehler mit pycberg v0.11.1, Lakekeeper, Iceberg, MinIO und pytest-xdist unter Verwendung des beschriebenen Szenarios für parallele Schreibvorgänge. Beginne damit, upload_dataframe_to_storage und _connect_catalog nachzuverfolgen, einschließlich der Katalogkonfiguration und des Aufrufs von iceberg_table.append. Als erledigt gilt die Aufgabe, wenn der Fehler beim gleichzeitigen Schreiben erklärt und eine validierte Lösung oder eine klare Anleitung zur Reproduktion bereitgestellt wurde.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Question

I’m using pycberg v0.11.1 to write DataFrames in a setup that includes Lakekeeper, Iceberg, and MinIO.

When writing a single file, everything works correctly and performance is very good. However, issues start to appear when running tests with pytest-xdist using multiple workers.

With a small number of tests, everything still passes. But when I run around 15 tests in parallel, most of them complete successfully and write to storage as expected. The problem occurs toward the end of the run—some of the remaining tests fail during the write process.

pyiceberg. exceptions.SignError: Failed to sign request 412: {'method': 'PUT', 'region': 'us-east-1', 'uri': ' /my_warehouse/019dca4b-f5bc-71b3-9ccb-a54d0c1a7f87/019dca4c-45b7-7d03-b1b9-f9c899b8db5c/metadata/62127deb-4d73-46a7-bec5-3b9bfc6c6566-m0.avro', 'headers': {'User-Agent': ['aiobotocore/3.3.0 md/Botocore#1.42.70 ua/2.1 os/linux#4.18.0-348.7.1.el8_5.x86_64 md/arch#x86_64 lang/python#3.14.3 md/pyimpl#CPython m/N,D,c,a cfg/retry-mode#legacy botocore/1.42.70'], 'Expect': ['100-continue']}}

`
class IcebergConnProperties(CatalogConnProperties):
conn_type: str
catalog_uri: str
token: str | None
warehouse: str
ssl_verify: str = "true"
extra: dict[str, str] = field(default_factory=dict)

  def to_catalog_config(self) -> dict[str, str | None]:
      """Return kwargs suitable for ``pyiceberg.catalog.load_catalog``."""
      kwargs = {
          "type": self.conn_type,
          "uri": self.catalog_uri,
          "token": self.token,
          "warehouse": self.warehouse,
          "ssl.verify": self.ssl_verify,
          "header.X-Iceberg-Access-Delegation": "vended-credentials",
      }
      kwargs.update(self.extra)
      return kwargs

`

`
def upload_dataframe_to_storage(
self,
dataframe: pl.DataFrame,
schema: str,
table_name: str,
) -> None:
table_just_created = False
table_id = f"{schema}.{table_name}"
catalog = self._connect_catalog(self._conn_properties)
arrow_table = dataframe.to_arrow()
try:
if catalog.table_exists(table_id):
catalog.drop_table(table_id)
self.logger.debug(f"Dropped existing table '{table_id}' before recreating")
else:
self.logger.debug(f"Table '{table_id}' not found — creating from Arrow schema")
self.logger.debug(f"Created namespace if not exists '{schema}'")
iceberg_table = catalog.create_table(
identifier=table_id,
schema=arrow_table.schema,
)
self.logger.debug(f"Created table '{table_id}'")
table_just_created = True
iceberg_table.append(arrow_table)
self.logger.debug(f"Wrote {len(dataframe)} rows to '{table_id}'")
self.logger.debug(f"Table '{table_id}' appended")
except Exception:
self.logger.exception(f"Failed to append {len(dataframe)} rows to '{table_id}'")
if table_just_created:
self.logger.debug(f"Dropping empty table '{table_id}' created in this call")
catalog.drop_table(table_id)
raise
finally:
self.logger.debug("Deleted arrow table from memory")
del arrow_table

def _connect_catalog(self, props: CatalogConnProperties) -> Catalog:
    """Connect to the Iceberg REST catalog."""
    self.logger.debug("Loading Iceberg REST catalog")
    catalog_kwargs = props.to_catalog_config()
    if Config.Trino.USE_JWT_AUTH:
        catalog_kwargs["token"] = get_access_token()
    self.logger.debug(f"Catalog kwargs: {catalog_kwargs}")
    return load_catalog(name=self._CATALOG_NAME, **catalog_kwargs)`
Vorherrschende Sprache
Python
Sterne
1.1k
Forks
606
Ø Merge
1 T. 11 Std.
Gemergte PRs (30 T.)
76

Entwicklungsumgebung

  • Kein Dockerfile und keine Docker-Compose-Datei
  • Hat eine Pull-Request-Vorlage
  • Kein Beitragsleitfaden

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus apache/iceberg-python

Alle Issues in apache/iceberg-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.