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