Commit graph

44083 commits

Author SHA1 Message Date
Sebastiaan van Stijn
a5f6500958
replace deprecated gotest.tools' env.Patch() with t.SetEnv()
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-28 12:12:39 +02:00
Sebastiaan van Stijn
c93bffa1b2
Merge pull request #43651 from thaJeztah/update_gotestsum
update gotestsum to v1.8.1
2022-05-28 11:45:57 +02:00
Sebastiaan van Stijn
e17d5ccee7
Merge pull request #43645 from thaJeztah/image_search_test_cleanup
daemon/images: use gotest.tools for tests
2022-05-28 11:45:16 +02:00
Sebastiaan van Stijn
3cadb1f63f
update gotestsum to v1.8.1
full diff: https://github.com/gotestyourself/gotestsum/compare/v1.7.0...v1.8.1

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-27 17:59:58 +02:00
Sebastiaan van Stijn
c6cc03747d
daemon/images: use gotest.tools for tests, and use sub-tests
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-27 15:36:14 +02:00
Sebastiaan van Stijn
69adaa894d
Merge pull request #43649 from AkihiroSuda/fix-43646
Fix constant `WARNING: No swap limit support` on cgroup v2 hosts
2022-05-27 13:25:25 +02:00
Akihiro Suda
a04e3326e7
Fix constant WARNING: No swap limit support on cgroup v2 hosts
Fix issue 43646

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2022-05-27 10:51:54 +09:00
Akihiro Suda
2f6b8a2aec
vendor: github.com/containerd/cgroups v1.0.4
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2022-05-27 10:49:24 +09:00
Brian Goff
262f574f01
Merge pull request #43641 from thaJeztah/fix_hostconfig_validation
Fix validation of IpcMode, PidMode, UTSMode, CgroupnsMode
2022-05-25 15:28:57 -07:00
Sebastiaan van Stijn
b01dd1e8c2
Merge pull request #43636 from thaJeztah/integration_dont_use_deprecated_overlay
integration-cli: TestRemoveContainerAfterLiveRestore use overlay2
2022-05-25 23:25:42 +02:00
Sebastiaan van Stijn
bfd7fabdfd
Merge pull request #43634 from ameyag/win-port-conflict
Fix for Windows port conflict with published ports in host mode for overlay.
2022-05-25 22:03:43 +02:00
Tianon Gravi
c0069b83bc
Merge pull request #43629 from gesellix/int64-fields
Annotate some swagger documented types as int64
2022-05-25 11:29:22 -07:00
Sebastiaan van Stijn
c3d7a0c603
Fix validation of IpcMode, PidMode, UTSMode, CgroupnsMode
These HostConfig properties were not validated until the OCI spec for the container
was created, which meant that `container run` and `docker create` would accept
invalid values, and the invalid value would not be detected until `start` was
called, returning a 500 "internal server error", as well as errors from containerd
("cleanup: failed to delete container from containerd: no such container") in the
daemon logs.

As a result, a faulty container was created, and the container state remained
in the `created` state.

This patch:

- Updates `oci.WithNamespaces()` to return the correct `errdefs.InvalidParameter`
- Updates `verifyPlatformContainerSettings()` to validate these settings, so that
  an error is returned when _creating_ the container.

Before this patch:

    docker run -dit --ipc=shared --name foo busybox
    2a00d74e9fbb7960c4718def8f6c74fa8ee754030eeb93ee26a516e27d4d029f
    docker: Error response from daemon: Invalid IPC mode: shared.

    docker ps -a --filter name=foo
    CONTAINER ID   IMAGE     COMMAND   CREATED              STATUS    PORTS     NAMES
    2a00d74e9fbb   busybox   "sh"      About a minute ago   Created             foo

After this patch:

    docker run -dit --ipc=shared --name foo busybox
    docker: Error response from daemon: invalid IPC mode: shared.

     docker ps -a --filter name=foo
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

An integration test was added to verify the new validation, which can be run with:

    make BIND_DIR=. TEST_FILTER=TestCreateInvalidHostConfig DOCKER_GRAPHDRIVER=vfs test-integration

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-25 17:41:51 +02:00
Ameya Gawde
cba8cf34d2
Set ExternalPortReserved for dummy proxy
Signed-off-by: Ameya Gawde <agawde@mirantis.com>
2022-05-25 07:12:43 -07:00
Sebastiaan van Stijn
18529568d3
integration-cli: TestRemoveContainerAfterLiveRestore use overlay2
the overlay storage driver is deprecated, so we might as well use overlay2
for this test.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-24 17:28:14 +02:00
Tobias Gesellchen
345346d7c6 Annotate some swagger documented types as int64
Using the swagger.yaml to generate api models will create incompatible field types. Some inconsistencies had already been mentioned at #39131. I've added more fixes from real life experience, some only occurring on Windows.

