feat: add hardlink when task is downloaded (#1151)
Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
parent
44362c6a00
commit
3811569f29
|
|
@ -27,6 +27,7 @@ jobs:
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
|
toolchain: 1.85.0
|
||||||
|
|
||||||
- name: Set up Clang
|
- name: Set up Clang
|
||||||
uses: egor-tensin/setup-clang@v1
|
uses: egor-tensin/setup-clang@v1
|
||||||
|
|
|
||||||
|
|
@ -953,7 +953,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client"
|
name = "dragonfly-client"
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
@ -1022,7 +1022,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-backend"
|
name = "dragonfly-client-backend"
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dragonfly-api",
|
"dragonfly-api",
|
||||||
"dragonfly-client-core",
|
"dragonfly-client-core",
|
||||||
|
|
@ -1053,7 +1053,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-config"
|
name = "dragonfly-client-config"
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytesize",
|
"bytesize",
|
||||||
"bytesize-serde",
|
"bytesize-serde",
|
||||||
|
|
@ -1081,7 +1081,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-core"
|
name = "dragonfly-client-core"
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"headers 0.4.0",
|
"headers 0.4.0",
|
||||||
"hyper 1.6.0",
|
"hyper 1.6.0",
|
||||||
|
|
@ -1099,7 +1099,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-init"
|
name = "dragonfly-client-init"
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
@ -1117,7 +1117,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-storage"
|
name = "dragonfly-client-storage"
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode",
|
"bincode",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
@ -1145,7 +1145,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-util"
|
name = "dragonfly-client-util"
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"bytesize",
|
"bytesize",
|
||||||
|
|
@ -1560,7 +1560,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hdfs"
|
name = "hdfs"
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dragonfly-client-backend",
|
"dragonfly-client-backend",
|
||||||
"dragonfly-client-core",
|
"dragonfly-client-core",
|
||||||
|
|
|
||||||
16
Cargo.toml
16
Cargo.toml
|
|
@ -12,7 +12,7 @@ members = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.2.29"
|
version = "0.2.30"
|
||||||
authors = ["The Dragonfly Developers"]
|
authors = ["The Dragonfly Developers"]
|
||||||
homepage = "https://d7y.io/"
|
homepage = "https://d7y.io/"
|
||||||
repository = "https://github.com/dragonflyoss/client.git"
|
repository = "https://github.com/dragonflyoss/client.git"
|
||||||
|
|
@ -22,13 +22,13 @@ readme = "README.md"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
dragonfly-client = { path = "dragonfly-client", version = "0.2.29" }
|
dragonfly-client = { path = "dragonfly-client", version = "0.2.30" }
|
||||||
dragonfly-client-core = { path = "dragonfly-client-core", version = "0.2.29" }
|
dragonfly-client-core = { path = "dragonfly-client-core", version = "0.2.30" }
|
||||||
dragonfly-client-config = { path = "dragonfly-client-config", version = "0.2.29" }
|
dragonfly-client-config = { path = "dragonfly-client-config", version = "0.2.30" }
|
||||||
dragonfly-client-storage = { path = "dragonfly-client-storage", version = "0.2.29" }
|
dragonfly-client-storage = { path = "dragonfly-client-storage", version = "0.2.30" }
|
||||||
dragonfly-client-backend = { path = "dragonfly-client-backend", version = "0.2.29" }
|
dragonfly-client-backend = { path = "dragonfly-client-backend", version = "0.2.30" }
|
||||||
dragonfly-client-util = { path = "dragonfly-client-util", version = "0.2.29" }
|
dragonfly-client-util = { path = "dragonfly-client-util", version = "0.2.30" }
|
||||||
dragonfly-client-init = { path = "dragonfly-client-init", version = "0.2.29" }
|
dragonfly-client-init = { path = "dragonfly-client-init", version = "0.2.30" }
|
||||||
dragonfly-api = "=2.1.39"
|
dragonfly-api = "=2.1.39"
|
||||||
thiserror = "2.0"
|
thiserror = "2.0"
|
||||||
futures = "0.3.31"
|
futures = "0.3.31"
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,27 @@ impl Task {
|
||||||
let task = self.storage.prepare_download_task_started(id).await?;
|
let task = self.storage.prepare_download_task_started(id).await?;
|
||||||
|
|
||||||
if task.content_length.is_some() && task.piece_length.is_some() {
|
if task.content_length.is_some() && task.piece_length.is_some() {
|
||||||
|
// Attempt to create a hard link from the task file to the output path.
|
||||||
|
//
|
||||||
|
// Behavior based on force_hard_link setting:
|
||||||
|
// 1. force_hard_link is true:
|
||||||
|
// - Success: Continue processing
|
||||||
|
// - Failure: Return error immediately
|
||||||
|
// 2. force_hard_link is false:
|
||||||
|
// - Success: Continue processing
|
||||||
|
// - Failure: Fall back to copying the file instead
|
||||||
|
if let Some(output_path) = &request.output_path {
|
||||||
|
if let Err(err) = self
|
||||||
|
.storage
|
||||||
|
.hard_link_task(id, Path::new(output_path.as_str()))
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
if request.force_hard_link {
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Ok(task);
|
return Ok(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue