lxd/db/storage_volumes.go
func (c *Cluster) StorageVolumeNextSnapshot(name string, typ int) int {
	base := name + shared.SnapshotDelimiter + "snap"
	length := len(base)
	q := fmt.Sprintf("SELECT name FROM storage_volumes WHERE type=? AND snapshot=? AND SUBSTR(name,1,?)=?")
	var numstr string
	inargs := []interface{}{typ, true, length, base}
	outfmt := []interface{}{numstr}
	results, err := queryScan(c.db, q, inargs, outfmt)
	if err != nil {
		return 0
	}
	max := 0

	for _, r := range results {
		numstr = r[0].(string)
		if len(numstr) <= length {
			continue
		}
		substr := numstr[length:]
		var num int
		count, err := fmt.Sscanf(substr, "%d", &num)
		if err != nil || count != 1 {
			continue
		}
		if num >= max {
			max = num + 1
		}
	}

	return max
}
func (c *Cluster) StorageVolumeNextSnapshot(name string, typ int) int {
	base := name + shared.SnapshotDelimiter + "snap"
	length := len(base)
	q := fmt.Sprintf("SELECT name FROM storage_volumes WHERE type=? AND snapshot=? AND SUBSTR(name,1,?)=?")
	var numstr string
	inargs := []interface{}{typ, true, length, base}
	outfmt := []interface{}{numstr}
	results, err := queryScan(c.db, q, inargs, outfmt)
	if err != nil {
		return 0
	}
	max := 0

	for _, r := range results {
		numstr = r[0].(string)
		if len(numstr) <= length {
			continue
		}
		substr := numstr[length:]
		var num int
		count, err := fmt.Sscanf(substr, "%d", &num)
		if err != nil || count != 1 {
			continue
		}
		if num >= max {
			max = num + 1
		}
	}

	return max
}
func ( c * Cluster ) StorageVolumeNextSnapshot ( name string , typ int ) int { base := name + shared . SnapshotDelimiter + " " length := len ( base ) q := fmt . Sprintf ( " " ) var numstr string inargs := [ ] interface { } { typ , true , length , base } outfmt := [ ] interface { } { numstr } results , err := queryScan ( c . db , q , inargs , outfmt ) if err != nil { return 0 } max := 0 for _ , r := range results { numstr = r [ 0 ] . ( string ) if len ( numstr ) <= length { continue } substr := numstr [ length : ] var num int count , err := fmt . Sscanf ( substr , " " , & num ) if err != nil || count != 1 { continue } if num >= max { max = num + 1 } } return max }
// StorageVolumeNextSnapshot returns the index the next snapshot of the storage
// volume with the given name should have.
//
// Note, the code below doesn't deal with snapshots of snapshots.
// To do that, we'll need to weed out based on # slashes in names
StorageVolumeNextSnapshot returns the index the next snapshot of the storage volume with the given name should have . Note the code below doesn t deal with snapshots of snapshots . To do that we ll need to weed out based on # slashes in names