Releases: gatewayd-io/gatewayd
v0.8.8
This release contains builds upgrades to the GitHub Actions used in build and publish process and we now have builds for linux/arm64
, which means that the Docker image can be used on the (not so) new Apple chipsets (M1/M2) and (possibly — untested) all other 64bit ARM chipsets, thanks to @hamedsalim1999! 🚀
What's Changed
- 378 multi-platform Docker image by @hamedsalim1999 in #380
- fix: Resolve GitHub Actions bug for multi-architecture builds by @hamedsalim1999 in #381
New Contributors
- @hamedsalim1999 made their first contribution in #380
Full Changelog: v0.8.7...v0.8.8
v0.8.7
This release is a maintenance release and includes these changes:
- Dependency updates.
- Panics are now fatal errors, so that normal user errors are not reported to Sentry.
- Fix a log message.
What's Changed
Full Changelog: v0.8.6...v0.8.7
v0.8.6
This release contains many fixes, features and enhancements.
- Tests no longer fail, which they used to due to a multitude of issues, and they now run in sequence.
- The getter functions have been refactored to improve the codebase's maintainability and efficiency.
- Prior to a comprehensive overhaul (#181), the API has received minor updates (#369) for improved performance and compatibility. These changes lay the groundwork for the upcoming major revamp.
- A significant enhancement in system resilience has been introduced with the implementation of circuit breaking. This feature ensures stability and reliability under high load or failure conditions, which are documented:
dialTimeout
: A new timeout duration is added to the client object that will set a timeout on the connection dialing (initiation) function. It will stop the client from blocking forever, if it cannot connect to the database server.- retries and backoffs: Previously the clients attempted to connect to the database server and fail immediately (or after a certain period of time). To increase reliability, retries and backoff have been added to retry a few times and waiting between retries before giving up. The first attempt is counted as a try, and for example 3 retries means 4 attempts. All the details and the backoff duration formula are described in the docs.
startTimeout
: Previously the start timeout for the plugins were a constant default of 60s, which is now configurable from the plugins config file.
What's Changed
- Small updates to the API before fully revamping it by @mostafa in #369
- Circuit breaking all the way by @mostafa in #372
- Refactor getter functions by @mostafa in #375
Full Changelog: v0.8.5...v0.8.6
v0.8.5
This release adds the TLS termination for incoming Postgres clients, enabling various SSL modes. From now on, GatewayD will act as a TLS server when new clients are trying to connect via any supported SSL mode. For now, the traffic between GatewayD and Postgres will still be in plaintext, yet the traffic between GatewayD and the clients, e.g. psql, will be encrypted.
TLS works differently in Postgres than other databases. In Postgres, the first message is a SSLRequest
, instead of TLS handshake request, which the server should either reply with an S
to acknowledge that the server supports TLS and the client can initiate TLS handshake or an N
to reject SSL request altogether (and possibly continue with plaintext communication). Postgres clients have six SSL modes:
disable
: client tries to connect with SSL disabled, and the first request will be aStartupMessage
.allow
: client authenticates with SSL if server enforces it (GatewayD doesn't enforce SSL at the moment).prefer
: tries to connect with anSSLRequest
, and if server returns either of the following responses:S
: continue with TLS handshake, because the server supports it (GatewayD returns this if TLS is enabled).N
: continue with aStartupMessage
, because the server doesn't support TLS (GatewayD return this if TLS is disabled).
require
: requires SSL and fails if the server doesn't support it, which results in these scenarios:- Server supports SSL: TLS handshake happens between the client and the server.
- Server doesn't support SSL: client receives an
N
and will get disconnected.
verify-ca
andverify-full
: verifies server certificates and chain of trust (See: #365 (comment)).
Note
All the SSL modes are tested and supported. Also, GatewayD doesn't enforce TLS, unless the client requests it.
What's Changed
Full Changelog: v0.8.4...v0.8.5
v0.8.4
This release contains a few features and fixes and a breaking change:
- The subcommands will no longer panic, instead they'll print an error message and return.
- Health check endpoints are added to the gRPC API and the HTTP gateway, which be used for readiness/liveness in containerized environments and k8s. All the probes return whether all the servers are running or not. The health check works both on the gRPC server and the HTTP server and can be tested using the following commands:
$ curl http://localhost:18080/healthz {"status":"SERVING"} $ grpc-client-cli health localhost:19090 { "status": "SERVING" }
- The
plugin install
has undergone some changes:- An option is added to enable interactive prompt when updating the plugin or backing up the plugins config file before the update. To activate the interactive prompt, you can use the
--no-prompt=false
flag. - When using the
plugin install
command, users can now choose whether they want to create a backup of the current plugins config file (if it exists) before proceeding with the installation. This can be achieved by using the--backup=true
flag. - The updated
plugin install
command will replace the plugin configuration of the newly installed plugin with any existing configuration for a plugin in the plugins list that shares the same name. You can enable this behavior using the--update=true
flag.
- An option is added to enable interactive prompt when updating the plugin or backing up the plugins config file before the update. To activate the interactive prompt, you can use the
Warning
Important Change inplugin install
Command
Starting with this release, there is a breaking change in theplugin install
command. By default, the interactive prompt is now disabled (--no-prompt=true
) when installing a new plugin. If an existing plugin with the same name is detected during installation, the process will be aborted, and any downloaded files will be automatically deleted, unless you pass the--cleanup=false
flag.To override this default behavior and have more control:
- Enable the interactive prompt to be notified of the changes and have the option to approve or deny them.
- Pass the appropriate flags to enable the update and backup features.
These changes are aimed at enhancing your control over the installation process and minimizing any unexpected actions when dealing with plugins. Please adjust your installation process accordingly to accommodate these modifications.
What's Changed
- Update plugin in the list and backup plugins config when using
plugin install
by @mostafa in #349 - Print and return instead of
log.Panic
by @mostafa in #351 - Add healthz endpoints by @mostafa in #353
Full Changelog: v0.8.3...v0.8.4
v0.8.3
This release contains a significant update in GatewayD with #344. In this PR, substantial enhancements have been made to the GatewayD server by removing the gnet/v2
library used for serving incoming client connections and replacing it with the net
package from the Go standard library. These changes are aimed at improving performance, reliability, and fixing various race conditions within the codebase.
This change introduced bidirectional communication between the server and clients. Previously, GatewayD used to wait for the client to initiate a query and then waited for the server to send a response, which created a dependency on the client to trigger the server's response. With the new system, the server and clients are polled independently, enabling features such as LISTEN
and NOTIFY
from PostgreSQL. Query cancellation also works as expected now (#209).
Warning
The changes in this PR are backward-incompatible with previous version of GatewayD.
Changes to Configuration Parameters
The following configuration parameters have been removed from the server
configuration, as they are no longer applicable:
multiCore: True
lockOSThread: False
loadBalancer: roundrobin
readBufferCap: 134217728
writeBufferCap: 134217728
socketRecvBuffer: 134217728
socketSendBuffer: 134217728
reuseAddress: True
reusePort: True
tcpKeepAlive: 3s # duration
tcpNoDelay: True
Performance Benchmark Results
A small timing benchmark was conducted using psql
, where a query involving a table with 158369 records across 17 columns was executed that resulted in 67736218 bytes (~67.73 MB) data transfer from server to the client. The results showed a significant improvement in data transfer speed. Specifically, data transfer time was increased by approximately 41% compared to direct connection to database, and an impressive 91% reduction in comparison to version 0.8.2 (with the original overhead of 132%). More performance benchmarks will be conducted later (#342).
What's Changed
Full Changelog: v0.8.2...v0.8.3
v0.8.2
This release adds a tiny feature for cleaning up after installing a plugin and a configuration and test for multi-tenancy.
Note
The next release will be backward incompatible with all the releases up to this point, since the server and the proxy are going to be heavily refactored.
What's Changed
- Add configuration and test for multi-tenancy by @mostafa in #340
- Clean up downloaded and extracted files after the plugin is installed by @mostafa in #341
Full Changelog: v0.8.1...v0.8.2
v0.8.1
v0.8.0
This release contains a feature: linting global and plugins configuration files before loading those configuration files and running Gateway, and a refactoring: the configurable hard and soft limits are removed, as they were causing issues.
What's Changed
Full Changelog: v0.7.10...v0.8.0
v0.7.10
Release Notes for Milestone v0.7.x:
1. Windows Executables and Dependency Updates:
- Added Windows executables for AMD64 and ARM64 architectures, enabled by the
gnet/[email protected]
library. - Updated all other dependencies to their latest versions.
2. Docker Image Integration:
- Introduced Docker image support in the release.
- Images are published to GitHub Container Repository and Docker Hub.
3. Contribution Guides and Windows Plugin Support:
- Added contribution guides, code of conduct, PR and issue templates.
- Enabled Windows machines to download and install GatewayD plugins using
gatewayd plugin install
command.
4. Binary Data Transfer Protocol:
- Implemented a new JSON binary protocol for direct binary data transfer between GatewayD and plugins. There is no base64 encoding/decoding involved, which used to decrease performance.
5. Plugin Management Enhancements:
- Added
gatewayd plugin list
subcommand to list existing plugins. - Enhanced
gatewayd plugin install
command to support local installation from archive files. Now you can download the plugin from your desired source and use the command to install and configure it.
6. CycloneDX SBOMs and Code Coverage:
- Generated SBOMs for source code and Docker images, uploaded to release assets.
- Uploaded code coverage files to Coveralls for visualization and reporting.
- Upgraded Go to v1.21 and updated dependencies to their latest versions.
7. Maintenance and Testing:
- Fixed a regression in the
plugin install
command. - Added new tests for various parts of the system.
- Introduced benchmarks for performance testing.
This release includes various enhancements, bug fixes, and updates to improve the GatewayD platform.
Full Changelog: v0.7.0...v0.7.10
What's Changed
Full Changelog: v0.7.9...v0.7.10