Skip to content
Draft

v330 #251

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
be14cae
add pointer support to EDF
halturin Feb 10, 2026
161afb7
preserve Behavior name in logger when process registers name
halturin Feb 12, 2026
8c6de25
update README.md
halturin Feb 12, 2026
5f79c98
fix cleanupProcess to terminate routes after registered name and alia…
halturin Feb 13, 2026
5b94204
remove system metrics (metrics.ergo.serivces)
halturin Feb 14, 2026
14c398f
add process lifecycle counters (spawned, spawn failed, terminated) to…
halturin Feb 17, 2026
4a06b58
Merge branch 'v330' of ssh://github.com/ergo-services/ergo into v330
halturin Feb 17, 2026
999ee40
update docs: actor metrics
halturin Feb 17, 2026
c994338
docs: update actors/metrics
halturin Feb 18, 2026
4e1828f
Merge branch 'v330' of ssh://github.com/ergo-services/ergo into v330
halturin Feb 18, 2026
3707e38
fix: correct PortRange logic
halturin Feb 18, 2026
1cae8a3
add mailbox latency measurement (-tags=latency), gen.Node.ProcessRang…
halturin Feb 20, 2026
618f377
update docs
halturin Feb 20, 2026
eeba361
update docs for actors/metrics
halturin Feb 21, 2026
4cdbe5e
sync
halturin Feb 21, 2026
97534a1
update docs for actors/metrics
halturin Feb 21, 2026
b26b795
events. infos. all around them
halturin Feb 23, 2026
b4d06d5
fix message counters
halturin Feb 24, 2026
77bee29
add ProcessInit time measurment (InitTime in ProcessInfo/ProcessShort…
halturin Feb 25, 2026
2de1188
update docs
halturin Feb 25, 2026
5b1ad46
update docs
halturin Feb 25, 2026
0d7b488
add process wakeups counter
halturin Feb 25, 2026
4a23036
update docs
halturin Feb 25, 2026
cf57b31
update docs
halturin Feb 25, 2026
cb4e749
fix event published double-counting: split into EventsPublished (loca…
halturin Feb 25, 2026
93b01d6
add edf.RegisteredTypes edf.LookupType
halturin Feb 27, 2026
c53528e
update docs
halturin Feb 27, 2026
deac46d
update docs
halturin Feb 27, 2026
976794d
add ServerTime to gen.NodeInfo
halturin Feb 27, 2026
2787915
update docs
halturin Feb 27, 2026
2875a5e
add log messaging metrics
halturin Feb 28, 2026
2308eb3
update docs
halturin Mar 2, 2026
7dea6c0
fix simultaneous connect dead loop
halturin Mar 3, 2026
f8efcaa
update README.md
halturin Mar 3, 2026
6355d19
add async acceptor handling + handshake/connection churn metrics
halturin Mar 3, 2026
b8709d7
update docs
halturin Mar 3, 2026
83fdba3
update docs
halturin Mar 3, 2026
73f9929
update docs
halturin Mar 4, 2026
c2bd989
fix connection pool: handle flusher errors
halturin Mar 5, 2026
9307bb3
add gen.RemoteNodeInfo.Reconnections - total number of pool item reco…
halturin Mar 5, 2026
909f6f1
update docs
halturin Mar 5, 2026
3ae17bf
update docs
halturin Mar 5, 2026
02f1fcc
update docs
halturin Mar 5, 2026
0084528
update docs
halturin Mar 6, 2026
2294795
add SoftwareKeepalive feature
halturin Mar 9, 2026
b9ff660
add fragmentation feature
halturin Mar 10, 2026
ce01d2e
fix msg/bytes counters for fragmented messages
halturin Mar 10, 2026
c2d8d82
update README.md
halturin Mar 10, 2026
83254b3
add compression metrics
halturin Mar 10, 2026
1c6bb55
update docs
halturin Mar 11, 2026
402f61f
sync
halturin Mar 17, 2026
d6ca1bb
sync
halturin Mar 17, 2026
0565f71
opt tm
halturin Mar 17, 2026
3bf2bac
improve tm
halturin Mar 18, 2026
91cf858
fixes
halturin Mar 18, 2026
90d307d
improve system app
halturin Mar 19, 2026
53a6609
improve system app
halturin Mar 19, 2026
2a611af
add state time to process
halturin Mar 19, 2026
b4d42bc
update README.md
halturin Mar 19, 2026
0927a38
update README.md
halturin Mar 19, 2026
c2bb5f0
update README.md
halturin Mar 19, 2026
743dba9
sync
halturin Mar 23, 2026
9d5d1f1
sync
halturin Mar 23, 2026
c9b971a
sync
halturin Mar 23, 2026
0be2846
sync
halturin Mar 23, 2026
aae9728
tracing prep: add clockskew measurment
halturin Mar 25, 2026
c858e85
tracing prep: add network flag
halturin Mar 25, 2026
a10314a
sync
halturin Mar 27, 2026
3966e84
sync
halturin Mar 27, 2026
bc1713e
sync
halturin Mar 27, 2026
b105ef0
sync
halturin Mar 27, 2026
109a1d3
sync
halturin Mar 27, 2026
3723754
sync
halturin Mar 27, 2026
fa73154
sync
halturin Mar 27, 2026
a1cc5d5
sync
halturin Mar 29, 2026
779a287
sync
halturin Mar 29, 2026
57de550
Tracing (#256)
halturin Apr 3, 2026
267a89b
sync
halturin Apr 3, 2026
393c671
sync
halturin Apr 3, 2026
6d42ea4
Merge branch 'v330' of ssh://github.com/ergo-services/ergo into v330
halturin Apr 3, 2026
c3f5bc6
sync
halturin Apr 3, 2026
69d16fb
sync
halturin Apr 3, 2026
2ed99bc
sync
halturin Apr 3, 2026
cbee7cd
sync
halturin Apr 3, 2026
84efaf8
sync
halturin Apr 3, 2026
5d19886
sync
halturin Apr 3, 2026
63a97e4
sync
halturin Apr 3, 2026
d9b7fa1
sync
halturin Apr 3, 2026
8bbd4ed
sync
halturin Apr 4, 2026
97a8cb6
sync
halturin Apr 4, 2026
d6c90a5
sync
halturin Apr 4, 2026
b7827bd
sync
halturin Apr 4, 2026
2ff6068
sync
halturin Apr 4, 2026
af3059f
sync
halturin Apr 4, 2026
fab7b87
sync
halturin Apr 5, 2026
7ae782d
sync
halturin Apr 5, 2026
e9ca1f3
sync
halturin Apr 5, 2026
cdfad48
sync
halturin Apr 17, 2026
df93c60
fix(edf): use offset instead of stale slice for MarshalEDF length pre…
JeroenSoeters Apr 20, 2026
9957265
update README.md
halturin Apr 20, 2026
a549795
open event support
halturin Apr 20, 2026
53d51ba
open event support
halturin Apr 20, 2026
0d1c032
update README.md
halturin Apr 21, 2026
dcf7210
FAQ in docs
halturin Apr 21, 2026
3ba6ad0
AI-agents in docs
halturin Apr 21, 2026
15adddf
AI-agents in docs
halturin Apr 21, 2026
7616518
update README.md and docs/faq.md
halturin Apr 22, 2026
ffbaa64
docs fixes
halturin Apr 22, 2026
e5bd169
sync
halturin Apr 25, 2026
e111475
sync
halturin Apr 25, 2026
e0ba1ed
sync
halturin Apr 26, 2026
9258c2d
sync
halturin Apr 27, 2026
0def1a0
sync
halturin Apr 30, 2026
94d5a52
sync
halturin Apr 30, 2026
a2ae646
sync
halturin Apr 30, 2026
f7b46b2
sync
halturin May 4, 2026
c936686
sync
halturin May 4, 2026
6eac72d
sync
halturin May 4, 2026
3ac06e6
sync
halturin May 4, 2026
0832d32
sync
halturin May 4, 2026
1c03bb4
sync
halturin May 4, 2026
8f12959
sync
halturin May 5, 2026
9d5fe8b
sync
halturin May 5, 2026
e69de04
sync
halturin May 5, 2026
66331bb
sync
halturin May 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .github/images/benchmark_ping.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
81 changes: 81 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,87 @@ All notable changes to this project will be documented in this file.
This format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

#### [v3.3.0](https://github.com/ergo-services/ergo/releases/tag/v1.999.330) 2026-xx-xx [tag version v1.999.330] ####

* Added **pointer type support** in EDF - `*int`, `*string`, `[]*T`, `map[K]*V`, pointer struct fields. Nil state preserved. Nested pointers (`**T`) not supported. Max encoding depth limit (100) prevents stack overflow on deeply nested structures. See [Network Transparency](https://docs.ergo.services/networking/network-transparency) documentation
* Fixed logger to preserve Behavior name when process registers name
* Added **process lifecycle counters** to `gen.NodeInfo` - `ProcessesSpawned`, `ProcessesSpawnFailed`, `ProcessesTerminated` for cumulative statistics
* Added **mailbox latency measurement** (build with `-tags=latency`). `QueueMPSC.Latency()` returns the age of the oldest message in the queue (nanoseconds), -1 if disabled. `ProcessMailbox.Latency()` returns the max across all four queues. Added `MailboxLatency` field to `ProcessShortInfo` and latency fields to `MailboxQueues` in `ProcessInfo`. See [Debugging](https://docs.ergo.services/advanced/debugging) documentation
* Added **`Node.ProcessRangeShortInfo`** for efficient callback-based iteration over all processes with their current state. See [Metrics actor](https://docs.ergo.services/extra-library/actors/metrics) for Prometheus integration
* Added **per-event metrics** - `EventInfo` now includes `MessagesPublished`, `MessagesLocalSent`, `MessagesRemoteSent` counters. Added `Node.EventInfo` and `Node.EventRangeInfo` for querying event statistics. Added `EventsPublished`, `EventsReceived`, `EventsLocalSent`, `EventsRemoteSent` to `NodeInfo`. `EventsPublished` counts only local producer publishes, `EventsReceived` counts events arriving from remote nodes
* Added **process init time measurement** - `InitTime` field in `ProcessShortInfo` and `ProcessInfo` records the time spent in `ProcessInit` callback (nanoseconds)
* Fixed **message counters for meta processes** - meta process traffic now propagates to parent process counters, making `ProcessRangeShortInfo` aggregates balanced
* Fixed **self-send message counter** - `messagesOut` now incremented for self-sends
* Fixed **simultaneous connect dead loop** - two nodes dialing each other at the same time no longer cause infinite retry loops. Deterministic connection IDs and Erlang-style collision detection (`EnableSimultaneousConnect` flag) ensure exactly one connection per pair. Fixed related connection leaks
* Fixed **silent data loss on connection pool write failure** - a transient write error could permanently break a pool item's write path without detection, causing all subsequent messages to be silently dropped while the connection appeared healthy
* Added **software keepalive** for inter-node connections. Application-level heartbeat detects silent failures that TCP keepalive cannot: stuck processes, broken flushers, goroutine starvation. Each side advertises its period during handshake (8 bits in `NetworkFlags`); receiver uses peer's period for timeout. Enabled by default (15s period, 3 misses, 45s timeout). Configure via `NetworkFlags.EnableSoftwareKeepAlive` and `NetworkOptions.SoftwareKeepAliveMisses`. See [Network Stack](https://docs.ergo.services/networking/network-stack#software-keepalive) documentation
* Added **handshake deadline** (5s) to prevent hung handshakes from blocking connection goroutines indefinitely
* Added **message fragmentation** for large messages. Messages exceeding the fragment size (default 65000 bytes) are automatically split for transmission and reassembled on the receiving side. Works with compression, important delivery, and all message types. With `KeepNetworkOrder` disabled, fragments are distributed across all TCP connections in the pool for maximum throughput. Both nodes must enable `EnableFragmentation` flag (enabled by default). Configure via `NetworkOptions.FragmentSize`, `FragmentTimeout`, `MaxFragmentAssemblies`. See [Network Stack](https://docs.ergo.services/networking/network-stack#message-fragmentation) documentation
* Fixed **important delivery use-after-release** - reference ID for acknowledgment was read from buffer after it was returned to the pool, causing corrupted ACK responses under load. Affected `SendImportant` for PID, ProcessID, and Alias targets

#### [v3.2.0](https://github.com/ergo-services/ergo/releases/tag/v1.999.320) 2026-02-04 [tag version v1.999.320] ####

* Introduced **mTLS support** - new `gen.CertAuthManager` interface for mutual TLS with CA pool management (`ClientCAs`, `RootCAs`, `ClientAuth`, `ServerName`). See [Mutual TLS](https://docs.ergo.services/networking/mutual-tls) documentation
* Introduced **NAT support** - new `RouteHost` and `RoutePort` options in `gen.AcceptorOptions` for nodes behind NAT or load balancers. See [Behind the NAT](https://docs.ergo.services/networking/behind-the-nat) documentation
* Introduced **spawn time control** - `InitTimeout` option in `gen.ProcessOptions` limits `ProcessInit` duration for both local and remote spawn. Remote spawn and application processes limited to max 15 seconds. See [Process](https://docs.ergo.services/basics/process) documentation
* Introduced **zip-bomb protection** - decompression size limits to prevent memory exhaustion attacks
* Added `gen.Ref` methods for request timeout tracking. See [Generic Types](https://docs.ergo.services/basics/generic-types#gen.ref):
- `Deadline` - returns deadline timestamp stored in reference
- `IsAlive` - checks if reference is still valid (deadline not exceeded)
* Added `gen.Node` methods. See [Node](https://docs.ergo.services/basics/node) documentation:
- `ProcessPID` / `ProcessName` - resolve process PID by name and vice versa
- `Call`, `CallWithTimeout`, `CallWithPriority`, `CallImportant`, `CallPID`, `CallProcessID`, `CallAlias` - synchronous requests from Node interface
- `Inspect` / `InspectMeta` - inspect processes and meta processes
- `MakeRefWithDeadline` - create reference with embedded deadline
* Added `gen.RemoteNode.ApplicationInfo` - query application information from remote nodes. See [Remote Start Application](https://docs.ergo.services/networking/remote-start-application) documentation
* Added `gen.Process` methods. See [Process](https://docs.ergo.services/basics/process) documentation:
- `SendWithPriorityAfter` - delayed send with priority
- `SendExitAfter` / `SendExitMetaAfter` - delayed exit signals
- `SendResponseImportant` / `SendResponseErrorImportant` - important delivery for responses
* Added `gen.Meta` methods. See [Meta Process](https://docs.ergo.services/basics/meta-process) documentation:
- `SendResponse` / `SendResponseError` - respond to requests from meta process
- `SendPriority` / `SetSendPriority` - message priority control
- `Compression` / `SetCompression` - compression settings
- `EnvDefault` - get environment variable with default value
* Added `gen.ApplicationSpec` / `gen.ApplicationInfo` fields:
- `Tags` - labels for instance selection (blue/green, canary, maintenance). See [Tags for Instance Selection](https://docs.ergo.services/basics/application#tags-for-instance-selection)
- `Map` - logical role to process name mapping. See [Process Role Mapping](https://docs.ergo.services/basics/application#process-role-mapping)
* Added **HandleInspect** implementations for all supervisor types (OFO, ARFO, SOFO)
* Fixed **LinkChild** in `RemoteNode.Spawn` / `RemoteNode.SpawnRegister`
* Fixed **args persistence** for Simple One For One supervisor - child processes now restart with their original spawn arguments
* Fixed **critical bug**: terminate signals (Link/Monitor exits) were incorrectly rejected due to wrong incarnation validation in network layer. Thanks to [@qjpcpu](https://github.com/qjpcpu) for reporting [#248](https://github.com/ergo-services/ergo/issues/248)
* Completely reworked internal **Target Manager** (`node/tm/`) - improved architecture for process, event, and node target management with comprehensive test coverage
* Completely reworked internal **Pub/Sub** mechanism - improved reliability and performance
* Improved **ProcessInit state** - more `gen.Process` methods now available during initialization:
- `Link*`, `Unlink*`, `Monitor*`, `Demonitor*`
- `Call*`, `Inspect`, `InspectMeta`
- `RegisterName`, `UnregisterName`, `RegisterEvent`, `UnregisterEvent`
- `SendResponse*`, `SendResponseError*`
- `CreateAlias`, `DeleteAlias`
* Introduced **shutdown timeout** - `ShutdownTimeout` option in `gen.NodeOptions` (default 3 minutes). During graceful shutdown, pending processes are logged every 5 seconds with state and queue info. After timeout, node force exits with error code 1. See [Node](https://docs.ergo.services/basics/node) documentation
* Added **pprof labels** for actor and meta process goroutines (with `--tags pprof`) - each process goroutine is labeled with its PID, each meta process with its Alias, making it easy to identify stuck processes in pprof output
* Improved API documentation - comprehensive godoc comments for all public interfaces
* **Documentation rewritten** - complete documentation now included in the repository (`docs/`) and available at [docs.ergo.services](https://docs.ergo.services)
* New documentation articles:
- [Project Structure](https://docs.ergo.services/basics/project-structure) - organizing projects with message isolation levels, deployment patterns, and evolution strategies
- [Building a Cluster](https://docs.ergo.services/advanced/building-a-cluster) - step-by-step guide to distributed systems with service discovery, load balancing, and failover
- [Message Versioning](https://docs.ergo.services/advanced/message-versioning) - evolving message contracts in distributed clusters with explicit versioning strategies
- [Handle Sync](https://docs.ergo.services/advanced/handle-sync) - synchronous message handling patterns
- [Important Delivery](https://docs.ergo.services/advanced/important-delivery) - guaranteed delivery mechanism
- [Pub/Sub Internals](https://docs.ergo.services/advanced/pub-sub-internals) - event system architecture
- [Debugging](https://docs.ergo.services/advanced/debugging) - build tags, pprof integration, troubleshooting stuck processes

* **Extra Library - Actors** (https://github.com/ergo-services/actor):
- Introduced **Leader** actor - distributed leader election with Raft-inspired consensus algorithm. Features: term-based disambiguation, automatic failover, split-brain prevention through majority quorum, dynamic peer discovery. See [documentation](https://docs.ergo.services/extra-library/actors/leader)
- Introduced **Metrics** actor - Prometheus metrics exporter that collects node/network telemetry via HTTP endpoint. Features: automatic collection of node metrics (uptime, processes, memory), network metrics per remote node, extensible for custom metrics. See [documentation](https://docs.ergo.services/extra-library/actors/metrics)

* **Extra Library - Meta Processes** (https://github.com/ergo-services/meta):
- Introduced **SSE** (Server-Sent Events) meta-process - unidirectional server-to-client streaming over HTTP. Features: server handler for accepting connections, client connection for external SSE endpoints, full SSE spec support (event types, IDs, retry hints, multi-line data), process pool with round-robin load balancing, Last-Event-ID for reconnection. See [documentation](https://docs.ergo.services/extra-library/meta-processes/sse)

* **Benchmarks** (https://github.com/ergo-services/benchmarks):
- Introduced **Distributed Pub/Sub** benchmark - demonstrates event delivery to 1,000,000 subscribers across 10 nodes. Achieves 2.9M msg/sec delivery rate with only 10 network messages (one per consumer node) instead of 1M


#### [v3.1.0](https://github.com/ergo-services/ergo/releases/tag/v1.999.310) 2025-09-04 [tag version v1.999.310] ####

**New Features**
Expand Down
Loading