Jakob Borg
36c3331696
chore(model): deflake cluster config tests ( #10662 )
...
These have been flaky for a long time, seemingly because the multiple
connection code slightly changed the timing of cluster config sending by
moving them to the connection promotion loop. This adds some resiliency
to that, instead of assuming that the CC:s will be immediately available
after adding the connection.
---------
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2026-04-24 07:41:17 +00:00
Jakob Borg
2721b7b522
chore(model): more efficient tracking of renames during scan ( #10653 )
2026-04-23 07:20:52 +02:00
Jakob Borg
b1ccf3f3fd
chore: trivial fixes ( #10650 )
...
... which keep getting filed by AI agents.
Closes #10649 , closes #10486 , closes #10648 , closes #10499 , closes
#10647 , closes #10635 , closes #10636 , closes #10607 .
---------
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2026-04-22 06:38:05 +00:00
Ben Norcombe
6a26d56ad9
feat(gui, config): support simple folder grouping ( fixes #2070 ) ( #10563 )
...
Adds a very simple way to group up folders to help with organising from
the GUI.
Signed-off-by: Ben Norcombe <bennorcombe@pm.me >
2026-04-07 17:05:41 +02:00
Jakob Borg
5febc056a8
fix(protocol): limit size of incoming request messages ( #10629 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2026-04-07 16:28:18 +02:00
Jakob Borg
b594b7491f
chore: systematic syncthing_build_info metric
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2026-04-06 09:44:49 +02:00
Jakob Borg
b39c56f82d
chore: remove tracking inode change time ( #10579 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2026-03-22 20:24:03 -07:00
Jakob Borg
fd129825b2
fix(protocol): verify compressed message length before decompression ( #10595 )
2026-03-07 16:29:14 +01:00
Marcus B Spencer
75dd940128
chore(config, connections): use same reconnection interval for QUIC and TCP ( fixes #10507 ) ( #10573 )
...
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2026-02-12 10:41:30 +01:00
Jakob Borg
dc2a77ab8e
chore: build with Go 1.26; use Go 1.25 features ( #10570 )
...
WaitGroup.Go and built-in gomaxprocs handling.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2026-02-11 10:41:38 +00:00
Tao and Jakob Borg
f86c1d83db
fix(gui): show restarting modal during upgrade restart ( fixes #1248 ) ( #10566 )
...
Signed-off-by: steadytao <mail@steadytao.com >
Signed-off-by: Jakob Borg <jakob@kastelo.net >
Co-authored-by: Jakob Borg <jakob@kastelo.net >
2026-02-11 09:46:37 +00:00
Tommy van der Vorst and Jakob Borg
5cf9168dc2
chore(db): add ability to wait for programmatically started database maintenance, query last maintenance time ( #10565 )
...
Also adds a method to query the last database maintenance time.
Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl >
Co-authored-by: Jakob Borg <jakob@kastelo.net >
2026-02-11 09:28:11 +00:00
Tommy van der Vorst
5bf27a432c
chore(sqlite): allow periodic database maintenance to be disabled ( #10441 )
...
This change allows the periodic database maintenance to be disabled, while providing a way to programmatically start maintenance at a convenient moment.
Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl >
2026-01-14 21:10:54 +00:00
Prathik P Kulkarni
50fe0053e8
chore(api): remove charset declaration from JSON content-type ( fixes #10500 ) ( #10508 )
...
updated content-type to application/json (fixes #10500 )
Signed-off-by: prathik8794 <me20b030@iittp.ac.in >
2025-12-29 09:49:21 +00:00
bt90
b7b494b7cf
fix(beacon): skip point-to-point interfaces on Android ( #10504 )
2025-12-23 18:56:20 +00:00
Jakob Borg
f57e92c20a
chore: tweak pull retry logic ( #10491 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-12-23 08:26:58 +01:00
Marcus B Spencer
801ef0e22d
fix(beacon): don't join multicast groups on non-multicast interfaces ( fixes #10497 ) ( #10498 )
...
fix(beacon): don't join multicast groups on non-multicast interfaces
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-12-18 08:58:06 +01:00
Marcus B Spencer
e5dfd2c549
chore(beacon): more verbose debug logging ( #10496 )
...
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-12-17 15:04:47 +00:00
Jakob Borg
553c02f244
chore(model): refactor context handling for folder type ( #10472 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-11-27 20:34:35 +00:00
Jakob Borg
488c33aef5
chore: update quic-go, adapt to lack of write tracking ( #10456 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-11-16 00:48:28 +01:00
Jakob Borg
8e796ddb94
chore: linter: errorlint
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
7c9d06b4d2
chore: linter: embeddedstructfieldcheck
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
df8d8c276e
chore: linter: staticcheck
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
98cf5872e9
chore: linter: perfsprint
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
c883f49a24
chore: linter: usestdlibvars
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
d84280107c
chore: linter: canonicalheader
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
d97fd638bc
chore: linter: dupword
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
a1069a0d70
chore: linter: intrange
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
465804161b
chore: linter: staticcheck
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Jakob Borg
d08f483811
chore: linter: unused
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-10-23 22:48:54 +02:00
Marcus B Spencer
655b4568c1
fix(fs): only apply case option to fakefs in stress test ( #10440 )
...
Fixes a regression introduced in #10439 , mentioned in [a comment](https://github.com/syncthing/syncthing/pull/10439#issuecomment-3436515824 ) made by @imsodin:
> That might not be the greatest way to do this, but nevertheless it afaik means that the benchmarks now do case checking once when it shouldn't happen at all, and twice otherwise.
Benchmarks do approximately as well as before the regression, and I think most of them are random chance:
```
│ ../oldold.txt │ ../new.txt │
│ sec/op │ sec/op vs base │
WalkCaseFakeFS100k/rawfs-8 654.6m ± 1% 652.6m ± 3% ~ (p=0.971 n=10)
WalkCaseFakeFS100k/casefs-8 1.049 ± 2% 1.071 ± 3% ~ (p=0.190 n=10)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.053 ± 3% 1.081 ± 5% ~ (p=0.165 n=10)
geomean 897.7m 910.8m +1.46%
│ ../oldold.txt │ ../new.txt │
│ B/entry │ B/entry vs base │
WalkCaseFakeFS100k/rawfs-8 1.274Ki ± 0% 1.274Ki ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 1.771Ki ± 0% 1.771Ki ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.772Ki ± 0% 1.772Ki ± 0% ~ (p=1.000 n=10) ¹
geomean 1.587Ki 1.587Ki +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ DirNames/entry │ DirNames/entry vs base │
WalkCaseFakeFS100k/rawfs-8 512.5m ± 0% 512.5m ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 1.025 ± 0% 1.025 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.025 ± 0% 1.025 ± 0% ~ (p=1.000 n=10) ¹
geomean 813.5m 813.5m +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ DirNames/op │ DirNames/op vs base │
WalkCaseFakeFS100k/rawfs-8 51.25k ± 0% 51.25k ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 102.5k ± 0% 102.5k ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 102.5k ± 0% 102.5k ± 0% ~ (p=1.000 n=10) ¹
geomean 81.35k 81.35k +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ Lstat/entry │ Lstat/entry vs base │
WalkCaseFakeFS100k/rawfs-8 5.535 ± 0% 5.535 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 5.535 ± 0% 5.535 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 5.540 ± 0% 5.540 ± 0% ~ (p=1.000 n=10) ¹
geomean 5.537 5.537 +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ Lstat/op │ Lstat/op vs base │
WalkCaseFakeFS100k/rawfs-8 553.5k ± 0% 553.5k ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 553.5k ± 0% 553.5k ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 554.0k ± 0% 554.0k ± 0% ~ (p=1.000 n=10) ¹
geomean 553.7k 553.7k +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ allocs/entry │ allocs/entry vs base │
WalkCaseFakeFS100k/rawfs-8 19.00 ± 0% 19.00 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-8 35.35 ± 0% 35.35 ± 0% ~ (p=1.000 n=10) ¹
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 35.38 ± 0% 35.38 ± 0% ~ (p=1.000 n=10) ¹
geomean 28.75 28.75 +0.00%
¹ all samples are equal
│ ../oldold.txt │ ../new.txt │
│ sec/entry │ sec/entry vs base │
WalkCaseFakeFS100k/rawfs-8 4.328µ ± 1% 4.315µ ± 3% ~ (p=0.971 n=10)
WalkCaseFakeFS100k/casefs-8 6.936µ ± 2% 7.082µ ± 3% ~ (p=0.171 n=10)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 6.965µ ± 3% 7.147µ ± 5% ~ (p=0.165 n=10)
geomean 5.935µ 6.022µ +1.46%
│ ../oldold.txt │ ../new.txt │
│ B/op │ B/op vs base │
WalkCaseFakeFS100k/rawfs-8 188.3Mi ± 0% 188.3Mi ± 0% -0.00% (p=0.006 n=10)
WalkCaseFakeFS100k/casefs-8 261.5Mi ± 0% 261.5Mi ± 0% ~ (p=0.142 n=10)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 261.7Mi ± 0% 261.7Mi ± 0% ~ (p=0.315 n=10)
geomean 234.4Mi 234.4Mi -0.00%
│ ../oldold.txt │ ../new.txt │
│ allocs/op │ allocs/op vs base │
WalkCaseFakeFS100k/rawfs-8 2.873M ± 0% 2.873M ± 0% -0.00% (p=0.026 n=10)
WalkCaseFakeFS100k/casefs-8 5.346M ± 0% 5.346M ± 0% ~ (p=0.136 n=10)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 5.351M ± 0% 5.351M ± 0% ~ (p=0.305 n=10)
geomean 4.348M 4.348M -0.00%
```
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-10-23 13:12:03 -05:00
Marcus B Spencer
c6a887865f
fix(fs): apply case option to fakefs in casefs tests ( #10439 )
...
Required for the casefs tests/benchmarks to test the casefs.
Benchmarks do significantly worse (as expected).
```
│ ../old.txt │ ../new.txt │
│ sec/op │ sec/op vs base │
WalkCaseFakeFS100k/rawfs-8 626.5m ± 5% 993.4m ± 1% +58.56% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 1.011 ± 1% 1.425 ± 1% +40.94% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.014 ± 2% 1.439 ± 1% +41.97% (p=0.002 n=6)
geomean 862.9m 1.268 +46.94%
│ ../old.txt │ ../new.txt │
│ B/entry │ B/entry vs base │
WalkCaseFakeFS100k/rawfs-8 1.274Ki ± 0% 1.766Ki ± 0% +38.54% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 1.771Ki ± 0% 2.354Ki ± 0% +32.98% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.772Ki ± 0% 2.356Ki ± 0% +32.95% (p=0.002 n=6)
geomean 1.587Ki 2.140Ki +34.80%
│ ../old.txt │ ../new.txt │
│ DirNames/entry │ DirNames/entry vs base │
WalkCaseFakeFS100k/rawfs-8 512.5m ± 0% 1025.0m ± 0% +100.00% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 1.025 ± 0% 1.537 ± 0% +49.95% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 1.025 ± 0% 1.537 ± 0% +49.95% (p=0.002 n=6)
geomean 813.5m 1.343 +65.06%
│ ../old.txt │ ../new.txt │
│ DirNames/op │ DirNames/op vs base │
WalkCaseFakeFS100k/rawfs-8 51.25k ± 0% 102.49k ± 0% +100.00% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 102.5k ± 0% 153.7k ± 0% +50.00% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 102.5k ± 0% 153.7k ± 0% +50.00% (p=0.002 n=6)
geomean 81.35k 134.3k +65.10%
│ ../old.txt │ ../new.txt │
│ allocs/entry │ allocs/entry vs base │
WalkCaseFakeFS100k/rawfs-8 19.00 ± 0% 35.35 ± 0% +86.05% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 35.35 ± 0% 54.40 ± 0% +53.89% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 35.38 ± 0% 54.46 ± 0% +53.93% (p=0.002 n=6)
geomean 28.75 47.14 +63.95%
│ ../old.txt │ ../new.txt │
│ sec/entry │ sec/entry vs base │
WalkCaseFakeFS100k/rawfs-8 4.143µ ± 5% 6.568µ ± 1% +58.55% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 6.686µ ± 1% 9.424µ ± 1% +40.95% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 6.703µ ± 2% 9.517µ ± 1% +41.97% (p=0.002 n=6)
geomean 5.705µ 8.383µ +46.94%
│ ../old.txt │ ../new.txt │
│ B/op │ B/op vs base │
WalkCaseFakeFS100k/rawfs-8 188.3Mi ± 0% 260.8Mi ± 0% +38.51% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 261.5Mi ± 0% 347.7Mi ± 0% +32.98% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 261.7Mi ± 0% 348.0Mi ± 0% +32.96% (p=0.002 n=6)
geomean 234.4Mi 316.0Mi +34.79%
│ ../old.txt │ ../new.txt │
│ allocs/op │ allocs/op vs base │
WalkCaseFakeFS100k/rawfs-8 2.873M ± 0% 5.346M ± 0% +86.04% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-8 5.346M ± 0% 8.228M ± 0% +53.91% (p=0.002 n=6)
WalkCaseFakeFS100k/casefs-otherOpEvery1000-8 5.351M ± 0% 8.236M ± 0% +53.92% (p=0.002 n=6)
geomean 4.348M 7.129M +63.96%
```
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-10-23 08:40:42 +00:00
Marcus B Spencer
b4565c87ee
fix(fs): store getExpireAdd mutex in caseCache ( fixes #9836 ) ( #10430 )
...
In #9701 there was a change that put the mutex used for `getExpireAdd` directly in `defaultRealCaser`, which is erroneous because multiple filesystems can share the same `caseCache`.
### Purpose
Fixes #9836 and [Slow sync sending files from Android](https://forum.syncthing.net/t/slow-sync-sending-files-from-android/24208?u=marbens ). There may be other issues caused by `getExpireAdd` conflicting with itself, though.
### Testing
Unit tests pass and the case cache and conflict detection _seem_ to behave correctly.
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us >
2025-10-18 21:56:03 +02:00
Simon Frei
20d2406a0e
chore(upnp): remove incorrect embedding of nat.Service ( fixes #10426 ) ( #10428 )
2025-10-13 07:11:00 +02:00
Jakob Borg
932b4ce9bd
fix(model): don't announce untrusted devices to other devices ( fixes #10393 ) ( #10408 )
...
fix(model): don't announce untrusted devices to other devices
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-23 13:16:58 +02:00
Tommy van der Vorst and bt90
eb4eb7524d
fix(syncthing): only perform CPU benchmark on startup when logging enabled, and on goroutine ( #10398 )
...
Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl >
Co-authored-by: bt90 <btom1990@googlemail.com >
2025-09-19 07:17:10 +02:00
Jakob Borg
ea19ec64bf
fix(ur): properly skip zero/empty fields in report ( #10394 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-15 20:35:59 +00:00
Jakob Borg
d037681fd1
fix: improve conflict detection by tracking previous file hash ( fixes #10349 ) ( #10351 )
...
This adds a new field to the file information we keep, the "previous
blocks hash". This is the hash of the file contents as it was in its
previous incarnation. That is, every scan that updates the blocks hash
will move the current hash to the "previous" field.
This enables an addition to the conflict detection algorithm: if the
file to be synced is in conflict with the current file on disk
(version-counter wise), but it indicates that it was based on the
precise contents we have (new.prevBlocksHash == current.blocksHash),
then it's not really a conflict.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-13 16:16:28 +02:00
Jakob Borg
3382ccc3f1
chore(model): slightly deflake TestRecvOnlyRevertOwnID ( #10390 )
...
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-12 09:41:47 +00:00
Jakob Borg
9ee208b441
chore(sqlite): use normalised tables for file names and versions ( #10383 )
...
This changes the files table to use normalisation for the names and
versions. The idea is that these are often common between all remote
devices, and repeating an integer is more efficient than repeating a
long string. A new benchmark bears this out; for a database with 100k
files shared between 31 devices, with some worst case assumption on
version vector size, the database is reduced in size by 50% and the test
finishes quicker:
Current:
db_bench_test.go:322: Total size: 6263.70 MiB
--- PASS: TestBenchmarkSizeManyFilesRemotes (1084.89s)
New:
db_bench_test.go:326: Total size: 3049.95 MiB
--- PASS: TestBenchmarkSizeManyFilesRemotes (776.97s)
The other benchmarks end up about the same within the margin of
variability, with one possible exception being that RemoteNeed seems to
be a little slower on average:
old files/s new files/s
Update/n=RemoteNeed/size=1000-8 5.051k 4.654k
Update/n=RemoteNeed/size=2000-8 5.201k 4.384k
Update/n=RemoteNeed/size=4000-8 4.943k 4.242k
Update/n=RemoteNeed/size=8000-8 5.099k 3.527k
Update/n=RemoteNeed/size=16000-8 3.686k 3.847k
Update/n=RemoteNeed/size=30000-8 4.456k 3.482k
I'm not sure why, possibly that query can be optimised anyhow.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-12 09:27:41 +00:00
Jakob Borg
dd90e8ec7a
fix(api): limit size of allowed authentication request ( #10386 )
...
We have a slightly naive io.ReadAll on the authentication handler, which
can result in unlimited memory consumption from an unauthenticated API
endpoint. Add a reasonable limit there.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-11 10:11:29 +00:00
Simon Frei
f0328abeaa
chore(scanner): always return values to the pools when hashing blocks ( #10377 )
...
There are some return statements in between, but putting back the values
isn't my motivation (hardly ever happens), I just find this more
readable. Same with moving `hashLength`: Placed next to the pool the
connection with `sha256.New()` is closer.
Followup to:
chore(scanner): reduce memory pressure by using pools inside hasher #10222
6e26fab3a0
Signed-off-by: Simon Frei <freisim93@gmail.com >
2025-09-07 17:00:19 +02:00
Jakob Borg
a99a730c0c
fix(tlsutil): support HTTP/2 on GUI/API connections ( #10366 )
...
By not setting ALPN we were implicitly rejecting HTTP/2, completely
unnecessarily.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-05 10:57:39 +02:00
Tommy van der Vorst and Jakob Borg
9e262d84de
fix(api): redact device encryption passwords in support bundle config ( #10359 )
...
* fix(api): redact device encryption passwords in support bundle config
Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl >
* Update lib/api/support_bundle.go
Signed-off-by: Jakob Borg <jakob@kastelo.net >
---------
Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl >
Signed-off-by: Jakob Borg <jakob@kastelo.net >
Co-authored-by: Jakob Borg <jakob@kastelo.net >
2025-09-04 18:22:59 +00:00
Jakob Borg
42db6280e6
fix(model): earlier free-space check ( fixes #10347 ) ( #10348 )
...
Since #10332 we'd create the temp file when closing out the puller state
for a file, but this is inappropriate if the reason we're bailing out is
that there isn't space for it to begin with. Instead, do the
free space check before we even start copying/pulling.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-04 16:53:30 +00:00
Jakob Borg
12ba4b6aea
chore(model): adjust folder state logging ( fixes #10350 ) ( #10353 )
...
Removes the chitter-chatter of folder state changes from the info level,
while adding the error state at warning level and a corresponding
clearing of the error state at info level.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-04 07:38:06 +00:00
Jakob Borg
541678ad9e
fix(syncthing): apply folder migrations with temporary API/GUI server ( #10330 )
...
Prevent the feeling that nothing is happening / it's not starting.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-01 22:10:48 +02:00
Jakob Borg
fafc3ba45e
fix(model): correctly handle block-aligned empty sparse files ( fixes #10331 ) ( #10332 )
...
When handling files that consist only of power-of-two-sized blocks of
zero we'd know we have nothing to write, and when using sparse files
we'd never even create the temp file. Hence the sync would fail.
Signed-off-by: Jakob Borg <jakob@kastelo.net >
2025-09-01 22:01:29 +02:00
Jakob Borg and bt90
4ad3f07691
chore(db): migration for previous commits ( #10319 )
...
Recreate the blocks and block lists tables.
---------
Co-authored-by: bt90 <btom1990@googlemail.com >
2025-08-31 09:27:33 +02:00
Jakob Borg
2306c6d989
chore(db): benchmark output, migration blocks/s output ( #10320 )
...
Just minor tweaks
2025-08-29 14:58:38 +00:00