support compatible compile with rust 1.60

(cherry picked from commit c712b53f7e1e6f4f189a459deff675e096440f1f)
This commit is contained in:
Yangyang Shen 2023-05-27 09:09:40 +08:00 committed by openeuler-sync-bot
parent 995ae7bcc5
commit 22cb3fb0e7
2 changed files with 426 additions and 1 deletions

View File

@ -0,0 +1,420 @@
From cd97d90314143141cecd694ca5f4a0edad35c257 Mon Sep 17 00:00:00 2001
From: chenjiayi <chenjiayi22@huawei.com>
Date: Thu, 18 May 2023 11:45:17 +0800
Subject: [PATCH] fix: compatible with rustc 1.60
---
coms/service/src/rentry.rs | 45 +++++++++++++++-----
coms/socket/src/rentry.rs | 9 +++-
core/bin/main.rs | 3 +-
core/bin/unit/entry/config.rs | 9 +++-
core/bin/unit/rentry.rs | 9 +++-
core/lib/unit/kill.rs | 9 +++-
exts/sctl/src/main.rs | 71 +++++++-------------------------
libs/device/src/device_action.rs | 9 +++-
8 files changed, 88 insertions(+), 76 deletions(-)
diff --git a/coms/service/src/rentry.rs b/coms/service/src/rentry.rs
index 175828e..a68a3df 100644
--- a/coms/service/src/rentry.rs
+++ b/coms/service/src/rentry.rs
@@ -39,10 +39,9 @@ struct ServiceReDb<K, V>(ReDb<K, V>);
const RELI_DB_HSERVICE_CONF: &str = "svcconf";
const RELI_DB_HSERVICE_MNG: &str = "svcmng";
-#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, Clone, Copy, Default)]
+#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, Clone, Copy)]
pub(super) enum ServiceType {
#[serde(alias = "simple")]
- #[default]
Simple,
#[serde(alias = "forking")]
Forking,
@@ -56,6 +55,12 @@ pub(super) enum ServiceType {
TypeInvalid = -1,
}
+impl Default for ServiceType {
+ fn default() -> Self {
+ Self::Simple
+ }
+}
+
impl DeserializeWith for ServiceType {
type Item = Self;
fn deserialize_with<'de, D>(de: D) -> Result<Self, D::Error>
@@ -82,10 +87,9 @@ pub(super) enum NotifyAccess {
Main,
}
-#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, Clone, Copy, Default)]
+#[derive(PartialEq, Eq, Serialize, Deserialize, Debug, Clone, Copy)]
pub(super) enum ServiceRestart {
#[serde(alias = "no")]
- #[default]
No,
#[serde(alias = "on-success")]
OnSuccess,
@@ -101,6 +105,12 @@ pub(super) enum ServiceRestart {
Always,
}
+impl Default for ServiceRestart {
+ fn default() -> Self {
+ Self::No
+ }
+}
+
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ExitStatusSet {
status: Vec<u8>,
@@ -163,14 +173,19 @@ impl DeserializeWith for ExitStatusSet {
}
}
-#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, Default)]
+#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum PreserveMode {
- #[default]
No,
Yes,
Restart,
}
+impl Default for PreserveMode {
+ fn default() -> Self {
+ Self::No
+ }
+}
+
impl DeserializeWith for PreserveMode {
type Item = Self;
@@ -330,9 +345,8 @@ impl ServiceReConf {
}
}
-#[derive(PartialEq, Eq, Debug, Copy, Clone, Serialize, Deserialize, EnumDisplay, Default)]
+#[derive(PartialEq, Eq, Debug, Copy, Clone, Serialize, Deserialize, EnumDisplay)]
pub(super) enum ServiceState {
- #[default]
Dead,
Condition,
StartPre,
@@ -354,7 +368,13 @@ pub(super) enum ServiceState {
Cleaning,
}
-#[derive(PartialEq, Eq, Debug, Copy, Clone, Serialize, Deserialize, Default)]
+impl Default for ServiceState {
+ fn default() -> Self {
+ Self::Dead
+ }
+}
+
+#[derive(PartialEq, Eq, Debug, Copy, Clone, Serialize, Deserialize)]
pub(super) enum ServiceResult {
Success,
FailureProtocol,
@@ -366,10 +386,15 @@ pub(super) enum ServiceResult {
FailureCoreDump,
FailureTimeout,
SkipCondition,
- #[default]
ResultInvalid,
}
+impl Default for ServiceResult {
+ fn default() -> Self {
+ Self::ResultInvalid
+ }
+}
+
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Copy, Clone, Serialize, Deserialize)]
pub(super) enum ServiceCommand {
Condition,
diff --git a/coms/socket/src/rentry.rs b/coms/socket/src/rentry.rs
index 2409c84..44f5be3 100644
--- a/coms/socket/src/rentry.rs
+++ b/coms/socket/src/rentry.rs
@@ -146,15 +146,20 @@ pub(super) enum SocketCommand {
StopPost,
}
-#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize, Default)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub(super) enum PortType {
- #[default]
Socket,
Fifo,
Special,
Invalid,
}
+impl Default for PortType {
+ fn default() -> Self {
+ Self::Socket
+ }
+}
+
#[derive(Clone, Debug, Serialize, Deserialize)]
struct SocketReMng {
state: SocketState,
diff --git a/core/bin/main.rs b/core/bin/main.rs
index 1949cae..26638d6 100644
--- a/core/bin/main.rs
+++ b/core/bin/main.rs
@@ -186,7 +186,8 @@ fn do_reexecute(args: &Vec<String>, reload: bool) {
// Remove '--deserialize' from the previous parameter first, as this may be a fault recovery start.
for index in argv.iter().enumerate() {
if index.1 == "--deserialize" {
- argv.remove(index.0);
+ let idx = index.0;
+ argv.remove(idx);
break;
}
}
diff --git a/core/bin/unit/entry/config.rs b/core/bin/unit/entry/config.rs
index 9e8cc62..e629c77 100644
--- a/core/bin/unit/entry/config.rs
+++ b/core/bin/unit/entry/config.rs
@@ -31,10 +31,9 @@ pub(crate) struct UeConfig {
}
#[allow(missing_docs)]
-#[derive(Clone, Debug, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
+#[derive(Clone, Debug, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum UnitEmergencyAction {
#[serde(alias = "none")]
- #[default]
None,
#[serde(alias = "reboot")]
Reboot,
@@ -54,6 +53,12 @@ pub enum UnitEmergencyAction {
ExitForce,
}
+impl Default for UnitEmergencyAction {
+ fn default() -> Self {
+ Self::None
+ }
+}
+
impl DeserializeWith for UnitEmergencyAction {
type Item = Self;
fn deserialize_with<'de, D>(de: D) -> Result<Self, D::Error>
diff --git a/core/bin/unit/rentry.rs b/core/bin/unit/rentry.rs
index 739a323..5d154df 100644
--- a/core/bin/unit/rentry.rs
+++ b/core/bin/unit/rentry.rs
@@ -68,12 +68,11 @@ impl UnitReLoad {
}
/// jobMode why in UnitRentry? change the name?
-#[derive(Clone, Debug, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
+#[derive(Clone, Debug, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub(crate) enum JobMode {
#[serde(alias = "fail")]
Fail,
#[serde(alias = "replace")]
- #[default]
Replace,
#[serde(alias = "replace_irreversible")]
ReplaceIrreversible,
@@ -89,6 +88,12 @@ pub(crate) enum JobMode {
Trigger,
}
+impl Default for JobMode {
+ fn default() -> Self {
+ Self::Replace
+ }
+}
+
impl DeserializeWith for JobMode {
type Item = Self;
fn deserialize_with<'de, D>(de: D) -> Result<Self, D::Error>
diff --git a/core/lib/unit/kill.rs b/core/lib/unit/kill.rs
index 893125e..4d66861 100644
--- a/core/lib/unit/kill.rs
+++ b/core/lib/unit/kill.rs
@@ -42,10 +42,9 @@ impl KillOperation {
}
/// the method to kill the process
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum KillMode {
/// kill all the process in the cgroup of the unit
- #[default]
ControlGroup,
/// only kill the main process
Process,
@@ -53,6 +52,12 @@ pub enum KillMode {
Mixed,
}
+impl Default for KillMode {
+ fn default() -> Self {
+ Self::ControlGroup
+ }
+}
+
impl DeserializeWith for KillMode {
type Item = Self;
fn deserialize_with<'de, D>(de: D) -> Result<Self, D::Error>
diff --git a/exts/sctl/src/main.rs b/exts/sctl/src/main.rs
index 20f1934..f799629 100644
--- a/exts/sctl/src/main.rs
+++ b/exts/sctl/src/main.rs
@@ -13,17 +13,14 @@
//!
use clap::Parser;
-use cmdproto::{
- error::ERROR_CODE_MASK_PRINT_STDOUT,
- proto::{
- abi::{sys_comm, unit_comm, CommandRequest},
- mngr_comm, unit_file, ProstClientStream,
- },
+use cmdproto::proto::{
+ abi::{sys_comm, unit_comm, CommandRequest},
+ mngr_comm, unit_file, ProstClientStream,
};
use std::io::Write;
use std::{
net::{SocketAddr, TcpStream},
- process::{ExitCode, Termination},
+ process::exit,
};
/// parse program arguments
@@ -187,50 +184,13 @@ fn generate_command_request(args: Args) -> Option<CommandRequest> {
Some(command_request)
}
-/// Result used in sctl
-pub enum Result {
- ///
- OK,
- ///
- Failure(String, u32),
-}
-
-/*
- * Implementing Termination is important. Because the default implementation
- * always adds a "Error: " prefix to our error message, this is ugly. And it
- * always exits with 1 if we return Err, this is bad, we want sctl to return
- * many other positive errors like systemctl has done.
- */
-
-impl Termination for Result {
- fn report(self) -> ExitCode {
- match self {
- Result::OK => ExitCode::SUCCESS,
- Result::Failure(s, error_code) => {
- if error_code & ERROR_CODE_MASK_PRINT_STDOUT != 0 {
- let _ = writeln!(std::io::stdout(), "{s}");
- } else {
- let _ = writeln!(std::io::stderr(), "{s}");
- }
- let error_code = error_code ^ ERROR_CODE_MASK_PRINT_STDOUT;
- if error_code > u8::MAX.into() {
- return ExitCode::FAILURE;
- }
- ExitCode::from(error_code as u8)
- }
- }
- }
-}
-
-fn main() -> Result {
+fn main() {
let args = Args::parse();
let command_request = match generate_command_request(args) {
None => {
- return Result::Failure(
- "This command is currently not supported".to_string(),
- nix::Error::ENOTSUP as u32,
- );
+ eprintln!("This command is currently not supported");
+ exit(nix::Error::ENOTSUP as i32);
}
Some(v) => v,
};
@@ -242,8 +202,8 @@ fn main() -> Result {
let stream = match TcpStream::connect(&addrs[..]) {
Err(e) => {
- let err_msg = format!("Failed to connect to sysmaster: {}", e);
- return Result::Failure(err_msg, e.raw_os_error().unwrap() as u32);
+ eprintln!("Failed to connect to sysmaster: {}", e);
+ exit(e.raw_os_error().unwrap() as i32);
}
Ok(v) => v,
};
@@ -252,23 +212,24 @@ fn main() -> Result {
let data = match client.execute(command_request) {
Err(e) => {
- let err_msg = format!("Failed to execute the given command: {}", e);
- // don't want to map all kinds of errors the message is clear, just return 1.
- return Result::Failure(err_msg, 1);
+ eprintln!("Failed to execute the given command: {}", e);
+ exit(1);
}
Ok(v) => v,
};
/* We should always print the error message if the returned error code is not 0. */
if data.message.is_empty() {
- return Result::OK;
+ exit(0);
}
if data.error_code == 0 {
/* Don't care if we fail to write the error out. */
let _ = writeln!(std::io::stdout(), "{}", data.message);
- return Result::OK;
+ exit(0);
}
- Result::Failure(data.message, data.error_code)
+ eprintln!("{}", data.message);
+
+ exit(data.error_code as i32);
}
diff --git a/libs/device/src/device_action.rs b/libs/device/src/device_action.rs
index ac39820..d9c5289 100644
--- a/libs/device/src/device_action.rs
+++ b/libs/device/src/device_action.rs
@@ -19,7 +19,7 @@ use nix::errno::Errno;
/// device action based on kobject from kernel
#[allow(missing_docs)]
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DeviceAction {
Add,
Remove,
@@ -29,10 +29,15 @@ pub enum DeviceAction {
Offline,
Bind,
Unbind,
- #[default]
Invalid,
}
+impl Default for DeviceAction {
+ fn default() -> Self {
+ Self::Invalid
+ }
+}
+
impl FromStr for DeviceAction {
type Err = crate::error::Error;
--
2.33.0

View File

@ -11,13 +11,15 @@
Name: sysmaster
Version: 0.2.3
Release: 1
Release: 2
Summary: redesign and reimplement process1.
License: Mulan PSL v2
URL: https://gitee.com/openeuler/sysmaster
Source0: %{name}-%{version}.tar.gz
Patch0001: backport-fix-compatible-with-rustc-1.60.patch
ExclusiveArch: x86_64 aarch64
BuildRequires: rust
@ -71,6 +73,9 @@ install -Dm0640 -t %{sysmaster_install_target}/plugin %{conf_install_source}/plu
/usr/lib/sysmaster/*
%changelog
* Tue May 30 2023 shenyangyang<shenyangyang4@huawei.com> - 0.2.3-2
- Support compatible compile with rust 1.60
* Sat May 6 2023 shenyangyang<shenyangyang4@huawei.com> - 0.2.3-1
- update version to 0.2.3