Skip to content

Add indexer_extension_modules to runtime metadata#1298

Merged
jwils merged 1 commit into
mainfrom
joshuaw/indexer-extensions-runtime-metadata
Jul 8, 2026
Merged

Add indexer_extension_modules to runtime metadata#1298
jwils merged 1 commit into
mainfrom
joshuaw/indexer-extensions-runtime-metadata

Conversation

@jwils

@jwils jwils commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

Why

To support ingestion in any data format while keeping format-specific logic in its own gem (elasticgraph-json_ingestion, the upcoming elasticgraph-proto_ingestion), the indexer needs an extension mechanism analogous to the GraphQL one: schema definition extensions register runtime extensions in the schema artifacts, and the runtime component applies them at boot. This PR adds the runtime metadata storage for that.

What

  • Add indexer_extension_modules to RuntimeMetadata::Schema, mirroring graphql_extension_modules
  • Add a RuntimeMetadata::IndexerExtension wrapper (twin of GraphQLExtension)
  • Nothing registers or consumes these yet, and empty lists are pruned from dumped YAML, so no schema artifacts change

Verification

  • script/lint, script/type_check
  • script/run_gem_specs elasticgraph-schema_artifacts (100% coverage)
  • script/run_gem_specs elasticgraph-schema_definition
  • bundle exec rake schema_artifacts:check (no artifact changes)

Stack

Current PR is marked with ->.

Mirrors graphql_extension_modules: a place for schema definition
extensions to register indexer extension modules that will be dumped
into runtime_metadata.yaml. Nothing registers or consumes them yet.
@jwils jwils force-pushed the joshuaw/indexer-extensions-runtime-metadata branch from 7565b32 to a1e6674 Compare July 8, 2026 02:10
@jwils jwils merged commit 9f3769c into main Jul 8, 2026
24 checks passed
@jwils jwils deleted the joshuaw/indexer-extensions-runtime-metadata branch July 8, 2026 15:42
jwils added a commit that referenced this pull request Jul 8, 2026
## Why

Ingestion format gems need a way to ensure their indexer-side behavior
is active whenever a schema is defined with their schema definition
extension--the same guarantee `register_graphql_extension` provides for
GraphQL extensions (e.g. how `elasticgraph-apollo` registers its engine
extension).

## What

- Add `register_indexer_extension` to the schema definition API,
mirroring `register_graphql_extension`
- Registered extensions are dumped into the `indexer_extension_modules`
runtime metadata added in #1298

## Verification

- `script/lint`, `script/type_check`
- `script/run_gem_specs elasticgraph-schema_definition` (100% coverage)
## Stack
Current PR is marked with `->`.

- [#1298 Add indexer_extension_modules to runtime
metadata](#1298)
- -> [#1299 Add register_indexer_extension schema definition
API](#1299)
- [#1300 Apply indexer extension modules when the Indexer
boots](#1300)
- [#1301 Extract an ingestion adapter seam inside
elasticgraph-indexer](#1301)
- [#1302 Move JSON ingestion into elasticgraph-json_ingestion via an
indexer extension](#1302)
jwils added a commit that referenced this pull request Jul 8, 2026
## Why

With runtime metadata storage (#1298) and the registration API (#1299)
in place, `elasticgraph-indexer` needs to actually apply registered
extensions--introducing the indexer extension concept, mirroring how
`elasticgraph-graphql` applies GraphQL extension modules from both
settings YAML and runtime metadata.

## What

- `Indexer#initialize` extends configured extension modules onto the
instance: first from the new `indexer.extension_modules` setting
(mirroring `graphql.extension_modules`), then from the runtime
metadata's `indexer_extension_modules`
- Regenerated config schema artifacts for the new setting
- Nothing registers an indexer extension yet, so this is a no-op for all
existing schemas

## Verification

- `script/lint`, `script/type_check`
- `script/run_gem_specs elasticgraph-indexer` (100% coverage)
- `script/run_gem_specs elasticgraph-local`
## Stack
Current PR is marked with `->`.

- [#1298 Add indexer_extension_modules to runtime
metadata](#1298)
- [#1299 Add register_indexer_extension schema definition
API](#1299)
- -> [#1300 Apply indexer extension modules when the Indexer
boots](#1300)
- [#1301 Extract an ingestion adapter seam inside
elasticgraph-indexer](#1301)
- [#1302 Move JSON ingestion into elasticgraph-json_ingestion via an
indexer extension](#1302)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants