Skip to content

Commit eee55f3

Browse files
committed
fix(libsinp): enable multi cri caching + tests
Signed-off-by: Roberto Scolaro <roberto.scolaro21@gmail.com>
1 parent b2fed3b commit eee55f3

File tree

19 files changed

+451
-37
lines changed

19 files changed

+451
-37
lines changed

test/libsinsp_e2e/container/container_cri.cpp

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,3 +553,120 @@ TEST_F(container_cri, fake_cri_fail_sync) {
553553
exp_info,
554554
1 << CT_CONTAINERD);
555555
}
556+
557+
TEST_F(container_cri, fake_cri_multiple) {
558+
auto pb_prefix = LIBSINSP_TEST_RESOURCES_PATH "/fake_cri_falco";
559+
auto alt_pb_prefix = LIBSINSP_TEST_RESOURCES_PATH "/fake_cri_multi";
560+
std::atomic<bool> done(false);
561+
std::atomic<bool> done_alt(false);
562+
const std::string alt_cri_container_id = "593f5b76be2a";
563+
564+
auto runtime = "containerd";
565+
566+
unlink(fake_cri_socket.c_str());
567+
subprocess fake_cri_handle(LIBSINSP_TEST_PATH "/fake_cri/fake_cri",
568+
{"unix://" + fake_cri_socket, pb_prefix, runtime});
569+
pid_t fake_cri_pid = fake_cri_handle.get_pid();
570+
571+
std::string alt_fake_cri_socket = "/tmp/alt_fake_cri.sock";
572+
573+
unlink(alt_fake_cri_socket.c_str());
574+
subprocess alt_fake_cri_handle(
575+
LIBSINSP_TEST_PATH "/fake_cri/fake_cri",
576+
{"unix://" + alt_fake_cri_socket, alt_pb_prefix, runtime, alt_cri_container_id});
577+
pid_t alt_fake_cri_pid = alt_fake_cri_handle.get_pid();
578+
579+
auto start_time = time(NULL);
580+
581+
event_filter_t filter = [&](sinsp_evt* evt) {
582+
return evt->get_type() == PPME_CONTAINER_JSON_E ||
583+
evt->get_type() == PPME_CONTAINER_JSON_2_E;
584+
};
585+
586+
run_callback_t test = [&](sinsp* inspector) {
587+
subprocess handle(LIBSINSP_TEST_PATH "/test_helper", {"cri_container_echo"});
588+
handle.in() << "\n";
589+
handle.wait();
590+
subprocess alt_handle(LIBSINSP_TEST_PATH "/test_helper",
591+
{"cri_container_echo",
592+
"593f5b76be2afc23c39aa7eaa29174eac353d32be5e006b710c01aacca4aa05e"});
593+
alt_handle.in() << "\n";
594+
alt_handle.wait();
595+
while(!done && !done_alt && time(NULL) < start_time + 10) {
596+
usleep(100000);
597+
}
598+
};
599+
600+
captured_event_callback_t cri_callback = [&](const callback_param& param) {
601+
sinsp_threadinfo* tinfo = param.m_evt->get_tinfo();
602+
EXPECT_TRUE(tinfo != NULL);
603+
604+
if(tinfo->m_container_id == cri_container_id) {
605+
EXPECT_EQ(cri_container_id, tinfo->m_container_id);
606+
607+
const auto container_info =
608+
param.m_inspector->m_container_manager.get_container(tinfo->m_container_id);
609+
EXPECT_NE(container_info, nullptr);
610+
611+
EXPECT_EQ(sinsp_container_type::CT_CONTAINERD, container_info->m_type);
612+
EXPECT_EQ("falco", container_info->m_name);
613+
EXPECT_EQ("docker.io/falcosecurity/falco:latest", container_info->m_image);
614+
EXPECT_EQ("sha256:8d0619a4da278dfe2772f75aa3cc74df0a250385de56085766035db5c9a062ed",
615+
container_info->m_imagedigest);
616+
EXPECT_EQ("4bc0e14060f4263acf658387e76715bd836a13b9ba44f48465bd0633a412dbd0",
617+
container_info->m_imageid);
618+
EXPECT_EQ(1073741824, container_info->m_memory_limit);
619+
EXPECT_EQ(102, container_info->m_cpu_shares);
620+
EXPECT_EQ(0, container_info->m_cpu_quota);
621+
EXPECT_EQ(100000, container_info->m_cpu_period);
622+
done = true;
623+
} else {
624+
EXPECT_EQ(alt_cri_container_id, tinfo->m_container_id);
625+
626+
const auto container_info =
627+
param.m_inspector->m_container_manager.get_container(tinfo->m_container_id);
628+
EXPECT_NE(container_info, nullptr);
629+
630+
EXPECT_EQ(sinsp_container_type::CT_CONTAINERD, container_info->m_type);
631+
EXPECT_EQ("falco-2", container_info->m_name);
632+
EXPECT_EQ("docker.io/falcosecurity/falco:latest", container_info->m_image);
633+
EXPECT_EQ("sha256:4df3aba7463d88aefbab4eb9e241468b0475f5e8c2c138d4cd811ca812975612",
634+
container_info->m_imagedigest);
635+
EXPECT_EQ("74d48ff156776f5fc1c625d72163eb539e63967bc87baf9158cdaca218c39465",
636+
container_info->m_imageid);
637+
EXPECT_EQ(1073741824, container_info->m_memory_limit);
638+
EXPECT_EQ(102, container_info->m_cpu_shares);
639+
EXPECT_EQ(0, container_info->m_cpu_quota);
640+
EXPECT_EQ(100000, container_info->m_cpu_period);
641+
done_alt = true;
642+
}
643+
};
644+
645+
before_capture_t setup = [&](sinsp* inspector) {
646+
inspector->set_docker_socket_path("");
647+
inspector->set_cri_socket_path(fake_cri_socket);
648+
inspector->add_cri_socket_path(alt_fake_cri_socket);
649+
inspector->set_cri_extra_queries(true);
650+
};
651+
652+
after_capture_t cleanup = [&](sinsp* inspector) {
653+
inspector->set_docker_socket_path(default_docker_socket);
654+
};
655+
656+
EXPECT_NO_FATAL_FAILURE({ event_capture::run(test, cri_callback, filter, setup, cleanup); });
657+
658+
// The fake server had to stay running the whole time in order
659+
// for the test to be succesful
660+
// Needed to reap the zombine if it exited
661+
waitpid(fake_cri_pid, NULL, WNOHANG);
662+
EXPECT_TRUE(fake_cri_handle.is_alive());
663+
664+
waitpid(alt_fake_cri_pid, NULL, WNOHANG);
665+
EXPECT_TRUE(alt_fake_cri_handle.is_alive());
666+
667+
EXPECT_TRUE(done);
668+
EXPECT_TRUE(done_alt);
669+
670+
fake_cri_handle.kill();
671+
alt_fake_cri_handle.kill();
672+
}

