-
Notifications
You must be signed in to change notification settings - Fork 1.4k
TTreeCache: start a new fill at the end of the previous one. #8049
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
See cms-sw/cmssw#33361 Fixes root-project#8048 Now, set the start point of the filling to be the end of the previous filling rather than the start of the current cluster (which can sometimes be before the end of the previous filling) Issue: The error message was inaccurate, it did not take into account jagged filling of the TTreeCache. In this case, the cache was filled with a little more than one cluster and when it needs to do the next refill it restarted from the cluster start boundary of that partially downloaded cluster which is “indeed” within the range of the last TreeCache fill (i.e. the error). We did not see the problem with a local file because the TTreeCache usage is different. CMSSW take note of whether prefetching (asynchronous reads) is available for a while or not. In the setup CMSSW has, the prefetching (asynchronous reads) is available for the local file but not for the network/remote file. In addition when prefetching (asynchronous reads) is not available, CMSSW uses multiple TTreeCache for a given TTree while it uses only one when prefetching (asynchronous reads) is available. This results in the pattern of filling to be different between the 2 cases.
|
Starting build on |
|
Build failed on mac11.0/cxx17. Warnings:
And 1475 more Failing tests:
|
jblomer
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be nice to have a test for jagged filling
| if (showMore || gDebug > 6) | ||
| Info("FillBuffer", "Looking at cluster spanning from %lld to %lld", fEntryCurrent, fEntryNext); | ||
|
|
||
| if (0 <= fNextClusterStart && fEntryCurrent < fNextClusterStart && !(fEntryCurrent < fNextClusterStart)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fEntryCurrent < fNextClusterStart && !(fEntryCurrent < fNextClusterStart) doesn't seem to make sense.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You are right. This was intended to detect when the user is moving backward but a "typo/thinko" mess it up :( rendering the whole PR moot ... i.e. Test need to go in at the same time...
Test Results 17 files 17 suites 3d 17h 45m 27s ⏱️ For more details on these failures, see this check. Results for commit 7da8b32. |
See cms-sw/cmssw#33361
Fixes #8048
Now, set the start point of the filling to be the end of the previous filling rather than the start of the current cluster (which can sometimes
be before the end of the previous filling)
Issue: The error message was inaccurate, it did not take into account jagged filling of the TTreeCache. In this case, the cache was filled with a little more than one cluster and when it needs to do the next refill it restarted from the cluster start boundary of that partially downloaded cluster which is “indeed” within the range of the last TreeCache fill (i.e. the error).
We did not see the problem with a local file because the TTreeCache usage is different. CMSSW take note of whether prefetching (asynchronous reads) is available for a while or not. In the setup CMSSW has, the prefetching (asynchronous reads) is available for the local file but not for the network/remote file. In addition when prefetching (asynchronous reads) is not available, CMSSW uses multiple TTreeCache for a given TTree while it uses only one when prefetching (asynchronous reads) is available. This results in the pattern of filling to be different between the 2 cases.