1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00
moby--moby/daemon
Cory Snider 6d5bc07189 daemon/logger: fix refcounting decompressed files
The refCounter used for sharing temporary decompressed log files and
tracking when the files can be deleted is keyed off the source file's
path. But the path of a log file is not stable: it is renamed on each
rotation. Consequently, when logging is configured with both rotation
and compression, multiple concurrent readers of a container's logs could
read logs out of order, see duplicates or decompress a log file which
has already been decompressed.

Replace refCounter with a new implementation, sharedTempFileConverter,
which is agnostic to the file path, keying off the source file's
identity instead. Additionally, sharedTempFileConverter handles the full
lifecycle of the temporary file, from creation to deletion. This is all
abstracted from the consumer: all the bookkeeping and cleanup is handled
behind the scenes when Close() is called on the returned reader value.
Only one file descriptor is used per temporary file, which is shared by
all readers.

A channel is used for concurrency control so that the lock can be
acquired inside a select statement. While not currently utilized, this
makes it possible to add support for cancellation to
sharedTempFileConverter in the future.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:22 -04:00
..
cluster Merge pull request #43524 from thaJeztah/daemon_fix_hosts_validation_step2 2022-05-13 02:42:40 +02:00
config daemon/config: remove uses of pointers for ints 2022-04-29 09:39:34 +02:00
events
exec
graphdriver overlay2: account for UserNS/userxattr in metacopy test 2022-05-17 06:58:50 -06:00
images daemon/config: remove uses of pointers for ints 2022-04-29 09:39:34 +02:00
initlayer daemon/initlayer: Init(): remove unused stub for Windows 2022-05-11 01:27:47 +02:00
links all: replace strings.Replace with strings.ReplaceAll 2022-05-09 19:45:40 +08:00
listeners
logger daemon/logger: fix refcounting decompressed files 2022-05-19 15:22:22 -04:00
names
network
stats
testdata
apparmor_default.go
apparmor_default_unsupported.go
archive.go
archive_tarcopyoptions.go
archive_tarcopyoptions_unix.go
archive_tarcopyoptions_windows.go
archive_unix.go
archive_windows.go
attach.go Make it explicit raw|multiplexed stream implementation being used 2022-05-12 11:36:31 +02:00
auth.go
changes.go
checkpoint.go
cluster.go
commit.go
configs.go
configs_linux.go
configs_unsupported.go
configs_windows.go
container.go
container_linux.go
container_operations.go
container_operations_unix.go daemon: killWithSignal, killPossiblyDeadProcess: accept syscall.Signal 2022-05-05 00:53:52 +02:00
container_operations_windows.go
container_unix_test.go
container_windows.go
content.go
create.go
create_test.go
create_unix.go
create_windows.go
daemon.go Remove mount spec backport 2022-05-13 23:14:43 +00:00
daemon_linux.go
daemon_linux_test.go
daemon_test.go
daemon_unix.go
daemon_unix_test.go
daemon_unsupported.go
daemon_windows.go
daemon_windows_test.go
debugtrap_unix.go
debugtrap_unsupported.go
debugtrap_windows.go
delete.go
delete_test.go
dependency.go
devices_linux.go
disk_usage.go
errors.go
events.go
events_test.go
exec.go libcontainerd: SignalProcess(): accept syscall.Signal 2022-05-05 00:53:49 +02:00
exec_linux.go
exec_linux_test.go
exec_windows.go
export.go
health.go
health_test.go
id.go daemon: separate daemon ID from trust-key 2022-05-04 20:17:18 +02:00
info.go
info_unix.go
info_unix_test.go
info_windows.go
inspect.go
inspect_linux.go
inspect_test.go
inspect_windows.go
keys.go
keys_unsupported.go
kill.go daemon: fix some minor nits 2022-05-05 11:27:59 +02:00
licensing.go
licensing_test.go
links.go
list.go
list_test.go
list_unix.go
list_windows.go
logdrivers_linux.go
logdrivers_windows.go
logs.go
logs_test.go
metrics.go
metrics_unix.go
metrics_unsupported.go
monitor.go
mounts.go
names.go
network.go
network_windows.go
nvidia_linux.go
oci_linux.go daemon/linux: Set console size on creation 2022-05-19 07:57:27 +02:00
oci_linux_test.go
oci_opts.go daemon/linux: Set console size on creation 2022-05-19 07:57:27 +02:00
oci_utils.go
oci_windows.go
oci_windows_test.go
pause.go
prune.go
reload.go daemon/config: remove uses of pointers for ints 2022-04-29 09:39:34 +02:00
reload_test.go
reload_unix.go
reload_windows.go
rename.go
resize.go
resize_test.go
restart.go
runtime_unix.go
runtime_windows.go
seccomp_linux.go Remove "seccomp" build tag 2022-05-12 14:48:35 -07:00
seccomp_linux_test.go Remove "seccomp" build tag 2022-05-12 14:48:35 -07:00
seccomp_unsupported.go
secrets.go
secrets_linux.go
secrets_unsupported.go
secrets_windows.go
start.go
start_unix.go
start_windows.go
stats.go
stats_collector.go
stats_unix.go
stats_windows.go
stop.go container: StopSignal(): return syscall.Signal 2022-05-05 00:53:53 +02:00
top_unix.go
top_unix_test.go
top_windows.go
trustkey.go
trustkey_test.go
unpause.go
update.go
update_linux.go
update_windows.go
util_test.go libcontainerd: SignalProcess(): accept syscall.Signal 2022-05-05 00:53:49 +02:00
volumes.go Remove mount spec backport 2022-05-13 23:14:43 +00:00
volumes_linux.go
volumes_linux_test.go
volumes_unit_test.go
volumes_unix.go
volumes_windows.go
wait.go
workdir.go