Skip to content

Apply indexer extension modules when the Indexer boots#1300

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

Apply indexer extension modules when the Indexer boots#1300
jwils merged 1 commit into
mainfrom
joshuaw/apply-indexer-extensions

Conversation

@jwils

@jwils jwils commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

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 ->.

Comment thread elasticgraph-indexer/lib/elastic_graph/indexer/config.rb Outdated
Comment thread elasticgraph-indexer/lib/elastic_graph/indexer/config.rb Outdated
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)
@jwils jwils force-pushed the joshuaw/register-indexer-extension branch from 9845487 to 95c2292 Compare July 8, 2026 15:47
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)
Base automatically changed from joshuaw/register-indexer-extension to main July 8, 2026 16:13
@jwils jwils force-pushed the joshuaw/apply-indexer-extensions branch from 97060ac to 4ece4bc Compare July 8, 2026 16:15

@myronmarston myronmarston left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One suggestion, LGTM otherwise.

Comment thread elasticgraph-indexer/spec/unit/elastic_graph/indexer/config_spec.rb
Mirrors how elasticgraph-graphql applies GraphQL extension modules:
modules from the new `indexer.extension_modules` setting and from the
runtime metadata's `indexer_extension_modules` are extended onto the
Indexer instance at boot. This introduces the indexer extension concept;
nothing registers such an extension yet.
@jwils jwils force-pushed the joshuaw/apply-indexer-extensions branch from 4ece4bc to ae59e99 Compare July 8, 2026 20:52
@jwils jwils merged commit 6ef7919 into main Jul 8, 2026
24 checks passed
@jwils jwils deleted the joshuaw/apply-indexer-extensions branch July 8, 2026 21:19
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