commit 7bb80d0dbf01521833e55e38b2185c6913aa4678
Author: Victor Lowther <victor.lowther@gmail.com>
Date: Wed Aug 12 12:49:36 2020 -0500
fix(transact): Rework deadlock avoidance and unblocking.
This reworks the transact system to track deadlocks and runnability
in terms of other transactions instead of objects, which simplifies
that code and makes it easier to reason about.
M transact/tx.go
M transact/tx_test.go
commit b60b0b91a37f7e21546510a949be530c094db9a1
Author: Victor Lowther <victor.lowther@gmail.com>
Date: Tue Aug 11 09:48:17 2020 -0500
fix(dhcp): Fix probable sources of DHCP corruption
First, coalesce all DHCP packet handling into a single transaction per packet.
This will make the retgry logic properly attempt to start handling the DHCP
request from the start when we need to.
Second, stop using a buffer pool for DHCP handling.
Based on the weird lease patterns, I suspect that there has been some
unchecked memory reuse caused by trying to pool the per-request byte
buffers under high request pressure. Switch back to relying on garbage
collection to keep everything sane.
Third, check for changed interfaces every 5 seconds.
We were checking the interface map on the machine with every DHCP request,
which on systems handling a heavy DHCO load would eat a lot of CPU and memory.
This refactors things to only check for available interface changes every
5 seconds.
Stress tested with
$ perfdhcp -4 -R300 -l virt -L 5432 -r 1000 -t 5 -a 100
on a subnet that only has space for 200 addresses, no apparent address
corruption or wandering leases.
M backend/dhcpUtils.go
M backend/dhcpUtils_test.go
A cmds/h2ip/h2ip.go
M midlayer/abp.go
M midlayer/dhcp.go
M midlayer/fake_midlayer_server_test.go
M midlayer/pxe.go
commit 6fdb5eb1da410e9bfd4ed7f58e20dc55858a2827
Author: Victor Lowther <victor.lowther@gmail.com>
Date: Thu Jul 30 12:47:07 2020 -0500
fix(dhcp): Simplify lease address allocation codepaths.
This gets rid of a significant amount of duplicated code in the lease
address allocation codepath that has snuck in, and pulls most of the
lease validity checking that happens as part of DISCOVER handling
into a single transaction.
M backend/dhcpUtils.go
M backend/dhcpUtils_test.go
M backend/lease.go
M backend/requestTracker.go
M backend/subnet.go
M midlayer/00_aone_test.go
M midlayer/common_test.go
M midlayer/dhcp-tests/0000-basic-ipxe-discover/0000.logs-expect
M midlayer/dhcp-tests/0000-basic-pxe-discover/0000.logs-expect
M midlayer/dhcp-tests/0000-basic-uefi-discover/0000.logs-expect
M midlayer/dhcp-tests/0001-test-lease-wraparound/0000.logs-expect
M midlayer/dhcp-tests/0001-test-lease-wraparound/0001.logs-expect
M midlayer/dhcp-tests/0001-test-lease-wraparound/0002.logs-expect
M midlayer/dhcp-tests/0001-test-lease-wraparound/0003.logs-expect
M midlayer/dhcp-tests/0001-test-lease-wraparound/0004.logs-expect
M midlayer/dhcp-tests/0001-test-lease-wraparound/0005.logs-expect
M midlayer/dhcp-tests/0001-test-lease-wraparound/0006.logs-expect
M midlayer/dhcp-tests/0001-test-lease-wraparound/0015.logs-expect
M midlayer/dhcp-tests/0003-ipxe-uefi-discover/0000.logs-expect
M midlayer/dhcp-tests/0004-option82-reflection/0000.logs-expect
M midlayer/dhcp-tests/0004-option82-reflection/0001.logs-expect
M midlayer/dhcp-tests/0004-option82-reflection/0002.logs-expect
M midlayer/dhcp-tests/0004-option82-reflection/0003.logs-expect
M midlayer/dhcp-tests/0004-option82-reflection/0004.logs-expect
M midlayer/dhcp-tests/0004-option82-reflection/0005.logs-expect
M midlayer/dhcp.go
A midlayer/dhcp_scale_test.go
M transact/tx.go
End of Note