feat: expose compose method of engine federation config factory #876
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
First of all, we want to express our respect for the wundergraph team's work on graphql-go-tools. We appreciate the effort that has gone into developing this tool, and we hope that this PR can contribute to improving the performance and memory efficiency of subgraph composition in GraphQL federation.
When building the EngineConfiguration, the BuildEngineConfiguration method performs subgraph composition. This composition is done using the Cosmo library, which generates a serializable data structure known as the router config in the Cosmo library.
As subgraphs grow larger, the time complexity and memory usage of the composition process can become significantly higher. However, if we know when the structure of a subgraph changes, we can reuse the router config to build the EngineConfiguration without recomposing the subgraph.
In this PR, we enable the serialization of the router config (referred to as the intermediate config in graphql-go-tools) used in Cosmo, allowing it to be reused when constructing the EngineConfiguration.
By serializing the router config, we can execute the EngineConfiguration at a lower cost when there are no changes to the subgraph. This is particularly useful during server startup or when refreshing a GraphQL gateway.