Process-global manifest cache is keyed only on manifest_path
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
- 48/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- python
- Domaine
- data-engineering, databases
Piste de recherche
Start in pyiceberg/manifest.py by reading _ManifestCache.get_or_cache and the read_manifest_list entry point. Reproduce the collision with two manifest lists that use the same manifest_path but provide different metadata. Done means cache behavior no longer allows one manifest list's ManifestFile metadata to affect another table's scan pruning, with regression coverage for the collision.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
pyiceberg/manifest.py holds a module-level cache:
_manifest_cache = _ManifestCache()
Its docstring describes it accurately: "Process-wide ManifestFile cache keyed by manifest_path." The key is the path string alone — no catalog, table, session, or tenant forms part of it.
def get_or_cache(self, manifest_file: ManifestFile) -> ManifestFile:
...
manifest_path = manifest_file.manifest_path
if manifest_path in self._cache:
return self._cache[manifest_path]
self._cache[manifest_path] = manifest_file
return manifest_file
On a hit it returns the cached object and discards the one just read. Since read_manifest_list constructs ManifestFile objects from the entries of a manifest list rather than by reading each manifest file, the cached object reflects whatever the first manifest list to name that path declared — including its partition summaries, counts and sequence numbers.
Two tables in the same process that reference the same manifest_path therefore share one ManifestFile, and the first read wins. Because those fields drive scan pruning, a stale or mismatched entry changes which files a scan considers.
Issue investigation generated via claude, reviewed by Sung, Kevin, Fokko.
- Langage dominant
- Python
- Étoiles
- 1.1k
- Forks
- 589
- Merge moyen
- 2 j 11 h
- PR mergées (30 j)
- 75
Préparer son environnement
Nous n'avons pas encore vérifié les fichiers d'installation de ce projet. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
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 apache/iceberg-python
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
apache/iceberg-python#4010 · 3 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/iceberg-python#3996 ·
Les mainteneurs répondent en général sous 1 jour
-
Deletion vector bitmap count is read from the blob and used as a loop bound without validationOuvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
apache/iceberg-python#3979 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/iceberg-python#3885 ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug] PyArrowFileIO fails to propagate s3.ssl.ca-cert to pyarrow.fs.S3FileSystem tls_ca_file_pathOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
apache/iceberg-python#3866 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de apache/iceberg-python
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
PedestrianDynamics/pyFDS-Evac#199 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
521xueweihan/HelloGitHub#3790 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
sandialabs/atlas-ui-3#978 ·
Les mainteneurs répondent en général sous 1 jour
-
area: tests perceived difficulty: 2
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Nitjsefnie-Harness-Commons/daedalus#1255 ·
Les mainteneurs répondent en général sous 1 jour
-
hf-audiolm-qwen: `generate_until` hardcodes `.to("cuda")` and aborts on non-CUDA acceleratorsOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
EleutherAI/lm-evaluation-harness#4256 ·
Les mainteneurs répondent en général sous 1 jour