Commit Graph
13 Commits
Author SHA1 Message Date
David Boslee 0f7762c41b Fix agent mesh integration test (#13954)
By using a randomized load balancer we improve the chances of an agent
connecting to all proxy servers within the given time period.
2022-07-05 16:01:03 +00:00
Edoardo Spadolini 9d91466a0e Proxy restart fixes (#11802)
* Remove unused backend wrapper from Cache

* Remove double printShutdownStatus

* Fix readyz race condition

* Test coverage for the readyz.monitor fix

* Close listeners immediately in proxy.shutdown

* Use and handle net.ErrClosed correctly

This adapts utils.IsUseOfClosedNetworkError to check for net.ErrClosed
even inside trace.Aggregate errors, makes it so that we always return
something that would pass errors.Is(err, net.ErrClosed) when returning
from a (net.Listener).Accept(), and handles closed listeners within our
various Serve() loops so that we don't hit spurious backoff waits while
shutting down.

* Close listeners early and emitters late

* Test coverage for the proxy listener changes

* Revert some errors back to trace.ConnectionProblem

* Reduce PR scope to just the proxy, add comments

* Improve error logging.
2022-05-06 18:12:11 +02:00
Trent Clarke deaf88d587 Fix race condition in LoadBalancer (#8608)
Prior to this patch, the `LoadBalancer` method `nextBackend()` returned
a pointer to an element of the `LoadBalancer`'s `backends` slice.

It is possible for the element referenced by that pointer to be overwritten
during backend removal (see loadbalancer.go:120). Even though the backend
removal itself is carried out under a lock, it is possible for code
dereferencing a pointer returned by `nextBackend() to get an unexpectedly
modified value.

This patch changes `nextBackend()` to return by value, severing the link
between the returned value and the backing store.
2021-10-15 09:31:21 +11:00
Andrew Lytvynov ac9ba539ce Use cmp.Equal instead of manual Equals methods (#5828)
* Use cmp.Equal instead of manual Equals methods

Equals methods can get out-of-sync with the fields added in structs they
compare. Using `cmp.Equal` handles that, removes a ton of code and makes
it more explicit when specific fields are excluded from comparison.

* Use gogoproto equal plugin for comparing proto values

This will be faster than reflect-based go-cmp.
2021-05-06 11:47:31 -07:00
Andrew Lytvynov d5c26cc1d7 Auto-assign ports in utils.LoadBalancer tests
Expose the listening address via new Addr() method.
2020-05-21 20:38:37 +00:00
Andrew Lytvynov b1eae4ac4c Remove unused functions and methods throughout lib/...
This code is not caught by linters because it's exported and they assume
there's some external users.
Since teleport is relatively self-contained, we can tell for sure
whether something is called or not.
2020-05-06 00:02:53 +00:00
Forrest Marshall 4e9eed9ac0 cache event fanout & reversetunnel improvements
- cache now perforams in-memory fanout of events, eliminating
spurious event generation due to cache init/reset.

- removed old unused logic from reversetunnel agents.

- replaced seekpool with simpler ttl-cache and semaphore-like
lease system.

- add jittered backoff to agent connection attempts to
reduce "thundering herd" effect.

- improved reversetunnel logging.

- improved LB usage in tests.
2020-04-23 14:03:52 -07:00
Sasha Klizhentas 743ea57f87 Refactor discovery protocol.
This commit refactor discovery protocol
to make it less dependent on the database and
scale better on large numbers of tunnels.

Reverse tunnel is now always sending
back the list of all proxies registered in the
cluster in the form of discovery requests.

Before this commit, reverse tunnel server was comparing
existing TunnelConnection with the Proxies
and sending back the list of proxies that were not
discovered.

This required nodes to register tunnel connections
in the database and servers poll the connections.

On 10K clusters this is not scalable. Instead,
the change assumes that there is not a lot of
proxies so it's OK to send the information about
them back to all connected agents.

Agent pools can make up their own mind about what to
do with the information - they can ignore
the request as long as they observe all agents
connected to the requested proxies.

At the same time, to avoid using too much traffic,
reverse tunnel server only sends the discovery requests
after the first agent heartbeat and in case if
proxy list changes. To make it possible reverse tunnel
sets up a watch on the proxies.
2019-05-14 11:26:45 -07:00
Sasha Klizhentas 315ba11654 fixes issue with race on closed listener 2017-11-17 18:30:02 -08:00
Sasha Klizhentas 0938ce2dfb fix typo 2017-10-16 09:38:06 -07:00
Sasha Klizhentas e461b4e6bd fix tests 2017-10-12 16:51:18 -07:00
Sasha Klizhentas 0290cccb57 integration tests for proxies 2017-10-12 10:35:46 -07:00
Sasha Klizhentas 35e380ac9c add TCP load balancer to use in tests 2017-10-11 15:31:19 -07:00