github seaweedfs/seaweedfs 4.18

4 hours ago

What's Changed

  • Helm Chart

    • Fix topologySpreadConstraints key in sftp-deployment.yaml by @mohsek in #8600
    • fix(helm): use componentName for all service names to fix truncation mismatch by @chrislusf in #8612
    • fix(helm): trim whitespace before s3 TLS args to prevent command breakage by @chrislusf in #8614
    • fix(chart): all in one maxVolumes value by @hoppla20 in #8683
    • fix(chart): missing resources on volume statefulset initContainer by @hoppla20 in #8678
    • fix(chart): bucket hook by @hoppla20 in #8680
    • fix(helm): namespace app-specific global values under global.seaweedfs by @chrislusf in #8700
    • feat: improve aio support for admin/volume ingress and fix UI links by @jr200 in #8679
    • feat(ci): publish helm chart to ghcr by @hoppla20 in #8697
    • feat(k8s): added possibility to specify service.type for multiple ser… by @andreasroste in #8372
    • ci: add Trivy CVE scan to container release workflow by @chrislusf in #8820
  • Misc

    • Reduce task logger glog noise and remove per-write fsync by @chrislusf in #8603
    • fix(mount): return dropped error by @alrs in #8623
    • deps: upgrade seaweedfs/raft to v1.1.7 by @chrislusf in #8677
    • Fix lock table shared wait condition by @chrislusf in #8707
    • wdclient/exclusive_locks: replace println with glog in ExclusiveLocker by @basic-system in #8723
    • Fix stale admin lock metric when lock expires and is reacquired by @chrislusf in #8859
    • dlm: resilient distributed locks via consistent hashing + backup replication by @chrislusf in #8860
    • glog: add --log_max_size_mb and --log_max_files runtime flags by @jardelva96 in #8684
    • glog: add --log_rotate_hours flag for time-based log rotation by @jardelva96 in #8685
    • glog: add gzip compression for rotated log files by @jardelva96 in #8709
    • glog: add JSON structured logging mode by @jardelva96 in #8708
    • fix: keep metadata subscriptions progressing (#8730) by @chrislusf in #8746
    • chore:(weed/worker/tasks/erasure_coding): Prune Unused and Untested Functions by @alrs in #8761
    • fix: resolve Kafka gateway response deadlocks causing Sarama client hangs by @chrislusf in #8762
    • Add insecure_skip_verify option for HTTPS client in security.toml by @chrislusf in #8781
    • fix(weed/filer/store_test): fix dropped errors by @alrs in #8782
    • Fix TUS chunked upload and resume failures (#8783) by @chrislusf in #8786
    • chore(feed/worker): prune unused registerWorker() by @alrs in #8799
    • sftpd: use global TLS-aware HTTP client for filer uploads by @chrislusf in #8795
    • Prune Unused Functions from weed/s3api by @alrs in #8815
    • notification.kafka: add SASL authentication and TLS support by @chrislusf in #8832
    • fix unsupported platform container builds by @chrislusf in #8838
    • weed/s3api: prune test-only functions by @alrs in #8840
    • Use Unix sockets for gRPC in mini mode by @chrislusf in #8856
    • Use Unix sockets for gRPC in weed server mode by @chrislusf in #8858
    • Prune wdclient Functions by @alrs in #8855
    • Prune Query Engine by @alrs in #8865
    • Prune unused functions from weed/admin/dash. by @alrs in #8871
  • Grafana

    • Fix misuse of $__interval instead of $__rate_interval in Grafana panels by @moray95 in #8617
    • fix(grafana): unify datasource usage in grafana_seaweedfs.json by @mtmn in #8635
    • Add Prometheus metric to count upload errors by @chrislusf in #8788
  • Shell

    • fix(shell): set LastLocalSyncTsNs in remote.copy.local so remote.uncache works by @chrislusf in #8604
    • feat(shell): add volume.tier.compact command to reclaim cloud storage space by @chrislusf in #8715
    • shell: add s3.bucket.access command for anonymous access policy by @chrislusf in #8774
    • fix ec.balance failing to rebalance when all nodes share all volumes by @chrislusf in #8796
    • fix balance fallback replica placement by @chrislusf in #8824
    • fix(shell): avoid marking skipped or unplaced volumes as fixed by @qzhello in #8866
    • Process .ecj deletions during EC decode and vacuum decoded volume by @chrislusf in #8863
  • S3 API

    • fix(s3api): allow bucket recreation when orphaned collection exists by @chrislusf in #8605
    • fix(s3): omit NotResource:null from bucket policy JSON response by @chrislusf in #8658
    • fix(s3): return ETag header for directory marker PutObject requests by @chrislusf in #8688
    • fix(s3): include directory markers in ListObjects without delimiter by @chrislusf in #8704
    • fix(s3): allow deleting the anonymous user from admin webui by @chrislusf in #8706
    • Preserve explicit directory markers with octet-stream MIME by @chrislusf in #8726
    • fix: extend ignore404Error to match 404 Not Found string from S3 sink… by @Mmx233 in #8741
    • Fix S3 delete for non-empty directory markers by @chrislusf in #8740
    • S3: fix silent PutObject failure and enforce 1024-byte key limit by @chrislusf in #8764
    • S3: add s3: prefix to x-amz-* condition keys for AWS compatibility by @chrislusf in #8765
    • S3: reject part uploads after AbortMultipartUpload by @chrislusf in #8768
    • fix: serialize SSE-KMS metadata when bucket default encryption applies KMS by @chrislusf in #8780
    • s3api: make conditional mutations atomic and AWS-compatible by @chrislusf in #8802
    • s3api: preserve lifecycle config responses for Terraform by @chrislusf in #8805
    • s3: support s3:x-amz-server-side-encryption policy condition by @chrislusf in #8806
    • s3api: accept all supported lifecycle rule types by @chrislusf in #8813
    • ci: add S3 mutation regression coverage by @chrislusf in #8804
    • fix(s3): preserve explicit directory markers during empty folder cleanup by @chrislusf in #8831
    • s3api: skip TTL fast-path for versioned buckets by @chrislusf in #8823
  • Admin and Workers

    • feat(admin): support env var and security.toml for credentials by @chrislusf in #8606
    • Update admin UI secret example to match by @kallies in #8618
    • feat(balance): add volume state filter (ALL/ACTIVE/FULL) by @chrislusf in #8619
    • feat(plugin): enhanced collection filtering for volume balance by @chrislusf in #8620
    • feat(plugin): DC/rack/node filtering for volume balance by @chrislusf in #8621
    • feat(balance): replica placement validation for volume moves by @chrislusf in #8622
    • feat: auto-disable master vacuum when plugin worker is active by @chrislusf in #8624
    • feat(plugin): make page tabs and sub-tabs addressable by URLs by @chrislusf in #8626
    • feat(vacuum): add volume state and location filters to vacuum handler by @chrislusf in #8625
    • Fix ec.rebuild failing on unrepairable volumes instead of skipping by @chrislusf in #8632
    • fix(ec): gather shards from all disk locations before rebuild by @chrislusf in #8633
    • feat(plugin): EC shard balance handler for plugin worker by @chrislusf in #8629
    • fix(mini): use "all" job type for plugin worker by @chrislusf in #8634
    • feat(admin): add -urlPrefix flag for subdirectory deployment by @chrislusf in #8670
    • fix(admin): show anonymous user in Object Store Users UI by @chrislusf in #8671
    • admin: fix manual job run to use scheduler dispatch with capacity management and retry by @basic-system in #8720
    • admin/plugin: migrate inline job details asynchronously to avoid slow startup by @basic-system in #8721
    • admin/plugin: delete job_detail files when jobs are pruned from memory by @basic-system in #8722
    • admin UI: add anonymous user creation checkbox by @chrislusf in #8773
    • feat: separate scheduler lanes for iceberg, lifecycle, and volume management by @chrislusf in #8787
    • Remove min_interval_seconds from plugin workers; vacuum default to 17m by @chrislusf in #8790
    • s3lifecycle: add lifecycle rule evaluator package and extend XML types by @chrislusf in #8807
    • lifecycle worker: detect buckets via lifecycle XML metadata by @chrislusf in #8808
    • lifecycle worker: scan-time rule evaluation for object expiration by @chrislusf in #8809
    • lifecycle worker: NoncurrentVersionExpiration support by @chrislusf in #8810
    • lifecycle worker: fix ExpiredObjectDeleteMarker to match AWS semantics by @chrislusf in #8811
    • lifecycle worker: drive MPU abort from lifecycle rules by @chrislusf in #8812
    • lifecycle worker: add integration tests with in-memory filer by @chrislusf in #8818
    • plugin scheduler: run iceberg and lifecycle lanes concurrently by @chrislusf in #8821
    • fix(worker): pass compaction revision and file sizes in EC volume copy by @chrislusf in #8835
    • Fix Admin UI master list showing gRPC port instead of HTTP port by @chrislusf in #8869
  • Filer Sync

    • fix(replication): resume partial chunk reads on EOF instead of re-downloading by @chrislusf in #8607
    • filer.sync: replace O(n) conflict check with O(depth) index lookups by @chrislusf in #8772
    • Add -filerExcludePathPattern flag and fix nil panic in -filerExcludeFileName by @kisow in #8756
    • filer.sync: pipelined subscription with adaptive batching for faster catch-up by @chrislusf in #8791
    • filer.sync: send log file chunk fids to clients for direct volume server reads by @chrislusf in #8792
    • filer.sync: support per-cluster mTLS with -a.security and -b.security by @chrislusf in #8872
  • Filer

    • fix(filer): limit concurrent proxy reads per volume server by @chrislusf in #8608
    • filer: propagate lazy metadata deletes to remote mounts by @petedodd-pd in #8522
    • feat(filer): add lazy directory listing for remote mounts by @chrislusf in #8615
    • filer: add conditional update preconditions by @chrislusf in #8647
    • fix: resolve CORS cache race condition causing stale 404 responses by @chrislusf in #8748
    • filer: add structured error codes to CreateEntryResponse by @chrislusf in #8767
    • fix(filer): apply default disk type after location-prefix resolution in gRPC AssignVolume by @chrislusf in #8836
    • Client disconnects create context cancelled errors, 500x errors and Filer lookup failures by @m-sementsov in #8845
    • Retry uploader on volume full by @chrislusf in #8853
    • Adjust rename events metadata format by @chrislusf in #8854
  • Remote Mount

    • feat(remote.mount): add -metadataStrategy flag to control metadata caching by @petedodd-pd in #8568
    • fix(remote): don't send empty StorageClass in S3 uploads by @chrislusf in #8645
    • fix: clean up orphaned needles on remote.cache partial download failure by @chrislusf in #8675
    • improve: large file sync throughput for remote.cache and filer.sync by @chrislusf in #8676
    • fix(remote_gateway): prevent double-versioning when syncing to versioned central bucket by @chrislusf in #8710
  • S3 Table Buckets for Iceberg

    • Add data file compaction to iceberg maintenance (Phase 2) by @chrislusf in #8503
    • Change iceberg compaction target file size config from bytes to MB by @chrislusf in #8636
    • iceberg: keep split bins within target size by @chrislusf in #8640
    • iceberg: validate filer failover targets by @chrislusf in #8637
    • iceberg: handle filer-backed compaction inputs by @chrislusf in #8638
    • Iceberg table maintenance Phase 3: multi-spec compaction, delete handling, and metrics by @chrislusf in #8643
    • iceberg: detect maintenance work per operation by @chrislusf in #8639
    • iceberg: add resource-group proposal controls by @chrislusf in #8668
    • iceberg: cache detection planning results by @chrislusf in #8667
    • iceberg: add delete file rewrite maintenance by @chrislusf in #8664
    • iceberg: add sort-aware compaction rewrite by @chrislusf in #8666
    • build(deps): upgrade apache/iceberg-go from v0.4.0 to v0.5.0 by @chrislusf in #8713
  • FUSE Mount

    • Make weed-fuse compatible with systemd-based mount by @Victrid in #6814
    • mount: async flush on close() when writebackCache is enabled by @chrislusf in #8727
    • Use filer-side copy for mounted whole-file copy_file_range by @chrislusf in #8747
    • Implement POSIX file locking for FUSE mount by @chrislusf in #8750
    • Add FUSE integration tests for POSIX file locking by @chrislusf in #8752
    • mount: implement create for rsync temp files by @chrislusf in #8749
    • weed/mount: simplify metadata flush retry returns by @chrislusf in #8763
    • mount: improve small file write performance by @chrislusf in #8769
    • mount: stream all filer mutations over single ordered gRPC stream by @chrislusf in #8770
    • fix(fuse-test): recover from FUSE directory loss in git pull test by @chrislusf in #8789
    • stabilize FUSE git reset recovery by @chrislusf in #8825
    • mount: add option to show system entries by @hexahigh in #8829
  • Master

    • fix: improve raft leader election reliability and failover speed by @chrislusf in #8692
  • Volume Server

  • Rust Volume Server

New Contributors

Full Changelog: 4.17...4.18

Don't miss a new seaweedfs release

NewReleases is sending notifications on new releases.