hashgraph / hashgraph/solo-weaver
block node reconfigure fails with "at least one storage path is not set and base path is empty" on chart ≥ 0.37.0 clusters
- Dominant language
- Go
- Stars
- 3
- Forks
- 0
- Avg merge
- 3d 2h
- Merged PRs (30d)
- 46
Description
## Environment
Individual-paths storage install; block node deployed at chart ≥ 0.37.0 (application-state volume present).
## Problem
There are two storage changes in BN v0.37.x release
- remove **verification**
- add new **application-state**
This caused the **reconfigure** to fail, for example,
```
# sudo solo-provisioner block node reconfigure --profile=perfnet --values=solo-provisioner/values.yaml --with-reset
Selected Inputs
› Historic Block Retention Threshold: 0
› Recent Block Retention Threshold: 96000
› Storage Path Mode: Individual paths
› Archive Storage Path: /mnt/fast-storage/block-node/archive
› Live Storage Path: /mnt/fast-storage/block-node/live
› Log Storage Path: /mnt/fast-storage/block-node/logs
› Plugins Storage Path: /mnt/fast-storage/block-node/plugins
› Application-State Storage Path: /mnt/fast-storage/application-state
› Plugin Preset: Tier 1 — Local Full History (blocks stored on local disk)
Error: common.illegal_state: failed to compare storage paths, cause: common.illegal_argument: at least one storage path is not set and base path is empty; set --base-path flag or storage.basePath in config
Usage:
solo-provisioner block node reconfigure [flags]
```
even though all individual paths were supplied including **--application-state-path**.
## Expected
- `reconfigure` proceeds
- storage-path comparison succeeds.
## Root cause
`internal/reality/blocknode_checker.go:populateStorageFromPVs()` switch has no **application-state** case, so the reality checker never reads the **application-state** PV's hostPath back into `BlockNodeState.Storage.ApplicationStatePath`. The empty deployed path then fails `ResolveStoragePaths` (`internal/blocknode/storage.go:464`) via `storagePathsChanged` (`internal/bll/blocknode/helpers.go:172`).
Possible fix(verified that fixed the above failure)
```
diff --git a/internal/reality/blocknode_checker.go b/internal/reality/blocknode_checker.go
index 4e94eff..82354bb 100644
--- a/internal/reality/blocknode_checker.go
+++ b/internal/reality/blocknode_checker.go
@@ -207,6 +207,9 @@ func (b *blockNodeChecker) populateStorageFromPVs(
case strings.Contains(claimName, "verification"):
storage.VerificationPath = hostpath
storage.VerificationSize = size
+ case strings.Contains(claimName, "application-state"):
+ storage.ApplicationStatePath = hostpath
+ storage.ApplicationStateSize = size
case strings.Contains(claimName, "plugins"):
storage.PluginsPath = hostpath
storage.PluginsSize = size
```
## Impact
Any final solution may need to consider following as test cases:
- **reconfigure** (all variants) fails outright.
- **reset**, **uninstall** `--purge-storage`/`--with-reset` fail during execution when relying on state.
- **upgrade**/**install** fail only if the requested `application-state` path is unresolved (more likely under `--non-interactive`).
- Also makes any `0.36.x`→`0.37.0` migration non-durable: post-migration state persists an empty application-state path, planting a failure for the next command.
Contributor guide
Research direction
Start in internal/reality/blocknode_checker.go at populateStorageFromPVs(), then trace storage-path resolution in internal/blocknode/storage.go:464 and storagePathsChanged in internal/bll/blocknode/helpers.go:172. Reproduce the reported block node reconfigure command and verify that application-state is recovered from the deployed PV so storage-path comparison succeeds across the listed reset, uninstall, upgrade, and install scenarios.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, kubernetes
- Domain
- devops, infrastructure
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 78/100