mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 09:22:43 +03:00
b6767e8399
8929 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
Brandon Simmons
|
b6767e8399 |
mbs: improve performance of /validate and, to a lesser extent, /build (#1253)
<!-- The PR description should answer 2 important questions: --> ### What Some "medium-hanging" fruit optimizations of mbs validate and build code paths Latest timing relative to `main` as of 10/18: ``` validate example/chinook.json time: [6.3984 ms 6.4236 ms 6.4532 ms] change: [-46.276% -45.876% -45.440%] (p = 0.00 < 0.05) Performance has improved. validate example/multiple-subgraphs.json time: [1.6909 ms 1.7024 ms 1.7165 ms] change: [-44.488% -44.141% -43.771%] (p = 0.00 < 0.05) Performance has improved. validate example/chinook-invoices.json time: [3.8878 ms 3.9039 ms 3.9220 ms] change: [-45.544% -45.201% -44.863%] (p = 0.00 < 0.05) Performance has improved. validate example/big_pretty_DONT_COMMIT.json time: [3.6692 s 3.6789 s 3.6889 s] change: [-36.964% -36.755% -36.544%] (p = 0.00 < 0.05) Performance has improved. build example/chinook.json time: [18.274 ms 18.345 ms 18.414 ms] change: [-29.874% -29.359% -28.850%] (p = 0.00 < 0.05) Performance has improved. build example/multiple-subgraphs.json time: [3.4423 ms 3.4588 ms 3.4760 ms] change: [-33.073% -32.628% -32.199%] (p = 0.00 < 0.05) Performance has improved. build example/chinook-invoices.json time: [11.000 ms 11.027 ms 11.057 ms] change: [-26.051% -25.757% -25.449%] (p = 0.00 < 0.05) Performance has improved. Benchmarking build example/big_pretty_DONT_COMMIT.json: Collecting 100 samples in estimated 1359.8 s (100 iterations) build example/big_pretty_DONT_COMMIT.json time: [13.429 s 13.465 s 13.503 s] change: [-21.864% -21.634% -21.367%] (p = 0.00 < 0.05) Performance has improved. ``` ### How ✨ optimizing ✨ ### Internal details The absolute numbers for build in the PR are not accurate after rebasing on current `main`, but absolute improvement in secs/ms is about the same. (/private) V3_GIT_ORIGIN_REV_ID: a4fe628a08a35a88c2ca958a1d22f1fc6ddf2a5b |
||
Daniel Chambers
|
20b46151e1 |
Bump NDC Spec version in the json schema (#1261)
### What The supported NDC Spec was previously bumped to v0.1.6, but the reference in the JSON Schema was not updated at the same time. This has been corrected. V3_GIT_ORIGIN_REV_ID: edbe31eafcd9fb72bdc457f38575d9e42931ecd0 |
||
Daniel Chambers
|
3186e49826 |
Raise deprecation warning for use of AuthConfig v1 during build (#1260)
### What The warning about AuthConfig v1 being deprecated was only being displayed in the engine's stdout logs and not as a build warning. This has been corrected. ### How Because AuthConfig is not part of OpenDD metadata, it is not handled during metadata resolve. The existing warning printed from stdout is printed during engine startup when it reads the AuthConfig. This is not does not happen during the MBS build. So the warning logic is now called during the MBS build so that a warning is emitted there too. V3_GIT_ORIGIN_REV_ID: b4cf340597e3fad0603dd8c8d3e198f1867669eb |
||
Daniel Harvey
|
97f96bc62f |
Include TypeRepresentation in resolved scalar types (#1259)
<!-- The PR description should answer 2 important questions: --> ### What To generate JSONAPI OpenAPI spec we need to know the underlying type representation of custom types. This is (optionally) provided by a data connector in it's `scalar_types` section. It's really annoying to look up, so let's collect them all and store them on the `ScalarTypeRepresentation`, keyed by `Qualified<DataConnectorName>`. No functional change, this will be used in JSONAPI OpenAPI generation shortly. V3_GIT_ORIGIN_REV_ID: 084304a580aca977e1f8c39b16938205a49b1b0e |
||
Toan Nguyen
|
8b956bfafa |
server: add hasura_postgres_connection_error_total metric
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/11063 GitOrigin-RevId: 0e0f8b6e7759623f470893aaa6d6e68d205269b5 |
||
Daniel Chambers
|
f68438b78e |
Support receiving JSON values from Webhooks/JWT/NoAuth instead of just strings (#1257)
### What Previously, we only supported String as the type that contained your session variable value when they are provided from webhooks/JWT/NoAuth. We then coerced that value into whatever type was actually expected (eg a float) later. However, when we added support for array-typed session variables (#1221) we didn't actually allow you to provide a JSON array of values as a session variable value. You had to provide a string that contained a JSON-encoded array of values. This meant that webhooks/JWT/NoAuth had to double JSON-encode their session variables when returning them. This PR fixes this and makes it so that webhooks/JWT/NoAuth can return JSON values for session variables and that JSON is respected. So if a session variable needs to be an array of integers, they can simply return the JSON array of integers as the value for that session variable. ### How Instead of holding a `SessionVariableValue` as a `String`, we now turn that into an enum where we have an "unparsed" String (used for when we don't receive JSON, we just receive a string value (ie. http headers)), or a "parsed" JSON value. When we receive session variables from webhooks/JWT/NoAuth, we relax the restriction that they can only return us JSON strings, and instead allow them to return JSON Values, which we put in the new `SessionVariableValue::Parsed` enum variant. HTTP headers go into `SessionVariableValue::Unparsed`. Then, when we go to get the required value from the `SessionVariableValue` based on the desired type, we either parse it out of the "unparsed" String, or we expect that the value is already in the correct form in the "parsed" JSON value. This is the behaviour you will get if JSON session variables are turned on in the Flags. If JSON session variables are not turned on, then we expect that only String session variables (parsed or unparsed) are provided from headers/webhooks/JWT/NoAuth, and so we run the old logic of always expecting a String and parsing the correct value out of it. V3_GIT_ORIGIN_REV_ID: b6734ad5443b7d68065f91aea71386c893aa7eba |
||
paritosh-08
|
997d147c37 |
fix changelog for last release (#1258)
<!-- The PR description should answer 2 important questions: --> ### What This PR fixes the changelog for the last release. An entry was added accidently to the already-released version instead of the unreleased section. ### How By moving the changelog line. V3_GIT_ORIGIN_REV_ID: 0d2edeea1890da90eee5d4475c78a4541b6fc7b4 |
||
Daniel Harvey
|
fa82c310d6 |
Generate basic OpenAPI document for JSONAPI (#1238)
<!-- The PR description should answer 2 important questions: --> ### What <img width="731" alt="Screenshot 2024-10-17 at 16 39 07" src="https://github.com/user-attachments/assets/a9e504e8-68f1-4c89-930d-2a5b00549dfc"> <img width="723" alt="Screenshot 2024-10-17 at 16 39 14" src="https://github.com/user-attachments/assets/9bd76265-1726-4825-a25f-c4faac42990f"> This PR exposes a super basic OpenAPI 3.1 spec for the JSONAPI at `/v1/rest/__schema`. It includes: - `page[limit]` and `page[offset]` - `fields[ModelName]` It does not include: - `sorting` - return types - It also changes the JSONAPI to be served from `/v1/rest/` instead of `/v1/jsonapi`. The schema is generated depending on the user's role, so they'll only see fields they'll allowed to. ### How - Generate a `State` type for each `Role` - Use `oas3` crate for types, manually create `Spec` type. V3_GIT_ORIGIN_REV_ID: d15bb1dbc690795dcd3e2d8d245fd59e97653a56 |
||
Rakesh Emmadi
|
047f5b4938 |
graphql-ws: Improve tracing (#1252)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> - Propagate baggage across span links and push websocket id into baggage. - Attach usage analytics attributes to execute span. ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> - First, move setting usage attributes into a separate function. Re-use it in websockets code. - Open a new `execute` span within the `websocket_execute_query` and attach usage attributes to it. - Add support to propagate trace baggage across span links. Push websocket id into trace baggage. - Remove setting `websocket.id` attribute in new linked traces as the tracer will set websocket.id in baggage as an attribute. V3_GIT_ORIGIN_REV_ID: 96338d8b9b3eb2f927e3ca57336e8372093ab585 |
||
Daniel Harvey
|
927268ae03 |
Revert "Reapply "subscriptions: Unhide OpenDd Metadata and lift from unstability" " (#1256)
I am sorry @rakeshkky , we will merge this again once we've done a release, I promise. Reverts hasura/v3-engine#1254 V3_GIT_ORIGIN_REV_ID: 74236d25d4e84658717531a55d87c8d3371b553c |
||
Rakesh Emmadi
|
30d38fa599 |
Reapply "subscriptions: Unhide OpenDd Metadata and lift from unstability" (#1254)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> V3_GIT_ORIGIN_REV_ID: 3458ea1e5ebe2d7387a7e503f957e5d55f225599 |
||
paritosh-08
|
90780c049c |
disallow defining boolean expression of array fields with scalar boolean type (#1251)
<!-- The PR description should answer 2 important questions: --> ### What This PR adds a check to disallow defining boolean expression of array fields with scalar boolean type while resolving the boolean expression `comparable_fields`. ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> V3_GIT_ORIGIN_REV_ID: e9fd2feaff5a20d05b51b9ccd2a460f2b7e767dc |
||
Daniel Harvey
|
4160b783fe |
Changelog for v2024.10.21 release (#1248)
Update changelog. V3_GIT_ORIGIN_REV_ID: 469adb7ecab0ee0ed3a156e0a8e55db993af5619 |
||
dependabot[bot]
|
9e35246aca |
Bump futures from 0.3.30 to 0.3.31 (#1245)
Bumps [futures](https://github.com/rust-lang/futures-rs) from 0.3.30 to 0.3.31. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/futures-rs/releases">futures's releases</a>.</em></p> <blockquote> <h2>0.3.31</h2> <ul> <li>Fix use after free of task in <code>FuturesUnordered</code> when dropped future panics (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2886">#2886</a>)</li> <li>Fix soundness bug in <code>task::waker_ref</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2830">#2830</a>) This is a breaking change but allowed because it is soundness bug fix.</li> <li>Fix bugs in <code>AsyncBufRead::read_line</code> and <code>AsyncBufReadExt::lines</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2884">#2884</a>)</li> <li>Fix parsing issue in <code>select!</code>/<code>select_biased!</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2832">#2832</a>) This is technically a breaking change as it will now reject a very odd undocumented syntax that was previously accidentally accepted.</li> <li>Work around issue due to upstream <code>Waker::will_wake</code> change (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2865">#2865</a>)</li> <li>Add <code>stream::Iter::{get_ref,get_mut,into_inner}</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2875">#2875</a>)</li> <li>Add <code>future::AlwaysReady</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2825">#2825</a>)</li> <li>Relax trait bound on non-constructor methods of <code>io::{BufReader,BufWriter}</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2848">#2848</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md">futures's changelog</a>.</em></p> <blockquote> <h1>0.3.31 - 2024-10-05</h1> <ul> <li>Fix use after free of task in <code>FuturesUnordered</code> when dropped future panics (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2886">#2886</a>)</li> <li>Fix soundness bug in <code>task::waker_ref</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2830">#2830</a>) This is a breaking change but allowed because it is soundness bug fix.</li> <li>Fix bugs in <code>AsyncBufRead::read_line</code> and <code>AsyncBufReadExt::lines</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2884">#2884</a>)</li> <li>Fix parsing issue in <code>select!</code>/<code>select_biased!</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2832">#2832</a>) This is technically a breaking change as it will now reject a very odd undocumented syntax that was previously accidentally accepted.</li> <li>Work around issue due to upstream <code>Waker::will_wake</code> change (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2865">#2865</a>)</li> <li>Add <code>stream::Iter::{get_ref,get_mut,into_inner}</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2875">#2875</a>)</li> <li>Add <code>future::AlwaysReady</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2825">#2825</a>)</li> <li>Relax trait bound on non-constructor methods of <code>io::{BufReader,BufWriter}</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2848">#2848</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
dependabot[bot]
|
816992f1e4 |
Bump openssl from 0.10.66 to 0.10.68 (#1244)
Bumps [openssl](https://github.com/sfackler/rust-openssl) from 0.10.66 to 0.10.68. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/sfackler/rust-openssl/releases">openssl's releases</a>.</em></p> <blockquote> <h2>openssl-v0.10.68</h2> <h2>What's Changed</h2> <ul> <li>fixes <a href="https://redirect.github.com/sfackler/rust-openssl/issues/2317">#2317</a> -- restore compatibility with our MSRV and release openssl 0.9.68 by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2318">sfackler/rust-openssl#2318</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.67...openssl-v0.10.68">https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.67...openssl-v0.10.68</a></p> <h2>openssl-v0.10.67</h2> <h2>What's Changed</h2> <ul> <li>Added a utility function to ensure we never have an issue with 0-length slices from pointers again by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2268">sfackler/rust-openssl#2268</a></li> <li>Fix CI for the latest rustc by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2271">sfackler/rust-openssl#2271</a></li> <li>Add binding for EVP_DigestSqueeze by <a href="https://github.com/initsecret"><code>@initsecret</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2270">sfackler/rust-openssl#2270</a></li> <li>libressl 4.0: const correctness for X509_LOOKUP_METHOD by <a href="https://github.com/botovq"><code>@botovq</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2276">sfackler/rust-openssl#2276</a></li> <li>Bump hex dev-dependency version by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2277">sfackler/rust-openssl#2277</a></li> <li>Raise bindgen version by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2278">sfackler/rust-openssl#2278</a></li> <li>Ensure Rsa::check_key doesn't leave errors on the stack by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2279">sfackler/rust-openssl#2279</a></li> <li>Update some docs to use the corresponds macro by <a href="https://github.com/rushilmehra"><code>@rushilmehra</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2282">sfackler/rust-openssl#2282</a></li> <li>Don't leave errors on the stack in <code>MdCtxRef::digest_verify_final</code> by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2283">sfackler/rust-openssl#2283</a></li> <li>Adjustments for LibreSSL 4 by <a href="https://github.com/botovq"><code>@botovq</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2287">sfackler/rust-openssl#2287</a></li> <li>Explicit rustfmt config by <a href="https://github.com/kornelski"><code>@kornelski</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2285">sfackler/rust-openssl#2285</a></li> <li>add basic EVP_KDF bindings by <a href="https://github.com/reaperhulk"><code>@reaperhulk</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2289">sfackler/rust-openssl#2289</a></li> <li>add ossl3 thread pool bindings by <a href="https://github.com/reaperhulk"><code>@reaperhulk</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2293">sfackler/rust-openssl#2293</a></li> <li>add argon2id support for ossl 3.2+ by <a href="https://github.com/reaperhulk"><code>@reaperhulk</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2290">sfackler/rust-openssl#2290</a></li> <li>fix 3.2.0 thread support and simplify by <a href="https://github.com/reaperhulk"><code>@reaperhulk</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2294">sfackler/rust-openssl#2294</a></li> <li>add libctx arg to argon2id by <a href="https://github.com/reaperhulk"><code>@reaperhulk</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2295">sfackler/rust-openssl#2295</a></li> <li>support using threads in argon2id by <a href="https://github.com/reaperhulk"><code>@reaperhulk</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2296">sfackler/rust-openssl#2296</a></li> <li>Ensure beginning and end of the error output is readable by <a href="https://github.com/kornelski"><code>@kornelski</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2284">sfackler/rust-openssl#2284</a></li> <li>Test against 3.4.0-alpha1 by <a href="https://github.com/sfackler"><code>@sfackler</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2302">sfackler/rust-openssl#2302</a></li> <li>Resolve clippy warnings from nightly by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2310">sfackler/rust-openssl#2310</a></li> <li>fixes <a href="https://redirect.github.com/sfackler/rust-openssl/issues/2311">#2311</a> -- silencer resolver warnings by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2312">sfackler/rust-openssl#2312</a></li> <li>Bump to 3.4.0-beta1 by <a href="https://github.com/sfackler"><code>@sfackler</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2313">sfackler/rust-openssl#2313</a></li> <li>LibreSSL 4.0.0 by <a href="https://github.com/botovq"><code>@botovq</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2315">sfackler/rust-openssl#2315</a></li> <li>Release openssl v0.10.67 and openssl-sys v0.9.104 by <a href="https://github.com/alex"><code>@alex</code></a> in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2316">sfackler/rust-openssl#2316</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/initsecret"><code>@initsecret</code></a> made their first contribution in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2270">sfackler/rust-openssl#2270</a></li> <li><a href="https://github.com/rushilmehra"><code>@rushilmehra</code></a> made their first contribution in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2282">sfackler/rust-openssl#2282</a></li> <li><a href="https://github.com/kornelski"><code>@kornelski</code></a> made their first contribution in <a href="https://redirect.github.com/sfackler/rust-openssl/pull/2285">sfackler/rust-openssl#2285</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.66...openssl-v0.10.67">https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.66...openssl-v0.10.67</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
dependabot[bot]
|
d157aa9382 |
Bump clap from 4.5.19 to 4.5.20 (#1243)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.19 to 4.5.20. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's changelog</a>.</em></p> <blockquote> <h2>[4.5.20] - 2024-10-08</h2> <h3>Features</h3> <ul> <li><em>(unstable)</em> Add <code>CommandExt</code></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
dependabot[bot]
|
6ee7a183d4 |
Bump syn from 2.0.79 to 2.0.82 (#1242)
Bumps [syn](https://github.com/dtolnay/syn) from 2.0.79 to 2.0.82. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dtolnay/syn/releases">syn's releases</a>.</em></p> <blockquote> <h2>2.0.82</h2> <ul> <li>Provide <code>Parse</code> impls for PreciseCapture and CapturedParam (<a href="https://redirect.github.com/dtolnay/syn/issues/1757">#1757</a>, <a href="https://redirect.github.com/dtolnay/syn/issues/1758">#1758</a>)</li> <li>Support parsing <code>unsafe</code> attributes (<a href="https://redirect.github.com/dtolnay/syn/issues/1759">#1759</a>)</li> <li>Add Fold and VisitMut methods for Vec<Attribute> (<a href="https://redirect.github.com/dtolnay/syn/issues/1762">#1762</a>)</li> </ul> <h2>2.0.81</h2> <ul> <li>Add TypeParamBound::PreciseCapture to represent precise capture syntax <code>impl Trait + use<'a, T></code> (<a href="https://redirect.github.com/dtolnay/syn/issues/1752">#1752</a>, <a href="https://redirect.github.com/dtolnay/syn/issues/1753">#1753</a>, <a href="https://redirect.github.com/dtolnay/syn/issues/1754">#1754</a>)</li> </ul> <h2>2.0.80</h2> <ul> <li>Add <code>Expr::RawAddr</code> (<a href="https://redirect.github.com/dtolnay/syn/issues/1743">#1743</a>)</li> <li>Reject precise captures and ~const in inappropriate syntax positions (<a href="https://redirect.github.com/dtolnay/syn/issues/1747">#1747</a>)</li> <li>Reject trait bound containing only precise capture (<a href="https://redirect.github.com/dtolnay/syn/issues/1748">#1748</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
dependabot[bot]
|
2922ef2ef3 |
Bump uuid from 1.10.0 to 1.11.0 (#1241)
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.10.0 to 1.11.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/uuid-rs/uuid/releases">uuid's releases</a>.</em></p> <blockquote> <h2>1.11.0</h2> <h2>What's Changed</h2> <ul> <li>Upgrade zerocopy to 0.8 by <a href="https://github.com/yotamofek"><code>@yotamofek</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/771">uuid-rs/uuid#771</a></li> <li>Prepare for 1.11.0 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/772">uuid-rs/uuid#772</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/yotamofek"><code>@yotamofek</code></a> made their first contribution in <a href="https://redirect.github.com/uuid-rs/uuid/pull/771">uuid-rs/uuid#771</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/1.10.0...1.11.0">https://github.com/uuid-rs/uuid/compare/1.10.0...1.11.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
Abhinav Gupta
|
0ac2fbb2e1 |
Revert "subscriptions: Unhide OpenDd Metadata and lift from unstability" (#1246)
Reverts hasura/v3-engine#1225 According to @danieljharvey, websockets don't currently work in multitenant and we want to do a release using a commit after this one. V3_GIT_ORIGIN_REV_ID: 2d9239ab3203d5acbedef1cd86644861a99c99b2 |
||
Daniel Harvey
|
065035631c |
Check JSONAPI sorting (#1234)
<!-- The PR description should answer 2 important questions: --> ### What Wasn't sure what was implemented, added some tests, it's working. This PR is stacked on top of https://github.com/hasura/v3-engine/pull/1233 V3_GIT_ORIGIN_REV_ID: fbfce6dd8ce325c5a1659db2755a09c7728030f2 |
||
Rakesh Emmadi
|
db19cf965a |
subscriptions: Unhide OpenDd Metadata and lift from unstability (#1225)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> - Remove `enable-subscriptions` from unstable features. - Expose the subscriptions related opendd metadata in the json schema ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> - Update unstable feature related types by dropping subscriptions. - Remove `hidden=true` opendd attribute and other related on subscription opendd metadata. - Update json schema files V3_GIT_ORIGIN_REV_ID: 0aa763f516d394aab2e375da0817d0e60228c9b2 |
||
Phil Freeman
|
16118760fd |
[ENG-643] Support array-valued session variables (#1221)
<!-- The PR description should answer 2 important questions: --> ### What Allows JSON arrays in session variables. ### How If the type of a session variable isn't special (custom scalar, string, or ID), then we parse the header as JSON, and switch into type-_checking_ mode, returning the JSON wholesale if the type matches. V3_GIT_ORIGIN_REV_ID: 386558898a188c06b73270a90020a20ff963f5a0 |
||
Rakesh Emmadi
|
a0b998ad7c |
subscriptions: respect allow_subscriptions in select permissions (#1235)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> Until now the `allow_subscriptions` in select permission is no-op. This PR implements its intended functionality, i.e, do not generate subscription root field schema for models that don't have `allow_subscriptions: true`. ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> - Plumb the `allow_subscriptions` value to namespace annotation. - Modify subscription root field annotations; filter roles by allow_subscriptions. - Add a check in IR generation for the permission and raise an internal error, if the check fails. V3_GIT_ORIGIN_REV_ID: 98120809b1294716c96c190e1b6ec875635b5da1 |
||
Daniel Harvey
|
c80d0db252 |
Tidy JSONAPI up (#1233)
<!-- The PR description should answer 2 important questions: --> ### What Work so far has been mostly in one big file, let's split it up a bit so we can see what is going on better. ### How Move code around. No functional changes. V3_GIT_ORIGIN_REV_ID: 7dbb2ea8d66de845a0e725edf61eede65cd2d994 |
||
Daniel Harvey
|
1879d1bb75 |
Enable argument presets in OpenDD pipeline (#1228)
<!-- The PR description should answer 2 important questions: --> ### What This PR enables argument presets in the OpenDD pipeline by using functions from `graphql_ir`. In the ideal future we'd flip the dependency and move these functions out of `graphql_ir` and into the `plan` crate, however we can't do that until `execute` crate is no longer in active development as it will involve making a big mess there. ### How - Calculate argument presets in the `plan/query/model_target` module using functions from `graphql_ir` - We also begin adding boolean expression resolve, then back away slowly as it's a massive job and better tackled when we start making `where` clauses work in this pipeline, to stop this PR ballooning insanely. V3_GIT_ORIGIN_REV_ID: 47867452b7366e83f71b118e37302de93d9bde72 |
||
Daniel Harvey
|
79decc86e2 |
Fix a few small JSONAPI bugs (#1230)
<!-- The PR description should answer 2 important questions: --> Fixes - offset / limit didn't work - fixed by updating the `hasura/jsonapi` library to use `offset` / `limit` instead of `number` / `page` - this was a change in JSONAPI 1.1 - Render type names as `subgraph_typename` - Send `OrderBy` as `None` when it contains no columns - `Some(vec![])` was upsetting Mongo, so let's be more stringent. No functional changes as feature is behind flag. V3_GIT_ORIGIN_REV_ID: 419993a3acd955ef74872078d11769f564c7fc36 |
||
Rakesh Emmadi
|
8844fab8d3 |
opendd-derive: Support multiple JSON schema examples (#1229)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> The `example` JSON schema attribute can be specified multiple times enabling inclusion of multiple examples. The OpenDd metadata is auto-documented in hasura.io/docs using the json schema. Having multiple examples is quite helpful for our users. Inspired from the `schemars`'s `example` attribute behavior. ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> - Use `#[darling(multiple)]` attr to allow the `example` attribute multiple times. - Add more examples for model predicates and permission. V3_GIT_ORIGIN_REV_ID: 7e9c31891afed5b96ec8a5bb7538062382ef4d27 |
||
Daniel Harvey
|
3eb06d9314 |
Commit snapshot test per role (#1227)
<!-- The PR description should answer 2 important questions: --> ### What We've been testing our OpenDD pipeline with snapshot tests that run for each role. However, now that we're adding argument presets, it means that the results will potentially be different. Therefore this saves snapshots for each role the test is run against so that we don't get tests conflicting with themselves. Functional no-op. ### How Change label in `insta::assert_json_snapshot!`, commit new snapshots. V3_GIT_ORIGIN_REV_ID: 1570ed82bdb76d27270c73c96d2671e8a3c7fe13 |
||
Vamshi Surabhi
|
77c6f9b7ca |
/sql endpoint on multi-tenant (#1219)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> --------- Co-authored-by: Abhinav Gupta <127770473+abhinav-hasura@users.noreply.github.com> V3_GIT_ORIGIN_REV_ID: 05adb2015efda4d5244b93cfe337991370f0b27e |
||
paritosh-08
|
ba867876f3
|
RFC for engine plugins (#10497)
* add RFC * Minor changes --------- Co-authored-by: Rahul Agarwal <111393043+rahulagarwal13@users.noreply.github.com> |
||
Daniel Harvey
|
bec9dee021 |
Move argument presets resolve into metadata-resolve (#1226)
<!-- The PR description should answer 2 important questions: --> ### What Previously we were doing the business of calculating which arguments (and parts of arguments) were preset in the GraphQL `schema` crate. This meant we would have to reimplement the logic for each backend. Now we move it into `metadata-resolve` so the results can be shared by all frontends. ### How Move argument preset resolve into `metadata-resolve`. What's left in `graphql-schema` is all the stuff relating to `Annotation`s of various kinds. A lot of the diff is changing `ModelWithPermissions` and `CommandWithPermissions` to `ModelWithArgumentPresets` and `CommandWithArgumentPresets` in crates after `metadata-resolve`. Functional no-op. V3_GIT_ORIGIN_REV_ID: b1b0983abb9f6282652c8689b02e0796026752f5 |
||
Rakesh Emmadi
|
3786242902 |
graphql-ws: Extend GraphQL over websockets to multitenant (#1206)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> - Return the `Sec-WebSocket-Id` header denoting a unique id for the websocket connection, in the handshake request response. ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> V3_GIT_ORIGIN_REV_ID: 3639a231e3bdcb8f1f6affa66c21254890dd9d2d |
||
Daniel Harvey
|
c6cc462e0c |
Run stop-docker in just docker-refresh to ensure volumes are removed (#1224)
<!-- The PR description should answer 2 important questions: --> ### What Make sure we trash old Postgres DB data when refreshing Docker, to make sure we start with the newest data. V3_GIT_ORIGIN_REV_ID: 25416e918431a915fece6fe2d9478fa722f6a7c5 |
||
Daniel Chambers
|
31babc3693 |
Return correct isRepeatable value for directives in graphql schema introspection
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/11058 Co-authored-by: Rakesh Emmadi <12475069+rakeshkky@users.noreply.github.com> GitOrigin-RevId: 5fafb1611b3a080c6e90e3b7da85d41999503e73 |
||
Daniel Harvey
|
e133716dce |
Changelog for v2024.10.14 release (#1223)
Update changelog for `v2024.10.14` release. V3_GIT_ORIGIN_REV_ID: c160dac4b5fbbbb873434b38b6dd983e24ab8975 |
||
dependabot[bot]
|
6d2376648c |
Bump indexmap from 2.5.0 to 2.6.0 (#1214)
Bumps [indexmap](https://github.com/indexmap-rs/indexmap) from 2.5.0 to 2.6.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/indexmap-rs/indexmap/blob/master/RELEASES.md">indexmap's changelog</a>.</em></p> <blockquote> <h2>2.6.0 (2024-10-01)</h2> <ul> <li>Implemented <code>Clone</code> for <code>map::IntoIter</code> and <code>set::IntoIter</code>.</li> <li>Updated the <code>hashbrown</code> dependency to version 0.15.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
dependabot[bot]
|
35c29fff5a |
Bump serde_with from 3.9.0 to 3.11.0 (#1213)
Bumps [serde_with](https://github.com/jonasbb/serde_with) from 3.9.0 to 3.11.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/jonasbb/serde_with/releases">serde_with's releases</a>.</em></p> <blockquote> <h2>serde_with v3.11.0</h2> <h3>Added</h3> <ul> <li> <p>Add support for <code>hashbrown</code> v0.15 (<a href="https://redirect.github.com/jonasbb/serde_with/issues/787">#787</a>/<a href="https://redirect.github.com/jonasbb/serde_with/issues/790">#790</a>)</p> <p>This extends the existing support for <code>hashbrown</code> v0.14 to the newly released version.</p> </li> </ul> <h2>serde_with v3.10.0</h2> <h3>Added</h3> <ul> <li> <p>Add newline separator by <a href="https://github.com/jayvdb"><code>@jayvdb</code></a> (<a href="https://redirect.github.com/jonasbb/serde_with/issues/777">#777</a>)</p> <p>The <code>UnixLineSeparator</code> and <code>DosLineSeparator</code> can be used together with <code>StringWithSeparator</code>.</p> </li> </ul> <h3>Fixed</h3> <ul> <li> <p>Proper handling of <code>cfg_attr</code> in the <code>serde_as</code> macro by <a href="https://github.com/sivizius"><code>@sivizius</code></a> (<a href="https://redirect.github.com/jonasbb/serde_with/issues/782">#782</a>)</p> <p>This allows to parse more valid forms of the <code>cfg_attr</code> macro, including multiple values and attribute that do not follow the <code>key = value</code> schema.</p> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
dependabot[bot]
|
025ceac68e |
Bump clap from 4.5.18 to 4.5.19 (#1212)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.18 to 4.5.19. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/clap-rs/clap/releases">clap's releases</a>.</em></p> <blockquote> <h2>v4.5.19</h2> <h2>[4.5.19] - 2024-10-01</h2> <h3>Internal</h3> <ul> <li>Update dependencies</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's changelog</a>.</em></p> <blockquote> <h2>[4.5.19] - 2024-10-01</h2> <h3>Internal</h3> <ul> <li>Update dependencies</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
dependabot[bot]
|
9314e3b7dc |
Bump tokio-tungstenite from 0.20.1 to 0.24.0 (#1211)
Bumps [tokio-tungstenite](https://github.com/snapview/tokio-tungstenite) from 0.20.1 to 0.24.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/snapview/tokio-tungstenite/blob/master/CHANGELOG.md">tokio-tungstenite's changelog</a>.</em></p> <blockquote> <h1>0.24.0</h1> <ul> <li>Update dependencies (TLS, tungstenite).</li> <li>Return a runtime error when WSS URLs are used without a proper TLS feature enabled.</li> </ul> <h1>0.23.1</h1> <ul> <li>Introduce a <code>url</code> feature (proxies to <code>tungstenite/url</code>).</li> </ul> <h1>0.23.0</h1> <ul> <li>Update <code>tungstenite</code> to <code>0.23.0</code>.</li> <li>Disable default features on TLS crates.</li> </ul> <h1>0.22.0</h1> <ul> <li>Update TLS dependencies.</li> <li><del>Update <code>tungstenite</code> to match <code>0.22.0</code>.</del></li> </ul> <h1>0.21.0</h1> <ul> <li>Update TLS dependencies.</li> <li>Update <code>tungstenite</code> to <code>0.21.0</code>.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
dependabot[bot]
|
5a7906a788 |
Bump futures-util from 0.3.30 to 0.3.31 (#1210)
Bumps [futures-util](https://github.com/rust-lang/futures-rs) from 0.3.30 to 0.3.31. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/futures-rs/releases">futures-util's releases</a>.</em></p> <blockquote> <h2>0.3.31</h2> <ul> <li>Fix use after free of task in <code>FuturesUnordered</code> when dropped future panics (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2886">#2886</a>)</li> <li>Fix soundness bug in <code>task::waker_ref</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2830">#2830</a>) This is a breaking change but allowed because it is soundness bug fix.</li> <li>Fix bugs in <code>AsyncBufRead::read_line</code> and <code>AsyncBufReadExt::lines</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2884">#2884</a>)</li> <li>Fix parsing issue in <code>select!</code>/<code>select_biased!</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2832">#2832</a>) This is technically a breaking change as it will now reject a very odd undocumented syntax that was previously accidentally accepted.</li> <li>Work around issue due to upstream <code>Waker::will_wake</code> change (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2865">#2865</a>)</li> <li>Add <code>stream::Iter::{get_ref,get_mut,into_inner}</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2875">#2875</a>)</li> <li>Add <code>future::AlwaysReady</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2825">#2825</a>)</li> <li>Relax trait bound on non-constructor methods of <code>io::{BufReader,BufWriter}</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2848">#2848</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md">futures-util's changelog</a>.</em></p> <blockquote> <h1>0.3.31 - 2024-10-05</h1> <ul> <li>Fix use after free of task in <code>FuturesUnordered</code> when dropped future panics (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2886">#2886</a>)</li> <li>Fix soundness bug in <code>task::waker_ref</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2830">#2830</a>) This is a breaking change but allowed because it is soundness bug fix.</li> <li>Fix bugs in <code>AsyncBufRead::read_line</code> and <code>AsyncBufReadExt::lines</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2884">#2884</a>)</li> <li>Fix parsing issue in <code>select!</code>/<code>select_biased!</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2832">#2832</a>) This is technically a breaking change as it will now reject a very odd undocumented syntax that was previously accidentally accepted.</li> <li>Work around issue due to upstream <code>Waker::will_wake</code> change (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2865">#2865</a>)</li> <li>Add <code>stream::Iter::{get_ref,get_mut,into_inner}</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2875">#2875</a>)</li> <li>Add <code>future::AlwaysReady</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2825">#2825</a>)</li> <li>Relax trait bound on non-constructor methods of <code>io::{BufReader,BufWriter}</code> (<a href="https://redirect.github.com/rust-lang/futures-rs/issues/2848">#2848</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
paritosh-08
|
3cc9d2092e |
support __typename in aggregate queries (#1220)
<!-- The PR description should answer 2 important questions: --> ### What This PR enables queries `__typename` introspection field in aggregate queries. This PR also adds a test for the same. ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> We have changed how we handle __typename while processing the selection set. If you use `as_object_selection_set`, you will get `__typename` for free. We are going to follow the same pattern as in the non-aggregate fields. The following has changed: - While generating the IR, we will ignore introspection fields. - use `as_object_selection_set` to process the selection set. V3_GIT_ORIGIN_REV_ID: 0b88d497efd9b754483dd786fe7e8ef5fcb462f1 |
||
paritosh-08
|
9df2108237 |
use TestNDCResponses and GenerateOpenDDQuery wherever possible for graphql frontend test (#1201)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> We can change a few `Skip` to `TestNDCResponses` or `GenerateOpenDDQuery`. We are still skipping tests for the following features: - introspection - order_by relationship - where relationship - where remote_relationship - relay - commands procedures - field presets - relationship predicates - remote_relationship predicates - apollo_federation - aggregates - most of the relationship tests ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> V3_GIT_ORIGIN_REV_ID: ea0a5d865cc40f8f7428d8e742f48dc6be300696 |
||
Daniel Chambers
|
4f5e10c636 |
Aggregate Predicates: Resolve objectAggregate and scalarAggregate BooleanExpressionTypes (#1217)
<!-- The PR description should answer 2 important questions: --> ### What This PR adds two new operand types for `BooleanExpressionType` in OpenDD: `objectAggregate` and `scalarAggregate`. These two operand types are then validated in metadata resolve to ensure their correctness. Their design is based on [this RFC](https://github.com/hasura/v3-engine/pull/945#issuecomment-2325652794). They are hidden from the OpenDD JSON Schema and their usage is blocked by default via a new unstable feature flag. They are also currently not "usable", as the metadata resolve code that would use an `objectAggregate` operand-ed `BooleanExpressionType` to satisfy an aggregate predicate over an array relationship does not exist. This will be added in a future PR; this PR is big enough! ### How A new unstable feature `enable_aggregation_predicates` has been added to gate this feature behind while it is in development. The new OpenDD types have been added to `crates/open-dds/src/boolean_expression.rs`. A new metadata resolve stage `aggregate_boolean_expressions` has been added that specifically resolves these two new operand types. Most of the new code changes in this PR exist in this new stage. The output of this stage is composed into the `boolean_expressions` stage afterwards, but other than just being consumed and included there, it is unused for now. In a future PR it will be used when resolving object-operanded `BooleanExpressionTypes`. An exhaustive set of metadata resolve tests has been added to test all the error, warning and passing cases for both object and scalar aggregate operands (`crates/metadata-resolve/tests/failing/aggregate_boolean_expressions/` and `crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/`). These files make up the vast majority of the file count in this PR. V3_GIT_ORIGIN_REV_ID: e0e030b322d05212a0e2630acc9f4db7b05000c1 |
||
Rakesh Emmadi
|
92d84bc126 |
graphql-ws: avoid cloning graphql schema state on each websocket connection (#1218)
<!-- The PR description should answer 2 important questions: --> ### What <!-- What is this PR trying to accomplish (and why, if it's not obvious)? --> <!-- Consider: do we need to add a changelog entry? --> <!-- Does this PR introduce new validation that might break old builds? --> <!-- Consider: do we need to put new checks behind a flag? --> Essential artifacts, like schema and auth/plugin configs, required for a websocket connection are cloned on each request. This is causing massive memory spike while simulating 10k concurrent connections using graphql-bench tool. ![Screenshot from 2024-10-09 16-22-33](https://github.com/user-attachments/assets/57926a00-a3cb-4a95-b220-c4728067f951) My machine has 62GB of ram, so absolute usage is `30% of 62G ~ 18 GB`. I spent some time debugging dangling tokio tasks from closed websockets using [tokio_console](https://github.com/tokio-rs/console). Tokio tasks are closed as expected when websockets are dropped. I gone through the graphql-ws code line-by-line and found that we are cloning the schema for each websocket connection. The reason for this is that, initially, I couldn't find a way to generate an `Arc` for just the schema from the EngineState struct. ~However, I found a solution by using the [mappable-rc](https://docs.rs/mappable-rc/latest/mappable_rc/index.html) crate.~ Tweak the `EngineState` struct to hold heavy fields inside `Arc` to pass them around separately. Just pass the `EngineState` without wrapping in `Arc` across axum routes, as it is cheap to clone now. After wrapping all artifact values with `Arc`, the memory usage decreased drastically. ![Screenshot from 2024-10-09 16-41-10](https://github.com/user-attachments/assets/090211d0-5318-4414-83b3-aa8cde86bfe4) The screenshot above shows 1% memory usage for 10,000 concurrent connections. From multiple runs, I found the average usage to be around 1.2% - 1.4%, which roughly translates to ~ `800MB`. ### How <!-- How is it trying to accomplish it (what are the implementation steps)? --> - Avoid cloning schema, auth_config and plugin artifacts on a new websocket connections. Now, `EngineState` contains these values wrapped with `Arc`. Use them directly. - Refactor other parts of code to accommodate the above changes. V3_GIT_ORIGIN_REV_ID: f56a9eecf6e9eca9fdc56bf332f9a06f5ad4cdb5 |
||
Rob Dominguez
|
1c5b63ab7a |
Docs: Create dedicated page for namespacing remote schemas
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/11053 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> GitOrigin-RevId: 6b47df133699ef0ecb60077d13d9ad1bd6c1f46e |
||
Sean Park-Ross
|
1e392ad3d9 |
Docs: DDN Modal close button on the right
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/11055 GitOrigin-RevId: 5c8107cbccf2595ff0220715f58f6e99726ed3dd |
||
Tom Harding
|
81bd72f4d7 |
Report a path for UnknownModelCollection during model resolution (#1216)
### What Like #1192, this PR adds a context to another error raised during the `models` resolution step. Specifically, `UnknownModelCollection`. ### How These PRs are extremely simple, it's just that there are going to be dozens of them. When an error refers to a thing, you wrap that thing in `Spanned`, and then try to extract the `path` at the error site. Most of the time, it's pretty straightforward. --------- Co-authored-by: Daniel Chambers <daniel@hasura.io> V3_GIT_ORIGIN_REV_ID: d3ea71d3d9a42cbf804add54f5f6e75ab68c6765 |
||
Daniel Chambers
|
7c4d34d80c |
Move allow partial supergraph flag to OpenDD flags instead of an env var (#1205)
### What Currently if you want v3-engine to accept metadata that is only a partial supergraph (ie missing some subgraphs), you must set the PARTIAL_SUPERGRAPH env var. Builds sent to MBS get sent to a special endpoints `/validate/partial` and `/build/partial` that runs the engine build process with that configuration option set. This results in a terrible user experience for local builds, because MBS will accept a partial supergraph and yield build artifacts, but v3-engine will refuse to run them unless you set that env var. This PR removes that env var and creates a new OpenDD flag called `allow_partial_supergraph`. When MBS's `/validate/partial` endpoint is used, that flag is set in the build artifacts. v3-engine then looks at that flag to enable partial supergraph mode. This means a `/build/partial` build via MBS just works when you run it locally via v3-engine. ### How `metadata_resolve`'s `Configuration.allow_unknown_subgraphs` has been removed, and `metadata_resolve` now looks at OpenDD's new `Flags.allow_partial_supergraph` instead. In MBS, usage of `ValidationMode` (the enum that enables partial builds) previously used to set `Configuration.allow_unknown_subgraphs`; now it is used in `compute_open_dds_flags` in order to set `Flags.allow_partial_supergraph`. The existing metadata_resolve test that tested partial supergraphs has been modified to use the flags rather than the removed configuration option (`crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring_unknown_subgraphs`). A new `metadata_resolve` test has been added that checks that comparable relationships in `BooleanExpressionType` properly respects the `allow_partial_subgraphs` flag (this functionality was added in #1182). V3_GIT_ORIGIN_REV_ID: 2c984eb791263a1fb0606c6c44a2a1ae4a5e7370 |
||
Brandon Simmons
|
62d9cbacdb |
ENG-1071: add detailed traces for MBS validate/ and some benchmarks (#1209)
<!-- The PR description should answer 2 important questions: --> ### What Set us up for more visibility into performance on prod. ### How Add traces V3_GIT_ORIGIN_REV_ID: 0ea011c1233a08bf4f9d55a9084809a6ffcd934d |
||
Daniel Harvey
|
06ca697a27 |
Move a function from graphql_ir to metadata-resolve (#1207)
<!-- The PR description should answer 2 important questions: --> ### What Functional no-op towards making `graphql_ir` less central and breaking some import cycles. ### How Move the function. V3_GIT_ORIGIN_REV_ID: 53ea007964f5ab79cb546821cfb76f542ea3b486 |