Skip to content

Releases: gatewayd-io/gatewayd

v0.8.8

18 Dec 21:40
1eb6431
Compare
Choose a tag to compare

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

New Contributors

Full Changelog: v0.8.7...v0.8.8

v0.8.7

04 Dec 21:28
99b98b1
Compare
Choose a tag to compare

This release is a maintenance release and includes these changes:

  1. Dependency updates.
  2. Panics are now fatal errors, so that normal user errors are not reported to Sentry.
  3. Fix a log message.

What's Changed

Full Changelog: v0.8.6...v0.8.7

v0.8.6

19 Nov 15:13
3632a09
Compare
Choose a tag to compare

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

Full Changelog: v0.8.5...v0.8.6

v0.8.5

05 Nov 19:54
aeef306
Compare
Choose a tag to compare

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 a StartupMessage.
  • allow: client authenticates with SSL if server enforces it (GatewayD doesn't enforce SSL at the moment).
  • prefer: tries to connect with an SSLRequest, 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 a StartupMessage, 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 and verify-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

  • TLS termination for incoming client connection by @mostafa in #364

Full Changelog: v0.8.4...v0.8.5

v0.8.4

24 Oct 19:11
a776985
Compare
Choose a tag to compare

This release contains a few features and fixes and a breaking change:

  1. The subcommands will no longer panic, instead they'll print an error message and return.
  2. 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"
    }
  3. The plugin install has undergone some changes:
    1. 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.
    2. 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.
    3. 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.

Warning
Important Change in plugin install Command
Starting with this release, there is a breaking change in the plugin 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:

  1. Enable the interactive prompt to be notified of the changes and have the option to approve or deny them.
  2. 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

18 Oct 16:28
fd0c9e0
Compare
Choose a tag to compare

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

  • Refactor server and proxy and remove gnet/v2 by @mostafa in #344

Full Changelog: v0.8.2...v0.8.3

v0.8.2

30 Sep 23:10
38bbb86
Compare
Choose a tag to compare

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

26 Sep 21:50
601d003
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.8.0...v0.8.1

v0.8.0

24 Sep 11:23
cb97fbe
Compare
Choose a tag to compare

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

23 Sep 12:13
5732a59
Compare
Choose a tag to compare

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:

3. Contribution Guides and Windows Plugin Support:

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