max_temp_directory_size in connect config is reported but not enforced
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 30/100
Piste de recherche
Run the reproduction script first to confirm the two runs differ: the apply_set=False run should succeed while the apply_set=True run raises OutOfMemoryException. Then trace how the max_temp_directory_size key in the config= mapping passed to duckdb.connect is applied during connection initialization, and compare that with the path SET max_temp_directory_size takes. Done means the connect-time 1-byte cap rejects the spill just as the SET run does, and the same script passes both cases.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What happens?
Passing max_temp_directory_size through duckdb.connect(config=...) makes current_setting('max_temp_directory_size') report the requested value, but spilling is not bounded by it. Executing the same value with SET max_temp_directory_size after the connection is created enforces the cap.
This can silently let a Python process consume the filesystem space that the connect-time configuration was intended to reserve.
To Reproduce
This self-contained script generates its own Parquet input and runs the same external sort twice:
import tempfile
from pathlib import Path
import duckdb
def run(apply_set: bool) -> None:
root = Path(tempfile.mkdtemp())
source = root / "source.parquet"
output = root / "output.parquet"
with duckdb.connect() as connection:
connection.sql(
"""
SELECT
i AS row_id,
i % 17 AS group_id,
repeat(md5(i::VARCHAR), 32) AS payload
FROM range(49152) t(i)
"""
).write_parquet(str(source), row_group_size=2048)
with duckdb.connect(
str(root / "test.duckdb"),
config={
"memory_limit": "64MB",
"threads": 2,
"temp_directory": str(root / "tmp"),
"preserve_insertion_order": False,
"max_temp_directory_size": "1B",
},
) as connection:
if apply_set:
connection.execute("SET max_temp_directory_size = '1B'")
print("apply_set", apply_set)
print(
"setting",
connection.execute(
"SELECT current_setting('max_temp_directory_size')"
).fetchone(),
)
try:
connection.read_parquet(str(source)).order(
"group_id, payload, row_id"
).write_parquet(str(output), row_group_size=2048)
print("sort succeeded")
except Exception as error:
print(type(error).__name__, str(error).splitlines()[0])
run(apply_set=False)
run(apply_set=True)
Output with DuckDB 1.5.6:
apply_set False
setting ('1 byte',)
sort succeeded
apply_set True
setting ('1 byte',)
OutOfMemoryException Out of Memory Error: failed to offload data block of size 32.0 KiB (0 bytes/1 byte used).
Expected: both runs reject the spill at the 1-byte cap.
The behavior also reproduces with DuckDB 1.5.2. This is specific to initialization through the Python config mapping, so there is no equivalent plain-SQL/CLI connect-time reproduction; the post-connect SQL SET is the working comparison.
Environment
- OS: macOS 27.0, arm64
- DuckDB Package Version: 1.5.6 (latest stable; also 1.5.2)
- Python Version: 3.13.14
- Full Name: Simon Thelin
- Affiliation: Odyssey
- Latest build tested: stable release
- Data set: not applicable; the reproduction generates its input
- All code and relevant configuration are included
- Langage dominant
- Python
- Étoiles
- 191
- Forks
- 120
- Merge moyen
- 14 h 1 min
- PR mergées (30 j)
- 23
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de duckdb/duckdb-python
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
duckdb/duckdb-python#653 ·
Les mainteneurs répondent en général sous 1 jour
-
Type stubs omit the `connection` keyword on module-level `read_json` and `write_csv`Peut-être pris @tojacob03 l’a pris il y a 16 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
duckdb/duckdb-python#627 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
`read_json` accepts a list of paths at runtime but the type stub only allows a single path.Peut-être pris @aleks-drozy l’a pris il y a 74 jours. Ouverteneeds triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
duckdb/duckdb-python#576 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Possible reference leak of the argument tuple in `FunctionCall()`Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverteneeds triage
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
duckdb/duckdb-python#534 ·
Les mainteneurs répondent en général sous 1 jour
-
Missing ROW_GROUPS_PER_FILE argument in write_parquet functionPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverteneeds triage
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
duckdb/duckdb-python#386 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de duckdb/duckdb-python
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
common-workflow-language/cwl-utils#477 ·
Les mainteneurs répondent en général sous 1 jour
-
Add dependabotOuvertefeat
Difficulté 2/5 Moins d'une heure Accessibilité débutants 72/100
open-nudge/opentemplate#204 ·
Les mainteneurs répondent en général sous 1 jour
-
github-stale-ci-pr-closer: KV state is double-wrapped, never persists, and hits the depth-32 limitPeut-être pris @VascoSch92 l’a pris aujourd’hui. Ouvertepriority:medium ready-for-dev
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
OpenHands/extensions#781 ·
Les mainteneurs répondent en général sous 1 jour
-
bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
curriculum documentation quality
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
githubnext/gh-aw-workshop#4638 ·
Les mainteneurs répondent en général sous 1 jour