Skip to content

[RF] Don't use removeServer to clean RooAbsAnaConvPdf compute graph#21065

Merged
guitargeek merged 1 commit into
root-project:masterfrom
guitargeek:abs_ana_conv_pdf
Jan 30, 2026
Merged

[RF] Don't use removeServer to clean RooAbsAnaConvPdf compute graph#21065
guitargeek merged 1 commit into
root-project:masterfrom
guitargeek:abs_ana_conv_pdf

Conversation

@guitargeek
Copy link
Copy Markdown
Contributor

@guitargeek guitargeek commented Jan 29, 2026

This follows up on 232a619, where a unused server was removed when the RooAbsAnaConvPdf is compiled for a given normalization set.

Unfortunately, servers can't be meaningfully removed because it always results in a server-proxy-desync problem. If a server is removed, the corresponding RooArgProxy stays around as a data member of the RooAbsAnaConvPdf. When you then copy the RooAbsAnaConvPdf, the seemingly removed server is resurrected implicitly in the copy constructor of the the proxy, which leads to the confusing situation that a copy has a different server structure from the original.

This will then confuse the server redirection when deep-cloning RooAbsArgs, manifesting in a problem reported on the forum, which is fixed by this commit:

https://root-forum.cern.ch/t/redirectservers-server-not-redirected/64612/4

All other use of RooAbsArg::removeServer() outside the RooAbsArg destructor should also be reviewed to make sure that similar problems don't hide in other parts of the code. We should also consider deprecating that function from the public user interface, together with RooAbsArg::replaceServer(), which has the same problem.

Fixes #21070

This follows up on 232a619, where a unused server was removed when
the RooAbsAnaConvPdf is compiled for a given normalization set.

Unfortunately, servers can't be meaningfully removed because it
**always** results in a server-proxy-desync problem. If a server is
removed, the corresponding `RooArgProxy` stays around as a data member
of the RooAbsAnaConvPdf. When you then copy the RooAbsAnaConvPdf, the
seemingly removed server is resurrected implicitly in the copy
constructor of the the proxy, which leads to the confusing situation
that a copy has a different server structure from the original.

This will then confuse the server redirection when deep-cloning
RooAbsArgs, manifesting in a problem reported on the forum, which is
fixed by this commit:

https://root-forum.cern.ch/t/redirectservers-server-not-redirected/64612/4

All other use of `RooAbsArg::removeServer()` outside the RooAbsArg
destructor should also be reviewed to make sure that similar problems
don't hide in other parts of the code. We should also consider
deprecating that function from the public user interface, together with
`RooAbsArg::replaceServer()`, which has the same problem.
@github-actions
Copy link
Copy Markdown

Test Results

    22 files      22 suites   3d 15h 48m 0s ⏱️
 3 774 tests  3 774 ✅ 0 💤 0 ❌
75 056 runs  75 056 ✅ 0 💤 0 ❌

Results for commit 05257d6.

Copy link
Copy Markdown
Member

@dpiparo dpiparo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks!

@guitargeek guitargeek merged commit 478ad2b into root-project:master Jan 30, 2026
33 checks passed
@guitargeek guitargeek deleted the abs_ana_conv_pdf branch January 30, 2026 07:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RedirectServers - Server not redirected

2 participants