This is an automated email from the ASF dual-hosted git repository.
bmahler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
The following commit(s) were added to refs/heads/master by this push:
new 2c0f1bc91 [device manager] Add wildcard conversion helper.
2c0f1bc91 is described below
commit 2c0f1bc917b47316266ef81e77c9ceb0f0539280
Author: Jason Zhou <[email protected]>
AuthorDate: Fri Aug 2 10:09:44 2024 -0700
[device manager] Add wildcard conversion helper.
We currently have a wildcard conversion helper but it was only
available for use inside the device manager test file.
This change pulls out the helper and makes it available as a static
function for use outside just tests.
Review: https://reviews.apache.org/r/75137/
---
.../device_manager/device_manager.cpp | 32 ++++++++++++
.../device_manager/device_manager.hpp | 3 ++
src/tests/device_manager_tests.cpp | 57 +++++-----------------
3 files changed, 48 insertions(+), 44 deletions(-)
diff --git a/src/slave/containerizer/device_manager/device_manager.cpp
b/src/slave/containerizer/device_manager/device_manager.cpp
index fbc532d6e..e613323dc 100644
--- a/src/slave/containerizer/device_manager/device_manager.cpp
+++ b/src/slave/containerizer/device_manager/device_manager.cpp
@@ -77,6 +77,38 @@ vector<Entry> convert_to_entries(
}
+Try<vector<DeviceManager::NonWildcardEntry>>
+ DeviceManager::NonWildcardEntry::create(
+ const vector<cgroups::devices::Entry>& entries)
+{
+ vector<DeviceManager::NonWildcardEntry> non_wildcards = {};
+
+ foreach (const cgroups::devices::Entry& entry, entries) {
+ if (entry.selector.has_wildcard()) {
+ return Error("Entry cannot have wildcard");
+ }
+ DeviceManager::NonWildcardEntry non_wildcard;
+ non_wildcard.access = entry.access;
+ non_wildcard.selector.major = *entry.selector.major;
+ non_wildcard.selector.minor = *entry.selector.minor;
+ non_wildcard.selector.type = [&]() {
+ switch (entry.selector.type) {
+ case cgroups::devices::Entry::Selector::Type::BLOCK:
+ return DeviceManager::NonWildcardEntry::Selector::Type::BLOCK;
+ case cgroups::devices::Entry::Selector::Type::CHARACTER:
+ return DeviceManager::NonWildcardEntry::Selector::Type::CHARACTER;
+ case cgroups::devices::Entry::Selector::Type::ALL:
+ UNREACHABLE();
+ }
+ UNREACHABLE();
+ }();
+ non_wildcards.push_back(non_wildcard);
+ }
+
+ return non_wildcards;
+}
+
+
class DeviceManagerProcess : public process::Process<DeviceManagerProcess>
{
public:
diff --git a/src/slave/containerizer/device_manager/device_manager.hpp
b/src/slave/containerizer/device_manager/device_manager.hpp
index a987895d5..853350f70 100644
--- a/src/slave/containerizer/device_manager/device_manager.hpp
+++ b/src/slave/containerizer/device_manager/device_manager.hpp
@@ -52,6 +52,9 @@ public:
// Used to enforce non-wildcard entry restrictions at compile time.
struct NonWildcardEntry
{
+ static Try<std::vector<NonWildcardEntry>> create(
+ const std::vector<cgroups::devices::Entry>& entries);
+
struct Selector
{
enum class Type { BLOCK, CHARACTER };
diff --git a/src/tests/device_manager_tests.cpp
b/src/tests/device_manager_tests.cpp
index b818a5bd9..c4e9b8c58 100644
--- a/src/tests/device_manager_tests.cpp
+++ b/src/tests/device_manager_tests.cpp
@@ -48,37 +48,6 @@ namespace tests {
const string TEST_CGROUP = "test";
-Try<vector<DeviceManager::NonWildcardEntry>> convert_to_non_wildcards(
- const vector<devices::Entry>& entries)
-{
- vector<DeviceManager::NonWildcardEntry> non_wildcards = {};
-
- foreach (const devices::Entry& entry, entries) {
- if (entry.selector.has_wildcard()) {
- return Error("Entry cannot have wildcard");
- }
- DeviceManager::NonWildcardEntry non_wildcard;
- non_wildcard.access = entry.access;
- non_wildcard.selector.major = *entry.selector.major;
- non_wildcard.selector.minor = *entry.selector.minor;
- non_wildcard.selector.type = [&]() {
- switch (entry.selector.type) {
- case cgroups::devices::Entry::Selector::Type::BLOCK:
- return DeviceManager::NonWildcardEntry::Selector::Type::BLOCK;
- case cgroups::devices::Entry::Selector::Type::CHARACTER:
- return DeviceManager::NonWildcardEntry::Selector::Type::CHARACTER;
- case cgroups::devices::Entry::Selector::Type::ALL:
- UNREACHABLE();
- }
- UNREACHABLE();
- }();
- non_wildcards.push_back(non_wildcard);
- }
-
- return non_wildcards;
-}
-
-
class DeviceManagerTest : public TemporaryDirectoryTest
{
void SetUp() override
@@ -105,7 +74,7 @@ class DeviceManagerTest : public TemporaryDirectoryTest
TEST(NonWildcardEntry, NonWildcardFromWildcard)
{
- EXPECT_ERROR(convert_to_non_wildcards(
+ EXPECT_ERROR(DeviceManager::NonWildcardEntry::create(
vector<devices::Entry>{*devices::Entry::parse("c *:1 w")}));
}
@@ -125,7 +94,7 @@ TEST_F(DeviceManagerTest, ROOT_DeviceManagerConfigure_Normal)
AWAIT_ASSERT_READY(dm->configure(
TEST_CGROUP,
allow_list,
- CHECK_NOTERROR(convert_to_non_wildcards(deny_list))));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(deny_list))));
Future<DeviceManager::CgroupDeviceAccess> cgroup_state =
dm->state(TEST_CGROUP);
@@ -173,7 +142,7 @@ TEST_F(DeviceManagerTest,
ROOT_DeviceManagerReconfigure_Normal)
AWAIT_ASSERT_READY(dm->configure(
TEST_CGROUP,
allow_list,
- CHECK_NOTERROR(convert_to_non_wildcards(deny_list))));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(deny_list))));
Future<DeviceManager::CgroupDeviceAccess> cgroup_state =
dm->state(TEST_CGROUP);
@@ -187,8 +156,8 @@ TEST_F(DeviceManagerTest,
ROOT_DeviceManagerReconfigure_Normal)
AWAIT_ASSERT_READY(dm->reconfigure(
TEST_CGROUP,
- CHECK_NOTERROR(convert_to_non_wildcards(additions)),
- CHECK_NOTERROR(convert_to_non_wildcards(removals))));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(additions)),
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(removals))));
cgroup_state = dm->state(TEST_CGROUP);
@@ -238,7 +207,7 @@ TEST_F(DeviceManagerTest,
ROOT_DeviceManagerConfigure_AllowMatchesDeny)
AWAIT_ASSERT_FAILED(dm->configure(
TEST_CGROUP,
allow_list,
- CHECK_NOTERROR(convert_to_non_wildcards(deny_list))));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(deny_list))));
}
@@ -256,7 +225,7 @@ TEST_F(DeviceManagerTest,
ROOT_DeviceManagerConfigure_AllowWildcard)
AWAIT_ASSERT_READY(dm->configure(
TEST_CGROUP,
allow_list,
- CHECK_NOTERROR(convert_to_non_wildcards(deny_list))));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(deny_list))));
Future<DeviceManager::CgroupDeviceAccess> cgroup_state =
dm->state(TEST_CGROUP);
@@ -283,8 +252,8 @@ TEST_F(DeviceManagerTest,
ROOT_DeviceManagerGetDiffState_AllowMatchesDeny)
AWAIT_ASSERT_FAILED(dm->reconfigure(
TEST_CGROUP,
- CHECK_NOTERROR(convert_to_non_wildcards(additions)),
- CHECK_NOTERROR(convert_to_non_wildcards(removals))));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(additions)),
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(removals))));
}
@@ -302,7 +271,7 @@ TEST_F(DeviceManagerTest, ROOT_DeviceManagerRemove)
AWAIT_ASSERT_READY(dm->configure(
TEST_CGROUP,
allow_list,
- CHECK_NOTERROR(convert_to_non_wildcards(deny_list))));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(deny_list))));
Future<DeviceManager::CgroupDeviceAccess> cgroup_state =
dm->state(TEST_CGROUP);
@@ -361,7 +330,7 @@ TEST_P(DeviceManagerGetDiffStateTestFixture,
ROOT_DeviceManagerGetDiffState)
AWAIT_ASSERT_READY(dm->configure(
TEST_CGROUP,
setup_allow,
- CHECK_NOTERROR(convert_to_non_wildcards(setup_deny))));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(setup_deny))));
Future<DeviceManager::CgroupDeviceAccess> cgroup_state =
dm->state(TEST_CGROUP);
@@ -372,8 +341,8 @@ TEST_P(DeviceManagerGetDiffStateTestFixture,
ROOT_DeviceManagerGetDiffState)
cgroup_state = dm->apply_diff(
cgroup_state.get(),
- CHECK_NOTERROR(convert_to_non_wildcards(additions)),
- CHECK_NOTERROR(convert_to_non_wildcards(removals)));
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(additions)),
+ CHECK_NOTERROR(DeviceManager::NonWildcardEntry::create(removals)));
EXPECT_EQ(reconfigured_allow, cgroup_state->allow_list);
EXPECT_EQ(reconfigured_deny, cgroup_state->deny_list);