Closes #39131

Signed-off-by: Tobias Gesellchen <tobias@gesellix.de>
2022-05-23 21:10:07 +02:00
Ameya Gawde
c576de88ed
vendor: github.com/Microsoft/hcsshim v0.9.3
Signed-off-by: Ameya Gawde <agawde@mirantis.com>
2022-05-23 09:15:16 -07:00
Sebastiaan van Stijn
235f86270d
Merge pull request #43479 from crazy-max/gha-win-tests
ci: github action workflow for windows
2022-05-23 11:54:32 +02:00
Sebastiaan van Stijn
8abb84c734
Merge pull request #43621 from thaJeztah/fix_userland_proxy_static
fix docker-proxy not statically linked
2022-05-20 17:56:52 +02:00
CrazyMax
493d3ca0c3
fix docker-proxy not statically linked
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-20 13:54:37 +02:00
CrazyMax
15ed58ffb5
ci(windows): upload coverage to codecov
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-05-20 10:12:10 +02:00
Sebastiaan van Stijn
2cfbb039d1
Merge pull request #43571 from crazy-max/vendor-buildkit-0.10.3
vendor: github.com/moby/buildkit v0.10.3
2022-05-20 02:11:35 +02:00
Sebastiaan van Stijn
80862d61d0
gha: temporarily override buildkit version for tests
This includes a single fix that only affects the tests, so using
a temporary override to update the tests to make CI pass, but keeping
the module version to the tagged release.

https://github.com/moby/buildkit/compare/v0.10.3..0da740f7d4f782a52b416a44f564ac37504b9ee1

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-20 00:32:07 +02:00
CrazyMax
90fb4eca20
vendor: github.com/moby/buildkit v0.10.3
full diff: https://github.com/moby/buildkit/compare/v0.10.2...v0.10.3

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-19 23:31:30 +02:00
Sebastiaan van Stijn
d633169483
Merge pull request #43484 from ndeloof/create_host_path
introduce CreateMountpoint for parity between binds and mounts
2022-05-19 23:06:01 +02:00
Sebastiaan van Stijn
32f7551e61
Merge pull request #43597 from shoeffner/43596-mask-cifs-passwords
volume: mask password in cifs mount error messages
2022-05-19 22:52:26 +02:00
Sebastiaan van Stijn
5996b32fe4
Merge pull request #43294 from corhere/logfile-follow-without-fsnotify
LogFile follow without filenotify
2022-05-19 22:50:23 +02:00
Cory Snider
a67e159909 daemon/logger: hold LogFile lock less on ReadLogs
Reduce the amount of time ReadLogs holds the LogFile fsop lock by
releasing it as soon as all the files are opened, before parsing the
compressed file headers.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:23:18 -04:00
Cory Snider
c609523a8c pkg/filenotify: delete unused package
Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:23:18 -04:00
Cory Snider
01915a725e daemon/logger: follow LogFile without file watches
File watches have been a source of complexity and unreliability in the
LogFile follow implementation, especially when combined with file
rotation. File change events can be unreliably delivered, especially on
Windows, and the polling fallback adds latency. Following across
rotations has never worked reliably on Windows. Without synchronization
between the log writer and readers, race conditions abound: readers can
read from the file while a log entry is only partially written, leading
to decode errors and necessitating retries.

In addition to the complexities stemming from file watches, the LogFile
follow implementation had complexity from needing to handle file
truncations, and (due to a now-fixed bug in the polling file watcher
implementation) evictions to unlock the log file so it could be rotated.
Log files are now always rotated, never truncated, so these situations
no longer need to be handled by the follow code.

Rewrite the LogFile follow implementation in terms of waiting until
LogFile notifies it that a new message has been written to the log file.
The LogFile informs the follower of the file offset of the last complete
write so that the follower knows not to read past that, preventing it
from attempting to decode partial messages and making retries
unnecessary. Synchronization between LogFile and its followers is used
at critical points to prevent missed notifications of writes and races
between file rotations and the follower opening files for read.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:22 -04:00
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
Cory Snider
49aa66b597 daemon/logger: rotate log files, never truncate
Truncating the current log file while a reader is still reading through
it results in log lines getting missed. In contrast, rotating the file
allows readers who have the file open can continue to read from it
undisturbed. Rotating frees up the file name for the logger to create a
new file in its place. This remains true even when max-file=1; the
current log file is "rotated" from its name without giving it a new one.

