You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/ipn/ipnlocal
Joe Tsai 3f27087e9d
taildrop: switch hashing to be streaming based (#9861)
While the previous logic was correct, it did not perform well.
Resuming is a dance between the client and server, where
1. the client requests hashes for a partial file,
2. the server then computes those hashes,
3. the client computes hashes locally and compares them.
4. goto 1 while the partial file still has data

While step 2 is running, the client is sitting idle.
While step 3 is running, the server is sitting idle.

By streaming over the block hash immediately after the server
computes it, the client can start checking the hash,
while the server works on the next hash (in a pipelined manner).
This performs dramatically better and also uses less memory
as we don't need to hold a list of hashes, but only need to
handle one hash at a time.

There are two detriments to this approach:
* The HTTP API relies on a JSON stream,
  which is not a standard REST-like pattern.
  However, since we implement both client and server,
  this is fine.
* While the stream is on-going, we hold an open file handle
  on the server side while the file is being hashed.
  On really slow streams, this could hold a file open forever.

Updates tailscale/corp#14772

Signed-off-by: Joe Tsai <joetsai@digital-static.net>
Co-authored-by: Rhea Ghosh <rhea@tailscale.com>
1 year ago
..
testdata ipn/ipnlocal: fix the path for writing cert files (#7203) 2 years ago
breaktcp_darwin.go cmd/tailscale: add debug commands to break connections 1 year ago
breaktcp_linux.go cmd/tailscale: add debug commands to break connections 1 year ago
c2n.go clientupdate: fix background install for linux tarballs (#9852) 1 year ago
c2n_pprof.go tailcfg: move LogHeapPprof from Debug to c2n [capver 69] 1 year ago
cert.go ipn/ipnlocal: do unexpired cert renewals in the background 1 year ago
cert_js.go ipn/ipnlocal: do unexpired cert renewals in the background 1 year ago
cert_test.go all: use Go 1.21 slices, maps instead of x/exp/{slices,maps} 1 year ago
dnsconfig_test.go types/netmap: remove NetworkMap.{Addresses,MachineStatus} 1 year ago
expiry.go types/netmap, all: make NetworkMap.SelfNode a tailcfg.NodeView 1 year ago
expiry_test.go types/netmap, all: make NetworkMap.SelfNode a tailcfg.NodeView 1 year ago
local.go taildrop: implement asynchronous file deletion (#9844) 1 year ago
local_test.go ipn/ipnlocal: plumb ExitNodeDNSResolvers for IsWireGuardOnly exit nodes 1 year ago
loglines_test.go tsd: add package with System type to unify subsystem init, discovery 2 years ago
network-lock.go ipn/ipnlocal: add tailnet MagicDNS name to ipn.LoginProfile 1 year ago
network-lock_test.go ipn/ipnlocal: add tailnet MagicDNS name to ipn.LoginProfile 1 year ago
peerapi.go taildrop: switch hashing to be streaming based (#9861) 1 year ago
peerapi_h2c.go all: update copyright and license headers 2 years ago
peerapi_macios_ext.go all: update copyright and license headers 2 years ago
peerapi_test.go taildrop: implement asynchronous file deletion (#9844) 1 year ago
profiles.go winutil: refactor methods to get values from registry to also return (#9536) 1 year ago
profiles_notwindows.go ipn/ipnlocal: fix profile duplication 1 year ago
profiles_test.go ipn/ipnlocal: add tailnet MagicDNS name to ipn.LoginProfile 1 year ago
profiles_windows.go ipn/ipnlocal: add more logging during profile migration 2 years ago
serve.go ipn/ipnlocal: do unexpired cert renewals in the background 1 year ago
serve_test.go ipn/ipnlocal: close foreground sessions on SetServeConfig 1 year ago
ssh.go all: use Go 1.21 slices, maps instead of x/exp/{slices,maps} 1 year ago
ssh_stub.go all: update copyright and license headers 2 years ago
ssh_test.go ipn/ipnlocal: drop not required StateKey parameter 2 years ago
state_test.go ipn/ipnlocal: add tailnet MagicDNS name to ipn.LoginProfile 1 year ago