@@ -21,6 +21,7 @@ import (
2121// OntapNASQtreeStorageDriverName is the constant name for this Ontap qtree-based NAS storage driver
2222const OntapNASQtreeStorageDriverName = "ontap-nas-economy"
2323const deletedQtreeNamePrefix = "deleted_"
24+ const maxQtreeNameLength = 64
2425const maxQtreesPerFlexvol = 200
2526const defaultPruneFlexvolsPeriodSecs = uint64 (600 ) // default to 10 minutes
2627const defaultResizeQuotasPeriodSecs = uint64 (60 ) // default to 1 minute
@@ -219,6 +220,11 @@ func (d *OntapNASQtreeStorageDriver) Create(name string, sizeBytes uint64, opts
219220 return fmt .Errorf ("Volume %s already exists." , name )
220221 }
221222
223+ // Ensure qtree name isn't too long
224+ if len (name ) > maxQtreeNameLength {
225+ return fmt .Errorf ("Volume %s name exceeds the limit of %d characters." , name , maxQtreeNameLength )
226+ }
227+
222228 // Get Flexvol options with default fallback values
223229 // see also: ontap_common.go#PopulateConfigurationDefaults
224230 size := strconv .FormatUint (sizeBytes , 10 )
@@ -339,9 +345,16 @@ func (d *OntapNASQtreeStorageDriver) Destroy(name string) error {
339345 return nil
340346 }
341347
342- // Rename qtree so it doesn't show up in lists while ONTAP is deleting it in the background
348+ // Rename qtree so it doesn't show up in lists while ONTAP is deleting it in the background.
349+ // Ensure the deleted name doesn't exceed the qtree name length limit of 64 characters.
343350 path := fmt .Sprintf ("/vol/%s/%s" , flexvol , name )
344- deletedPath := fmt .Sprintf ("/vol/%s/%s" , flexvol , deletedQtreeNamePrefix + name + "_" + utils .RandomString (5 ))
351+ deletedName := deletedQtreeNamePrefix + name + "_" + utils .RandomString (5 )
352+ if len (deletedName ) > maxQtreeNameLength {
353+ trimLength := len (deletedQtreeNamePrefix ) + 10
354+ deletedName = deletedQtreeNamePrefix + name [trimLength :] + "_" + utils .RandomString (5 )
355+ }
356+ deletedPath := fmt .Sprintf ("/vol/%s/%s" , flexvol , deletedName )
357+
345358 renameResponse , err := d .API .QtreeRename (path , deletedPath )
346359 if err = ontap .GetError (renameResponse , err ); err != nil {
347360 log .Errorf ("Qtree rename failed. %v" , err )
0 commit comments