Skip to content

DPL Analysis: send CCDB tables together with the objects they refer to - #16079

Merged
ktf merged 2 commits into
AliceO2Group:devfrom
ktf:pr16079
Nov 8, 2026
Merged

ktf merged 2 commits into
AliceO2Group:devfrom
ktf:pr16079

Conversation

@ktf

@ktf ktf commented Nov 8, 2026

Copy link
Copy Markdown
Member

The analysis CCDB fetcher sent each CCDB table through the arrow backend
and the CCDB objects it refers to, which keep them alive in the consumer,
through the message backend. The two backends send separately, the arrow
one first, and the consumer's DataRelayer completes the input on its
first part. When every other input of the consumer was already there, as
for the first timeframe, the slot was processed with the table alone and
the objects then opened a new slot that could never complete, which was
dropped with "Dropping incomplete AOD/GLOCCDBOBJ/1 ...".

Serialise the table in the fetcher and send it through the message
backend as well, followed by the objects. They then leave in one
multipart, which the consumer relays as a whole before checking for
completion, so they always land in the same slot with the table as the
first part. The table is adopted with adoptContainer, like the objects,
since messages created via snapshot are scheduled and would be sent after
them. Its header and the arrow byte counters are set as the arrow backend
does, so the rate limiting accounts for it as before.

The alternatives were ruled out:

  • A separate input for the objects changes the topology of every
    analysis workflow using CCDB tables.
  • Not sending the objects at all and relying on the fetcher's cache would
    free an object still in use downstream when it is replaced, or when the
    fetcher exits before its consumers.
  • Swapping the order of the backends would make an object, when it
    arrives first, complete the input and be read as the table.

Add a DataRelayer test for parts relayed from one multipart, which
complete together with the table first, against parts relayed with a
completion check in between, which reproduce the drop.

ktf added 2 commits November 8, 2026 17:07
On a cache miss the analysis CCDB fetcher adopted the new object with
CacheStrategy::Always, which caches and sends it, and then sent it a
second time from AnalysisCCDBHelpers via adoptFromCache, which already
sends every object referenced by the table once per timeframe.

Add CacheStrategy::CacheOnly, which caches the message without sending
it, and use it for the analysis fetcher, so that adoptFromCache is the
only place its objects are sent from. The non-analysis CCDB fetcher keeps
CacheStrategy::Always.
The analysis CCDB fetcher sent each CCDB table through the arrow backend
and the CCDB objects it refers to, which keep them alive in the consumer,
through the message backend. The two backends send separately, the arrow
one first, and the consumer's DataRelayer completes the input on its
first part. When every other input of the consumer was already there, as
for the first timeframe, the slot was processed with the table alone and
the objects then opened a new slot that could never complete, which was
dropped with "Dropping incomplete AOD/GLOCCDBOBJ/1 ...".

Serialise the table in the fetcher and send it through the message
backend as well, followed by the objects. They then leave in one
multipart, which the consumer relays as a whole before checking for
completion, so they always land in the same slot with the table as the
first part. The table is adopted with adoptContainer, like the objects,
since messages created via snapshot are scheduled and would be sent after
them. Its header and the arrow byte counters are set as the arrow backend
does, so the rate limiting accounts for it as before.

The alternatives were ruled out:
- A separate input for the objects changes the topology of every
  analysis workflow using CCDB tables.
- Not sending the objects at all and relying on the fetcher's cache would
  free an object still in use downstream when it is replaced, or when the
  fetcher exits before its consumers.
- Swapping the order of the backends would make an object, when it
  arrives first, complete the input and be read as the table.

Add a DataRelayer test for parts relayed from one multipart, which
complete together with the table first, against parts relayed with a
completion check in between, which reproduce the drop.
@ktf
ktf requested a review from a team as a code owner November 8, 2026 16:23
@ktf

ktf commented Nov 8, 2026

Copy link
Copy Markdown
Member Author

Currently broken. Should affect only the new Analysis CCDB fetcher. Merging.

@ktf
ktf merged commit 887dde6 into AliceO2Group:dev Nov 8, 2026
9 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant