From 02079dbb4f98fb6e023e677221e513cc4461d93a Mon Sep 17 00:00:00 2001 From: Tim Zhang Date: Thu, 21 Jan 2021 16:19:03 +0800 Subject: [PATCH] agent: upgrade tokio to 1.0 Fixes: #1257 Signed-off-by: Tim Zhang --- src/agent/Cargo.lock | 335 +++++---------------- src/agent/Cargo.toml | 12 +- src/agent/protocols/Cargo.toml | 4 +- src/agent/rustjail/Cargo.toml | 5 +- src/agent/rustjail/src/cgroups/notifier.rs | 4 +- src/agent/rustjail/src/pipestream.rs | 145 ++++----- src/agent/rustjail/src/process.rs | 2 +- src/agent/src/device.rs | 10 +- src/agent/src/main.rs | 4 +- src/agent/src/netlink.rs | 31 +- src/agent/src/rpc.rs | 14 +- src/agent/src/sandbox.rs | 2 +- src/agent/src/uevent.rs | 6 +- 13 files changed, 202 insertions(+), 372 deletions(-) diff --git a/src/agent/Cargo.lock b/src/agent/Cargo.lock index 08ea024a68..0c5215b2c4 100644 --- a/src/agent/Cargo.lock +++ b/src/agent/Cargo.lock @@ -139,6 +139,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" +[[package]] +name = "bytes" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" + [[package]] name = "caps" version = "0.5.0" @@ -191,7 +197,7 @@ dependencies = [ "num-integer", "num-traits", "time", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -269,7 +275,7 @@ checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" dependencies = [ "libc", "redox_users", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -286,7 +292,7 @@ checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe" dependencies = [ "errno-dragonfly", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -320,27 +326,11 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - [[package]] name = "futures" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150" dependencies = [ "futures-channel", "futures-core", @@ -353,9 +343,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846" dependencies = [ "futures-core", "futures-sink", @@ -363,15 +353,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" +checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65" [[package]] name = "futures-executor" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9" dependencies = [ "futures-core", "futures-task", @@ -380,15 +370,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" +checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500" [[package]] name = "futures-macro" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", @@ -398,24 +388,24 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" +checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6" [[package]] name = "futures-task" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" +checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86" dependencies = [ "once_cell", ] [[package]] name = "futures-util" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b" dependencies = [ "futures-channel", "futures-core", @@ -424,7 +414,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project", + "pin-project-lite 0.2.4", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -463,15 +453,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "hermit-abi" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" -dependencies = [ - "libc", -] - [[package]] name = "hex" version = "0.4.2" @@ -480,15 +461,15 @@ checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" [[package]] name = "inotify" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c6848dfb1580647ab039713282cdd1ab2bfb47b60ecfb598e22e60e3baf3f8" +checksum = "d19f57db1baad9d09e43a3cd76dcf82ebdafd37d75c9498b87762dba77c93f15" dependencies = [ "bitflags", "futures-core", "inotify-sys", "libc", - "tokio 0.3.6", + "tokio 1.2.0", ] [[package]] @@ -556,7 +537,7 @@ dependencies = [ "log", "logging", "netlink-packet-utils", - "netlink-sys 0.4.0", + "netlink-sys", "nix 0.17.0", "oci", "prctl", @@ -574,21 +555,11 @@ dependencies = [ "slog-scope", "slog-stdlog", "tempfile", - "tokio 0.2.24", + "tokio 1.2.0", "tokio-vsock", "ttrpc", ] -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -670,25 +641,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", -] - [[package]] name = "mio" version = "0.7.6" @@ -697,44 +649,9 @@ checksum = "f33bc887064ef1fd66020c9adfc45bb9f33d75a42096c81e7c56c65b75dd1a8b" dependencies = [ "libc", "log", - "miow 0.3.6", + "miow", "ntapi", - "winapi 0.3.9", -] - -[[package]] -name = "mio-named-pipes" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656" -dependencies = [ - "log", - "mio 0.6.23", - "miow 0.3.6", - "winapi 0.3.9", -] - -[[package]] -name = "mio-uds" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" -dependencies = [ - "iovec", - "libc", - "mio 0.6.23", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", + "winapi", ] [[package]] @@ -744,7 +661,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" dependencies = [ "socket2", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -753,17 +670,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04b9f127583ed176e163fb9ec6f3e793b87e21deedd5734a69386a18a0151" -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - [[package]] name = "netlink-packet-core" version = "0.2.2" @@ -778,9 +684,9 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2253105e60b35a3fb6cf342b56a45ee1c76ef4b1e68c59b08f813f24c3b7b469" +checksum = "da1bf86b4324996fb58f8e17752b2a06176f4c5efc013928060ac94a3a329b71" dependencies = [ "anyhow", "bitflags", @@ -804,43 +710,29 @@ dependencies = [ [[package]] name = "netlink-proto" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31dfd4f1653ba8e1e2410b3def2313f3399d9b9f7ec3a8a6a8f2f670c3e58d71" +checksum = "9b72e0d34a11ff4253bc7d38fbc246750c4d2d2718b318c9ad981d450ed62aa8" dependencies = [ "bytes 0.5.6", "futures", "log", "netlink-packet-core", - "netlink-sys 0.5.0", - "tokio 0.2.24", + "netlink-sys", + "tokio 1.2.0", "tokio-util", ] [[package]] name = "netlink-sys" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9e9df13fd91bdd4b92bea93d5d2848c8035677c60fc3fee5dabddc02c3012e" +checksum = "d61c5374735aa0cd07cb7fd820b656062b187b5588d79517f72956b57c6de9ef" dependencies = [ "futures", "libc", "log", - "mio 0.6.23", - "tokio 0.2.24", -] - -[[package]] -name = "netlink-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf10c3ab67b9c09b42abb5a53ecb8ffdad160d6485b140a6f21f53ba5362042d" -dependencies = [ - "futures", - "libc", - "log", - "mio 0.6.23", - "tokio 0.2.24", + "tokio 1.2.0", ] [[package]] @@ -905,7 +797,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -927,16 +819,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "object" version = "0.22.0" @@ -981,7 +863,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1018,26 +900,6 @@ dependencies = [ "fixedbitset", ] -[[package]] -name = "pin-project" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" -dependencies = [ - "proc-macro2 1.0.24", - "quote 1.0.8", - "syn 1.0.55", -] - [[package]] name = "pin-project-lite" version = "0.1.11" @@ -1046,9 +908,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" [[package]] name = "pin-project-lite" -version = "0.2.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" +checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" [[package]] name = "pin-utils" @@ -1332,7 +1194,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1352,16 +1214,18 @@ dependencies = [ [[package]] name = "rtnetlink" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c942df3c7725a0500971d857a080d6dc537e257e19ccb352f80b2c726ef7007" +checksum = "d7c188dd8ddd43e195e483d255f4975d457a78021acf185ea2269e0667ef8b1a" dependencies = [ "byteordered", "futures", "log", "netlink-packet-route", "netlink-proto", + "nix 0.19.1", "thiserror", + "tokio 1.2.0", ] [[package]] @@ -1404,7 +1268,6 @@ dependencies = [ "inotify", "lazy_static", "libc", - "mio 0.6.23", "nix 0.17.0", "oci", "path-absolutize", @@ -1422,7 +1285,7 @@ dependencies = [ "slog", "slog-scope", "tempfile", - "tokio 0.2.24", + "tokio 1.2.0", ] [[package]] @@ -1598,7 +1461,7 @@ checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" dependencies = [ "cfg-if 1.0.0", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1646,7 +1509,7 @@ dependencies = [ "rand", "redox_syscall", "remove_dir_all", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1686,7 +1549,7 @@ checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1696,39 +1559,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48" dependencies = [ "bytes 0.5.6", - "fnv", - "futures-core", - "lazy_static", - "libc", - "memchr", - "mio 0.6.23", - "mio-named-pipes", - "mio-uds", - "num_cpus", "pin-project-lite 0.1.11", - "signal-hook-registry", - "slab", - "tokio-macros", - "winapi 0.3.9", ] [[package]] name = "tokio" -version = "0.3.6" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "720ba21c25078711bf456d607987d95bce90f7c3bea5abe1db587862e7a1e87c" +checksum = "e8190d04c665ea9e6b6a0dc45523ade572c088d2e6566244c1122671dbf4ae3a" dependencies = [ "autocfg", + "bytes 1.0.1", "libc", - "mio 0.7.6", - "pin-project-lite 0.2.0", + "memchr", + "mio", + "once_cell", + "pin-project-lite 0.2.4", + "signal-hook-registry", + "tokio-macros", + "winapi", ] [[package]] name = "tokio-macros" -version = "0.2.6" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" +checksum = "caf7b11a536f46a809a8a9f0bb4237020f70ecbf115b842360afb127ea2fda57" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.8", @@ -1751,25 +1607,22 @@ dependencies = [ [[package]] name = "tokio-vsock" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "547a35667d4d842422da7f5528612321770f2f640e7fd5df0431de7b717fb2b4" +checksum = "70c401a3d0e82328c6fa900e9e2c4152737a4caa304558b762f0154a8b306456" dependencies = [ "bytes 0.4.12", "futures", - "iovec", "libc", - "mio 0.6.23", - "nix 0.17.0", - "tokio 0.2.24", + "tokio 1.2.0", "vsock", ] [[package]] name = "ttrpc" -version = "0.4.14" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc512242eee1f113eadd48087dd97cbf807ccae4820006e7a890044044399c51" +checksum = "ff9ad10daac7027ac1e4c46326abc301349ab9b4006e931e9f7cb0feeb9a2096" dependencies = [ "async-trait", "byteorder", @@ -1780,15 +1633,15 @@ dependencies = [ "protobuf", "protobuf-codegen-pure", "thiserror", - "tokio 0.2.24", + "tokio 1.2.0", "tokio-vsock", ] [[package]] name = "ttrpc-codegen" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12e8844d7a8351fa833bea811f826401bec020b233e60a7c0a8f313f764ce5a5" +checksum = "809eda4e459820237104e4b61d6b41bbe6c9e1ce6adf4057955e6e6722a90408" dependencies = [ "protobuf", "protobuf-codegen", @@ -1798,9 +1651,9 @@ dependencies = [ [[package]] name = "ttrpc-compiler" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d290e64bdb994926d102f2983cc6550ece0778c8430253dc2de4e71cbf5285d9" +checksum = "8c2f2ce8c9a6e9422d0714bc8058b705d503fc9d028e69fae2236050c4721d75" dependencies = [ "derive-new", "prost", @@ -1837,12 +1690,12 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "vsock" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba063357047c0f2216c7c653879ea4e5e198d0c3cde7efa37ebfd9039b48491" +checksum = "50e2ef09834e1d203d24556512c0e58e66de203440bd9d74c30a33f7240091c6" dependencies = [ "libc", - "nix 0.17.0", + "nix 0.19.1", ] [[package]] @@ -1867,12 +1720,6 @@ dependencies = [ "libc", ] -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -1883,12 +1730,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -1900,13 +1741,3 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] diff --git a/src/agent/Cargo.toml b/src/agent/Cargo.toml index d99c335159..8f86d2aba5 100644 --- a/src/agent/Cargo.toml +++ b/src/agent/Cargo.toml @@ -10,7 +10,7 @@ logging = { path = "../../pkg/logging" } rustjail = { path = "rustjail" } protocols = { path = "protocols" } lazy_static = "1.3.0" -ttrpc = { version = "0.4.14", features = ["async", "protobuf-codec"], default-features = false } +ttrpc = { version = "0.5.0", features = ["async", "protobuf-codec"], default-features = false } protobuf = "=2.14.0" libc = "0.2.58" nix = "0.17.0" @@ -21,11 +21,11 @@ scopeguard = "1.0.0" regex = "1" async-trait = "0.1.42" -tokio = { version = "0.2", features = ["rt-core", "sync", "uds", "stream", "macros", "io-util", "time", "signal", "io-std", "process", "blocking"] } -futures = "0.3" -netlink-sys = { version = "0.4.0", features = ["tokio_socket",]} -tokio-vsock = "0.2.2" -rtnetlink = "0.6.0" +tokio = { version = "1.2.0", features = ["rt", "sync", "macros", "io-util", "time", "signal", "io-std", "process"] } +futures = "0.3.12" +netlink-sys = { version = "0.6.0", features = ["tokio_socket",]} +tokio-vsock = "0.3.0" +rtnetlink = "0.7.0" netlink-packet-utils = "0.4.0" ipnetwork = "0.17.0" diff --git a/src/agent/protocols/Cargo.toml b/src/agent/protocols/Cargo.toml index 8d9eca6c2b..447393646b 100644 --- a/src/agent/protocols/Cargo.toml +++ b/src/agent/protocols/Cargo.toml @@ -5,9 +5,9 @@ authors = ["The Kata Containers community "] edition = "2018" [dependencies] -ttrpc = { version = "0.4.14", features = ["async"] } +ttrpc = { version = "0.5.0", features = ["async"] } async-trait = "0.1.42" protobuf = "=2.14.0" [build-dependencies] -ttrpc-codegen = "0.1.2" +ttrpc-codegen = "0.2.0" diff --git a/src/agent/rustjail/Cargo.toml b/src/agent/rustjail/Cargo.toml index 74e52de064..841ec3a49f 100644 --- a/src/agent/rustjail/Cargo.toml +++ b/src/agent/rustjail/Cargo.toml @@ -28,11 +28,10 @@ cgroups = { package = "cgroups-rs", version = "0.2.1" } tempfile = "3.1.0" rlimit = "0.5.3" -tokio = { version = "0.2", features = ["sync", "io-util", "process", "time", "macros"] } +tokio = { version = "1.2.0", features = ["sync", "io-util", "process", "time", "macros"] } futures = "0.3" async-trait = "0.1.31" -mio = "0.6" -inotify = "0.9" +inotify = "0.9.2" [dev-dependencies] serial_test = "0.5.0" diff --git a/src/agent/rustjail/src/cgroups/notifier.rs b/src/agent/rustjail/src/cgroups/notifier.rs index 1b4750a02a..6855d403a9 100644 --- a/src/agent/rustjail/src/cgroups/notifier.rs +++ b/src/agent/rustjail/src/cgroups/notifier.rs @@ -85,7 +85,7 @@ async fn register_memory_event_v2( info!(sl!(), "ev_wd: {:?}", ev_wd); info!(sl!(), "cg_wd: {:?}", cg_wd); - let (mut sender, receiver) = channel(100); + let (sender, receiver) = channel(100); let containere_id = containere_id.to_string(); tokio::spawn(async move { @@ -180,7 +180,7 @@ async fn register_memory_event( tokio::spawn(async move { loop { - let mut sender = sender.clone(); + let sender = sender.clone(); let mut buf = [0u8; 8]; match eventfd_stream.read(&mut buf).await { Err(err) => { diff --git a/src/agent/rustjail/src/pipestream.rs b/src/agent/rustjail/src/pipestream.rs index 5d08cdf893..4215190ace 100644 --- a/src/agent/rustjail/src/pipestream.rs +++ b/src/agent/rustjail/src/pipestream.rs @@ -5,52 +5,28 @@ //! Async support for pipe or something has file descriptor +use nix::unistd; use std::{ - fmt, io, mem, + fmt, io, + io::{Read, Result, Write}, + mem, os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd}, pin::Pin, task::{Context, Poll}, }; -use mio::event::Evented; -use mio::unix::EventedFd; -use mio::{Poll as MioPoll, PollOpt, Ready, Token}; -use nix::unistd; -use tokio::io::{AsyncRead, AsyncWrite, PollEvented}; +use futures::ready; +use tokio::io::{unix::AsyncFd, AsyncRead, AsyncWrite, ReadBuf}; -unsafe fn set_nonblocking(fd: RawFd) { - libc::fcntl(fd, libc::F_SETFL, libc::O_NONBLOCK); +fn set_nonblocking(fd: RawFd) { + unsafe { + libc::fcntl(fd, libc::F_SETFL, libc::O_NONBLOCK); + } } struct StreamFd(RawFd); -impl Evented for StreamFd { - fn register( - &self, - poll: &MioPoll, - token: Token, - interest: Ready, - opts: PollOpt, - ) -> io::Result<()> { - EventedFd(&self.0).register(poll, token, interest, opts) - } - - fn reregister( - &self, - poll: &MioPoll, - token: Token, - interest: Ready, - opts: PollOpt, - ) -> io::Result<()> { - EventedFd(&self.0).reregister(poll, token, interest, opts) - } - - fn deregister(&self, poll: &MioPoll) -> io::Result<()> { - EventedFd(&self.0).deregister(poll) - } -} - -impl io::Read for StreamFd { +impl io::Read for &StreamFd { fn read(&mut self, buf: &mut [u8]) -> io::Result { match unistd::read(self.0, buf) { Ok(l) => Ok(l), @@ -59,7 +35,7 @@ impl io::Read for StreamFd { } } -impl io::Write for StreamFd { +impl io::Write for &StreamFd { fn write(&mut self, buf: &[u8]) -> io::Result { match unistd::write(self.0, buf) { Ok(l) => Ok(l), @@ -87,10 +63,20 @@ impl Drop for StreamFd { } } -/// Pipe read -pub struct PipeStream(PollEvented); +impl AsRawFd for StreamFd { + fn as_raw_fd(&self) -> RawFd { + self.0 + } +} + +pub struct PipeStream(AsyncFd); impl PipeStream { + pub fn new(fd: RawFd) -> Result { + set_nonblocking(fd); + Ok(Self(AsyncFd::new(StreamFd(fd))?)) + } + pub fn shutdown(&mut self) -> io::Result<()> { self.0.get_mut().close() } @@ -100,25 +86,15 @@ impl PipeStream { } } -impl AsyncRead for PipeStream { - fn poll_read( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &mut [u8], - ) -> Poll> { - Pin::new(&mut self.0).poll_read(cx, buf) - } -} - impl AsRawFd for PipeStream { fn as_raw_fd(&self) -> RawFd { - self.0.get_ref().0 + self.0.as_raw_fd() } } impl IntoRawFd for PipeStream { fn into_raw_fd(self) -> RawFd { - let fd = self.0.get_ref().0; + let fd = self.as_raw_fd(); mem::forget(self); fd } @@ -126,8 +102,7 @@ impl IntoRawFd for PipeStream { impl FromRawFd for PipeStream { unsafe fn from_raw_fd(fd: RawFd) -> Self { - set_nonblocking(fd); - PipeStream(PollEvented::new(StreamFd(fd)).unwrap()) + Self::new(fd).unwrap() } } @@ -137,23 +112,59 @@ impl fmt::Debug for PipeStream { } } -impl AsyncWrite for PipeStream { - fn poll_write( - mut self: Pin<&mut Self>, +impl AsyncRead for PipeStream { + fn poll_read( + self: Pin<&mut Self>, cx: &mut Context<'_>, - buf: &[u8], - ) -> Poll> { - Pin::new(&mut self.0).poll_write(cx, buf) - } + buf: &mut ReadBuf<'_>, + ) -> Poll> { + let b; + unsafe { + b = &mut *(buf.unfilled_mut() as *mut [mem::MaybeUninit] as *mut [u8]); + }; - fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - Pin::new(&mut self.0).poll_flush(cx) - } + loop { + let mut guard = ready!(self.0.poll_read_ready(cx))?; - fn poll_shutdown( - mut self: Pin<&mut Self>, - cx: &mut Context<'_>, - ) -> Poll> { - Pin::new(&mut self.0).poll_shutdown(cx) + match guard.try_io(|inner| inner.get_ref().read(b)) { + Ok(Ok(n)) => { + unsafe { + buf.assume_init(n); + } + buf.advance(n); + return Ok(()).into(); + } + Ok(Err(e)) => return Err(e).into(), + Err(_would_block) => { + continue; + } + } + } + } +} + +impl AsyncWrite for PipeStream { + fn poll_write( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + loop { + let mut guard = ready!(self.0.poll_write_ready(cx))?; + + match guard.try_io(|inner| inner.get_ref().write(buf)) { + Ok(result) => return Poll::Ready(result), + Err(_would_block) => continue, + } + } + } + + fn poll_flush(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { + Poll::Ready(Ok(())) + } + + fn poll_shutdown(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { + self.get_mut().shutdown()?; + Poll::Ready(Ok(())) } } diff --git a/src/agent/rustjail/src/process.rs b/src/agent/rustjail/src/process.rs index fb1f4d7c1d..da0b71750f 100644 --- a/src/agent/rustjail/src/process.rs +++ b/src/agent/rustjail/src/process.rs @@ -144,7 +144,7 @@ impl Process { pub fn notify_term_close(&mut self) { let notify = self.term_exit_notifier.clone(); - notify.notify(); + notify.notify_one(); } fn get_fd(&self, stream_type: &StreamType) -> Option { diff --git a/src/agent/src/device.rs b/src/agent/src/device.rs index f69fa5c98f..85570af906 100644 --- a/src/agent/src/device.rs +++ b/src/agent/src/device.rs @@ -110,14 +110,10 @@ async fn get_device_name(sandbox: &Arc>, dev_addr: &str) -> Resul info!(sl!(), "Waiting on channel for device notification\n"); let hotplug_timeout = AGENT_CONFIG.read().await.hotplug_timeout; - let timeout = tokio::time::delay_for(hotplug_timeout); - let dev_name; - tokio::select! { - v = rx => { - dev_name = v?; - } - _ = timeout => { + let dev_name = match tokio::time::timeout(hotplug_timeout, rx).await { + Ok(v) => v?, + Err(_) => { let watcher = GLOBAL_DEVICE_WATCHER.clone(); let mut w = watcher.lock().await; w.remove_entry(dev_addr); diff --git a/src/agent/src/main.rs b/src/agent/src/main.rs index 9ac0dd6416..e58ba88f77 100644 --- a/src/agent/src/main.rs +++ b/src/agent/src/main.rs @@ -141,9 +141,7 @@ fn main() -> std::result::Result<(), Box> { exit(0); } - let mut rt = tokio::runtime::Builder::new() - .basic_scheduler() - .max_threads(1) + let rt = tokio::runtime::Builder::new_current_thread() .enable_all() .build()?; diff --git a/src/agent/src/netlink.rs b/src/agent/src/netlink.rs index fe0db72963..3ed14ae56f 100644 --- a/src/agent/src/netlink.rs +++ b/src/agent/src/netlink.rs @@ -322,9 +322,18 @@ impl Handle { use packet::nlas::route::Nla; + // Build a common indeterminate ip request + let request = self + .handle + .route() + .add() + .table(MAIN_TABLE) + .kind(UNICAST) + .protocol(BOOT_PROT) + .scope(scope); + // `rtnetlink` offers a separate request builders for different IP versions (IP v4 and v6). // This if branch is a bit clumsy because it does almost the same. - // TODO: Simplify this once https://github.com/little-dude/netlink/pull/140 is merged and released if is_v6 { let dest_addr = if !route.dest.is_empty() { Ipv6Network::from_str(&route.dest)? @@ -333,14 +342,8 @@ impl Handle { }; // Build IP v6 request - let mut request = self - .handle - .route() - .add_v6() - .table(MAIN_TABLE) - .kind(UNICAST) - .protocol(BOOT_PROT) - .scope(scope) + let mut request = request + .v6() .destination_prefix(dest_addr.ip(), dest_addr.prefix()) .output_interface(link.index()); @@ -377,14 +380,8 @@ impl Handle { }; // Build IP v4 request - let mut request = self - .handle - .route() - .add_v4() - .table(MAIN_TABLE) - .kind(UNICAST) - .protocol(BOOT_PROT) - .scope(scope) + let mut request = request + .v4() .destination_prefix(dest_addr.ip(), dest_addr.prefix()) .output_interface(link.index()); diff --git a/src/agent/src/rpc.rs b/src/agent/src/rpc.rs index 05d7f77bf7..934bccb974 100644 --- a/src/agent/src/rpc.rs +++ b/src/agent/src/rpc.rs @@ -259,14 +259,12 @@ impl AgentService { }; }); - let timeout = tokio::time::delay_for(Duration::from_secs(req.timeout.into())); - - tokio::select! { - _ = rx => {} - _ = timeout => { - return Err(anyhow!(nix::Error::from_errno(nix::errno::Errno::ETIME))); - } - }; + if tokio::time::timeout(Duration::from_secs(req.timeout.into()), rx) + .await + .is_err() + { + return Err(anyhow!(nix::Error::from_errno(nix::errno::Errno::ETIME))); + } if handle.await.is_err() { return Err(anyhow!(nix::Error::from_errno( diff --git a/src/agent/src/sandbox.rs b/src/agent/src/sandbox.rs index 94b65f1d20..923e06a639 100644 --- a/src/agent/src/sandbox.rs +++ b/src/agent/src/sandbox.rs @@ -311,7 +311,7 @@ impl Sandbox { } pub async fn run_oom_event_monitor(&self, mut rx: Receiver, container_id: String) { - let mut tx = self.event_tx.clone(); + let tx = self.event_tx.clone(); let logger = self.logger.clone(); tokio::spawn(async move { diff --git a/src/agent/src/uevent.rs b/src/agent/src/uevent.rs index 83b4c6a877..5e2c2bf516 100644 --- a/src/agent/src/uevent.rs +++ b/src/agent/src/uevent.rs @@ -9,7 +9,7 @@ use crate::sandbox::Sandbox; use crate::GLOBAL_DEVICE_WATCHER; use slog::Logger; -use netlink_sys::{Protocol, Socket, SocketAddr}; +use netlink_sys::{protocols, SocketAddr, TokioSocket}; use nix::errno::Errno; use std::os::unix::io::FromRawFd; use std::sync::Arc; @@ -143,9 +143,9 @@ pub async fn watch_uevents(sandbox: Arc>) { let fd = libc::socket( libc::AF_NETLINK, libc::SOCK_DGRAM | libc::SOCK_CLOEXEC, - Protocol::KObjectUevent as libc::c_int, + protocols::NETLINK_KOBJECT_UEVENT as libc::c_int, ); - socket = Socket::from_raw_fd(fd); + socket = TokioSocket::from_raw_fd(fd); } socket.bind(&SocketAddr::new(0, 1)).unwrap();