A TTree with a friend TChain doesn't propagate all errors happening in the chain
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Start with the friend-loading block in TTree::GetEntry (tree/tree/src/TTree.cxx), where the return value of LoadTreeFriend is checked, and with TTree::LoadTreeFriend itself. Build the reproducer root_friend_missing_file_bug.C from the issue, which uses a TChain friend pointing to a missing file. Done means events.GetEntry(0) returns a negative value on that failure, and the return-code convention for missing entries (-2) is kept. The sign and value conventions need a maintainer decision first.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Check duplicate issues.
- Checked for duplicates
Description
When a TTree has a friend TChain, the tree's GetEntry() does not return an error if the chain encounters one. This is caused by code in TTree::GetEntry(), which fails to return forward failures signaled by LoadTreeFriend():
if ( t->LoadTreeFriend(entry,this) >= 0 ) { // Returns < 0 on error
nb = t->GetEntry(t->GetReadEntry(),getall);
} else nb = 0; // Error path; I think this should be -1 for `LoadTreeFriend` errors except on missing entries (-2)
}
if (nb < 0) return nb; // Zero is rightfully not an error: it appears when no branch in the friend is enabled
The important point for reproduction is to make LoadTreeFriend fail. With TChain, this is trivially achieved with a file that cannot be loaded or doesn't contain the input tree. With TTree, this is only potentially possible in a very contrived scenario with friends of friends and a custom fNotify.
Reproducer
Run with root -l -q root_friend_missing_file_bug.C.
#include <TChain.h>
#include <TFile.h>
#include <TTree.h>
#include <stdio.h>
void root_friend_missing_file_bug()
{
// Setup: 1-event main file
{
TFile f("main.root", "RECREATE");
TTree t("events", "events");
int x = 0;
t.Branch("x", &x);
t.Fill();
f.Write();
}
TFile f("main.root", "READ");
auto &events = *f.Get<TTree>("events"); // Repro also works with a TChain here
TChain corrections("aux");
corrections.Add("/ThisFileDoesNotExist.root");
// Repro also works with branches in corrections
events.AddFriend(&corrections);
// The tree returns 4, i.e., doesn't report the missing file.
printf("events.GetEntry(0) = %d (failure if <= 0)\n", events.GetEntry(0));
// The chain does return an error-ish value (0, inconsistent with the TTree API that
// would return -1, but changing it would be a breaking change).
printf("corrections.GetEntry(0) = %d (failure if <= 0)\n", corrections.GetEntry(0));
}
ROOT version
6.38.00, but code confirmed identical in master.
------------------------------------------------------------------
| Welcome to ROOT 6.38.00 https://root.cern |
| (c) 1995-2025, The ROOT Team; conception: R. Brun, F. Rademakers |
| Built for linuxx8664gcc on Feb 03 2026, 21:14:06 |
| From tags/6-38-00@6-38-00 |
| With g++ (GCC) 15.2.0 std202302 |
| Try '.help'/'.?', '.demo', '.license', '.credits', '.quit'/'.q' |
------------------------------------------------------------------
Installation method
LCG 109
Operating system
lxplus
Additional context
I wanted to identify the origin of errors and handle them appropriately based on their category (unrecoverable tree/file not found vs transient network issues for which a retry can work).
Full disclosure: this bug was found and investigated with the help of AI. I take full responsibility for the report.
- Lenguaje dominante
- C++
- Estrellas
- 3.3k
- Forks
- 1.6k
- Merge medio
- 2 d 10 h
- PR fusionados (30 d)
- 200
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de root-project/root
-
thisroot.sh: wrong ROOTSYS in zsh when the shell's command line has a newlinePosiblemente ocupada @dpiparo la tomó hace 14 días. Abiertobug in:Build System
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
root-project/root#23746 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
[Build] `fail-on-missing` contract not respected for `NOT http AND webgui`Posiblemente ocupada @guitargeek la tomó hace 3 días. Abiertobug in:Build System
root-project/root#23907 · 3 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Header cleanup campaignPosiblemente ocupada @hageboeck la tomó hace 5 días. Abiertoimprovement in:Core Libraries
root-project/root#23880 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
TDataMember::GetOffset interfers to TDataMember::GetOffsetCintPosiblemente ocupada @pcanal la tomó hace 11 días. Abiertobug in:Core Libraries
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
root-project/root#23777 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
`TChain::GetEntries` internal caching ineffective?Posiblemente ocupada @pcanal la tomó hace 17 días. Abiertoimprovement in:TTree
root-project/root#23738 · 6 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de root-project/root
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
colbymchenry/codegraph#3223 ·
Los mantenedores suelen responder en 1 día
-
The `ufw` decoder requires the kernel's monotonic timestamp, so UFW lines read from journald decode without any fieldPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
arduino/ArduinoCore-megaavr#152 ·
-
bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
microsoft/microsoft-ui-xaml#12515 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
BlueQuartzSoftware/simplnx#1906 ·
Los mantenedores suelen responder en 4 días