-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Ensemble production topology routing pass for ObjectScript/IRIS #1061
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or requestlanguage-requestRequest for new language supportRequest for new language supportparsing/qualityGraph extraction bugs, false positives, missing edgesGraph extraction bugs, false positives, missing edgespriority/backlogValuable contribution, lower scheduling urgency; review when maintainer capacity opens.Valuable contribution, lower scheduling urgency; review when maintainer capacity opens.
Milestone
Description
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestlanguage-requestRequest for new language supportRequest for new language supportparsing/qualityGraph extraction bugs, false positives, missing edgesGraph extraction bugs, false positives, missing edgespriority/backlogValuable contribution, lower scheduling urgency; review when maintainer capacity opens.Valuable contribution, lower scheduling urgency; review when maintainer capacity opens.
Following up on PR #467 (ObjectScript language support) — @DeusData asked in review to split the Ensemble routing pass into a separate PR. This issue tracks that work.
What it does
pass_ensemble_routingis a pipeline pass that statically extracts InterSystems Ensemble/IRIS Interoperability production topology from ObjectScript.clsfiles at index time — no live IRIS instance required.Pass A — EnsembleItem nodes: reads each
EnsembleProductionclass'sProductionDefinitionXData block (XML), parses<Item Name="..." ClassName="...">entries, and createsEnsembleItemnodes in the graph for each production component (business services, processes, operations).Pass B — ROUTES_TO edges: for each
EnsembleItem, reads the source.clsfile and extracts routing rules that reference other components by class name, emittingROUTES_TOedges. Uses segment-anchored matching (qn_ends_with_segment) to avoid false positives.WorkMgr dispatch: detects
.Queue("##class(X).method", ...)calls and emitsCALLSedges to the target method — the same pattern as task queues in Celery/Airflow.Why it's useful beyond IRIS
The pattern — statically extracting a runtime workflow topology from configuration XML embedded in source classes — is the same shape as:
@app.task,task.apply_async(queue=...))The
EnsembleItemlabel andROUTES_TOedge are the IRIS-specific names, but the pass structure is general enough to serve as a template for other workflow frameworks.Changes from the version reviewed in #467
Per review feedback:
cbm_log_warnfires whenMAX_ITEMSorMAX_SETTINGScaps are hit so silent truncation is visibleReady to file PR on your signal