fatedier
|
c7ac12ea0f
|
server/group: refactor with shared abstractions and fix concurrency issues (#5222)
* server/group: refactor group package with shared abstractions and fix concurrency issues
Extract common patterns into reusable components:
- groupRegistry[G]: generic concurrent map for group lifecycle management
- baseGroup: shared plumbing for listener-based groups (TCP, HTTPS, TCPMux)
- Listener: unified virtual listener replacing 3 identical implementations
Fix concurrency issues:
- Stale-pointer race: isCurrent check + errGroupStale + controller retry loops
- Worker generation safety: pass realLn and acceptCh as params instead of reading mutable fields
- Connection leak: close conn on worker panic recovery path
- ABBA deadlock in HTTP UnRegister: consistent lock ordering (group.mu -> registry.mu)
- Round-robin overflow in HTTPGroup: use unsigned modulo
Add unit tests (17 tests) for registry, listener, and baseGroup.
Add TCPMux group load balancing e2e test.
* server/group: replace tautological assertion with require.NotPanics
* server/group: remove blank line between doc comment and type declaration
|
2026-03-08 18:57:21 +08:00 |
|
fatedier
|
46ff40543a
|
update github actions (#3538)
|
2023-07-21 10:30:46 +08:00 |
|
fatedier
|
cf66ca10b4
|
improve http group load balancing (#3131)
|
2022-10-19 12:14:35 +08:00 |
|
fatedier
|
9d077b02cf
|
lint by golangci-lint (#3080)
|
2022-08-29 01:02:53 +08:00 |
|
fatedier
|
4af85da0c2
|
type http/tcpmux proxy support route_by_http_user, tcpmux support passthourgh mode (#2932)
|
2022-05-26 23:57:30 +08:00 |
|
fatedier
|
3fbdea0f6b
|
rename models to pkg (#2005)
|
2020-09-23 13:49:14 +08:00 |
|
fatedier
|
8b75b8b837
|
fix by golint (#1822)
|
2020-05-24 17:48:37 +08:00 |
|
fatedier
|
649f47c345
|
change log method
|
2019-10-12 20:13:12 +08:00 |
|
fatedier
|
b3ed863021
|
support http load balancing
|
2019-07-31 00:41:58 +08:00 |
|