[lxc-devel] [lxd/master] lxd/containers: Speed up simple snapshot list

stgraber on Github lxc-bot at linuxcontainers.org
Tue Apr 30 21:48:47 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 354 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190430/0e0519cb/attachment.bin>
-------------- next part --------------
From be759747357b40562b1f5760fb86aa426fbde298 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 30 Apr 2019 17:29:51 -0400
Subject: [PATCH] lxd/containers: Speed up simple snapshot list
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/container_snapshot.go | 40 ++++++++++++++++++++++-----------------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git a/lxd/container_snapshot.go b/lxd/container_snapshot.go
index bcc77a984b..37230484ee 100644
--- a/lxd/container_snapshot.go
+++ b/lxd/container_snapshot.go
@@ -33,31 +33,37 @@ func containerSnapshotsGet(d *Daemon, r *http.Request) Response {
 	}
 
 	recursion := util.IsRecursionRequest(r)
-
-	c, err := containerLoadByProjectAndName(d.State(), project, cname)
-	if err != nil {
-		return SmartError(err)
-	}
-
-	snaps, err := c.Snapshots()
-	if err != nil {
-		return SmartError(err)
-	}
-
 	resultString := []string{}
 	resultMap := []*api.ContainerSnapshot{}
 
-	for _, snap := range snaps {
-		_, snapName, _ := containerGetParentAndSnapshotName(snap.Name())
-		if !recursion {
-			if snap.Project() == "default" {
+	if !recursion {
+		snaps, err := d.cluster.ContainerGetSnapshots(project, cname)
+		if err != nil {
+			return SmartError(err)
+		}
+
+		for _, snap := range snaps {
+			_, snapName, _ := containerGetParentAndSnapshotName(snap)
+			if project == "default" {
 				url := fmt.Sprintf("/%s/containers/%s/snapshots/%s", version.APIVersion, cname, snapName)
 				resultString = append(resultString, url)
 			} else {
-				url := fmt.Sprintf("/%s/containers/%s/snapshots/%s?project=%s", version.APIVersion, cname, snapName, snap.Project())
+				url := fmt.Sprintf("/%s/containers/%s/snapshots/%s?project=%s", version.APIVersion, cname, snapName, project)
 				resultString = append(resultString, url)
 			}
-		} else {
+		}
+	} else {
+		c, err := containerLoadByProjectAndName(d.State(), project, cname)
+		if err != nil {
+			return SmartError(err)
+		}
+
+		snaps, err := c.Snapshots()
+		if err != nil {
+			return SmartError(err)
+		}
+
+		for _, snap := range snaps {
 			render, _, err := snap.Render()
 			if err != nil {
 				continue


More information about the lxc-devel mailing list