From 43a16fe723b00bf3cbe7c4965d75b323aacda70d Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Fri, 19 Aug 2022 13:54:17 +0900 Subject: [PATCH] Delay server ready timing until creating cache Change-Id: I3ee85c5c6cff1cbb5455df25b363cc0768da6e1c Signed-off-by: Changgyu Choi --- src/server/create_cache_request.cc | 6 +++++- src/server/create_cache_request.hh | 12 +++++++++-- src/server/main.cc | 23 +++++++-------------- .../create_cache_request_handler.cc | 9 ++++---- .../create_cache_request_handler.hh | 3 ++- src/server/runner.cc | 24 +++++++++++++++++++--- src/server/runner.hh | 12 ++++++----- 7 files changed, 56 insertions(+), 33 deletions(-) diff --git a/src/server/create_cache_request.cc b/src/server/create_cache_request.cc index 2ad143a..d0a4faa 100644 --- a/src/server/create_cache_request.cc +++ b/src/server/create_cache_request.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,6 +42,10 @@ pkgmgr_common::ReqType CreateCacheRequest::GetRequestType() { } bool CreateCacheRequest::SendData(unsigned char* data, int size) { + bool ret = static_cast(data[0]); + if (listener_ != nullptr) + listener_->OnCreateCacheDone(ret); + return true; } diff --git a/src/server/create_cache_request.hh b/src/server/create_cache_request.hh index 88e6372..b36ce05 100644 --- a/src/server/create_cache_request.hh +++ b/src/server/create_cache_request.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,7 +30,14 @@ namespace pkgmgr_server { class EXPORT_API CreateCacheRequest : public PkgRequest { public: - CreateCacheRequest(uid_t uid) : uid_(uid) {} + class IEvent { + public: + virtual ~IEvent() {} + virtual void OnCreateCacheDone(bool success) = 0; + }; + + CreateCacheRequest(uid_t uid, IEvent* listener) + : uid_(uid), listener_(listener) {} const unsigned char* GetData() override; int GetSize() override; pid_t GetSenderPID() override; @@ -41,6 +48,7 @@ class EXPORT_API CreateCacheRequest : public PkgRequest { private: uid_t uid_; + IEvent* listener_; }; } // namespace pkgmgr_server diff --git a/src/server/main.cc b/src/server/main.cc index fc6af21..3061bcf 100644 --- a/src/server/main.cc +++ b/src/server/main.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,14 @@ * limitations under the License. */ -#include -#include -#include -#include -#include #include #include +#include +#include +#include +#include #include +#include #include #include @@ -117,16 +117,7 @@ static void __finish(void) { static void __pkgmgr_init() { runner = new pkgmgr_server::Runner(5); - - g_idle_add([](gpointer data) -> gboolean { - int fd = creat("/run/.pkginfo_server_ready", - S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - if (fd != -1) - close(fd); - - sd_notify(0, "READY=1"); - return G_SOURCE_REMOVE; - }, nullptr); + sd_notify(0, "READY=1"); } int main() { diff --git a/src/server/request_handler/create_cache_request_handler.cc b/src/server/request_handler/create_cache_request_handler.cc index 012d746..f70cf2d 100644 --- a/src/server/request_handler/create_cache_request_handler.cc +++ b/src/server/request_handler/create_cache_request_handler.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved +// Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd All Rights Reserved // Use of this source code is governed by an apache-2.0 license that can be // found in the LICENSE file. @@ -69,13 +69,12 @@ bool CreateCacheRequestHandler::HandleRequest(const unsigned char* data, int siz psd::CacheDBHandler db(GetUID(), GetPID()); db.SetLocale(locale); - int ret = db.Execute(); - - return ret == PMINFO_R_OK; + success_ = (db.Execute() == PMINFO_R_OK); + return success_; } std::vector CreateCacheRequestHandler::ExtractResult() { - return {}; + return { static_cast(success_) }; } void CreateCacheRequestHandler::PreExec() { diff --git a/src/server/request_handler/create_cache_request_handler.hh b/src/server/request_handler/create_cache_request_handler.hh index f92ec4c..0ec4eba 100644 --- a/src/server/request_handler/create_cache_request_handler.hh +++ b/src/server/request_handler/create_cache_request_handler.hh @@ -1,4 +1,4 @@ -// Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved +// Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd All Rights Reserved // Use of this source code is governed by an apache-2.0 license that can be // found in the LICENSE file. @@ -45,6 +45,7 @@ class EXPORT_API CreateCacheRequestHandler : public AbstractRequestHandler { }; private: + bool success_ = false; std::shared_ptr result_; Scheduler scheduler_; }; diff --git a/src/server/runner.cc b/src/server/runner.cc index d8f8b76..85d3acf 100644 --- a/src/server/runner.cc +++ b/src/server/runner.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -62,7 +62,7 @@ Runner::Runner(unsigned int thread_num) { thread_pool_->SetLocale(pkgmgr_common::SystemLocale::GetInst().Get()); if (CacheFlag::SetPreparing()) - QueueRequest(std::make_shared(default_uid_)); + QueueRequest(std::make_shared(default_uid_, this)); LOGI("Start Runner"); } @@ -85,7 +85,7 @@ int Runner::OnReceiveRequest(int fd, GIOCondition cond, void* user_data) { if (CacheFlag::SetPreparing()) { runner->QueueRequest( - std::make_shared(runner->default_uid_)); + std::make_shared(runner->default_uid_, runner)); } runner->QueueRequest(std::move(req)); @@ -101,6 +101,24 @@ bool Runner::QueueRequest(std::shared_ptr req) { return true; } +void Runner::OnCreateCacheDone(bool success) { + static bool ready = false; + if (success && !ready) { + ready = true; + LOG(WARNING) << "pkginfo-server is ready"; + g_idle_add( + [](gpointer data) -> gboolean { + int fd = creat("/run/.pkginfo_server_ready", + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (fd != -1) + close(fd); + + return G_SOURCE_REMOVE; + }, + nullptr); + } +} + void Runner::SetCPUInheritance() { int ret; resource_pid_t resource_st = { 0, }; diff --git a/src/server/runner.hh b/src/server/runner.hh index 8702a6a..157531c 100644 --- a/src/server/runner.hh +++ b/src/server/runner.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved + * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,9 +24,10 @@ #include #include +#include "create_cache_request.hh" #include "server_socket.hh" -#include "worker_thread.hh" #include "system_locale.hh" +#include "worker_thread.hh" namespace pkgmgr_server { @@ -34,14 +35,15 @@ namespace pkgmgr_server { #define EXPORT_API __attribute__((visibility("default"))) #endif -class EXPORT_API Runner - : public pkgmgr_common::SystemLocale::IEvent { +class EXPORT_API Runner : public pkgmgr_common::SystemLocale::IEvent, + public CreateCacheRequest::IEvent { public: - Runner(unsigned int thread_num); + explicit Runner(unsigned int thread_num); ~Runner(); bool QueueRequest(std::shared_ptr req); void OnChanged(const std::string& locale) override; + void OnCreateCacheDone(bool success) override; private: static int OnReceiveRequest(int fd, GIOCondition cond, void* user_data); -- 2.7.4