This is the first beta release for JuiceFS v1.4. Since v1.3 it has 373 commits from 49 contributors, thanks to @jiefenghuang @zhijian-pro @Xuyuchao-juice @YunhuiChen @zxh326 @polyrabbit @CaitinChen @chenjie4255 @yuhr123 @solracsf @201341 @cxljs @davies @Light-City @Looka149 @wzhallright @zhoucheng361 @mdolr @eakman-datadog @JoyLiuc @mt5225 @prOOrc @sw-cho @tangyoupeng @anthonyeleven @asyqm @CodeRusher @CodingPoeta @cuiweixie @hegdeadithyak @Joffref @juchaosong @krmeda-msft @kungf @kyungwan-nam @lesterMing @lynus @mcassaniti @mwkang @mzygQAQ @nautaa @ndeepak-baseten @qingzhongli @rifeplight @simpleqin @VerTiGoEtrex @vyalamar @zexee @zhitaoli-6
Highlights
- Support storage tiers with configurable storage classes (#6761,#6769,#6809,#6805,#6803,#6854,#6820,#6824,#6816,#6807,#6786,#6817,#6799,#6831,#6787,#6785,#6795,#6782,#6930)
- Support user and group quota management (#6330,#6369,#6386,#6396,#6361,#6766,#6789,#6813,#6511,#6381,#6771,#6776,#6743,#6751,#6737,#6826,#6788,#6698,#6808,#6480,#6933)
- Support checkpoint for resumable sync (#6755,#6852,#6905,#6877,#6892,#6872,#6870,#6839,#6950,#6958,#6959)
- Support metadata operation changelog (#6777,#6942,#6951,#6956,#6979)
New
- Support hadoop kerberos (#6445, #6644, #6970)
- windows: improved stability and compatibility (#6662,#6651,#6645,#6643,#6642,#6641,#6634,#6547,#6907)
- cmd/rmr: support batch unlink (#6553,#6581,#6618,#6537,#6457,#6564,#6603,#6609,#6610,#6647)
- cmd/clone: support batch clone (#6656,#6695,#6828,#6779,#6650,#6922,#6715,#6938)
- meta/redis: support client-side caching (#6495,#6857)
- meta: support trash realtime statistics (#6818,#6838,#6899,#6901)
- cache: support LRU cache (#6271)
- cmd/sync: support encryption/decryption (#6806,#6834,#6955,#6947)
- cmd/sync: support global traffic control (#6626)
- Support SM encryption for format and data at rest (#6419, #6414)
- Support end-to-end context cancellation (#6312, #6516, #6382, #6383, #6377, #6379, #6567, #6565, #6598, #6582, #6397, #6499, #6524, #6590, #6410, #6477, #6927)
- object: support cifs/smb (#6368, #6712, #6702, #6949)
- object: support native Storj object storage via storj.io/uplink (#6763,#6929)
- vfs: add support to skip trash if
sattribute is set (#6359) - cmd/fsck: support check data by path (#6475)
- cmd/fsck: add
repair-dir-modeoption to specify directories mode (#6561) - cmd/mount: add
max-downloadsoption to limit concurrent get for object storage (#6472) - cmd/mount: add
writeback-threshold-sizeoption to filter blocks for writeback (#6447) - cmd/mount: add fuse option
ReadDirPlusAutofor automatic readdir optimization (#6299) - cmd/mount: add
network-interfacesoption for IP discovery configuration (#6392) - cmd/mount: add
hide-internaloption (#6307,#6911) - cmd/mount: add
META_PASSWORD_FILEenv to read metadata engine password from file (#6438) - cmd/gateway: add
--bucket-nameoption for using custom bucket names (#6741) - cmd: add
mountpointoption to improve symlink resolution for absolute paths (#6228) - sdk/java: support multiple subdir for hadoop-sdk (#6608)
- sdk/java: add
max-downloadsconfiguration option (#6679) - sdk/java: add
startTimeoption for nnbench (#6757) - sdk/java: add support for sending metrics via Prometheus
remote_writeprotocol (#6296) - object: allow unordered list in fsck/backup/gc/destroy commands (#6389)
- object: add support for enabling/disabling default CRC checksum via query parameters (#6239,#6232)
- object/azure: add managed identity authentication support (#6424)
- metrics: add metadata background jobs metrics (#6544, #6660)
- metrics: add subdir mount configuration metric (#6592)
Changed
- meta: speed up background trash cleanup job (#6602)
- meta/badger: improve reliability and resource management (#6725)
- meta: replace bulk doReaddir with batched DirHandler in cloneEntry to reduce memory pressure on large directories (#6469)
- meta/backup: delete backups older than two years (#6484)
- fs: return sorted entries when
sort-diris true (#6442, #6468) - cache: speed up scanning (#6549, #6528, #6557)
- cache/stage: reduce the priority of the stage cache by introducing a cooldown period (#6435)
- cache: use partial reads when cache is disabled to halve read amplification (#6364)
- cmd/mount: warn when both
readdir-cacheandskip-dir-mtimeare enabled as they may conflict (#6209) - cmd/mount: warn when
negative-entry-cacheis used on kernels below 5.11 to avoid concurrent mkdir failures (#6302) - cmd/sync: limit cached directory entries number per level to reduce memory usage (#6652)
- cmd/sync: reduce the number of concurrent large files (#6341,#6372)
- cmd/sync: set umask in sync cluster mode to preserve correct file permissions (#6400)
- cmd/sync: only retry temporary failures (#6132)
- cmd/sync: skip non-existent paths in
files-fromlist instead of failing (#6339) - cmd/sync: skip empty keys to prevent errors from blank entries (#6193)
- cmd/sync: rename sync temporary files to ".jfs.xxx.tmp.xxx" (#6665)
- cmd/sync: warn and skip non-regular files during entry listing (#6954)
- cmd/gateway: improve performance for batch deletion of objects (#6605)
- cmd/gateway: reduce memory for list objects (#6476)
- cmd/gateway: add ETag verification in multi-part upload completion for data integrity (#6485)
- cmd/gateway: add descriptive error messages for bucket name validation failures (#6773)
- cmd/restore: improve restore progress labels and conflict description (#6888)
- cmd: use
%qfor CLI-derived strings in logs (#6804) - cmd: add adaptive sleep time to read response (#6526)
- object/oss: support oss private link endpoint (#6686)
- object/oss: support switching signature version v1 (#6631)
- object/s3: limit the maximum number for list operations to 1000 (#6367)
- object/bos: remove redundant data validation from Put interface, already covered by SDK (#6904)
- object/wasb: support SAS token authentication via
--session-token(#6926) - sdk/java: exclude gspt from libjfs.so to prevent Java process argv truncation on Linux (#6726)
- sdk: support fully closing filesystem on delete (#6939)
- build: support make debug mode in makefile (#6573)
- monitor: merge grafana dashboards with
node_labelvariable (#6492)
Bug Fixes
- fuse: disable
readdir-cachefor special inodes like.trashto avoid showing stale entries (#6690) - vfs: remove
O_TMPFILEfile directly when closed (#6464) - meta/redis: fix potential deadlock when rename triggers checkTrash with nested transactions (#6558)
- meta/redis: close standalone client after cluster mode detection (#6948)
- meta/tkv: fix potential data corruption issues caused by clock diff and TiKV gc (#6217)
- meta/tkv: avoid repeatedly setting the same key which can lead to excessive memory usage in
CopyFileRange(#6449) - meta/sql: fix
tx_isolationsetting error for MySQL <= 5.7 (#6768) - meta: fix format decrypt error when uuid changed (#6542)
- meta: fix stale cache of the overwritten file in rename (#6893)
- meta: fix GetDirStat returning stale inodes count before flush (#6886)
- meta: fix group check when setting the setgid bit (#6943)
- cache: fix disk cache full checking logic (#6675)
- cache/stage: fix duplicate upload of staged blocks (#6697)
- cache/stage: fix potential EIO when reading stage blocks (#6388)
- cache: fix
cache-itemsoption description and log (#6252) - cmd/mount: add
nofailto fstab mount options to improve mount reliability (#6280) - cmd/mount: fix fstab option parsing that dropped parameter values like
attr-cache=1toattr-cache(#6420) - cmd/mount: disable shared metrics reporting when
no-bgjobis set (#6530) - cmd/sync: fix failed object count (#6533)
- cmd/sync: fix metrics for excluded and extra objects (#6863)
- cmd/sync: fix lost count in summary log (#6928)
- cmd/config: fix bug where
--bucketis treated as local path when--storageis not explicitly set (#6710) - cmd/fsck: fix repair to set directory permissions to 0755
- cmd/info: fix tail empty slice in output (#6832)
- cmd/destroy: allow destroy with
--forceto ignore missing bucket (#6767) - cmd/gateway: fix incorrect object name assignment in
getObjectInfoNoFSLock(#6493) - cmd/objbench: fix incorrect mtime check log message in list results (#6490)
- sdk/python: load platform-specific
libjfsextension (#6967) - sdk: close file handle in
jfs_chownto prevent fd leak (#6965) - sdk: fix close session handling (#6977)
- sdk/java: fix resource leaks, ancestor lookup, and null checks (#6964,#6961,#6960)
- object: fix client dial delay and prefer ipv6 (#6753)
- object/bos: fix endpoint format for bucket (#6746)
- object/s3: use default credential chain in autoS3Region when accessKey is empty (#6754)
- object/azure: handle nil ArchiveStatus to prevent panic (#6843)
- object/s3: pass session token to region auto-detection for STS support (#6946)
- object/minio: fix MinIO object storage info printing to remove duplicated bucket name in path (#6310)
- object: decode S3 object listing responses based on the encoding type returned by server (#6532)
Deps
- deps: upgrade pgx/v5 from 5.7.3 to 5.9.2 (#6963)
- deps: upgrade ibm-cos-sdk-go from v1.12.1 to v1.13.0 (#6851)
- deps: upgrade qingstor sdk from v4.4.0 to v4.4.1 (#6855)
- deps: upgrade bunny sdk from v0.0.10 to v1.0.0 (#6848)
- deps: upgrade bce sdk from v0.9.221 to v0.9.263 (#6847)
- deps: upgrade azure sdk from v1.3.1 to v1.6.4 (#6842)
- deps: upgrade tos sdk from v2.7.8 to v2.9.0 (#6840)
- deps: upgrade cos sdk from v0.7.63 to v0.7.73 (#6837)
- deps: upgrade oss sdk from v1.2.1 to v1.4.1 (#6836)
- deps: update go-fuse to fix flock (#6778)
- deps: bump gmsm to v0.41.1 (#6775)
- deps: update go version to 1.25 (#6303, #6680, #6862)
- deps: upgrade aws-sdk-go-v2 from v1.36.1 to v1.41.5 (#6883)
- deps: upgrade dgraph-io/badger to v4.9.1 (#6879)
- deps: upgrade go-sql-driver/mysql to v1.9.3 (#6878)
- deps: upgrade redis sdk from v9.16.0 to v9.18.0 (#6871)
- deps: upgrade sftp sdk from v1.13.5 to v1.13.10 (#6868)
- deps: upgrade qiniu sdk from v7.25.2 to v7.26.8 (#6861)