Skip to content

Group JSON ingestion schema state#1281

Closed
jwils wants to merge 1 commit into
mainfrom
joshuaw/json-ingestion-state-container
Closed

Group JSON ingestion schema state#1281
jwils wants to merge 1 commit into
mainfrom
joshuaw/json-ingestion-state-container

Conversation

@jwils

@jwils jwils commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Why

Keep JSON ingestion-specific schema definition state off the shared SchemaDefinition::State surface. This follows up on #1259 by grouping the extension state behind one accessor.

What

  • Add JSONIngestionState and attach it via State#json_ingestion_state
  • Move JSON schema config and deprecated-element registries into the contained state
  • Update typed helpers, specs, doctests, and schema test support to use the contained state

Risk Assessment

Low — internal schema-definition state refactor; public DSL behavior remains unchanged.

References

Validation:

  • script/lint --fix
  • script/spellcheck -w
  • script/type_check
  • RUBYOPT=--disable-frozen-string-literal bundle exec rake site:doctest
  • bundle exec rspec elasticgraph-json_ingestion/spec/unit/elastic_graph/json_ingestion/schema_definition/deprecated_element_spec.rb elasticgraph-json_ingestion/spec/unit/elastic_graph/json_ingestion/schema_definition/json_schema_spec.rb elasticgraph-json_ingestion/spec/unit/elastic_graph/json_ingestion/schema_definition/indexing/json_schema_with_metadata_spec.rb
  • script/run_gem_specs elasticgraph-json_ingestion
  • Not fully run locally: script/run_gem_specs elasticgraph-schema_definition and script/quick_build; local datastore boot is blocked because Docker is not running (~/.docker/run/docker.sock is unavailable).
  • Attempted RUBYOPT=--disable-frozen-string-literal bundle exec rake site:validate; the CI-relevant doctest failure is fixed, but local execution later stops in site:npm_install with an npm dependency resolution issue.

Base automatically changed from joshuaw/json-ingestion-deprecated-apis to main June 30, 2026 22:16
@jwils jwils force-pushed the joshuaw/json-ingestion-state-container branch 2 times, most recently from c443df8 to d660189 Compare June 30, 2026 23:14
@jwils jwils force-pushed the joshuaw/json-ingestion-state-container branch from d660189 to ee70fc0 Compare July 1, 2026 18:16
jwils added a commit that referenced this pull request Jul 8, 2026
Fills in the `elasticgraph-proto_ingestion` gem with the Protocol Buffers
schema artifact generation logic.

Running `schema_artifacts:dump` emits:

- `schema.proto` — the generated Protobuf schema for the indexed types
- `proto_field_numbers.yaml` — a sidecar that reserves field numbers and enum
  value numbers so they stay wire-stable as the schema evolves (including
  across field renames, and reserving removed values so numbers are not reused)

Capabilities:

- Maps built-in ElasticGraph scalars to proto types, with `protobuf` to
  configure custom scalars.
- Generates messages for object/interface/union types and enums (with a
  zero-valued `*_UNSPECIFIED` entry), escaping proto reserved words and
  wrapping lists of lists so the output stays valid.

The extension's schema definition state lives on a ProtoIngestionState
container exposed via a single `proto_ingestion_state` reader, mirroring
the JSONIngestionState approach from #1281.

The generator emits `proto3` by default and can emit `proto2` via
`syntax: :proto2` (which labels every field `optional`/`repeated`). Arbitrary
file-level headers (e.g. `option` declarations) can be injected verbatim via
`headers:`, so language-specific options can be set without baking any
particular convention into the gem.
jwils added a commit that referenced this pull request Jul 8, 2026
Fills in the `elasticgraph-proto_ingestion` gem with the core Protocol
Buffers schema generation logic. Running `schema_artifacts:dump` emits a
`proto3` `schema.proto` artifact covering the schema's indexed types.

Capabilities:

- Maps built-in ElasticGraph scalars to proto types, with `protobuf` to
  configure custom scalars (resolved via `type_ref.with_reverted_override`
  so built-in scalars renamed with `type_name_overrides` keep working).
- Generates messages for object/interface/union types and enums (with a
  zero-valued `*_UNSPECIFIED` entry), escaping proto reserved words and
  wrapping lists of lists so the output stays valid.
- `schema.proto` uses the public GraphQL field names, and validates proto
  package names (each dot-separated segment must be a valid identifier).

Field and enum value numbers are assigned sequentially in definition order;
keeping them wire-stable across schema evolution comes in a stacked
follow-up that adds a `proto_field_numbers.yaml` sidecar artifact.

The extension's schema definition state lives on a ProtoIngestionState
container exposed via a single `proto_ingestion_state` reader, mirroring
the JSONIngestionState approach from #1281.
@jwils jwils closed this Jul 9, 2026
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.

1 participant