test/libsinsp_e2e/fake_cri/fake_cri.cpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,27 @@ class FakeCRIServer final : public runtime::v1alpha2::RuntimeService::Service {
2020
ContainerStatusResponse&& cs,
2121
PodSandboxStatusResponse&& ps,
2222
ListContainersResponse&& lc,
23-
const std::string& runtime_name):
23+
const std::string& runtime_name,
24+
const std::string& filter):
2425
m_delay_us(delay_us),
2526
m_container_status_response(cs),
2627
m_pod_sandbox_status_response(ps),
2728
m_list_containers_response(lc),
28-
m_runtime_name(runtime_name) {}
29+
m_runtime_name(runtime_name),
30+
m_filter(filter) {}
2931

3032
grpc::Status ContainerStatus(grpc::ServerContext* context,
3133
const ContainerStatusRequest* req,
3234
ContainerStatusResponse* resp) {
3335
usleep(m_delay_us);
36+
3437
if(CONTAINER_IDS.find(req->container_id()) == CONTAINER_IDS.end()) {
35-
std::cout << "CONTAINER NOT FOUND\n";
36-
return grpc::Status(
37-
grpc::StatusCode::NOT_FOUND,
38-
"fake_cri does not serve this container id: " + req->container_id());
38+
if(m_filter.empty() || (!m_filter.empty() && req->container_id().find(m_filter) != 0)) {
39+
std::cout << "CONTAINER NOT FOUND\n";
40+
return grpc::Status(
41+
grpc::StatusCode::NOT_FOUND,
42+
"fake_cri does not serve this container id: " + req->container_id());
43+
}
3944
}
4045
resp->CopyFrom(m_container_status_response);
4146
resp->mutable_status()->set_id(req->container_id());
@@ -87,6 +92,7 @@ class FakeCRIServer final : public runtime::v1alpha2::RuntimeService::Service {
8792
PodSandboxStatusResponse m_pod_sandbox_status_response;
8893
ListContainersResponse m_list_containers_response;
8994
std::string m_runtime_name;
95+
std::string m_filter;
9096
static const std::set<std::string> CONTAINER_IDS;
9197
static const std::set<std::string> POD_SANDBOX_IDS;
9298
};
@@ -124,7 +130,7 @@ int main(int argc, char** argv) {
124130
if(argc < 3) {
125131
fprintf(stderr,
126132
"Usage: fake_cri [--nodelay|--slow|--veryslow] listen_addr pb_file_prefix "
127-
"[runtime_name]\n");
133+
"[runtime_name] [container_id filter]\n");
128134
return 1;
129135
}
130136

@@ -145,6 +151,7 @@ int main(int argc, char** argv) {
145151
const char* addr = argv[1];
146152
const std::string pb_prefix(argv[2]);
147153
const std::string runtime(argc > 3 ? argv[3] : "containerd");
154+
const std::string filter(argc > 4 ? argv[4] : "");
148155

149156
ContainerStatusResponse cs;
150157
{
@@ -198,7 +205,7 @@ int main(int argc, char** argv) {
198205
}
199206
}
200207

201-
FakeCRIServer service(delay_us, std::move(cs), std::move(ps), std::move(lc), runtime);
208+
FakeCRIServer service(delay_us, std::move(cs), std::move(ps), std::move(lc), runtime, filter);
202209
FakeCRIImageServer image_service(std::move(is));
203210

204211
grpc::ServerBuilder builder;

test/libsinsp_e2e/fake_cri/fake_cri_multi_container.pb

Lines changed: 141 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
images {
2+
id: "74d48ff156776f5fc1c625d72163eb539e63967bc87baf9158cdaca218c39465"
3+
repo_tags: "docker.io/falcosecurity/falco:latest"
4+
repo_digests: "docker.io/falcosecurity/falco@sha256:4df3aba7463d88aefbab4eb9e241468b0475f5e8c2c138d4cd811ca812975612"
5+
size: 1402153176
6+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
containers {
2+
id: "593f5b76be2afc23c39aa7eaa29174eac353d32be5e006b710c01aacca4aa05e"
3+
pod_sandbox_id: "599ad631db94fef0be7722785e299ba128bd3f7f83a27dd00e4f94974eb5acfa"
4+
metadata {
5+
name: "falco-2"
6+
attempt: 0
7+
}
8+
state: CONTAINER_RUNNING
9+
created_at: 1545339739712670450
10+
image {
11+
image: "docker.io/falcosecurity/falco:latest"
12+
}
13+
image_ref: "docker.io/falcosecurity/falco@sha256:4df3aba7463d88aefbab4eb9e241468b0475f5e8c2c138d4cd811ca812975612"
14+
labels {
15+
key: "io.kubernetes.container.name"
16+
value: "falco"
17+
}
18+
labels {
19+
key: "io.kubernetes.pod.name"
20+
value: "falco-9bzbj"
21+
}
22+
labels {
23+
key: "io.kubernetes.pod.namespace"
24+
value: "default"
25+
}
26+
labels {
27+
key: "io.kubernetes.pod.uid"
28+
value: "893231bb-049a-11e9-9b30-0a583e8b7896"
29+
}
30+
annotations {
31+
key: "io.kubernetes.container.hash"
32+
value: "decd134"
33+
}
34+
annotations {
35+
key: "io.kubernetes.container.restartCount"
36+
value: "0"
37+
}
38+
annotations {
39+
key: "io.kubernetes.container.terminationMessagePath"
40+
value: "/dev/termination-log"
41+
}
42+
annotations {
43+
key: "io.kubernetes.container.terminationMessagePolicy"
44+
value: "File"
45+
}
46+
annotations {
47+
key: "io.kubernetes.pod.terminationGracePeriod"
48+
value: "5"
49+
}
50+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
status {
2+
metadata {
3+
name: "falco-9bzbj"
4+
uid: "893231bb-049a-11e9-9b30-0a583e8b7896"
5+
namespace: "default",
6+
attempt: 0
7+
}
8+
state: SANDBOX_READY
9+
created_at: 1545339738831266021
10+
network {
11+
ip: ""
12+
}
13+
linux {
14+
namespaces {
15+
options {
16+
network: NODE,
17+
pid: NODE,
18+
ipc: POD
19+
}
20+
}
21+
}
22+
labels {
23+
key: "app"
24+
value: "falco"
25+
}
26+
labels {
27+
key: "controller-revision-hash"
28+
value: "b5944cc84"
29+
}
30+
labels {
31+
key: "io.kubernetes.pod.name"
32+
value: "falco-9bzbj"
33+
}
34+
labels {
35+
key: "io.kubernetes.pod.namespace"
36+
value: "default"
37+
}
38+
labels {
39+
key: "io.kubernetes.pod.uid"
40+
value: "893231bb-049a-11e9-9b30-0a583e8b7896"
41+
}
42+
labels {
43+
key: "pod-template-generation"
44+
value: "1"
45+
}
46+
annotations {
47+
key: "kubernetes.io/config.seen"
48+
value: "2018-12-20T21:02:18.502551218Z"
49+
}
50+
annotations {
51+
key: "kubernetes.io/config.source"
52+
value: "api"
53+
}
54+
}
55+
info {
56+
key: "info"
57+
value: "{\"pid\":31353, \"processStatus\":\"running\", \"netNamespaceClosed\":false, \"image\":\"k8s.gcr.io/pause:3.1\", \"snapshotKey\":\"599ad631db94fef0be7722785e299ba128bd3f7f83a27dd00e4f94974eb5acfa\", \"snapshotter\":\"overlayfs\", \"runtime\":{\"runtimeType\":\"io.containerd.runtime.v1.linux\", \"runtimeEngine\":\"\", \"runtimeRoot\":\"\"}, \"config\":{\"metadata\":{\"name\":\"falco-9bzbj\", \"uid\":\"893231bb-049a-11e9-9b30-0a583e8b7896\", \"namespace\":\"default\"}, \"log_directory\":\"/var/log/pods/893231bb-049a-11e9-9b30-0a583e8b7896\", \"dns_config\":{\"servers\":[\"10.96.0.10\"], \"searches\":[\"default.svc.cluster.local\", \"svc.cluster.local\", \"cluster.local\", \"us-east-2.compute.internal\"], \"options\":[\"ndots:5\"]}, \"labels\":{\"app\":\"falco\", \"controller-revision-hash\":\"b5944cc84\", \"io.kubernetes.pod.name\":\"falco-9bzbj\", \"io.kubernetes.pod.namespace\":\"default\", \"io.kubernetes.pod.uid\":\"893231bb-049a-11e9-9b30-0a583e8b7896\", \"pod-template-generation\":\"1\"}, \"annotations\":{\"kubernetes.io/config.seen\":\"2018-12-20T21:02:18.502551218Z\", \"kubernetes.io/config.source\":\"api\"}, \"linux\":{\"cgroup_parent\":\"/kubepods/burstable/pod893231bb-049a-11e9-9b30-0a583e8b7896\", \"security_context\":{\"namespace_options\":{\"network\":2, \"pid\":2}, \"privileged\":true}}}, \"runtimeSpec\":{\"ociVersion\":\"1.0.1\", \"process\":{\"user\":{\"uid\":0, \"gid\":0}, \"args\":[\"/pause\"], \"env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"], \"cwd\":\"/\", \"capabilities\":{\"bounding\":[\"CAP_CHOWN\", \"CAP_DAC_OVERRIDE\", \"CAP_FSETID\", \"CAP_FOWNER\", \"CAP_MKNOD\", \"CAP_NET_RAW\", \"CAP_SETGID\", \"CAP_SETUID\", \"CAP_SETFCAP\", \"CAP_SETPCAP\", \"CAP_NET_BIND_SERVICE\", \"CAP_SYS_CHROOT\", \"CAP_KILL\", \"CAP_AUDIT_WRITE\"], \"effective\":[\"CAP_CHOWN\", \"CAP_DAC_OVERRIDE\", \"CAP_FSETID\", \"CAP_FOWNER\", \"CAP_MKNOD\", \"CAP_NET_RAW\", \"CAP_SETGID\", \"CAP_SETUID\", \"CAP_SETFCAP\", \"CAP_SETPCAP\", \"CAP_NET_BIND_SERVICE\", \"CAP_SYS_CHROOT\", \"CAP_KILL\", \"CAP_AUDIT_WRITE\"], \"inheritable\":[\"CAP_CHOWN\", \"CAP_DAC_OVERRIDE\", \"CAP_FSETID\", \"CAP_FOWNER\", \"CAP_MKNOD\", \"CAP_NET_RAW\", \"CAP_SETGID\", \"CAP_SETUID\", \"CAP_SETFCAP\", \"CAP_SETPCAP\", \"CAP_NET_BIND_SERVICE\", \"CAP_SYS_CHROOT\", \"CAP_KILL\", \"CAP_AUDIT_WRITE\"], \"permitted\":[\"CAP_CHOWN\", \"CAP_DAC_OVERRIDE\", \"CAP_FSETID\", \"CAP_FOWNER\", \"CAP_MKNOD\", \"CAP_NET_RAW\", \"CAP_SETGID\", \"CAP_SETUID\", \"CAP_SETFCAP\", \"CAP_SETPCAP\", \"CAP_NET_BIND_SERVICE\", \"CAP_SYS_CHROOT\", \"CAP_KILL\", \"CAP_AUDIT_WRITE\"]}, \"noNewPrivileges\":true, \"oomScoreAdj\":-998}, \"root\":{\"path\":\"rootfs\", \"readonly\":true}, \"mounts\":[{\"destination\":\"/proc\", \"type\":\"proc\", \"source\":\"proc\"}, {\"destination\":\"/dev\", \"type\":\"tmpfs\", \"source\":\"tmpfs\", \"options\":[\"nosuid\", \"strictatime\", \"mode=755\", \"size=65536k\"]}, {\"destination\":\"/dev/pts\", \"type\":\"devpts\", \"source\":\"devpts\", \"options\":[\"nosuid\", \"noexec\", \"newinstance\", \"ptmxmode=0666\", \"mode=0620\", \"gid=5\"]}, {\"destination\":\"/dev/mqueue\", \"type\":\"mqueue\", \"source\":\"mqueue\", \"options\":[\"nosuid\", \"noexec\", \"nodev\"]}, {\"destination\":\"/sys\", \"type\":\"sysfs\", \"source\":\"sysfs\", \"options\":[\"nosuid\", \"noexec\", \"nodev\", \"ro\"]}, {\"destination\":\"/dev/shm\", \"type\":\"bind\", \"source\":\"/run/containerd/io.containerd.grpc.v1.cri/sandboxes/599ad631db94fef0be7722785e299ba128bd3f7f83a27dd00e4f94974eb5acfa/shm\", \"options\":[\"rbind\", \"ro\"]}], \"annotations\":{\"io.kubernetes.cri.container-type\":\"sandbox\", \"io.kubernetes.cri.sandbox-id\":\"599ad631db94fef0be7722785e299ba128bd3f7f83a27dd00e4f94974eb5acfa\"}, \"linux\":{\"resources\":{\"devices\":[{\"allow\":false, \"access\":\"rwm\"}], \"cpu\":{\"shares\":2}}, \"cgroupsPath\":\"/kubepods/burstable/pod893231bb-049a-11e9-9b30-0a583e8b7896/599ad631db94fef0be7722785e299ba128bd3f7f83a27dd00e4f94974eb5acfa\", \"namespaces\":[{\"type\":\"ipc\"}, {\"type\":\"uts\"}, {\"type\":\"mount\"}], \"maskedPaths\":[\"/proc/acpi\", \"/proc/kcore\", \"/proc/keys\", \"/proc/latency_stats\", \"/proc/timer_list\", \"/proc/timer_stats\", \"/proc/sched_debug\", \"/sys/firmware\", \"/proc/scsi\"], \"readonlyPaths\":[\"/proc/asound\", \"/proc/bus\", \"/proc/fs\", \"/proc/irq\", \"/proc/sys\", \"/proc/sysrq-trigger\"]}}}"
58+
}

test/libsinsp_e2e/test_helper.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -551,16 +551,12 @@ void custom_container(const vector<string>& args) {
551551
}
552552
}
553553

554-
bool cri_container_set_cgroup() {
554+
bool _cri_container_set_cgroup(const std::string& id) {
555555
std::string cpu_cgroup;
556556
if(is_cgroupv2_mounted()) {
557-
cpu_cgroup =
558-
"/sys/fs/cgroup/system.slice/"
559-
"aec4c703604b4504df03108eef12e8256870eca8aabcb251855a35bf4f0337f1";
557+
cpu_cgroup = "/sys/fs/cgroup/system.slice/" + id;
560558
} else {
561-
cpu_cgroup =
562-
"/sys/fs/cgroup/cpu/docker/"
563-
"aec4c703604b4504df03108eef12e8256870eca8aabcb251855a35bf4f0337f1";
559+
cpu_cgroup = "/sys/fs/cgroup/cpu/docker/" + id;
564560
}
565561
struct stat s;
566562

@@ -599,6 +595,11 @@ bool cri_container_set_cgroup() {
599595
return true;
600596
}
601597

598+
bool cri_container_set_cgroup() {
599+
return _cri_container_set_cgroup(
600+
"aec4c703604b4504df03108eef12e8256870eca8aabcb251855a35bf4f0337f1");
601+
}
602+
602603
void cri_container_simple(char* const exargs[]) {
603604
signal(SIGCHLD, SIG_IGN);
604605
pid_t pid = fork();
@@ -619,9 +620,15 @@ void cri_container_simple(char* const exargs[]) {
619620
}
620621
}
621622

622-
void cri_container_echo(const vector<string>& args) {
623-
if(!cri_container_set_cgroup()) {
624-
return;
623+
void cri_container_echo(const std::vector<std::string>& args) {
624+
if(args.size() == 1) {
625+
if(!_cri_container_set_cgroup(args.at(0))) {
626+
return;
627+
}
628+
} else {
629+
if(!cri_container_set_cgroup()) {
630+
return;
631+
}
625632
}
626633

627634
char* const exargs[] = {(char*)"/bin/echo", (char*)"-n", nullptr};

userspace/libsinsp/container.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,13 @@ bool sinsp_container_manager::resolve_container(sinsp_threadinfo* tinfo,
142142
create_engines();
143143
}
144144

145+
size_t i = 0;
145146
for(auto& eng : m_container_engines) {
146147
matches = matches || eng->resolve(tinfo, query_os_for_missing_info);
147148
if(matches) {
148149
break;
149150
}
151+
i++;
150152
}
151153

152154
// Also possibly set the category for the threadinfo
@@ -581,12 +583,15 @@ void sinsp_container_manager::create_engines() {
581583

582584
const auto& cri_socket_paths = cri_settings.get_cri_unix_socket_paths();
583585

584-
for(const auto& socket_path : cri_socket_paths) {
585-
auto cri_engine = std::make_shared<container_engine::cri>(*this, socket_path);
586+
size_t engine_index = 0;
587+
for(auto socket_path : cri_socket_paths) {
588+
auto cri_engine =
589+
std::make_shared<container_engine::cri>(*this, socket_path, engine_index);
586590
m_container_engines.push_back(cri_engine);
587591
m_container_engine_by_type[CT_CRI].push_back(cri_engine);
588592
m_container_engine_by_type[CT_CRIO].push_back(cri_engine);
589593
m_container_engine_by_type[CT_CONTAINERD].push_back(cri_engine);
594+
engine_index++;
590595
}
591596
}
592597
if(m_container_engine_mask & (1 << CT_LXC)) {

0 commit comments

Comments
 (0)