Skip to content

Add register_indexer_extension schema definition API#1299

Merged
jwils merged 1 commit into
mainfrom
joshuaw/register-indexer-extension
Jul 8, 2026
Merged

Add register_indexer_extension schema definition API#1299
jwils merged 1 commit into
mainfrom
joshuaw/register-indexer-extension

Conversation

@jwils

@jwils jwils commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

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

Verification

  • script/lint, script/type_check
  • script/run_gem_specs elasticgraph-schema_definition (100% coverage)

Stack

Current PR is marked with ->.

jwils added a commit that referenced this pull request Jul 8, 2026
## 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 `->`.

- -> [#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)
Base automatically changed from joshuaw/indexer-extensions-runtime-metadata to main July 8, 2026 15:42
Mirrors register_graphql_extension: lets schema definition extensions
(such as ingestion format gems) register indexer extension modules that
get dumped into runtime_metadata.yaml for elasticgraph-indexer to apply
at boot.
@jwils
jwils force-pushed the joshuaw/register-indexer-extension branch from 9845487 to 95c2292 Compare July 8, 2026 15:47
@jwils
jwils merged commit 0b42a07 into main Jul 8, 2026
24 checks passed
@jwils
jwils deleted the joshuaw/register-indexer-extension branch July 8, 2026 16:13
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