Releases: postgresml/pgcat
v1 - Stable
Announcing v1
After over a year of development, we are proud to announce that we made it to v1! PgCat is stable, running in production and serving hundreds of thousands of queries.
Many thanks and congratulations to our amazing contributors for this effort. A special thank you to @drdrsh for pioneering PgCat at Instacart and implementing many critical features and bug fixes.
What's Changed
- A bit faster get_pool by @drdrsh in #187
- Use Jemalloc by @drdrsh in #189
- Don't send discard all when state is changed in transaction by @zainkabani in #186
- Re-enable query parser and parse multiple statements by @levkk in #191
- Fix docker-compose by @levkk in #193
- Automatic sharding: part one of many by @levkk in #194
- Dont change shard unless you know by @levkk in #195
- Add dependabot for keeping dependencies up-to-date by @chhetripradeep in #196
- chore(deps): bump regex from 1.5.5 to 1.6.0 by @dependabot in #197
- chore(deps): bump serde_derive from 1.0.136 to 1.0.147 by @dependabot in #198
- chore(deps): bump sha2 from 0.10.2 to 0.10.5 by @dependabot in #199
- chore(deps): bump async-trait from 0.1.52 to 0.1.58 by @dependabot in #200
- chore(deps): bump bytes from 1.1.0 to 1.2.1 by @dependabot in #206
- chore(deps): bump rustls-pemfile from 1.0.0 to 1.0.1 by @dependabot in #205
- chore(deps): bump base64 from 0.13.0 to 0.13.1 by @dependabot in #203
- chore(deps): bump arc-swap from 1.5.0 to 1.5.1 by @dependabot in #202
- chore(deps): bump rand from 0.8.4 to 0.8.5 by @dependabot in #201
- chore(deps): bump tokio from 1.16.1 to 1.19.2 by @dependabot in #210
- chore(deps): bump once_cell from 1.9.0 to 1.16.0 by @dependabot in #209
- chore(deps): bump log from 0.4.14 to 0.4.17 by @dependabot in #216
- chore(deps): bump serde from 1.0.136 to 1.0.147 by @dependabot in #215
- chore(deps): bump md-5 from 0.10.0 to 0.10.4 by @dependabot in #214
- chore(deps): bump sha2 from 0.10.5 to 0.10.6 by @dependabot in #213
- chore(deps): bump env_logger from 0.9.0 to 0.9.1 by @dependabot in #212
- chore(deps): bump chrono from 0.4.19 to 0.4.22 by @dependabot in #211
- chore(deps): bump toml from 0.5.8 to 0.5.9 by @dependabot in #207
- Fix for warnings about avg_errors not implemented by @chhetripradeep in #220
- Fix dependabot labels for pull-requests by @chhetripradeep in #219
- chore(deps): bump jemallocator from 0.3.2 to 0.5.0 by @dependabot in #218
- chore(deps): bump md-5 from 0.10.4 to 0.10.5 by @dependabot in #217
- chore(deps): bump num_cpus from 1.13.1 to 1.14.0 by @dependabot in #221
- chore(deps): bump regex from 1.6.0 to 1.7.0 by @dependabot in #224
- chore(deps): bump env_logger from 0.9.1 to 0.9.3 by @dependabot in #223
- chore(deps): bump hyper from 0.14.20 to 0.14.23 by @dependabot in #222
- chore: make clippy lint happy by @Cluas in #225
- chore(deps): bump chrono from 0.4.22 to 0.4.23 by @dependabot in #230
- chore(deps): bump sqlparser from 0.26.0 to 0.27.0 by @dependabot in #229
- Default to using username when database isn't present on startup by @zainkabani in #234
- Adds health check setting to pool and avoids get_config in hotpath by @zainkabani in #235
- Adds configuration for logging connections and removes get_config from entrypoint by @zainkabani in #236
- Move ClientBadStartup error log to debug by @zainkabani in #237
- Move get_config in startup to admin branch to scope down usage by @zainkabani in #238
- Adds details to errors and fixes error propagation bug by @zainkabani in #239
- chore(deps): bump bytes from 1.2.1 to 1.3.0 by @dependabot in #240
- chore(deps): bump env_logger from 0.9.3 to 0.10.0 by @dependabot in #241
- chore(deps): bump serde from 1.0.147 to 1.0.148 by @dependabot in #242
- chore(deps): bump serde_derive from 1.0.147 to 1.0.148 by @dependabot in #243
- chore(deps): bump sha-1 from 0.10.0 to 0.10.1 by @dependabot in #244
- chore(deps): bump async-trait from 0.1.58 to 0.1.59 by @dependabot in #245
- chore(deps): bump sqlparser from 0.27.0 to 0.28.0 by @dependabot in #248
- chore(deps): bump serde_derive from 1.0.148 to 1.0.149 by @dependabot in #247
- chore(deps): bump serde from 1.0.148 to 1.0.149 by @dependabot in #246
- chore(deps): bump base64 from 0.13.1 to 0.20.0 by @dependabot in #250
- chore(deps): bump serde_derive from 1.0.149 to 1.0.150 by @dependabot in #251
- chore(deps): bump serde from 1.0.149 to 1.0.150 by @dependabot in #252
- chore(deps): bump toml from 0.5.9 to 0.5.10 by @dependabot in #256
- Allow setting
idle_timeout
for server connections. by @magec in #257 - Allow setting the number of runtime workers to be used. by @magec in #258
- chore(deps): bump serde from 1.0.150 to 1.0.151 by @dependabot in #260
- chore(deps): bump async-trait from 0.1.59 to 0.1.60 by @dependabot in #259
- chore(deps): bump serde_derive from 1.0.150 to 1.0.151 by @dependabot in #261
- chore(deps): bump num_cpus from 1.14.0 to 1.15.0 by @dependabot in #264
- Buffer copy data messages by @zainkabani in #265
- Remove logo, pending new logo by @levkk in #267
- Fix typo in README by @eoinkelly in #272
- chore(deps): bump arc-swap from 1.5.1 to 1.6.0 by @dependabot in #273
- Fix tests (use sudo) by @levkk in #276
- chore(deps): bump sqlparser from 0.28.0 to 0.30.0 by @dependabot in #275
- chore(deps): bump once_cell from 1.16.0 to 1.17.0 by @dependabot in #270
- chore(deps): bump serde_derive from 1.0.151 to 1.0.152 by @dependabot in #269
- chore(deps): bump serde from 1.0.151 to 1.0.152 by @dependabot in #268
- chore(deps): bump async-trait from 0.1.60 to 0.1.61 by @dependabot in #278
- chore(deps): bump base64 from 0.20.0 to 0.21.0 by @dependabot in #279
- chore(deps): bump regex from 1.7.0 to 1.7.1 by @dependabot in #280
- Update cargo lock file by @zainkabani in #281
- Write messages directly onto message buffer instead of allocating on own buffer by @zainkabani in #283
- Introduce least-outstanding-connections load balancing by @drdrsh in #282
- Buffer client CopyData messages by @zainkabani in #284
- chore(deps): bump tokio from 1.24.1 to 1.24.2 by @dependabot in #286
- chore(deps): bump activerecord from 7.0.3.1 to 7.0.4.1 in /tests/ruby by @dependabot in #287
- Log error messages for network failures by @drdrsh in #289
- Removes message cloning operation required for query router by @zainkabani in #285
- Add more metrics to prometheus endpoint by @magec in #263
- Refactors is_banned logic and forces health check on unban by @zainkabani in #288
- chore(deps): bump toml from 0.5.10 to 0.5.11 by @dependabot in #290
- chore(deps): bump async-t...
Lots of Good Stuff
Summary
Lots of bug fixes and optimizations.
What's Changed
- Live reloading entire config and bug fixes by @levkk in #84
- Fix panic & query router bug by @levkk in #85
- Automatically reload config every seconds (disabled by default) by @levkk in #86
- Fix stats dymanic reload by @levkk in #87
- Support for TLS by @levkk in #91
- Bump activerecord from 7.0.2.2 to 7.0.3.1 in /tests/ruby by @dependabot in #94
- Add support for multi-database / multi-user pools by @drdrsh in #96
- Minor fix for some stats by @chhetripradeep in #97
- Add Serialize trait to configs by @drdrsh in #99
- Slightly more light weight health check by @drdrsh in #100
- Avoid ValueAfterTable when serializing configs by @drdrsh in #101
- Add test for config Serializer by @drdrsh in #102
- Send proper server parameters to clients using admin db by @drdrsh in #103
- Sync pgcat config for docker-compose by @chhetripradeep in #104
- Fix Python tests and remove CircleCI-specific path by @drdrsh in #106
- Add user to SHOW STATS query by @drdrsh in #108
- Report banned addresses as disabled by @drdrsh in #111
- Generate test coverage report in CircleCI by @drdrsh in #110
- Fix local dev by @drdrsh in #112
- Implementing graceful shutdown by @zainkabani in #105
- Prevent clients from sticking to old pools after config update by @drdrsh in #113
- create a prometheus exporter on a standard http port by @dat2 in #107
- Validates pgcat is closed after shutdown python tests by @zainkabani in #116
- fix docker compose port allocation for local dev by @dat2 in #117
- Health check delay by @zainkabani in #118
- Speed up CI a bit by @levkk in #119
- Fix debug log by @levkk in #120
- Make prometheus port configurable by @chhetripradeep in #121
- Statement timeout + replica imbalance by @levkk in #122
- Add cl_idle to SHOW POOLS by @drdrsh in #124
- Fix missing statistics by @levkk in #125
- Minor cleanup in admin command by @chhetripradeep in #126
- Add pool name and username to address object by @drdrsh in #128
- Minor Refactoring of re-used code and server stat reporting by @zainkabani in #129
- Random instance selection by @drdrsh in #136
- Random lb by @levkk in #138
- Fix incorrect routing for replicas by @levkk in #139
- Fix too many idle servers by @levkk in #140
- Really fix idle servers by @levkk in #141
- Avoid sending
Z
packet in the middle of extended protocol packet sequence if we fail to get connection form pool by @drdrsh in #137 - Graceful shutdown and refactor by @levkk in #144
- Exit with failure codes if configs are bad by @drdrsh in #146
- Move autoreloader to own tokio task by @zainkabani in #148
- Ruby integration tests by @drdrsh in #147
- Allow running integration tests with coverage locally by @drdrsh in #151
- Log Address information in connection create/drop by @drdrsh in #154
- Better handling extended protocol messages in the event of busy pool by @drdrsh in #155
- Send DISCARD ALL even if client is not in transaction by @drdrsh in #152
- Patch graceful shutdown bug by @zain-kabani in #157
- Main Thread Panic when swarmed with clients by @drdrsh in #158
- Adds microsecond logging and also reformats duration to include milliseconds by @zainkabani in #156
- Avoid reporting ProtocolSyncError when admin session disconnects by @drdrsh in #160
- Better logging for failure to get connection from pool by @drdrsh in #161
- Send signal even if process is gone by @levkk in #162
- Clean connection state up after protocol named prepared statement by @drdrsh in #163
- Add Discord link by @levkk in #164
- Add SHOW CLIENTS / SHOW SERVERS + Stats refactor and tests by @drdrsh in #159
- Report Query times by @drdrsh in #166
- Export pgcat objects in lib by @zainkabani in #169
- Update to latest library versions by @zainkabani in #170
- Minor refactor for configs by @zainkabani in #172
- Add defaults for configs by @zainkabani in #174
- Log failed client logins by @drdrsh in #173
- Don't drop connections if DB hasn't changed by @levkk in #175
- Fix the pool fix by @levkk in #176
- Set client state to idle after error by @drdrsh in #179
- Change sharding config to enum and move validation of configs into public functions by @zainkabani in #178
- Replace a few types with more developer-friendly names by @levkk in #182
- Fix maxwait metric by @drdrsh in #183
New Contributors
- @drdrsh made their first contribution in #96
- @chhetripradeep made their first contribution in #97
- @dat2 made their first contribution in #107
- @zain-kabani made their first contribution in #157
Full Changelog: v0.2.1-beta1...v0.3.0
Client MD5 authentication
Clients are now required to authenticate with MD5.
Scram kitties, scram!
Implemented SCRAM-SHA-256 authentication made compulsory in Postgres 14. This is for PgCat --> server authentication only.
Cat shower
Plugged a memory leak in client -> server mapping used for query cancellation that happened with clients that disconnected mid-transaction.
Cat on wheels
Fix for rolling back (resetting) servers that were left idle in transaction by clients that disconnected mid-transaction.
Ready for meowtime
This is a beta release. The feature set is mature enough that it can be used in low risk environments, dev, staging, pre-prod and low traffic production.
The admin database supports monitoring with Datadog.
Kitty litter
Initial release for alpha testing.