Releases: gatewayd-io/gatewayd
v0.10.1
This release introduces Raft-based state management for GatewayD to ensure efficient and consistent coordination between multiple instances. By leveraging HashiCorp’s Raft implementation, GatewayD now maintains a unified state for parameters like connection pools and load-balancer strategies across all instances in a cluster, ensuring high availability, consistency, scalability, and efficiency.
Key Features and Objectives:
-
High Availability: Ensures the system remains operational even if individual instances fail. Raft provides fault tolerance by replicating state across multiple nodes, enabling consistent state retrieval and updates during failover scenarios.
-
Consistency: Guarantees that all instances in the cluster share the same view of stateful parameters, such as connection pools and load-balancer strategies, maintaining synchronized operations across distributed instances.
-
Scalability: Simplifies state coordination in clusters, enabling seamless scaling of GatewayD instances without introducing inconsistencies or requiring manual intervention.
-
Efficiency: Propagates updates to stateful parameters in real-time, ensuring optimal load balancing and resource utilization across instances.
Implementation Details:
- Unified State Management: A single Raft cluster handles stateful parameters as key-value pairs, ensuring consistency across nodes without the need for complex databases.
- Real-time Updates: Changes in one instance are immediately propagated to others, maintaining consistency and optimal load balancing.
- Fault Tolerance and Recovery: Raft’s persistence via BoltDB ensures reliability, while in-memory runtime state management simplifies operations.
This update resolves inconsistencies in the previous per-instance state management approach, ensuring scalable and robust operation for GatewayD clusters. A huge thanks to @sinadarbouy for his excellent work on this implementation! 🎉
This release also includes several critical updates and fixes to enhance security, improve performance, and maintain compatibility:
Security Updates:
- OpenSSL Update: Upgraded to
3.3.2-r1
to address CVE-2024-9143. - Crypto Library Fix: Resolved CVE-2024-45337 by updating
golang.org/x/crypto
to the latest version.
Dependency Updates:
- GitHub Actions: Updated
softprops/action-gh-release
tov2
for enhanced functionality and compatibility. - Direct Dependencies: Updated direct dependencies to their latest stable versions.
Development Improvements:
- SDK Update: Updated the SDK to the latest version.
- Go Updates: Upgrade Go to the latest version.
- Protobuf Changes: Regenerated Protobuf message stubs with HTTP annotations for improved API compatibility.
Linter Fixes:
- Addressed all issues reported by linters to ensure cleaner and more maintainable code.
What's Changed
- Update deps by @mostafa in #631
- feat(raft): Implement Raft-based Consistent Hash State Management by @sinadarbouy in #636
- Update deps by @mostafa in #639
Full Changelog: v0.10.0...v0.10.1
v0.10.0
v0.9.10
This release marks the culmination of the v0.9.x milestone, packed with significant new features, fixes, and enhancements that have made GatewayD more robust, stable, and scalable. Key highlights include the introduction of the policy engine, aka. the Act system, in v0.9.0, the plugin scaffold feature in v0.9.5, and the load balancing feature in v0.9.7, among many others.
Over the course of this milestone, we merged 89 squashed commits into the main
branch, resolved 30 issues, reviewed numerous PRs and published 11 releases — thanks to the perseverance and contributions of our amazing community. None of this would have been possible without their dedication.
Looking ahead, there's even more in store, and we invite you to get involved. Whether you're a user or a tester, your participation is crucial. If you're ready to contribute, @mostafa is here to support you every step of the way.
Full Changelog: v0.9.9...v0.9.10
v0.9.9
What's Changed
- Add metric labels by @mostafa in #612
- Add test for
plugin scaffold
command by @mostafa in #613 - Refactor
interface{}
toany
by @mostafa in #614 - Refactor
proxy.shouldTerminate
function and move the functionality toAct.Registry
by @mostafa in #615 - Use the result of notification hooks by @mostafa in #616
- Update deps by @mostafa in #621
Full Changelog: v0.9.8...v0.9.9
v0.9.8
This release introduces several key enhancements and fixes. A significant improvement is the integration of PostgreSQL test containers for seamless integration testing, replacing hardcoded addresses with dynamic test container addresses. This ensures a consistent test environment across various packages such as api
, cmd
, and network
, and centralizes the setup in a reusable function. Additionally, dependency updates were made, including the latest GatewayD SDK, and the gomoddirectives
linter was disabled to streamline development. The plugin configuration was updated to utilize the cache plugin version 0.4.0. A major bug has been fixed that improved handling of PostgreSQL's COPY
command, as explained here, plus other bugfixes and improvements.
This wouldn't be possible without @sinadarbouy's contributions. 🙏
What's Changed
- Add PostgreSQL Test Containers for Integration Testing by @sinadarbouy in #602
- Update deps by @mostafa in #609
- Fix bug in handling postgres
COPY
command and a few others by @mostafa in #610
Full Changelog: v0.9.7...v0.9.8
v0.9.7
This release contain a major change, where each tenant can now connect to multiple databases, contrary to the previous one-tenant-one-database approach, and use server load balancing strategies to distribute the load among these databases. Random, round robin and weighted RR strategies with consistent hashing are supported, thanks to @sinadarbouy and @eabasir for their contributions.
What's Changed
- Changed the log level for plugin startup failures from debug to error by @sinadarbouy in #560
- Update deps by @mostafa in #561
- Remove the enforced value of the ARCH in docker-compose by @eabasir in #562
- Feature/integrate docker scout with git hub actions by @sinadarbouy in #564
- Bugfix/workflow vulnerability comparison by @sinadarbouy in #569
- add Tempo, Prometheus and Grafana to docker-compose by @eabasir in #571
- Update deps by @mostafa in #576
- Feature: enable multi pool client connections by @sinadarbouy in #577
- Fix casting of client connections upon enumeration by @mostafa in #584
- Update golangci lint and clean up code by @mostafa in #586
- Fix parameters camelCase support in loadEnvVars for environment variable parsing by @sinadarbouy in #588
- Fix/env vars expect lower case letters by @sinadarbouy in #587
- Add Multi-Proxy Support to Docker-Compose by @sinadarbouy in #589
- Add Random Load Balancing Strategy by @sinadarbouy in #590
- Add Weighted Round Robin Algorithm to Load Balancer by @sinadarbouy in #591
- Add Consistent Hashing Load Balancing Strategy by @sinadarbouy in #592
- Fix Consistent Hashing to Use Remote Address Instead of Local Address by @sinadarbouy in #599
- Update deps by @mostafa in #600
New Contributors
Full Changelog: v0.9.6...v0.9.7
v0.9.6
In this release of GatewayD, several updates and fixes have been made. Support for queueing asynchronous actions in the background was added (thanks to @Hamsajj 🙏). This feature allows the output of policy evaluation by Act to be published to a Pub/Sub queue on Redis and plugin and external consumers can consume and run arbitrary actions based on that.
Provenance attestation and SBOM features were added, along with an Alpine update. Setup issues were resolved. The REDIS_URL
environment variable can be used to setup the cache plugin. The policy input has been enriched to include plugin parameters and its result for better policy evaluation. Dependencies were updated, including a bump of grpc-gateway
to version 2.20.0. The Dockerfile linting was added to the CI workflow.
Additionally, an issue with IP address binding that prevented external access to the containers from the host machine was fixed (thanks to @sinadarbouy 🙏).
What's Changed
- Add provenancce attestation and SBOM and update Alpine by @mostafa in #534
- Add badge by @mostafa in #535
- Fix setup issues by @mostafa in #538
- Use
REDIS_URL
to set up the cache plugin by @mostafa in #539 - Enrich policy input by @mostafa in #540
- Bump github.com/grpc-ecosystem/grpc-gateway/v2 from 2.19.1 to 2.20.0 by @dependabot in #536
- Lint dockerfile by @mostafa in #543
- Update deps by @mostafa in #550
- feat(464): add support for queueing async actions in background by @Hamsajj in #544
- Fix IP Address Binding Issue to Allow External Access from Host Machine by @sinadarbouy in #552
New Contributors
- @sinadarbouy made their first contribution in #552
Full Changelog: v0.9.5...v0.9.6
v0.9.5
This release contains a lot of improvements to the overall reliability and stability of GatewayD and a very nice feature contributed by @zeina1i (thank you 🙏). This release also has two first-time contributors: @ChrisD-Git and @smnmna99, which we are really grateful for (thank you🙏).
-
Plugin scaffolding feature: Previously the plugin template for Go was the go-to method for developing new plugins for GatewayD. @zeina1i integrated the template into the GatewayD CLI, so that you can create a new plugin scaffold and be able to test it in one place using the following command.
$ gatewayd plugin scaffold -h Scaffold a plugin and store the files into a directory Usage: gatewayd plugin scaffold [flags] Flags: -h, --help help for scaffold -i, --input-file string Plugin scaffold input file (default "input.yaml") -o, --output-dir string Output directory for the scaffold (default "./plugins")
An example input file is as follows. Note that the repository name defines the plugin name.
remote_url: https://github.com/gatewayd/test-gatewayd-plugin version: 0.1.0 description: This is test plugin license: MIT authors: - Author 1 <[email protected]>
For more information, please refer to the updated Plugin Developers' Guide in the docs.
-
New security policy: @ChrisD-Git contributed the security policy and guidelines, which should be followed when reporting vulnerabilities.
-
@smnmna99 added OpenTelemetry tracing to the API, which means that almost everything in GatewayD can now be traced using OTLP gRPC.
What's Changed
- Add more tests by @mostafa in #513
- Add more tests by @mostafa in #515
- Update SDK and deps by @mostafa in #520
- Implement plugin scaffold by @zeina1i in #518
- Bump github.com/docker/docker from 23.0.1+incompatible to 24.0.9+incompatible by @dependabot in #521
- Bump github.com/go-git/go-git/v5 from 5.5.2 to 5.11.0 by @dependabot in #522
- Bump github.com/docker/distribution from 2.8.1+incompatible to 2.8.2+incompatible by @dependabot in #523
- Create SECURITY.md by @ChrisD-Git in #524
- Update deps by @mostafa in #527
- Add tracing to the API by @smnmna99 in #517
- Add
gatewayd plugin scaffold
CLI docs by @mostafa in #528 - Update deps by @mostafa in #532
New Contributors
- @ChrisD-Git made their first contribution in #524
- @smnmna99 made their first contribution in #517
Full Changelog: v0.9.4...v0.9.5
v0.9.4
This is a maintenance release and it contains a lot of fixes and improvements to linting, dependency updates, build process and fixes for issues found during code inspection. The last piece of the puzzle is contributed by @likecodingloveproblems (thank you! 🙏) in #503, where he went through all the code and updated the signature of all the constructor function to receive structs, instead of individual parameters. This helps ensure code quality is on par with the latest best practices in Go ecosystem.
What's Changed
- Lint with shellcheck by @mostafa in #500
- Update dependencies and fix issues by @mostafa in #505
- Improve Makefile by combining all build targets for different platforms into a single target by @mostafa in #507
- Fix issues found during code inspection by @mostafa in #508
- Passing struct to new functions by @likecodingloveproblems in #503
New Contributors
- @likecodingloveproblems made their first contribution in #503
Full Changelog: v0.9.3...v0.9.4
v0.9.3
This release introduces several updates and improvements, marking a collaborative effort among multiple contributors. Key changes in this release include:
- Action timeout: @Hamsajj introduced a timeout for running actions, which helps in preventing actions from hanging indefinitely. This improvement contributes to the reliability of GatewayD by ensuring that actions complete in a timely manner or terminate if they exceed the specified timeout period. There are two timeouts: Act registry timeout and action timeout. Individual actions can override the registry timeout.
- Graceful shutdown for gRPC and HTTP servers: implemented by @zeina1i, this feature introduces a graceful shutdown process for both gRPC and HTTP servers, ensuring that servers terminate their processes smoothly without abrupt interruptions, thereby preventing potential data loss or corruption and also smooth cleaning up of the resources.
- Markdown generation for
gatewayd
command: this enhancement allows for automatic generation of markdown docs from command help texts. - HTTP server bugfixes: this update fixes errors within the HTTP server, enhancing stability and reliability for end-users.
- Dependency updates: the dependency updates ensure GatewayD stays compatible with other packages and secure from vulnerabilities found in older versions of dependencies.
The release is a good example of the collaborative effort of the community, thanks to @Hamsajj and @zeina1i for their contributions.
What's Changed
- Generate markdown from commands' help by @mostafa in #489
- Add graceful shutdown for grpc server and http server by @zeina1i in #490
- Update deps by @mostafa in #495
- Update SDK by @mostafa in #497
- Add timeout for running actions by @Hamsajj in #496
- Fix HTTP Server errors by @mostafa in #498
New Contributors
Full Changelog: v0.9.2...v0.9.3