I forgot that I need to patch rclone
, whoops!
This commit is contained in:
parent
40695041e7
commit
5664447bcd
3 changed files with 63 additions and 1 deletions
|
@ -138,6 +138,11 @@
|
|||
ps3dec = pkgs.callPackage ./home/packages/ps3dec/package.nix {};
|
||||
sabretools = pkgs.callPackage ./home/packages/sabretools/package.nix {};
|
||||
rom-properties = pkgs.callPackage ./home/packages/rom-properties/package.nix {};
|
||||
new_rclone = pkgs.rclone.overrideAttrs (
|
||||
oldAttrs: {
|
||||
patches = [ ./home/packages/new_rclone/patches/rclone_8ffe3e462cbf5688c37c54009db09d8dcb486860.diff ];
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
diff --git a/backend/webdav/chunking.go b/backend/webdav/chunking.go
|
||||
index 4cea798389f73..379079cf9f015 100644
|
||||
--- a/backend/webdav/chunking.go
|
||||
+++ b/backend/webdav/chunking.go
|
||||
@@ -14,21 +14,30 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"path"
|
||||
+ "time"
|
||||
|
||||
"github.com/rclone/rclone/fs"
|
||||
"github.com/rclone/rclone/lib/readers"
|
||||
"github.com/rclone/rclone/lib/rest"
|
||||
)
|
||||
|
||||
-func (f *Fs) shouldRetryChunkMerge(ctx context.Context, resp *http.Response, err error) (bool, error) {
|
||||
+func (f *Fs) shouldRetryChunkMerge(ctx context.Context, resp *http.Response, err error, sleepTime *time.Duration, wasLocked *bool) (bool, error) {
|
||||
// Not found. Can be returned by NextCloud when merging chunks of an upload.
|
||||
if resp != nil && resp.StatusCode == 404 {
|
||||
+ if *wasLocked {
|
||||
+ // Assume a 404 error after we've received a 423 error is actually a success
|
||||
+ return false, nil
|
||||
+ }
|
||||
return true, err
|
||||
}
|
||||
|
||||
// 423 LOCKED
|
||||
if resp != nil && resp.StatusCode == 423 {
|
||||
- return false, fmt.Errorf("merging the uploaded chunks failed with 423 LOCKED. This usually happens when the chunks merging is still in progress on NextCloud, but it may also indicate a failed transfer: %w", err)
|
||||
+ *wasLocked = true
|
||||
+ fs.Logf(f, "Sleeping for %v to wait for chunks to be merged after 423 error", *sleepTime)
|
||||
+ time.Sleep(*sleepTime)
|
||||
+ *sleepTime *= 2
|
||||
+ return true, fmt.Errorf("merging the uploaded chunks failed with 423 LOCKED. This usually happens when the chunks merging is still in progress on NextCloud, but it may also indicate a failed transfer: %w", err)
|
||||
}
|
||||
|
||||
return f.shouldRetry(ctx, resp, err)
|
||||
@@ -180,9 +189,11 @@ func (o *Object) mergeChunks(ctx context.Context, uploadDir string, options []fs
|
||||
}
|
||||
opts.ExtraHeaders = o.extraHeaders(ctx, src)
|
||||
opts.ExtraHeaders["Destination"] = destinationURL.String()
|
||||
+ sleepTime := 5 * time.Second
|
||||
+ wasLocked := false
|
||||
err = o.fs.pacer.Call(func() (bool, error) {
|
||||
resp, err = o.fs.srv.Call(ctx, &opts)
|
||||
- return o.fs.shouldRetryChunkMerge(ctx, resp, err)
|
||||
+ return o.fs.shouldRetryChunkMerge(ctx, resp, err, &sleepTime, &wasLocked)
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("finalize chunked upload failed, destinationURL: \"%s\": %w", destinationURL, err)
|
|
@ -14,8 +14,13 @@ let
|
|||
ps3dec = pkgs.callPackage ./packages/ps3dec/package.nix {};
|
||||
sabretools = pkgs.callPackage ./packages/sabretools/package.nix {};
|
||||
rom-properties = pkgs.callPackage ./packages/rom-properties/package.nix {};
|
||||
new_rclone = pkgs.rclone.overrideAttrs (oldAttrs: rec {
|
||||
patches = [ ./packages/new_rclone/patches/rclone_8ffe3e462cbf5688c37c54009db09d8dcb486860.diff ];
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
in
|
||||
{
|
||||
programs = {
|
||||
|
@ -107,7 +112,6 @@ in
|
|||
pkgs.pyrosimple
|
||||
pkgs.python3
|
||||
pkgs.quickbms
|
||||
pkgs.rclone
|
||||
pkgs.screen
|
||||
pkgs.sshfs
|
||||
pkgs.unrar-wrapper
|
||||
|
@ -119,6 +123,7 @@ in
|
|||
my_packages.ird_tools
|
||||
my_packages.ps3dec
|
||||
my_packages.sabretools
|
||||
my_packages.new_rclone
|
||||
# my_packages.rom-properties
|
||||
|
||||
agenix.packages.${system}.default
|
||||
|
@ -133,6 +138,8 @@ in
|
|||
# Not needed on WSL
|
||||
pkgs.p7zip
|
||||
# Replaced in favour of nixpkgs#_7zz
|
||||
# pkgs.rclone
|
||||
# my_packages.new_rclone is the version with the patched build.
|
||||
pkgs.terminator
|
||||
# Not needed on WSL, even though I'd like it on WSL sometimes.
|
||||
pkgs.yt-dlp
|
||||
|
|
Loading…
Reference in a new issue