graphql-engine/server/tests-py/queries/horizontal_scale/basic/steps.yaml
Rakesh Emmadi e32f5a1fb1 sync metadata cache across multiple instances connected to same db (closes #1182) (#1574)
1. Haskel library `pg-client-hs` has been updated to expose a function that helps listen to `postgres` notifications over a `channel` in this [PR](https://github.com/hasura/pg-client-hs/pull/5)
2. The server records an event in a table `hdb_catalog.hdb_cache_update_event` whenever any `/v1/query` (that changes metadata) is requested. A trigger notifies a `cache update` event via `hasura_cache_update` channel
3. The server runs two concurrent threads namely `listener` and `processor`. The `listener` thread listens to events on `hasura_cache_update` channel and pushed into a `Queue`. The `processor` thread fetches events from that `Queue` and processes it. Thus server rebuilds schema cache from database and updates.
2019-03-12 11:16:27 +05:30

94 lines
2.0 KiB
YAML

-
operation:
server: '1'
query:
type: bulk
args:
- type: run_sql
args:
sql: |
create table test_t1(
t1_c1 int,
t1_c2 text,
PRIMARY KEY (t1_c1)
);
- type: track_table
args:
schema: public
name: test_t1
- type: run_sql
args:
sql: |
insert into test_t1(t1_c1, t1_c2) VALUES(1, 'table1');
validate:
server: '2'
response:
data:
test_t1:
- t1_c1: 1
t1_c2: table1
query:
query: |
query {
test_t1 {
t1_c1
t1_c2
}
}
-
operation:
server: '2'
query:
type: bulk
args:
- type: run_sql
args:
sql: |
create table test_t2(
t2_c1 int,
t2_c2 text,
PRIMARY KEY (t2_c1)
);
- type: run_sql
args:
sql: |
ALTER TABLE test_t2 ADD FOREIGN KEY (t2_c1) REFERENCES test_t1 (t1_c1);
- type: track_table
args:
schema: public
name: test_t2
- type: create_object_relationship
args:
name: testT1Byc1
table:
name: test_t2
schema: public
using:
foreign_key_constraint_on: t2_c1
- type: run_sql
args:
sql: |
insert into test_t2(t2_c1, t2_c2) VALUES(1, 'table2');
validate:
server: '1'
query:
query: |
query {
test_t2 {
t2_c1
t2_c2
testT1Byc1 {
t1_c1
t1_c2
}
}
}
response:
data:
test_t2:
- t2_c1: 1
t2_c2: table2
testT1Byc1:
t1_c1: 1
t1_c2: table1