RESTRICT AUTOMERGE: snapuserd: Run snapuserd threads in-process. am: 1f527c34dd
Original change: https://android-review.googlesource.com/c/platform/system/core/+/2487341 Change-Id: I9e8ad7b02fc08df90a641332abbf9e51e25c78e8 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
1d79525a7b
5 changed files with 33 additions and 68 deletions
|
|
@ -164,7 +164,7 @@ cc_binary {
|
|||
}
|
||||
|
||||
cc_test {
|
||||
name: "cow_snapuserd_test",
|
||||
name: "snapuserd_test_legacy",
|
||||
defaults: [
|
||||
"fs_mgr_defaults",
|
||||
"libsnapshot_cow_defaults",
|
||||
|
|
@ -216,16 +216,17 @@ cc_test {
|
|||
],
|
||||
static_libs: [
|
||||
"libbrotli",
|
||||
"libcutils_sockets",
|
||||
"libdm",
|
||||
"libext4_utils",
|
||||
"libfs_mgr",
|
||||
"libgflags",
|
||||
"libgtest",
|
||||
"libsnapshot_cow",
|
||||
"libsnapshot_snapuserd",
|
||||
"libcutils_sockets",
|
||||
"libz",
|
||||
"libfs_mgr",
|
||||
"libdm",
|
||||
"libext4_utils",
|
||||
"libsnapuserd",
|
||||
"liburing",
|
||||
"libgflags",
|
||||
"libz",
|
||||
],
|
||||
include_dirs: ["bionic/libc/kernel"],
|
||||
header_libs: [
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ namespace snapshot {
|
|||
|
||||
static constexpr uint8_t kMaxMergeThreads = 2;
|
||||
|
||||
HandlerThread::HandlerThread(std::shared_ptr<SnapshotHandler> snapuserd)
|
||||
: snapuserd_(snapuserd), misc_name_(snapuserd_->GetMiscName()) {}
|
||||
|
||||
void HandlerThread::FreeResources() {
|
||||
// Each worker thread holds a reference to snapuserd.
|
||||
// Clear them so that all the resources
|
||||
|
|
|
|||
|
|
@ -433,11 +433,6 @@ bool SnapshotHandler::IsIouringSupported() {
|
|||
struct utsname uts;
|
||||
unsigned int major, minor;
|
||||
|
||||
if (android::base::GetBoolProperty("snapuserd.test.io_uring.force_disable", false)) {
|
||||
SNAP_LOG(INFO) << "io_uring disabled for testing";
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((uname(&uts) != 0) || (sscanf(uts.release, "%u.%u", &major, &minor) != 2)) {
|
||||
SNAP_LOG(ERROR) << "Could not parse the kernel version from uname. "
|
||||
<< " io_uring not supported";
|
||||
|
|
|
|||
|
|
@ -83,9 +83,6 @@ void UserSnapshotServer::ShutdownThreads() {
|
|||
handlers_->JoinAllThreads();
|
||||
}
|
||||
|
||||
HandlerThread::HandlerThread(std::shared_ptr<SnapshotHandler> snapuserd)
|
||||
: snapuserd_(snapuserd), misc_name_(snapuserd_->GetMiscName()) {}
|
||||
|
||||
bool UserSnapshotServer::Sendmsg(android::base::borrowed_fd fd, const std::string& msg) {
|
||||
ssize_t ret = TEMP_FAILURE_RETRY(send(fd.get(), msg.data(), msg.size(), MSG_NOSIGNAL));
|
||||
if (ret < 0) {
|
||||
|
|
|
|||
|
|
@ -37,9 +37,9 @@
|
|||
#include <libdm/dm.h>
|
||||
#include <libdm/loop_control.h>
|
||||
#include <libsnapshot/cow_writer.h>
|
||||
#include <snapuserd/snapuserd_client.h>
|
||||
#include <storage_literals/storage_literals.h>
|
||||
|
||||
#include "handler_manager.h"
|
||||
#include "snapuserd_core.h"
|
||||
|
||||
DEFINE_string(force_config, "", "Force testing mode with iouring disabled");
|
||||
|
|
@ -54,8 +54,6 @@ using namespace std::chrono_literals;
|
|||
using namespace android::dm;
|
||||
using namespace std;
|
||||
|
||||
static constexpr char kSnapuserdSocketTest[] = "snapuserdTest";
|
||||
|
||||
class Tempdevice {
|
||||
public:
|
||||
Tempdevice(const std::string& name, const DmTable& table)
|
||||
|
|
@ -68,15 +66,15 @@ class Tempdevice {
|
|||
}
|
||||
~Tempdevice() {
|
||||
if (valid_) {
|
||||
dm_.DeleteDevice(name_);
|
||||
dm_.DeleteDeviceIfExists(name_);
|
||||
}
|
||||
}
|
||||
bool Destroy() {
|
||||
if (!valid_) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
valid_ = false;
|
||||
return dm_.DeleteDevice(name_);
|
||||
return dm_.DeleteDeviceIfExists(name_);
|
||||
}
|
||||
const std::string& path() const { return path_; }
|
||||
const std::string& name() const { return name_; }
|
||||
|
|
@ -138,7 +136,6 @@ class SnapuserdTest : public ::testing::Test {
|
|||
void SetDeviceControlName();
|
||||
void InitDaemon();
|
||||
void CreateDmUserDevice();
|
||||
void StartSnapuserdDaemon();
|
||||
|
||||
unique_ptr<LoopDevice> base_loop_;
|
||||
unique_ptr<Tempdevice> dmuser_dev_;
|
||||
|
|
@ -148,9 +145,9 @@ class SnapuserdTest : public ::testing::Test {
|
|||
|
||||
unique_fd base_fd_;
|
||||
std::unique_ptr<TemporaryFile> cow_system_;
|
||||
std::unique_ptr<SnapuserdClient> client_;
|
||||
std::unique_ptr<uint8_t[]> orig_buffer_;
|
||||
std::unique_ptr<uint8_t[]> merged_buffer_;
|
||||
SnapshotHandlerManager handlers_;
|
||||
bool setup_ok_ = false;
|
||||
bool merge_ok_ = false;
|
||||
size_t size_ = 100_MiB;
|
||||
|
|
@ -180,9 +177,9 @@ void SnapuserdTest::Shutdown() {
|
|||
ASSERT_TRUE(dmuser_dev_->Destroy());
|
||||
|
||||
auto misc_device = "/dev/dm-user/" + system_device_ctrl_name_;
|
||||
ASSERT_TRUE(client_->WaitForDeviceDelete(system_device_ctrl_name_));
|
||||
ASSERT_TRUE(handlers_.DeleteHandler(system_device_ctrl_name_));
|
||||
ASSERT_TRUE(android::fs_mgr::WaitForFileDeleted(misc_device, 10s));
|
||||
ASSERT_TRUE(client_->DetachSnapuserd());
|
||||
handlers_.TerminateMergeThreads();
|
||||
}
|
||||
|
||||
bool SnapuserdTest::SetupDefault() {
|
||||
|
|
@ -217,8 +214,6 @@ bool SnapuserdTest::SetupCopyOverlap_2() {
|
|||
bool SnapuserdTest::SetupDaemon() {
|
||||
SetDeviceControlName();
|
||||
|
||||
StartSnapuserdDaemon();
|
||||
|
||||
CreateDmUserDevice();
|
||||
InitCowDevice();
|
||||
InitDaemon();
|
||||
|
|
@ -228,20 +223,6 @@ bool SnapuserdTest::SetupDaemon() {
|
|||
return setup_ok_;
|
||||
}
|
||||
|
||||
void SnapuserdTest::StartSnapuserdDaemon() {
|
||||
pid_t pid = fork();
|
||||
ASSERT_GE(pid, 0);
|
||||
if (pid == 0) {
|
||||
std::string arg0 = "/system/bin/snapuserd";
|
||||
std::string arg1 = "-socket="s + kSnapuserdSocketTest;
|
||||
char* const argv[] = {arg0.data(), arg1.data(), nullptr};
|
||||
ASSERT_GE(execv(arg0.c_str(), argv), 0);
|
||||
} else {
|
||||
client_ = SnapuserdClient::Connect(kSnapuserdSocketTest, 10s);
|
||||
ASSERT_NE(client_, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void SnapuserdTest::CreateBaseDevice() {
|
||||
unique_fd rnd_fd;
|
||||
|
||||
|
|
@ -606,9 +587,17 @@ void SnapuserdTest::CreateCowDevice() {
|
|||
}
|
||||
|
||||
void SnapuserdTest::InitCowDevice() {
|
||||
uint64_t num_sectors = client_->InitDmUserCow(system_device_ctrl_name_, cow_system_->path,
|
||||
base_loop_->device(), base_loop_->device());
|
||||
ASSERT_NE(num_sectors, 0);
|
||||
bool use_iouring = true;
|
||||
if (FLAGS_force_config == "iouring_disabled") {
|
||||
use_iouring = false;
|
||||
}
|
||||
|
||||
auto handler =
|
||||
handlers_.AddHandler(system_device_ctrl_name_, cow_system_->path, base_loop_->device(),
|
||||
base_loop_->device(), 1, use_iouring, false);
|
||||
ASSERT_NE(handler, nullptr);
|
||||
ASSERT_NE(handler->snapuserd(), nullptr);
|
||||
ASSERT_NE(handler->snapuserd()->GetNumSectors(), 0);
|
||||
}
|
||||
|
||||
void SnapuserdTest::SetDeviceControlName() {
|
||||
|
|
@ -646,13 +635,12 @@ void SnapuserdTest::CreateDmUserDevice() {
|
|||
}
|
||||
|
||||
void SnapuserdTest::InitDaemon() {
|
||||
bool ok = client_->AttachDmUser(system_device_ctrl_name_);
|
||||
ASSERT_TRUE(ok);
|
||||
ASSERT_TRUE(handlers_.StartHandler(system_device_ctrl_name_));
|
||||
}
|
||||
|
||||
void SnapuserdTest::CheckMergeCompletion() {
|
||||
while (true) {
|
||||
double percentage = client_->GetMergePercent();
|
||||
double percentage = handlers_.GetMergePercentage();
|
||||
if ((int)percentage == 100) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -667,8 +655,6 @@ void SnapuserdTest::SetupImpl() {
|
|||
|
||||
SetDeviceControlName();
|
||||
|
||||
StartSnapuserdDaemon();
|
||||
|
||||
CreateDmUserDevice();
|
||||
InitCowDevice();
|
||||
InitDaemon();
|
||||
|
|
@ -684,8 +670,7 @@ bool SnapuserdTest::Merge() {
|
|||
}
|
||||
|
||||
void SnapuserdTest::StartMerge() {
|
||||
bool ok = client_->InitiateMerge(system_device_ctrl_name_);
|
||||
ASSERT_TRUE(ok);
|
||||
ASSERT_TRUE(handlers_.InitiateMerge(system_device_ctrl_name_));
|
||||
}
|
||||
|
||||
void SnapuserdTest::ValidateMerge() {
|
||||
|
|
@ -699,7 +684,6 @@ void SnapuserdTest::SimulateDaemonRestart() {
|
|||
Shutdown();
|
||||
std::this_thread::sleep_for(500ms);
|
||||
SetDeviceControlName();
|
||||
StartSnapuserdDaemon();
|
||||
CreateDmUserDevice();
|
||||
InitCowDevice();
|
||||
InitDaemon();
|
||||
|
|
@ -859,20 +843,5 @@ int main(int argc, char** argv) {
|
|||
|
||||
gflags::ParseCommandLineFlags(&argc, &argv, false);
|
||||
|
||||
android::base::SetProperty("ctl.stop", "snapuserd");
|
||||
|
||||
if (FLAGS_force_config == "iouring_disabled") {
|
||||
if (!android::base::SetProperty("snapuserd.test.io_uring.force_disable", "1")) {
|
||||
return testing::AssertionFailure()
|
||||
<< "Failed to disable property: snapuserd.test.io_uring.disabled";
|
||||
}
|
||||
}
|
||||
|
||||
int ret = RUN_ALL_TESTS();
|
||||
|
||||
if (FLAGS_force_config == "iouring_disabled") {
|
||||
android::base::SetProperty("snapuserd.test.io_uring.force_disable", "0");
|
||||
}
|
||||
|
||||
return ret;
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue