Skip to content

submission_missing_labels leaks request-scoped state after retry/failure and contaminates later ontology processing #271

Description

@alexskr

Summary:

When ontology submissions are processed in sequence, a retry or failure inside GenerateMissingLabels can leave behind request-scoped processing state. The next ontology processed on the same thread can then enter an invalid state and behave as if it inherited context from the previous ontology.

Observed behavior:

  • Processing a known set of ontologies consistently triggers the retry path in missing-label generation.
  • After that happens for one ontology, the next ontology in the batch may behave incorrectly.
  • The leaked state is not cleared when the method exits on an error path.
I, [2026-04-06T23:18:00.337601 #1981751]  INFO -- : ["Output size 126498 in `/srv/ncbo/repository/DCTERMS/1/owlapi.xrdf`"]
I, [2026-04-06T23:18:00.579098 #1981751]  INFO -- : ["Triples /srv/ncbo/repository/DCTERMS/1/owlapi.xrdf appended in <http://data.bioontology.org/ontologies/DCTERMS/submissions/1>"]
I, [2026-04-06T23:18:00.714773 #1981751]  INFO -- : ["Extracting metadata from the ontology submission http://data.bioontology.org/ontologies/DCTERMS/submissions/1"]
E, [2026-04-06T23:18:00.788414 #1981751] ERROR -- : ["Empty page encountered. Retrying 1 times..."]
E, [2026-04-06T23:18:02.791694 #1981751] ERROR -- : ["Empty page encountered. Retrying 2 times..."]
E, [2026-04-06T23:18:04.795095 #1981751] ERROR -- : ["Empty page encountered. Retrying 3 times..."]
E, [2026-04-06T23:18:06.799265 #1981751] ERROR -- : ["Empty page encountered. Retrying 4 times..."]
E, [2026-04-06T23:18:08.803101 #1981751] ERROR -- : ["Empty page encountered. Retrying 5 times..."]
E, [2026-04-06T23:18:10.806497 #1981751] ERROR -- : ["Empty page encountered. Retrying 6 times..."]
E, [2026-04-06T23:18:12.810732 #1981751] ERROR -- : ["Empty page encountered. Retrying 7 times..."]
E, [2026-04-06T23:18:14.814104 #1981751] ERROR -- : ["Empty page encountered. Retrying 8 times..."]
E, [2026-04-06T23:18:16.817508 #1981751] ERROR -- : ["Empty page encountered. Retrying 9 times..."]
E, [2026-04-06T23:18:18.820967 #1981751] ERROR -- : ["Empty page encountered. Retrying 10 times..."]
E, [2026-04-06T23:18:20.824379 #1981751] ERROR -- : ["Empty page 1 of 1 persisted after retrying 10 times. Missing Labels Generation of 1 aborted..."]
E, [2026-04-06T23:18:20.850927 #1981751] ERROR -- : Failed, exception: RuntimeError: Empty page 1 of 1 persisted after retrying 10 times. Missing Labels Generation of 1 aborted...
/opt/ontoportal/ncbo_cron/vendor/bundle/ruby/3.2.0/bundler/gems/ontologies_linked_data-a4bbd57fcaa7/lib/ontologies_linked_data/services/submission_process/operations/submission_missing_labels.rb:121:in `block in loop_classes'
/usr/local/rbenv/versions/3.2.10/lib/ruby/3.2.0/benchmark.rb:311:in `realtime'
/opt/ontoportal/ncbo_cron/vendor/bundle/ruby/3.2.0/bundler/gems/ontologies_linked_data-a4bbd57fcaa7/lib/ontologies_linked_data/services/submission_process/operations/submission_missing_labels.rb:70:in `loop_classes'
/opt/ontoportal/ncbo_cron/vendor/bundle/ruby/3.2.0/bundler/gems/ontologies_linked_data-a4bbd57fcaa7/lib/ontologies_linked_data/services/submission_process/operations/submission_missing_labels.rb:31:in `handle_missing_labels'
...
I, [2026-04-06T23:18:20.851030 #1981751]  INFO -- : There are 1598 ontologies left to process.
I, [2026-04-06T23:18:21.091113 #1981751]  INFO -- : Logging parsing output to /srv/ncbo/repository/DDANAT/24/parsing.log
I, [2026-04-06T23:18:21.093405 #1981751]  INFO -- : ["Starting to process http://data.bioontology.org/ontologies/DDANAT/submissions/24"]
I, [2026-04-06T23:18:21.110506 #1981751]  INFO -- : ["Starting to process DDANAT/submissions/24"]
E, [2026-04-06T23:18:21.138812 #1981751] ERROR -- : Failed, exception: Goo::Base::NotValidException: Object is not valid. Errors: {:version=>{:safe_text_10240=>"Attribute `version` with the value `{\"@none\"=>\"1.19\"}` must be safe text (no control or invisible Unicode characters, newlines, or disallowed punctuation) and must not exceed 10240 characters"}}
...
I, [2026-04-06T23:18:21.360526 #1981751]  INFO -- : ["Starting to process http://data.bioontology.org/ontologies/DDI/submissions/2"]
I, [2026-04-06T23:18:21.375814 #1981751]  INFO -- : ["Starting to process DDI/submissions/2"]
E, [2026-04-06T23:18:21.402941 #1981751] ERROR -- : Failed, exception: Goo::Base::NotValidException: Object is not valid. Errors: {:version=>{:safe_text_10240=>"Attribute `version` with the value `{\"@none\"=>\"$Revision$\"}` must be safe text (no control or invisible Unicode characters, newlines, or disallowed punctuation) and must not exceed 10240 characters"}, :missingImports=>{:list=>"Attribute `missingImports` with the value `{\"@none\"=>[\"http://purl.obolibrary.org/obo/iao/dev/ontology-metadata.owl\", \"http://purl.obolibrary.org/obo/iao/dev/external.owl\", \"http://purl.obolibrary.org/obo/iao/dev/externalDerived.owl\"]}` must be `Array`"}}
/opt/ontoportal/ncbo_cron/vendor/bundle/ruby/3.2.0/bundler/gems/goo-fa850f46c94e/lib/goo/base/resource.rb:250:in `save'

DCTERMS is a known trigger because it is handled as a SKOS ontology but lacks required SKOS constructs such as skos:Concept. As a result, no classes are extracted, and missing-label generation encounters an empty iteration path. In this case, the observed failure is not due to flaky 4store behavior; rather, the ontology content exposes a bug in how submission_missing_labels handles empty/failure paths and cleans up request-scoped state.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions