Move slice allocations in connection manager monitor loop (#340)

* Move slice allocations in connection manager monitor loop

* move further out

Co-authored-by: Miran Park <mpark@slack-corp.com>
This commit is contained in:
mhp 2020-11-19 15:44:05 -08:00 committed by GitHub
parent 384b1166ea
commit 672ce1f0a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 11 deletions

View File

@ -141,14 +141,17 @@ func (n *connectionManager) Start() {
func (n *connectionManager) Run() { func (n *connectionManager) Run() {
clockSource := time.Tick(500 * time.Millisecond) clockSource := time.Tick(500 * time.Millisecond)
p := []byte("")
nb := make([]byte, 12, 12)
out := make([]byte, mtu)
for now := range clockSource { for now := range clockSource {
n.HandleMonitorTick(now) n.HandleMonitorTick(now, p, nb, out)
n.HandleDeletionTick(now) n.HandleDeletionTick(now)
} }
} }
func (n *connectionManager) HandleMonitorTick(now time.Time) { func (n *connectionManager) HandleMonitorTick(now time.Time, p, nb, out []byte) {
n.TrafficTimer.advance(now) n.TrafficTimer.advance(now)
for { for {
ep := n.TrafficTimer.Purge() ep := n.TrafficTimer.Purge()
@ -188,7 +191,7 @@ func (n *connectionManager) HandleMonitorTick(now time.Time) {
if hostinfo != nil && hostinfo.ConnectionState != nil { if hostinfo != nil && hostinfo.ConnectionState != nil {
// Send a test packet to trigger an authenticated tunnel test, this should suss out any lingering tunnel issues // Send a test packet to trigger an authenticated tunnel test, this should suss out any lingering tunnel issues
n.intf.SendMessageToVpnIp(test, testRequest, vpnIP, []byte(""), make([]byte, 12, 12), make([]byte, mtu)) n.intf.SendMessageToVpnIp(test, testRequest, vpnIP, p, nb, out)
} else { } else {
hostinfo.logger().Debugf("Hostinfo sadness: %s", IntIp(vpnIP)) hostinfo.logger().Debugf("Hostinfo sadness: %s", IntIp(vpnIP))

View File

@ -42,7 +42,10 @@ func Test_NewConnectionManagerTest(t *testing.T) {
// Create manager // Create manager
nc := newConnectionManager(ifce, 5, 10) nc := newConnectionManager(ifce, 5, 10)
nc.HandleMonitorTick(now) p := []byte("")
nb := make([]byte, 12, 12)
out := make([]byte, mtu)
nc.HandleMonitorTick(now, p, nb, out)
// Add an ip we have established a connection w/ to hostmap // Add an ip we have established a connection w/ to hostmap
hostinfo := nc.hostMap.AddVpnIP(vpnIP) hostinfo := nc.hostMap.AddVpnIP(vpnIP)
hostinfo.ConnectionState = &ConnectionState{ hostinfo.ConnectionState = &ConnectionState{
@ -57,18 +60,18 @@ func Test_NewConnectionManagerTest(t *testing.T) {
assert.Contains(t, nc.hostMap.Hosts, vpnIP) assert.Contains(t, nc.hostMap.Hosts, vpnIP)
// Move ahead 5s. Nothing should happen // Move ahead 5s. Nothing should happen
next_tick := now.Add(5 * time.Second) next_tick := now.Add(5 * time.Second)
nc.HandleMonitorTick(next_tick) nc.HandleMonitorTick(next_tick, p, nb, out)
nc.HandleDeletionTick(next_tick) nc.HandleDeletionTick(next_tick)
// Move ahead 6s. We haven't heard back // Move ahead 6s. We haven't heard back
next_tick = now.Add(6 * time.Second) next_tick = now.Add(6 * time.Second)
nc.HandleMonitorTick(next_tick) nc.HandleMonitorTick(next_tick, p, nb, out)
nc.HandleDeletionTick(next_tick) nc.HandleDeletionTick(next_tick)
// This host should now be up for deletion // This host should now be up for deletion
assert.Contains(t, nc.pendingDeletion, vpnIP) assert.Contains(t, nc.pendingDeletion, vpnIP)
assert.Contains(t, nc.hostMap.Hosts, vpnIP) assert.Contains(t, nc.hostMap.Hosts, vpnIP)
// Move ahead some more // Move ahead some more
next_tick = now.Add(45 * time.Second) next_tick = now.Add(45 * time.Second)
nc.HandleMonitorTick(next_tick) nc.HandleMonitorTick(next_tick, p, nb, out)
nc.HandleDeletionTick(next_tick) nc.HandleDeletionTick(next_tick)
// The host should be evicted // The host should be evicted
assert.NotContains(t, nc.pendingDeletion, vpnIP) assert.NotContains(t, nc.pendingDeletion, vpnIP)
@ -105,7 +108,10 @@ func Test_NewConnectionManagerTest2(t *testing.T) {
// Create manager // Create manager
nc := newConnectionManager(ifce, 5, 10) nc := newConnectionManager(ifce, 5, 10)
nc.HandleMonitorTick(now) p := []byte("")
nb := make([]byte, 12, 12)
out := make([]byte, mtu)
nc.HandleMonitorTick(now, p, nb, out)
// Add an ip we have established a connection w/ to hostmap // Add an ip we have established a connection w/ to hostmap
hostinfo := nc.hostMap.AddVpnIP(vpnIP) hostinfo := nc.hostMap.AddVpnIP(vpnIP)
hostinfo.ConnectionState = &ConnectionState{ hostinfo.ConnectionState = &ConnectionState{
@ -120,11 +126,11 @@ func Test_NewConnectionManagerTest2(t *testing.T) {
assert.Contains(t, nc.hostMap.Hosts, vpnIP) assert.Contains(t, nc.hostMap.Hosts, vpnIP)
// Move ahead 5s. Nothing should happen // Move ahead 5s. Nothing should happen
next_tick := now.Add(5 * time.Second) next_tick := now.Add(5 * time.Second)
nc.HandleMonitorTick(next_tick) nc.HandleMonitorTick(next_tick, p, nb, out)
nc.HandleDeletionTick(next_tick) nc.HandleDeletionTick(next_tick)
// Move ahead 6s. We haven't heard back // Move ahead 6s. We haven't heard back
next_tick = now.Add(6 * time.Second) next_tick = now.Add(6 * time.Second)
nc.HandleMonitorTick(next_tick) nc.HandleMonitorTick(next_tick, p, nb, out)
nc.HandleDeletionTick(next_tick) nc.HandleDeletionTick(next_tick)
// This host should now be up for deletion // This host should now be up for deletion
assert.Contains(t, nc.pendingDeletion, vpnIP) assert.Contains(t, nc.pendingDeletion, vpnIP)
@ -133,7 +139,7 @@ func Test_NewConnectionManagerTest2(t *testing.T) {
nc.In(vpnIP) nc.In(vpnIP)
// Move ahead some more // Move ahead some more
next_tick = now.Add(45 * time.Second) next_tick = now.Add(45 * time.Second)
nc.HandleMonitorTick(next_tick) nc.HandleMonitorTick(next_tick, p, nb, out)
nc.HandleDeletionTick(next_tick) nc.HandleDeletionTick(next_tick)
// The host should be evicted // The host should be evicted
assert.NotContains(t, nc.pendingDeletion, vpnIP) assert.NotContains(t, nc.pendingDeletion, vpnIP)