spiegel_podman/libpod
Paul Holzinger f6d18ed41c fix goroutine leaks in events and logs backend
When running a single podman logs this is not really important since we
will exit when we finish reading the logs. However for the system
service this is very important. Leaking goroutines will cause an
increased memory and CPU ussage over time.

Both the the event and log backend have goroutine leaks with both the
file and journald drivers.

The journald backend has the problem that journal.Wait(IndefiniteWait)
will block until we get a new journald event. So when a client closes
the connection the goroutine would still wait until there is a new
journal entry. To fix this we just wait for a maximum of 5 seconds,
after that we can check if the client connection was closed and exit
correctly in this case.

For the file backend we can fix this by waiting for either the log line
or context cancel at the same time. Currently it would block waiting for
new log lines and only check afterwards if the client closed the
connection and thus hang forever if there are no new log lines.

[NO NEW TESTS NEEDED] I am open to ideas how we can test memory leaks in
CI.
To test manually run a container like this:
`podman run --log-driver $driver  --name test -d alpine sh -c 'i=1; while [ "$i" -ne 1000 ]; do echo "line $i"; i=$((i + 1)); done; sleep inf'`
where `$driver` can be either `journald` or `k8s-file`.
Then start the podman system service and use:
`curl -m 1 --output -  --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock -v 'http://d/containers/test/logs?follow=1&since=0&stderr=1&stdout=1' &>/dev/null`
to get the logs from the API and then it closes the connection after 1 second.
Now run the curl command several times and check the memory usage of the service.

Fixes #14879

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 13:54:28 -04:00
..
common fix a number of godot issues 2022-03-22 13:04:35 +01:00
define Update init ctr default for play kube 2022-07-26 13:39:20 -04:00
driver bump go module to version 4 2022-01-18 12:47:07 +01:00
events fix goroutine leaks in events and logs backend 2022-07-26 13:54:28 -04:00
layers Initial checkin from CRI-O repo 2017-11-01 11:24:59 -04:00
linkmode go fmt: use go 1.18 conditional-build syntax 2022-03-18 09:11:53 +01:00
lock libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
logs libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
plugin libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
shutdown libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
boltdb_state.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
boltdb_state_internal.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
boltdb_state_linux.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
common_test.go bump go module to version 4 2022-01-18 12:47:07 +01:00
container.go Merge pull request #14501 from cdoern/podUTS 2022-07-06 14:51:22 +00:00
container_api.go podman wait: return 0 if container never ran 2022-07-11 13:06:40 +02:00
container_commit.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
container_config.go podman cgroup enhancement 2022-06-24 15:39:15 -04:00
container_copy_linux.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
container_exec.go use c/common code for resize and CopyDetachable 2022-07-06 16:57:07 +02:00
container_graph.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
container_graph_test.go bump go module to version 4 2022-01-18 12:47:07 +01:00
container_inspect.go Merge pull request #14501 from cdoern/podUTS 2022-07-06 14:51:22 +00:00
container_internal.go pkg,libpod: remove pkg/hooks and use hooks from c/common 2022-07-26 13:48:10 -04:00
container_internal_linux.go [CI:DOCS] Improve language. Fix spelling and typos. 2022-07-26 13:01:03 -04:00
container_internal_linux_test.go test: use T.TempDir to create temporary test directory 2022-05-05 21:09:41 +08:00
container_internal_test.go test: fix failing TestPostDeleteHooks 2022-05-05 21:39:46 +08:00
container_linux.go go fmt: use go 1.18 conditional-build syntax 2022-03-18 09:11:53 +01:00
container_log.go fix goroutine leaks in events and logs backend 2022-07-26 13:54:28 -04:00
container_log_linux.go fix goroutine leaks in events and logs backend 2022-07-26 13:54:28 -04:00
container_log_unsupported.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
container_path_resolution.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
container_stat_linux.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
container_top_linux.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
container_validate.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
diff.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
doc.go document that using libpod package directly is not supported 2022-03-23 19:05:29 +01:00
events.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
healthcheck.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
healthcheck_linux.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
info.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
info_test.go Robust whitespace split of cpu utilization line from /proc/stat 2022-05-14 00:34:56 +00:00
kube.go Add ports and hostname correctly in kube yaml 2022-07-08 11:21:48 -04:00
mounts_linux.go go fmt: use go 1.18 conditional-build syntax 2022-03-18 09:11:53 +01:00
networking_linux.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
networking_linux_test.go enable unparam linter 2022-04-25 13:23:20 +02:00
networking_machine.go enable gocritic linter 2022-04-26 18:12:22 +02:00
networking_slirp4netns.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
oci.go use c/common code for resize and CopyDetachable 2022-07-06 16:57:07 +02:00
oci_conmon.go podman: add new cgroup mode split 2020-06-25 17:16:12 +02:00
oci_conmon_attach_linux.go use c/common code for resize and CopyDetachable 2022-07-06 16:57:07 +02:00
oci_conmon_exec_linux.go use c/common code for resize and CopyDetachable 2022-07-06 16:57:07 +02:00
oci_conmon_linux.go fix wrong log message on Trace level 2022-07-26 13:01:21 -04:00
oci_missing.go use c/common code for resize and CopyDetachable 2022-07-06 16:57:07 +02:00
oci_util.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
options.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
pod.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
pod_api.go Merge pull request #14501 from cdoern/podUTS 2022-07-06 14:51:22 +00:00
pod_internal.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
pod_status.go bump go module to version 4 2022-01-18 12:47:07 +01:00
pod_top_linux.go libpod/pod_top_linux.go: s/TODO/NOTE/ 2022-05-25 12:30:19 +02:00
reset.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
runtime.go Merge pull request #14789 from saschagrunert/libpod-errors 2022-07-05 07:23:22 +00:00
runtime_cstorage.go libpod/runtime: switch to golang native error wrapping 2022-07-04 15:39:00 +02:00
runtime_ctr.go libpod/runtime: switch to golang native error wrapping 2022-07-04 15:39:00 +02:00
runtime_img.go libpod/runtime: switch to golang native error wrapping 2022-07-04 15:39:00 +02:00
runtime_migrate.go libpod/runtime: switch to golang native error wrapping 2022-07-04 15:39:00 +02:00
runtime_pod.go libpod/runtime: switch to golang native error wrapping 2022-07-04 15:39:00 +02:00
runtime_pod_linux.go libpod/runtime: switch to golang native error wrapping 2022-07-04 15:39:00 +02:00
runtime_renumber.go libpod/runtime: switch to golang native error wrapping 2022-07-04 15:39:00 +02:00
runtime_volume.go libpod/runtime: switch to golang native error wrapping 2022-07-04 15:39:00 +02:00
runtime_volume_linux.go Use SafeChown rather then chown for volumes on NFS 2022-07-26 13:32:54 -04:00
runtime_worker.go work queue: simplify and use a wait group 2022-05-25 10:17:46 +02:00
service.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
state.go libpod: fix wait and exit-code logic 2022-06-23 09:11:57 -04:00
state_test.go bump go module to version 4 2022-01-18 12:47:07 +01:00
stats.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
storage.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
util.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
util_linux.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
util_linux_test.go Fix mismatch between log messages and behavior of libpod.LabelVolumePath. 2020-09-13 23:24:15 -04:00
util_test.go bump go module to version 4 2022-01-18 12:47:07 +01:00
volume.go podman volume create --opt=o=timeout... 2022-06-09 16:44:21 -04:00
volume_inspect.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
volume_internal.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00
volume_internal_linux.go libpod: switch to golang native error wrapping 2022-07-05 16:06:32 +02:00