mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-08-03 07:45:58 +00:00
fix #5801: backup_manager: make api call on datastore update
When updating the datastore config using `proxmox-backup-manager` we need to make an api-call, because the api-route starts a tokio task to update the proxy-cache and the client will kill the task if we don't wait. With an api-call the tokio task will be executed on the api process and runs in the background while the endpoint handler has already returned. Signed-off-by: Gabriel Goller <g.goller@proxmox.com>
This commit is contained in:
parent
41b97b2454
commit
cc6fc6a540
@ -1,15 +1,17 @@
|
||||
use anyhow::Error;
|
||||
use serde_json::Value;
|
||||
|
||||
use pbs_api_types::{
|
||||
DataStoreConfig, DataStoreConfigUpdater, DATASTORE_SCHEMA, PROXMOX_CONFIG_DIGEST_SCHEMA,
|
||||
};
|
||||
use pbs_client::view_task_result;
|
||||
use proxmox_router::{cli::*, ApiHandler, RpcEnvironment};
|
||||
use proxmox_schema::api;
|
||||
|
||||
use pbs_api_types::{DataStoreConfig, DATASTORE_SCHEMA, PROXMOX_CONFIG_DIGEST_SCHEMA};
|
||||
use pbs_client::view_task_result;
|
||||
|
||||
use proxmox_backup::api2;
|
||||
use proxmox_backup::api2::config::datastore::DeletableProperty;
|
||||
use proxmox_backup::client_helpers::connect_to_localhost;
|
||||
|
||||
use anyhow::Error;
|
||||
use serde_json::Value;
|
||||
|
||||
#[api(
|
||||
input: {
|
||||
properties: {
|
||||
@ -139,6 +141,53 @@ async fn delete_datastore(mut param: Value, rpcenv: &mut dyn RpcEnvironment) ->
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[api(
|
||||
protected: true,
|
||||
input: {
|
||||
properties: {
|
||||
name: {
|
||||
schema: DATASTORE_SCHEMA,
|
||||
},
|
||||
update: {
|
||||
type: DataStoreConfigUpdater,
|
||||
flatten: true,
|
||||
},
|
||||
delete: {
|
||||
description: "List of properties to delete.",
|
||||
type: Array,
|
||||
optional: true,
|
||||
items: {
|
||||
type: DeletableProperty,
|
||||
}
|
||||
},
|
||||
digest: {
|
||||
optional: true,
|
||||
schema: PROXMOX_CONFIG_DIGEST_SCHEMA,
|
||||
},
|
||||
"output-format": {
|
||||
schema: OUTPUT_FORMAT,
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
)]
|
||||
/// Update datastore configuration.
|
||||
async fn update_datastore(name: String, mut param: Value) -> Result<(), Error> {
|
||||
let output_format = extract_output_format(&mut param);
|
||||
let client = connect_to_localhost()?;
|
||||
|
||||
let result = client
|
||||
.put(
|
||||
format!("api2/json/config/datastore/{name}").as_str(),
|
||||
Some(param),
|
||||
)
|
||||
.await?;
|
||||
|
||||
view_task_result(&client, result, &output_format).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn datastore_commands() -> CommandLineInterface {
|
||||
let cmd_def = CliCommandMap::new()
|
||||
.insert("list", CliCommand::new(&API_METHOD_LIST_DATASTORES))
|
||||
@ -154,7 +203,7 @@ pub fn datastore_commands() -> CommandLineInterface {
|
||||
)
|
||||
.insert(
|
||||
"update",
|
||||
CliCommand::new(&api2::config::datastore::API_METHOD_UPDATE_DATASTORE)
|
||||
CliCommand::new(&API_METHOD_UPDATE_DATASTORE)
|
||||
.arg_param(&["name"])
|
||||
.completion_cb("name", pbs_config::datastore::complete_datastore_name)
|
||||
.completion_cb(
|
||||
|
Loading…
Reference in New Issue
Block a user