aquadoggo
aquadoggo copied to clipboard
Race conditions with failing tests
I receive random failing tests when I run cargo test
for the first times (very much looking like race conditions) :cry: - at one point they all pass ..
- First run
---- db::stores::entry::tests::paginated_log_entries::case_2 stdout ----
-------------- TEST START --------------
thread 'db::stores::entry::tests::paginated_log_entries::case_2' panicked at 'Send to store: Custom("Entry's claimed seq num of 1 does not match expected seq num of 4 for given author and log")', /home/adz/.cargo/git/checkouts/p2panda-fb44b351afe3c13e/103a133/p2panda-rs/src/test_utils/db/test_db.rs:250:26
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
- Second run
---- db::stores::entry::tests::get_lipmaa_link_entries stdout ----
-------------- TEST START --------------
thread 'db::stores::entry::tests::get_lipmaa_link_entries' panicked at 'Send to store: InsertionError(OperationId(Hash("0020936c7abffc9a92f7e12d5a4e4b4b0bd1bbfcdfa3440aba43ba15224fd07bcd6b")))', /home/adz/.cargo/git/checkouts/p2panda-fb44b351afe3c13e/103a133/p2panda-rs/src/test_utils/db/test_db.rs:250:26
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
- Third run
---- graphql::client::dynamic_query::test::single_query stdout ----
-------------- TEST START --------------
thread 'graphql::client::dynamic_query::test::single_query' panicked at 'assertion failed: `(left == right)`
left: `Null`,
right: `Object({Name("byViewId"): Object({Name("fields"): Object({Name("bool"): Boolean(true)})}), Name("byDocumentId"): Object({Name("fields"): Object({Name("bool"): Boolean(true)})})})`: [
ServerError {
message: "Unknown field \"schema_name_0020e97f9999c4d8ab054d3dd4d0c1d8e4c7063cc06706594d69828dfae5fd22d6e9\" on type \"QueryRoot\".",
locations: [
Pos(2:17),
],
path: [],
extensions: None,
},
ServerError {
message: "Unknown field \"schema_name_0020e97f9999c4d8ab054d3dd4d0c1d8e4c7063cc06706594d69828dfae5fd22d6e9\" on type \"QueryRoot\".",
locations: [
Pos(5:17),
],
path: [],
extensions: None,
},
]', aquadoggo/src/graphql/client/dynamic_query.rs:440:13
- They pass :laughing:
If I remove my target
folder and compile again I get more ..
---- db::stores::entry::tests::paginated_log_entries::case_6 stdout ----
-------------- TEST START --------------
thread 'db::stores::entry::tests::paginated_log_entries::case_6' panicked at 'Send to store: InsertionError(OperationId(Hash("00203c56166a80316aec6b629814ffbafb6bf54d9e30093e122b3cb0f7220e82f15d")))', /home/adz/.cargo/git/checkouts/p2panda-fb44b351afe3c13e/103a133/p2panda-rs/src/test_utils/db/test_db.rs:250:26
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Also:
failures:
---- graphql::client::dynamic_types::tests::application_schema_fields_type stdout ----
-------------- TEST START --------------
thread 'graphql::client::dynamic_types::tests::application_schema_fields_type' panicked at 'assertion failed: `(left == right)`
left: `Object({Name("schemaFields"): Null})`,
right: `Object({Name("schemaFields"): Object({Name("description"): String("Data fields available on documents of this schema."), Name("fields"): List([Object({Name("name"): String("bool_field"), Name("type"): Object({Name("kind"): String("SCALAR"), Name("name"): String("Boolean")})}), Object({Name("name"): String("list_field"), Name("type"): Object({Name("kind"): String("LIST"), Name("name"): Null})}), Object({Name("name"): String("relation_field"), Name("type"): Object({Name("kind"): String("OBJECT"), Name("name"): String("schema_definition_v1")})})])})})`:
[]
', aquadoggo/src/graphql/client/dynamic_types/tests.rs:218:9
Also:
---- materializer::service::tests::materialize_update_document stdout ----
-------------- TEST START --------------
thread 'materializer::service::tests::materialize_update_document' panicked at 'assertion failed: `(left == right)`
left: `DocumentViewId([OperationId(Hash("0020ba2ca68d5a78fd0ba2b09a9e622a86b5fb91ab2a47db9ff2d1de4d41aa4bcd8f"))])`,
right: `DocumentViewId([OperationId(Hash("0020d59fb45a885be272b483dbaf6aac976c65c64d76299365c7d42421d983c86334"))])`', aquadoggo/src/materializer/service.rs:385:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'materializer::service::tests::materialize_update_document' panicked at 'Failed removing completed task from database: Transaction("attempted to acquire a connection on a closed pool")', aquadoggo/src/materializer/service.rs:64:26
And:
failures:
---- graphql::client::dynamic_query::test::collection_query stdout ----
-------------- TEST START --------------
thread 'graphql::client::dynamic_query::test::collection_query' panicked at 'assertion failed: `(left == right)`
left: `Null`,
right: `Object({Name("collection"): List([Object({Name("fields"): Object({Name("bool"): Boolean(true)})})])})`: [
ServerError {
message: "Unknown field \"all_schema_name_00203591f9ff53c0ba94e111c0bf683a761010e8d388cc1c9b82c04cd01558c55f72\" on type \"QueryRoot\".",
locations: [
Pos(2:17),
],
path: [],
extensions: None,
},
]', aquadoggo/src/graphql/client/dynamic_query.rs:600:13
---- graphql::client::dynamic_query::test::type_name stdout ----
-------------- TEST START --------------
thread 'graphql::client::dynamic_query::test::type_name' panicked at 'assertion failed: `(left == right)`
left: `Null`,
right: `Object({Name("single"): Object({Name("__typename"): String("schema_name_0020ba2d3c7a90ca716946577cfecab5a0b91edaeaf3972396d9176ae20315413dfe"), Name("meta"): Object({Name("__typename"): String("DocumentMeta")}), Name("fields"): Object({Name("__typename"): String("schema_name_0020ba2d3c7a90ca716946577cfecab5a0b91edaeaf3972396d9176ae20315413dfeFields")})}), Name("collection"): List([Object({Name("__typename"): String("schema_name_0020ba2d3c7a90ca716946577cfecab5a0b91edaeaf3972396d9176ae20315413dfe")})])})`: [
ServerError {
message: "Unknown field \"schema_name_0020ba2d3c7a90ca716946577cfecab5a0b91edaeaf3972396d9176ae20315413dfe\" on type \"QueryRoot\".",
locations: [
Pos(2:17),
],
path: [],
extensions: None,
},
ServerError {
message: "Unknown field \"all_schema_name_0020ba2d3c7a90ca716946577cfecab5a0b91edaeaf3972396d9176ae20315413dfe\" on type \"QueryRoot\".",
locations: [
Pos(7:17),
],
path: [],
extensions: None,
},
]', aquadoggo/src/graphql/client/dynamic_query.rs:666:13
---- graphql::replication::query::tests::entry_by_hash stdout ----
-------------- TEST START --------------
thread 'graphql::replication::query::tests::entry_by_hash' panicked at 'Send to store: Custom("Unexpected number of inserts occured for entry with id: 00203c56166a80316aec6b629814ffbafb6bf54d9e30093e122b3cb0f7220e82f15d")', /home/sandreae/.cargo/registry/src/github.com-1ecc6299db9ec823/p2panda-rs-0.6.0/src/test_utils/db/test_db.rs:246:26
---- materializer::tasks::dependency::tests::dispatches_reduce_tasks_for_pinned_child_dependencies::case_2 stdout ----
-------------- TEST START --------------
thread 'materializer::tasks::dependency::tests::dispatches_reduce_tasks_for_pinned_child_dependencies::case_2' panicked at 'called `Result::unwrap()` on an `Err` value: Failure("00205aeab2f108c82dff99c7198c4e8239b541b4aba4f7feffe53fddc343bdb75527 was deleted while processing task")', aquadoggo/src/materializer/tasks/dependency.rs:363:22
failures:
graphql::client::dynamic_query::test::collection_query
graphql::client::dynamic_query::test::type_name
graphql::replication::query::tests::entry_by_hash
materializer::tasks::dependency::tests::dispatches_reduce_tasks_for_pinned_child_dependencies::case_2
Ok, at least found something which might be useful in our detective work.
In the logs below you can see printed the (redacted) current content of the base GraphQL schema. In contains a schema_name
schema, but the following id is not what the test is expecting.
running 8 tests
test graphql::client::dynamic_query::test::single_query_error_handling::case_5_missing_parameters ... ok
test graphql::client::dynamic_query::test::single_query_error_handling::case_3_malformed_document_id ... ok
test graphql::client::dynamic_query::test::single_query_error_handling::case_4_malformed_view_id ... ok
test graphql::client::dynamic_query::test::single_query_error_handling::case_1_unknown_document_id ... ok
test graphql::client::dynamic_query::test::single_query_error_handling::case_2_unknown_view_id ... ok
test graphql::client::dynamic_query::test::collection_query ... ok
test graphql::client::dynamic_query::test::type_name ... FAILED
test graphql::client::dynamic_query::test::single_query ... FAILED
failures:
---- graphql::client::dynamic_query::test::type_name stdout ----
-------------- TEST START --------------
[2022-11-28T14:18:53Z DEBUG aquadoggo::schema::schema_provider] Initialised schema provider:
- schema_definition_v1
- schema_field_definition_v1
[2022-11-28T14:18:53Z INFO aquadoggo::schema::schema_provider] Updating doggo_schema 496543
[2022-11-28T14:18:53Z WARN aquadoggo::schema::schema_provider] No subscriber has been informed about inserted / updated schema
[2022-11-28T14:18:53Z INFO aquadoggo::db::stores::test_utils::helpers] Creating schema schema_name
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Working on <TaskInput 0020c6fc0f4d97a7e501bbbf280651b44b8e4603f7101a392eb67aca603c69ace39d/->
[2022-11-28T14:18:53Z INFO aquadoggo::materializer::tasks::reduce] Created <Document ace39d>
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Dispatch dependency task for view with id: 0020c6fc0f4d97a7e501bbbf280651b44b8e4603f7101a392eb67aca603c69ace39d
[2022-11-28T14:18:53Z INFO aquadoggo::db::stores::test_utils::helpers] Added field 'bool' (bool)
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Working on <TaskInput 0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0/->
[2022-11-28T14:18:53Z INFO aquadoggo::materializer::tasks::reduce] Created <Document 1bc7f0>
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Dispatch dependency task for view with id: 0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::schema] Working on <TaskInput -/0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0>
[2022-11-28T14:18:53Z INFO aquadoggo::schema::schema_provider] Updating schema_name 1bc7f0
[2022-11-28T14:18:53Z WARN aquadoggo::schema::schema_provider] No subscriber has been informed about inserted / updated schema
[2022-11-28T14:18:53Z DEBUG aquadoggo::db::stores::test_utils::helpers] Done building schema_name_0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0
[2022-11-28T14:18:53Z INFO aquadoggo::db::stores::test_utils::helpers] Creating document for schema_name_0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Working on <TaskInput 0020973a1d718be46b831ea8758972e8e72dda6c0ee717f108b5b421ff3e5eb48e1f/->
[2022-11-28T14:18:53Z INFO aquadoggo::materializer::tasks::reduce] Created <Document b48e1f>
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Dispatch dependency task for view with id: 0020973a1d718be46b831ea8758972e8e72dda6c0ee717f108b5b421ff3e5eb48e1f
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::dependency] Working on <TaskInput -/0020973a1d718be46b831ea8758972e8e72dda6c0ee717f108b5b421ff3e5eb48e1f>
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::dependency] Document view retrieved from storage with id: 0020973a1d718be46b831ea8758972e8e72dda6c0ee717f108b5b421ff3e5eb48e1f
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::dependency] Scheduling 0 reduce tasks
[2022-11-28T14:18:53Z INFO aquadoggo::graphql::schema] Subscribing GraphQL manager to schema provider
[2022-11-28T14:18:53Z DEBUG aquadoggo::graphql::schema] [
[
...
"all_schema_name_002070fb978c6aa44dec8f55c4a50526a7a7edb642ad61436ea0f8374b8fadfd04cf",
"schema_name_002070fb978c6aa44dec8f55c4a50526a7a7edb642ad61436ea0f8374b8fadfd04cf",
"schema_name_002070fb978c6aa44dec8f55c4a50526a7a7edb642ad61436ea0f8374b8fadfd04cfFields",
...
],
]
[2022-11-28T14:18:53Z DEBUG aquadoggo::graphql::schema] Finished building initial GraphQL schema
thread 'graphql::client::dynamic_query::test::type_name' panicked at 'assertion failed: `(left == right)`
left: `Null`,
right: `Object({Name("single"): Object({Name("__typename"): String("schema_name_0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0"), Name("meta"): Object({Name("__typename"): String("DocumentMeta")}), Name("fields"): Object({Name("__typename"): String("schema_name_0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0Fields")})}), Name("collection"): List([Object({Name("__typename"): String("schema_name_0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0")})])})`: [
ServerError {
message: "Unknown field \"schema_name_0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0\" on type \"QueryRoot\".",
locations: [
Pos(2:17),
],
path: [],
extensions: None,
},
ServerError {
message: "Unknown field \"all_schema_name_0020ff20f863b993f1fb15ead5f972a6748dae92ba47bf25b160b050ded74f1bc7f0\" on type \"QueryRoot\".",
locations: [
Pos(7:17),
],
path: [],
extensions: None,
},
]', aquadoggo/src/graphql/client/dynamic_query.rs:666:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
---- graphql::client::dynamic_query::test::single_query stdout ----
-------------- TEST START --------------
[2022-11-28T14:18:53Z DEBUG aquadoggo::schema::schema_provider] Initialised schema provider:
- schema_field_definition_v1
- schema_definition_v1
[2022-11-28T14:18:53Z INFO aquadoggo::schema::schema_provider] Updating doggo_schema 496543
[2022-11-28T14:18:53Z WARN aquadoggo::schema::schema_provider] No subscriber has been informed about inserted / updated schema
[2022-11-28T14:18:53Z INFO aquadoggo::db::stores::test_utils::helpers] Creating schema schema_name
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Working on <TaskInput 0020fda0827ea01eb5ef4bf2b3f31df70e9e5044bc2b30dc987c2c80849ba9d3c2a8/->
[2022-11-28T14:18:53Z INFO aquadoggo::materializer::tasks::reduce] Created <Document d3c2a8>
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Dispatch dependency task for view with id: 0020fda0827ea01eb5ef4bf2b3f31df70e9e5044bc2b30dc987c2c80849ba9d3c2a8
[2022-11-28T14:18:53Z INFO aquadoggo::db::stores::test_utils::helpers] Added field 'bool' (bool)
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Working on <TaskInput 0020135e7faf734b2e43b646e0f23816243c9fe9bde8ce9d2e3f78c8ee29df5b8682/->
[2022-11-28T14:18:53Z INFO aquadoggo::materializer::tasks::reduce] Created <Document 5b8682>
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Dispatch dependency task for view with id: 0020135e7faf734b2e43b646e0f23816243c9fe9bde8ce9d2e3f78c8ee29df5b8682
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::schema] Working on <TaskInput -/0020135e7faf734b2e43b646e0f23816243c9fe9bde8ce9d2e3f78c8ee29df5b8682>
[2022-11-28T14:18:53Z INFO aquadoggo::schema::schema_provider] Updating schema_name 5b8682
[2022-11-28T14:18:53Z WARN aquadoggo::schema::schema_provider] No subscriber has been informed about inserted / updated schema
[2022-11-28T14:18:53Z DEBUG aquadoggo::db::stores::test_utils::helpers] Done building schema_name_0020135e7faf734b2e43b646e0f23816243c9fe9bde8ce9d2e3f78c8ee29df5b8682
[2022-11-28T14:18:53Z INFO aquadoggo::db::stores::test_utils::helpers] Creating document for schema_name_0020135e7faf734b2e43b646e0f23816243c9fe9bde8ce9d2e3f78c8ee29df5b8682
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Working on <TaskInput 0020b604a8db8302cb2dc168479c50a65b56e46919c9e73f136f2bab97006c5d2384/->
[2022-11-28T14:18:53Z INFO aquadoggo::materializer::tasks::reduce] Created <Document 5d2384>
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::reduce] Dispatch dependency task for view with id: 0020b604a8db8302cb2dc168479c50a65b56e46919c9e73f136f2bab97006c5d2384
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::dependency] Working on <TaskInput -/0020b604a8db8302cb2dc168479c50a65b56e46919c9e73f136f2bab97006c5d2384>
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::dependency] Document view retrieved from storage with id: 0020b604a8db8302cb2dc168479c50a65b56e46919c9e73f136f2bab97006c5d2384
[2022-11-28T14:18:53Z DEBUG aquadoggo::materializer::tasks::dependency] Scheduling 0 reduce tasks
[2022-11-28T14:18:53Z INFO aquadoggo::graphql::schema] Subscribing GraphQL manager to schema provider
[2022-11-28T14:18:53Z DEBUG aquadoggo::graphql::schema] [
[
...
"all_schema_name_002070fb978c6aa44dec8f55c4a50526a7a7edb642ad61436ea0f8374b8fadfd04cf",
"schema_name_002070fb978c6aa44dec8f55c4a50526a7a7edb642ad61436ea0f8374b8fadfd04cf",
"schema_name_002070fb978c6aa44dec8f55c4a50526a7a7edb642ad61436ea0f8374b8fadfd04cfFields",
...
],
]
[2022-11-28T14:18:53Z DEBUG aquadoggo::graphql::schema] Finished building initial GraphQL schema
thread 'graphql::client::dynamic_query::test::single_query' panicked at 'assertion failed: `(left == right)`
left: `Null`,
right: `Object({Name("byViewId"): Object({Name("fields"): Object({Name("bool"): Boolean(true)})}), Name("byDocumentId"): Object({Name("fields"): Object({Name("bool"): Boolean(true)})})})`: [
ServerError {
message: "Unknown field \"schema_name_0020135e7faf734b2e43b646e0f23816243c9fe9bde8ce9d2e3f78c8ee29df5b8682\" on type \"QueryRoot\".",
locations: [
Pos(2:17),
],
path: [],
extensions: None,
},
ServerError {
message: "Unknown field \"schema_name_0020135e7faf734b2e43b646e0f23816243c9fe9bde8ce9d2e3f78c8ee29df5b8682\" on type \"QueryRoot\".",
locations: [
Pos(5:17),
],
path: [],
extensions: None,
},
]', aquadoggo/src/graphql/client/dynamic_query.rs:480:13
failures:
graphql::client::dynamic_query::test::single_query
graphql::client::dynamic_query::test::type_name
test result: FAILED. 6 passed; 2 failed; 0 ignored; 0 measured; 238 filtered out; finished in 0.10s
Ok, interesting. Logging seems to show the Store
and SchemaProvider
have the expected schema, but the GraphQL schema is still wrong.
[2022-11-28T14:53:34Z DEBUG aquadoggo::graphql::schema] SCHEMA FROM PROVIDER
[2022-11-28T14:53:34Z DEBUG aquadoggo::graphql::schema] [
Schema {
id: SchemaDefinition(
1,
),
description: "Publish data schemas for your application.",
fields: {
"description": String,
"fields": PinnedRelationList(
SchemaFieldDefinition(
1,
),
),
"name": String,
},
},
Schema {
id: SchemaFieldDefinition(
1,
),
description: "Define fields for application data schemas.",
fields: {
"name": String,
"type": String,
},
},
Schema {
id: Application(
"schema_name",
DocumentViewId(
[
OperationId(
Hash(
"002068a2a051668718f4ca01fd73ea989de7b74b5abc3b643e912413ebae6a41067c",
),
),
],
),
),
description: "test schema description",
fields: {
"bool": Boolean,
},
},
...
]
[2022-11-28T14:53:34Z DEBUG aquadoggo::graphql::schema] SCHEMA FROM STORE
[2022-11-28T14:53:34Z DEBUG aquadoggo::graphql::schema] [
DocumentView {
id: DocumentViewId(
[
OperationId(
Hash(
"002068a2a051668718f4ca01fd73ea989de7b74b5abc3b643e912413ebae6a41067c",
),
),
],
),
fields: DocumentViewFields(
{
"description": DocumentViewValue {
operation_id: OperationId(
Hash(
"002068a2a051668718f4ca01fd73ea989de7b74b5abc3b643e912413ebae6a41067c",
),
),
value: String(
"test schema description",
),
},
"fields": DocumentViewValue {
operation_id: OperationId(
Hash(
"002068a2a051668718f4ca01fd73ea989de7b74b5abc3b643e912413ebae6a41067c",
),
),
value: PinnedRelationList(
PinnedRelationList(
[
DocumentViewId(
[
OperationId(
Hash(
"0020758ce3646d5065192ff4f54121797739ca38dda474917ba1d0f1885b3b1e3dfd",
),
),
],
),
],
),
),
},
"name": DocumentViewValue {
operation_id: OperationId(
Hash(
"002068a2a051668718f4ca01fd73ea989de7b74b5abc3b643e912413ebae6a41067c",
),
),
value: String(
"schema_name",
),
},
},
),
},
]
[2022-11-28T14:53:34Z DEBUG aquadoggo::graphql::schema] [
[
...
"all_schema_name_0020ab5a754ddbde413122ac64a40df13944cda373ee1350eb2c268cacce63d39718",
"schema_name_0020ab5a754ddbde413122ac64a40df13944cda373ee1350eb2c268cacce63d39718",
"schema_name_0020ab5a754ddbde413122ac64a40df13944cda373ee1350eb2c268cacce63d39718Fields",
],
]
[2022-11-28T14:53:34Z DEBUG aquadoggo::graphql::schema] Finished building initial GraphQL schema
thread 'graphql::client::dynamic_query::test::single_query' panicked at 'assertion failed: `(left == right)`
left: `Null`,
right: `Object({Name("byViewId"): Object({Name("fields"): Object({Name("bool"): Boolean(true)})}), Name("byDocumentId"): Object({Name("fields"): Object({Name("bool"): Boolean(true)})})})`: [
ServerError {
message: "Unknown field \"schema_name_002068a2a051668718f4ca01fd73ea989de7b74b5abc3b643e912413ebae6a41067c\" on type \"QueryRoot\".",
locations: [
Pos(2:17),
],
path: [],
extensions: None,
},
ServerError {
message: "Unknown field \"schema_name_002068a2a051668718f4ca01fd73ea989de7b74b5abc3b643e912413ebae6a41067c\" on type \"QueryRoot\".",
locations: [
Pos(5:17),
],
path: [],
extensions: None,
},
]', aquadoggo/src/graphql/client/dynamic_query.rs:480:13
Maybe something with the GraphQL manager? That's the thing rebuilding the API as soon as a new schema was registered. I'm sure that takes a bit of time ..
I think I found it:
[2022-11-28T17:50:56Z INFO aquadoggo::graphql::schema] Subscribing GraphQL manager to schema provider
[2022-11-28T17:50:56Z DEBUG aquadoggo::graphql::schema] SCHEMA FROM PROVIDER:
[2022-11-28T17:50:56Z DEBUG aquadoggo::graphql::schema] [
"schema_definition_v1",
"doggo_schema 496543",
"schema_name 4e77cf",
"schema_field_definition_v1",
]
[2022-11-28T17:50:56Z DEBUG aquadoggo::schema::static_schema_provider] SCHEMA SAVED TO STATIC SCHEMA:
[2022-11-28T17:50:56Z DEBUG aquadoggo::schema::static_schema_provider] [
"schema_definition_v1",
"doggo_schema 496543",
"schema_name 4e77cf",
"schema_field_definition_v1",
]
[2022-11-28T17:50:56Z DEBUG aquadoggo::schema::static_schema_provider] SCHEMA LOADED FROM STATIC SCHEMA:
[2022-11-28T17:50:56Z DEBUG aquadoggo::schema::static_schema_provider] [
"doggo_schema 496543",
"schema_name c55291",
"schema_definition_v1",
"schema_field_definition_v1",
]
[2022-11-28T17:50:56Z DEBUG aquadoggo::graphql::schema] SCHEMA IN GRAPHQL ROOT:
[2022-11-28T17:50:56Z DEBUG aquadoggo::graphql::schema] [
[
"doggo_schema_0020b177ec1bf26dfb3b7010d473e6d44713b29b765b99c6e60ecbfae742de496543",
"doggo_schema_0020b177ec1bf26dfb3b7010d473e6d44713b29b765b99c6e60ecbfae742de496543Fields",
"schema_name_0020c30cee63ac3e957a00a0b4cf9c57bf181aed083072b8c9af1ef89df572c55291Fields",
"all_doggo_schema_0020b177ec1bf26dfb3b7010d473e6d44713b29b765b99c6e60ecbfae742de496543",
"all_schema_name_0020c30cee63ac3e957a00a0b4cf9c57bf181aed083072b8c9af1ef89df572c55291",
"schema_name_0020c30cee63ac3e957a00a0b4cf9c57bf181aed083072b8c9af1ef89df572c55291",
],
]
[2022-11-28T17:50:56Z DEBUG aquadoggo::graphql::schema] Finished building initial GraphQL schema
thread 'graphql::client::dynamic_query::test::single_query' panicked at 'assertion failed: `(left == right)`
left: `Null`,
right: `Object({Name("byViewId"): Object({Name("fields"): Object({Name("bool"): Boolean(true)})}), Name("byDocumentId"): Object({Name("fields"): Object({Name("bool"): Boolean(true)})})})`: [
ServerError {
message: "Unknown field \"schema_name_00203a3e1148d732c0c9714a835456de4aa752c3e39f7246e04f26213859584e77cf\" on type \"QueryRoot\".",
locations: [
Pos(2:17),
],
path: [],
extensions: None,
},
ServerError {
message: "Unknown field \"schema_name_00203a3e1148d732c0c9714a835456de4aa752c3e39f7246e04f26213859584e77cf\" on type \"QueryRoot\".",
locations: [
Pos(5:17),
],
path: [],
extensions: None,
},
]', aquadoggo/src/graphql/client/dynamic_query.rs:480:13
It seems to be that the correct schema are passed into save_static_schemas
but when load_static_schemas
is called shortly after, it contains different (incorrect) schema.
Ok, Inthink we're facing several layers of issues here.
-
static SCHEMA_PROVIDER: Lazy<Mutex<Vec<Schema>>> = Lazy::new(|| Mutex::new(Vec::new()));
We're using the above to allow the GraphQL schema builder access to the current schemas, in particular in
create_type_info
. This works, but when running multiple tests concurrently I thinkSCHEMA_PROVIDER
is being over-written to in one process before it is read in another.We take a
MutexGuard
insave_static_schemas()
here but it is dropped as it goes out of scope and this leaves an opening where another lock can be taken out before it's read in the same test. -
What we want to do then is keep the lock until we read again, we can return it, keeping it alive longer, but if we keep it too long we simply block our own read, and we can't pass it on because we don't have access to the
async_graphql
methods. -
So then maybe we need a yielding mutex like
tokio::sync::Mutex
which wakes a future when a lock is released? But we can't cos it'sasync
andcreate_type_info
isn't. -
We can force the problematic tests to run in series: https://docs.rs/serial_test/0.4.0/serial_test/ ~~4) No idea.... :cry: what should we do? Hopefully I'm missing something....~~
I got a lot of that from: https://fasterthanli.me/articles/a-rust-match-made-in-hell#locks