Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
d65f299
Bump version to 2.5.3 and document features (#2110)
bhansalivikas Jan 20, 2026
e52f77a
Update Go version from 1.25.1 to 1.25.6 (#2115)
Copilot Jan 23, 2026
658ec3c
Disable FIO read tests for filecache mode and add custom 100GB direct…
Copilot Jan 30, 2026
e4b5691
Bump golang.org/x/sys from 0.40.0 to 0.41.0 (#2122)
dependabot[bot] Feb 9, 2026
8cfdd02
Adding rate limit functionality for ingress bandwidth and operations …
souravgupta-msft Feb 9, 2026
ef8e020
Fix QF1012 staticcheck warnings: replace WriteString(Sprintf) with Fp…
Copilot Feb 18, 2026
5a624fd
Resolve panic in unit tests in policies_test.go (#2129)
syeleti-msft Feb 18, 2026
326642f
Update dependencies (#2132)
souravgupta-msft Feb 19, 2026
7ac0ad9
Resolve panic while reading an archived file using filecache (#2127)
syeleti-msft Feb 19, 2026
3a1bde1
Ensure logger is destroyed before returning from mount command. (#2125)
syeleti-msft Feb 20, 2026
e1d8618
Fix CVE-2025-68121: Update Go toolchain to 1.25.7 (#2126)
Copilot Mar 3, 2026
67bfedc
Add script to consolidate data and upload to storage account (#2143)
bhansalivikas Mar 3, 2026
4da2b58
Bump actions/checkout from 4 to 6 (#2149)
dependabot[bot] Mar 5, 2026
9149a1a
Bump actions/setup-python from 5 to 6 (#2150)
dependabot[bot] Mar 5, 2026
8ad0f94
Bump golang.org/x/time from 0.14.0 to 0.15.0 (#2152)
dependabot[bot] Mar 9, 2026
0ce0793
Bump golang.org/x/sys from 0.41.0 to 0.42.0 (#2153)
dependabot[bot] Mar 9, 2026
282ccfa
Update README.md (#1934)
p15nishatr Mar 9, 2026
d87a3c2
Add RMAN backup workload to nightly pipeline (#2138)
syeleti-msft Mar 11, 2026
2bdfeda
Bump github.com/montanaflynn/stats from 0.7.1 to 0.8.2 (#2157)
dependabot[bot] Mar 12, 2026
506c4fc
Parallel FlushFile calls in file cache (#2136)
souravgupta-msft Mar 12, 2026
0bf9b9f
Updating version to 2.5.3 (#2158)
souravgupta-msft Mar 12, 2026
f99e457
Adding version files for warnings (#2159)
souravgupta-msft Mar 15, 2026
9f2f4bc
Remote version check for updates and warnings (#2160)
souravgupta-msft Mar 16, 2026
9724693
Bump azure/login from 2 to 3 (#2164)
dependabot[bot] Mar 18, 2026
15074e2
Update logic for version check (#2163)
souravgupta-msft Mar 18, 2026
7aec08c
Updating codeowners (#2165)
souravgupta-msft Mar 18, 2026
857ea6a
Adding action to create docker container and publish on github contai…
bhansalivikas Mar 18, 2026
4746b40
Bump docker/login-action from 3 to 4 (#2170)
dependabot[bot] Mar 19, 2026
3dd5ff4
Bump docker/metadata-action from 5 to 6 (#2166)
dependabot[bot] Mar 19, 2026
7d6057b
Bump actions/checkout from 4 to 6 (#2168)
dependabot[bot] Mar 19, 2026
c69ac4e
Bump docker/build-push-action from 5 to 7 (#2167)
dependabot[bot] Mar 19, 2026
b1e2404
Bump docker/setup-buildx-action from 3 to 4 (#2169)
dependabot[bot] Mar 19, 2026
0908749
Fix nightly pipeline errors (#2173)
souravgupta-msft Mar 19, 2026
85fdebf
Bump actions/setup-go from 5 to 6 (#2175)
dependabot[bot] Mar 20, 2026
f62b1ee
Blobfuse-Buddy mcp server integration (#2151)
bhansalivikas Mar 20, 2026
deb0acf
Fix release pipeline (#2176)
souravgupta-msft Mar 21, 2026
6a0be5c
Bump actions/checkout from 4 to 6 (#2177)
dependabot[bot] Mar 23, 2026
b8e5392
Bump actions/setup-python from 5 to 6
dependabot[bot] Mar 23, 2026
cf8882d
Bump azure/login from 2 to 3 (#2178)
dependabot[bot] Mar 23, 2026
39191d2
Release pipeline fix (#2180)
souravgupta-msft Mar 23, 2026
2148334
Updated trivy dependency to known safe version (#2181)
gapra-msft Mar 24, 2026
5f797a9
Update go mod (#2182)
syeleti-msft Mar 24, 2026
cdd32a5
Update GitHub service connection (#2183)
souravgupta-msft Mar 24, 2026
4e0efc6
Bump github.com/montanaflynn/stats from 0.8.2 to 0.9.0 (#2184)
dependabot[bot] Mar 25, 2026
0652340
Changelog update post 2.5.3 release (#2187)
souravgupta-msft Mar 25, 2026
24036ea
Bump golang.org/x/sys from 0.42.0 to 0.43.0 (#2190)
dependabot[bot] Apr 9, 2026
64c3c15
Update CODEOWNERS (#2192)
souravgupta-msft Apr 9, 2026
f57a4cd
Bump Go from 1.26.1 to 1.26.2 to fix CVE-2026-33810 (#2193)
Copilot Apr 9, 2026
293e1b4
Bump github.com/Azure/azure-sdk-for-go/sdk/azcore from 1.21.0 to 1.21…
dependabot[bot] Apr 17, 2026
f88601a
Bump aquasecurity/trivy-action from 0.35.0 to 0.36.0 (#2196)
dependabot[bot] Apr 23, 2026
9005853
Fix static analysis step - pin golangci-lint to v2.11.0 (#2201)
souravgupta-msft May 4, 2026
f7b4038
Fixing url to install golangci-lint (#2202)
souravgupta-msft May 4, 2026
34c3fcc
Bump gopkg.in/ini.v1 from 1.67.1 to 1.67.2 (#2200)
dependabot[bot] May 4, 2026
795a5a4
Bump github.com/fsnotify/fsnotify from 1.9.0 to 1.10.0 (#2198)
dependabot[bot] May 4, 2026
80edbd7
Bump github.com/fsnotify/fsnotify from 1.10.0 to 1.10.1 (#2203)
dependabot[bot] May 5, 2026
9d552d2
Replace on-demand CI workflow with comment-triggered PR mirror for AD…
Copilot May 7, 2026
6857ad8
Trigger ci automcatically for the branches with prefix pr-mirror/* (#…
syeleti-msft May 7, 2026
c9871f8
Bump actions/github-script from 7 to 9 (#2207)
dependabot[bot] May 8, 2026
7adaed5
Bump golang.org/x/sys from 0.43.0 to 0.44.0 (#2210)
dependabot[bot] May 11, 2026
d85c6e2
Fix duplicated prefix in CPK block blob attribute lookup for subdirec…
imddanish May 11, 2026
152af28
Bump github.com/Azure/azure-sdk-for-go/sdk/storage/azblob from 1.6.4 …
dependabot[bot] May 18, 2026
5a860ac
Bump github.com/Azure/azure-sdk-for-go/sdk/storage/azdatalake from 1.…
dependabot[bot] May 18, 2026
85a84cf
Replace interface{}->any to follow newer syntax (#2211)
syeleti-msft May 18, 2026
8bf5ff6
Bump golang.org/x/sys from 0.44.0 to 0.45.0 (#2225)
dependabot[bot] May 22, 2026
b5b61a4
FIPS compliance (#2226)
souravgupta-msft Jun 1, 2026
e86893c
Stop publishing Blobfuse2 to CBL-Mariner 2.0 (EOL) (#2239)
souravgupta-msft Jun 3, 2026
81ec8b3
Return correct posix error ENAMETOOLONG for dir creation in ADLS (#2221)
syeleti-msft Jun 3, 2026
e3737e0
Bump github.com/Azure/azure-sdk-for-go/sdk/azcore from 1.21.1 to 1.22…
dependabot[bot] Jun 5, 2026
3f3f0bf
Bump golang.org/x/sys from 0.45.0 to 0.46.0 (#2246)
dependabot[bot] Jun 9, 2026
bb288d4
Bump gopkg.in/ini.v1 from 1.67.2 to 1.67.3 (#2247)
dependabot[bot] Jun 9, 2026
fefa013
Bump github.com/Azure/azure-sdk-for-go/sdk/azidentity from 1.13.1 to …
dependabot[bot] Jun 16, 2026
5b3218f
Bump github.com/Azure/azure-sdk-for-go/sdk/storage/azdatalake from 1.…
dependabot[bot] Jun 16, 2026
605ae81
Bump actions/checkout from 6 to 7 (#2259)
dependabot[bot] Jun 19, 2026
ea37128
remove ai bot that is auto commenting in issues (#2256)
syeleti-msft Jun 23, 2026
61f4f3a
attr_cache: replace entry-count limit with memory-bounded LRU and bac…
syeleti-msft Jun 24, 2026
a4f7af4
Return ENAMETOOLONG when renaming to a too-deep ADLS path (#2251)
CynicDog Jun 26, 2026
1087c4e
Clarify max_background parameter naming and enhance FUSE initializati…
syeleti-msft Jun 28, 2026
21de654
[block-cache]Reduce auto tuned memory pool size from 80% to 60% (#2260)
syeleti-msft Jun 29, 2026
d3513e0
Update CODEOWNERS (#2267)
souravgupta-msft Jun 29, 2026
a8a748f
Bump github.com/prometheus/procfs from 0.20.1 to 0.21.0 (#2269)
dependabot[bot] Jun 30, 2026
ee86f08
Bump github.com/prometheus/procfs from 0.21.0 to 0.21.1 (#2271)
dependabot[bot] Jul 1, 2026
bd087f6
Add Debian 13 (libfuse3.so.4) build and test support (#2264)
souravgupta-msft Jul 1, 2026
4c625c9
Enable CI runs for PRs created against feature/tachyon branch (#2272)
souravgupta-msft Jul 1, 2026
5b0dc87
Support kernel list caching with a TTL parameter to configure the sta…
syeleti-msft Jul 3, 2026
bc97ced
fix build issues for libfuse < 3.15 ( rhel 8.6, centos 8.5) (#2276)
syeleti-msft Jul 6, 2026
f9afa66
Mirror Go runtime crash dumps into the Blobfuse2 log file (#2242)
souravgupta-msft Jul 6, 2026
cfcef84
Fix #2249: support blob index tag filtering on Block Blob, ADLS accou…
syeleti-msft Jul 7, 2026
55a44b1
Changelog update for 2.5.4 release (#2277)
souravgupta-msft Jul 7, 2026
e73a4bb
Remove CentOS from nightly and release pipelines (#2278)
souravgupta-msft Jul 7, 2026
4b08493
v2.5.4 release prep (#2279)
syeleti-msft Jul 8, 2026
12745df
Merge tag 'blobfuse2-2.5.4' into feature/merge-blobfuse-2.5.4
jfantinhardesty Sep 25, 2026
3826a7e
Fix merge issues
jfantinhardesty Sep 25, 2026
62239b3
Remove attr cache change from upstream
jfantinhardesty Sep 25, 2026
891f458
Merge branch 'main' into feature/merge-blobfuse-2.5.4
jfantinhardesty Sep 25, 2026
66e8665
More fixes to tests
jfantinhardesty Sep 25, 2026
4a9c4b1
Merge branch 'main' into feature/merge-blobfuse-2.5.4
jfantinhardesty Oct 9, 2026
d26a8d4
Cleanup PR by not taking new workflows from upstream and fixing copyr…
jfantinhardesty Oct 9, 2026
38d0c14
Update copyright
jfantinhardesty Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Azure Storage Fuse (cloudfuse)

Cloudfuse is a FUSE filesystem driver that provides virtual filesystem backed by S3 or Azure Blob Storage. It uses libfuse (fuse3) to communicate with the Linux FUSE kernel module and implements filesystem operations using the AWS S3 or Azure Storage REST APIs.
Cloudfuse is a FUSE filesystem driver that provides virtual filesystem backed by S3 or Azure Blob Storage. It uses libfuse (fuse3) to communicate with the Linux FUSE kernel module and implements filesystem operations using the AWS S3 or Azure Storage REST APIs.

Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.

Expand All @@ -11,26 +11,32 @@ Always reference these instructions first and fallback to search or bash command
**CRITICAL**: All build and test commands include specific timeout warnings. NEVER CANCEL long-running operations.

- Install required dependencies:

```bash
sudo apt update
sudo apt install -y libfuse3-dev fuse3 gcc
```

- Install Go 1.27.0+ (already available in most environments; version is pinned in [go.mod](../go.mod)):

```bash
go version # Should show 1.27.0 or higher
```

- Build cloudfuse binary:

```bash
./build.sh
```

**Timing**: ~30 seconds. NEVER CANCEL. Use timeout 120+ seconds.

- Build health monitor binary:

```bash
./build.sh health
```

**Timing**: ~5 seconds. Use timeout 60+ seconds.

- Verify binary functionality:
Expand All @@ -42,25 +48,31 @@ Always reference these instructions first and fallback to search or bash command
### Testing

- Run unit tests (core components only):

```bash
go test -v -timeout=10m ./internal/... ./common/... --tags=unittest,fuse3
```

**Timing**: ~2 minutes. NEVER CANCEL. Use timeout 15+ minutes.

- Run full unit tests (some may fail without Azure credentials):

```bash
go test -v -timeout=45m ./... --tags=unittest,fuse3
```

**WARNING**: Expected network/credential test failures. **Timing**: ~5-10 minutes. NEVER CANCEL. Use timeout 60+ minutes.

- Run linting:

```bash
# Install golangci-lint if not available
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

# Run linting
$(go env GOPATH)/bin/golangci-lint run --tests=false --build-tags fuse3 --max-issues-per-linter=0
```

**Timing**: ~10 seconds. Use timeout 60+ seconds.

- Check code formatting:
Expand All @@ -74,6 +86,7 @@ Always reference these instructions first and fallback to search or bash command
**ALWAYS test these scenarios after making changes**:

1. **Binary Creation and Basic Commands**:

```bash
./build.sh
./cloudfuse --version
Expand All @@ -82,13 +95,15 @@ Always reference these instructions first and fallback to search or bash command
```

2. **Config Generation**:

```bash
mkdir -p /tmp/cloudfuse-test
./cloudfuse gen-config --tmp-path=/tmp/cloudfuse-test --o /tmp/cloudfuse-test/config.yaml
cat /tmp/cloudfuse-test/config.yaml
```

3. **Health Monitor**:

```bash
./build.sh health
./cfusemon --help
Expand Down Expand Up @@ -197,8 +212,9 @@ $(go env GOPATH)/bin/golangci-lint run --tests=false --build-tags fuse3 --max-is
## Key Files to Monitor

When making changes, always check these files for consistency:

- `go.mod` - dependency versions
- `main.go` - entry point
- `build.sh` - build configuration
- `cmd/mount.go` - core mount functionality
- Configuration templates in `setup/` and root directory
- Configuration templates in `setup/` and root directory
13 changes: 12 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ config*.yaml
testcnf.yaml
cloudfuse.log
cloudfuse.test
blobfuse2.log
blobfuse2.log.*
blobfuse2.test
azuretest.json
cloudfuse
cloudfuse.exe
Expand Down Expand Up @@ -43,7 +46,15 @@ component/azstorage/logfile.txt
logfile.txt
**/logfile.txt
**/logfile.txt.*
# Test trace files
*/_tmp_*.trace
_tmp_*.trace
# Emacs backup and auto-save files
*~
\#*\#
.\#*
.\#*
# Python bytecode
__pycache__/
*.pyc
*.pyo
.agents
13 changes: 13 additions & 0 deletions cmd/mount.go
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,12 @@ var mountCmd = &cobra.Command{
return fmt.Errorf("failed to initialize logger [%s]", err.Error())
}

// It's best to destroy the logger before we return to the caller, as caller may abruptly exit on error and we
// might lose some logs in the channel which are not yet flushed to the file in case of not destroying the logger
defer func() {
_ = log.Destroy()
}()

if !disableVersionCheck {
err := VersionCheck()
if err != nil {
Expand Down Expand Up @@ -527,6 +533,13 @@ var mountCmd = &cobra.Command{
log.Crit("Log options: %+v", options.Logging)
log.Debug("Mount allowed on nonempty path : %v", options.NonEmpty)

// Mirror runtime panic/fatal stack traces to a log file (in addition to stderr, which the daemon library
// redirects to the per-mount .trace file). Also re-attaches the fd after in-process rotation and on SIGHUP
// from external rotators (logrotate, AKS Blob CSI driver, ...). Captures panics in any goroutine, including
// those spawned by libfuse callbacks. Called after the first log.Crit so that in syslog mode rsyslog has
// already created /var/log/Cloudfuse.log.
log.SetupCrashOutput(options.Logging.Type, options.Logging.LogFilePath)

if directIO {
// Direct IO is enabled, so remove the attr-cache from the pipeline
for i, name := range options.Components {
Expand Down
22 changes: 22 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,28 @@ func parseArgs(cmdArgs []string) []string {
return args
}

func getTransport() *http.Transport {
// Prefer cloning the default transport so we inherit standard
// proxy/TLS settings (including HTTP(S)_PROXY and NO_PROXY).
if dt, ok := http.DefaultTransport.(*http.Transport); ok {
cp := dt.Clone()
cp.MaxIdleConns = 10
cp.IdleConnTimeout = 30 * time.Second
cp.DisableCompression = true // GitHub API responses are small
cp.DisableKeepAlives = false // Connections are reused
return cp
}

// Fallback: construct a transport that at least respects proxy env vars.
return &http.Transport{
Proxy: http.ProxyFromEnvironment,
MaxIdleConns: 10,
IdleConnTimeout: 30 * time.Second,
DisableCompression: true, // GitHub API responses are small
DisableKeepAlives: false, // Connections are reused
}
}

// Execute : Actual command execution starts from here
func Execute() error {
parsedArgs := parseArgs(os.Args)
Expand Down
1 change: 0 additions & 1 deletion cmd/root_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ func (suite *rootCmdSuite) SetupTest() {
if err != nil {
panic(fmt.Sprintf("Unable to set silent logger as default: %v", err))
}
// suite.testExecute()
}

func (suite *rootCmdSuite) cleanupTest() {
Expand Down
Loading
Loading