graphql-engine/server/src-lib/Hasura
Robert fbd1262ea6 server: operation timeout with postgres cancelling
### Description

This PR implements operation timeouts, as specced in #1232.

RFC: [rfcs/operation-timeout-api-limits.md](c025a90fe9/rfcs/operation-timeout-api-limits.md)

There's still some things to be done (tests and docs most notably), but apart from that it can
be reviewed. I'd still appreciate feedback on the RFC!

TODO:
- [x] break out the `ApiLimits` refactoring into a separate PR: #2103
- [x] finish the `pg-client-hs` PR: https://github.com/hasura/pg-client-hs/pull/39
- [x] remove configurability, after testing, prior to merging
- [ ] tests: #2390 has some tests that I've run locally to confirm things work on a fundamental level
- [x] changelog
- [x] documentation
- [x] fill in the detailed PR checklist

### Changelog

- [x] `CHANGELOG.md` is updated with user-facing content relevant to this PR. If no changelog is required, then add the `no-changelog-required` label.

### Affected components

- [x] Server
- [ ] Console
- [ ] CLI
- [x] Docs
- [ ] Tests

### Related Issues

Product spec: #1232.

### Solution and Design

Compare `rfcs/operation-timeout-api-limits.md`.

### Steps to test and verify

Configure operation timeouts, e.g. by posting

```
{
  "type": "set_api_limits",
  "args": {
    "operation_timeout": {
      "global": 3
    }
  }
}
```

to `v1/metadata` to set an operation timeout of 3s. Then verify that
1. non-admin queries that take longer than 3s time out with a nice error message
2. that those queries return after ~3s (at least for postgres)
3. also that everything else still works as usual

### Limitations, known bugs & workarounds
- while this will cause slow queries against any backends to fail, it's only verified to actually interrupt queries against postgres
- this will only successfully short-cut (cancel) queries to postgres if the database server is responsive

#### Catalog upgrade
Does this PR change Hasura Catalog version?
- [x] No

#### Metadata

Does this PR add a new Metadata feature?
- [x] Yes
  - Does `run_sql` auto manages the new metadata through schema diffing?
    - [x] Not required
  - Does `run_sql` auto manages the definitions of metadata on renaming?
    - [x] Not required
  - Does `export_metadata`/`replace_metadata` supports the new metadata added?
    - [x] Yes

#### GraphQL
- [x] No new GraphQL schema is generated

#### Breaking changes

- [x] No Breaking changes

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/1593
GitOrigin-RevId: f0582d0be3ed9fadf89e0c4aaf96344d18331dc4
2021-09-29 16:21:05 +00:00
..
Backends Feature/request transform string interpolation 2021-09-29 08:14:29 +00:00
Base server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
Cache server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
Eventing Feature/request transform string interpolation 2021-09-29 08:14:29 +00:00
GraphQL server: operation timeout with postgres cancelling 2021-09-29 16:21:05 +00:00
Incremental server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
Metadata server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
RQL server: operation timeout with postgres cancelling 2021-09-29 16:21:05 +00:00
Server server: operation timeout with postgres cancelling 2021-09-29 16:21:05 +00:00
SQL server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
App.hs server: operation timeout with postgres cancelling 2021-09-29 16:21:05 +00:00
EncJSON.hs server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
GC.hs server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
HTTP.hs server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
Incremental.hs server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
Logging.hs server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
Prelude.hs server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
QueryTags.hs server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
Session.hs server, pro: actually reformat the code-base using ormolu 2021-09-23 22:57:37 +00:00
Tracing.hs server: interpTraceT docs and small changes 2021-09-25 04:00:34 +00:00