Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## unreleased

* Adjusted max volume mounts from 7 to 15

## v4.16.0 - 2026.01.13

* Update CSI driver for Kubernetes 1.35
Expand Down
2 changes: 1 addition & 1 deletion cmd/do-csi-plugin/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func main() {
defaultVolumesPageSize = flag.Uint("default-volumes-page-size", 0, "The default page size used when paging through volumes results (default: do not specify and let the DO API choose)")
doAPIRateLimitQPS = flag.Float64("do-api-rate-limit", 0, "Impose QPS rate limit on DigitalOcean API usage (default: do not rate limit)")
validateAttachment = flag.Bool("validate-attachment", false, "Validate if the attachment has fully completed before formatting/mounting the device")
volumeLimit = flag.Uint("volume-limit", 7, "Volumes per node limit to report; needs to match limit imposed by DO storage backend (honored by Node service only)")
volumeLimit = flag.Uint("volume-limit", driver.DefaultMaxVolumesPerNode, "Volumes per node limit to report; needs to match limit imposed by DO storage backend (honored by Node service only)")
version = flag.Bool("version", false, "Print the version and exit.")
)
flag.Parse()
Expand Down
8 changes: 4 additions & 4 deletions driver/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ func TestControllerExpandVolume(t *testing.T) {
"volume-id": tc.volume,
},
},
log: logrus.New().WithField("test_enabed", true),
log: logrus.New().WithField("test_enabled", true),
}
resp, err := driver.ControllerExpandVolume(context.Background(), tc.req)
if err != nil {
Expand Down Expand Up @@ -529,13 +529,13 @@ func TestWaitAction(t *testing.T) {
fakeStorageActionsDriver: &fakeStorageActionsDriver{},
storageGetValsFunc: test.storageGetValsFunc,
},
log: logrus.New().WithField("test_enabed", true),
log: logrus.New().WithField("test_enabled", true),
}

ctx, _ := context.WithTimeout(context.Background(), test.timeout)
err := d.waitAction(
ctx,
logrus.New().WithField("test_enabed", true),
logrus.New().WithField("test_enabled", true),
"volumeID",
42,
)
Expand Down Expand Up @@ -650,7 +650,7 @@ func TestListSnapshot(t *testing.T) {
snapshots: &fakeSnapshotsDriver{
snapshots: snapshots,
},
log: logrus.New().WithField("test_enabed", true),
log: logrus.New().WithField("test_enabled", true),
}

resp, err := d.ListSnapshots(context.Background(), &csi.ListSnapshotsRequest{
Expand Down
4 changes: 3 additions & 1 deletion driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ const (
// system for the canonical, official name of this plugin
DefaultDriverName = "dobs.csi.digitalocean.com"

defaultMaxVolumesPerNode = 7
// DefaultMaxVolumesPerNode defines the default maximum number of volumes
// that can be attached to a single node.
DefaultMaxVolumesPerNode = 15
)

var (
Expand Down
11 changes: 6 additions & 5 deletions driver/driver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,11 @@ func TestDriverSuite(t *testing.T) {
dropletIdx++
return strconv.Itoa(droplets[i+1].ID)
},
doTag: doTag,
region: "nyc3",
mounter: fm,
log: logrus.New().WithField("test_enabed", true),
doTag: doTag,
region: "nyc3",
mounter: fm,
log: logrus.New().WithField("test_enabled", true),
volumeLimit: DefaultMaxVolumesPerNode,

storage: &fakeStorageDriver{
volumes: volumes,
Expand Down Expand Up @@ -311,7 +312,7 @@ func (f *fakeStorageActionsDriver) Attach(ctx context.Context, volumeID string,
return nil, resp, errors.New("droplet was not found")
}

if len(droplet.VolumeIDs) >= defaultMaxVolumesPerNode {
if len(droplet.VolumeIDs) >= DefaultMaxVolumesPerNode {
resp.Response = &http.Response{
StatusCode: http.StatusUnprocessableEntity,
}
Expand Down