On POSIXy filesystem APIs, rotating the last file is straightforward:
unlink()ing a file name immediately deletes the name from the filesystem
and makes it available for reuse, even if processes have the file open
at the time. Windows on the other hand only makes the name available
for reuse once the file itself is deleted, which only happens when no
processes have it open. To reuse the file name while the file is still
in use, the file needs to be renamed. So that's what we have to do:
rotate the file to a temporary name before marking it for deletion.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:22 -04:00
Cory Snider
990b0e28ba daemon/logger/local: fix appending newlines
The json-file driver appends a newline character to log messages with
PLogMetaData.Last set, but the local driver did not. Alter the behavior
of the local driver to match that of the json-file driver.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:22 -04:00
Cory Snider
3844d1a3d1 daemon/logger: drain readers when logger is closed
The LogFile follower would stop immediately upon the producer closing.
The close signal would race the file watcher; if a message were to be
logged and the logger immediately closed, the follower could miss that
last message if the close signal (formerly ProducerGone) was to win the
race. Add logic to perform one more round of reading when the producer
is closed to catch up on any final logs.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:22 -04:00
Cory Snider
906b979b88 daemon/logger: remove ProducerGone from LogWatcher
Whether or not the logger has been closed is a property of the logger,
and only of concern to its log reading implementation, not log watchers.
The loggers and their reader implementations can communicate as they see
fit. A single channel per logger which is closed when the logger is
closed is plenty sufficient to broadcast the state to log readers, with
no extra bookeeping or synchronization required.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:22 -04:00
Cory Snider
ae5f664f4e daemon/logger: open log reader synchronously
The asynchronous startup of the log-reading goroutine made the
follow-tail tests nondeterministic. The Log calls in the tests which
were supposed to happen after the reader started reading would sometimes
execute before the reader, throwing off the counts. Tweak the ReadLogs
implementation so that the order of operations is deterministic.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:22 -04:00
Cory Snider
9aa9d6fafc daemon/logger: add test suite for LogReaders
Add an extensive test suite for validating the behavior of any
LogReader. Test the current LogFile-based implementations against it.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:21 -04:00
Cory Snider
961d32868c daemon/logger: improve jsonfilelog read benchmark
The jsonfilelog read benchmark was incorrectly reusing the same message
pointer in the producer loop. The message value would be reset after the
first call to jsonlogger.Log, resulting in all subsequent calls logging
a zero-valued message. This is not a representative workload for
benchmarking and throws off the throughput metric.

Reduce variation between benchmark runs by using a constant timestamp.

Write to the producer goroutine's error channel only on a non-nil error
to eliminate spurious synchronization between producer and consumer
goroutines external to the logger being benchmarked.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-05-19 15:22:21 -04:00
CrazyMax
0ca6e28807
integration-cli: TestSlowStdinClosing is flaky on GitHub Runner
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-05-19 21:19:10 +02:00
CrazyMax
ac82b2519a
integration-cli: refactor TestStartReturnCorrectExitCode
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-05-19 21:19:10 +02:00
CrazyMax
440d051ce9
integration-cli: TestRestartContainer is flaky on GitHub Runner
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-05-19 21:19:10 +02:00
CrazyMax
890de00f02
ci: windows gha workflow (integration test)
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-05-19 21:19:09 +02:00
CrazyMax
71ba8cf24f
ci: windows gha workflow (unit test)
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-05-19 21:19:09 +02:00
CrazyMax
958fa08711
ci: windows gha workflow (build)
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-05-19 21:19:09 +02:00
Sebastiaan van Stijn
517afce0c4
Merge pull request #43557 from neersighted/overlay2-report-metacopy
[v2] overlay2: test for and report metacopy status
2022-05-19 21:16:40 +02:00
Sebastiaan van Stijn
4f8031313f
Merge pull request #43617 from crazy-max/fix-rogue-certs
integration-cli: fix test rogue certs
2022-05-19 20:35:02 +02:00
Nicolas De Loof
304fbf0804
introduce CreateMountpoint for parity between binds and mounts
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2022-05-19 16:43:06 +02:00
Sebastiaan van Stijn
c9d04033d4
Merge pull request #43616 from kolyshkin/byte-slice-to-string
all: use unix.ByteSliceToString for utsname fields
2022-05-19 11:28:07 +02:00
Sebastiaan van Stijn
b6dab55339
Merge pull request #43593 from vvoland/3554-initial-console-size
daemon/linux: Set console size on creation
2022-05-19 11:04:21 +02:00
CrazyMax
3b157dc3b6
integration-cli: fix test rogue certs
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-05-19 10:54:31 +02:00