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