The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6911

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Closes #6910

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
From 8501c5e56782aae8ff1af2451788325f1d378fd5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Thu, 20 Feb 2020 17:50:53 -0500
Subject: [PATCH] lxd/logging: Handle projects in log expiry
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #6910

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/logging.go | 46 +++++++++++++++++++++-------------------------
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/lxd/logging.go b/lxd/logging.go
index facc9be338..86787358dd 100644
--- a/lxd/logging.go
+++ b/lxd/logging.go
@@ -7,8 +7,10 @@ import (
        "time"
 
        "github.com/lxc/lxd/lxd/db"
+       "github.com/lxc/lxd/lxd/instance"
        "github.com/lxc/lxd/lxd/instance/instancetype"
        "github.com/lxc/lxd/lxd/operations"
+       "github.com/lxc/lxd/lxd/project"
        "github.com/lxc/lxd/lxd/state"
        "github.com/lxc/lxd/lxd/task"
        "github.com/lxc/lxd/shared"
@@ -43,30 +45,24 @@ func expireLogsTask(state *state.State) (task.Func, 
task.Schedule) {
 }
 
 func expireLogs(ctx context.Context, state *state.State) error {
-       entries, err := ioutil.ReadDir(state.OS.LogDir)
+       // List the instances.
+       instances, err := instance.LoadNodeAll(state, instancetype.Any)
        if err != nil {
                return err
        }
 
-       // FIXME: our DB APIs don't yet support cancellation, se we need to run
-       //        them in a goroutine and abort this task if the context gets
-       //        cancelled.
-       var containers []string
-       ch := make(chan struct{})
-       go func() {
-               containers, err = 
state.Cluster.ContainersNodeList(instancetype.Container)
-               ch <- struct{}{}
-       }()
-       select {
-       case <-ctx.Done():
-               return nil // Context expired
-       case <-ch:
-       }
-
+       // List the directory.
+       entries, err := ioutil.ReadDir(state.OS.LogDir)
        if err != nil {
                return err
        }
 
+       // Build the expected names.
+       names := []string{}
+       for _, inst := range instances {
+               names = append(names, project.Prefix(inst.Project(), 
inst.Name()))
+       }
+
        newestFile := func(path string, dir os.FileInfo) time.Time {
                newest := dir.ModTime()
 
@@ -92,14 +88,14 @@ func expireLogs(ctx context.Context, state *state.State) 
error {
                default:
                }
 
-               // We only care about container directories
+               // We only care about instance directories.
                if !entry.IsDir() {
                        continue
                }
 
-               // Check if the container still exists
-               if shared.StringInSlice(entry.Name(), containers) {
-                       // Remove any log file which wasn't modified in the 
past 48 hours
+               // Check if the container still exists.
+               if shared.StringInSlice(entry.Name(), names) {
+                       // Remove any log file which wasn't modified in the 
past 48 hours.
                        logs, err := 
ioutil.ReadDir(shared.LogPath(entry.Name()))
                        if err != nil {
                                return err
@@ -108,12 +104,12 @@ func expireLogs(ctx context.Context, state *state.State) 
error {
                        for _, logfile := range logs {
                                path := shared.LogPath(entry.Name(), 
logfile.Name())
 
-                               // Always keep the LXC config
-                               if logfile.Name() == "lxc.conf" {
+                               // Always keep the config files.
+                               if logfile.Name() == "lxc.conf" || 
logfile.Name() == "qemu.conf" {
                                        continue
                                }
 
-                               // Deal with directories (snapshots)
+                               // Deal with directories (snapshots).
                                if logfile.IsDir() {
                                        newest := newestFile(path, logfile)
                                        if time.Since(newest).Hours() >= 48 {
@@ -126,7 +122,7 @@ func expireLogs(ctx context.Context, state *state.State) 
error {
                                        continue
                                }
 
-                               // Individual files
+                               // Individual files.
                                if time.Since(logfile.ModTime()).Hours() >= 48 {
                                        err := os.Remove(path)
                                        if err != nil {
@@ -135,7 +131,7 @@ func expireLogs(ctx context.Context, state *state.State) 
error {
                                }
                        }
                } else {
-                       // Empty directory if unchanged in the past 24 hours
+                       // Empty directory if unchanged in the past 24 hours.
                        path := shared.LogPath(entry.Name())
                        newest := newestFile(path, entry)
                        if time.Since(newest).Hours() >= 24 {
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to