]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
confile: remove lxc.console.buffer.logfile
authorChristian Brauner <christian.brauner@ubuntu.com>
Thu, 15 Feb 2018 13:05:35 +0000 (14:05 +0100)
committerChristian Brauner <christian.brauner@ubuntu.com>
Tue, 27 Feb 2018 20:38:31 +0000 (21:38 +0100)
All of its functionality is now covered over by lxc.console.logfile.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
doc/lxc.container.conf.sgml.in
src/lxc/commands.c
src/lxc/conf.c
src/lxc/conf.h
src/lxc/confile.c
src/lxc/console.c
src/lxc/console.h
src/lxc/lxccontainer.h
src/tests/console_log.c

index f44072148451857da1313d4dd82fe653268469cd..43227d8df24b0ee818b3ab85e5dc8af35185ab12 100644 (file)
@@ -860,26 +860,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
           </listitem>
         </varlistentry>
 
-        <varlistentry>
-          <term>
-            <option>lxc.console.buffer.logfile</option>
-          </term>
-          <listitem>
-            <para>
-            Setting this option instructs liblxc to write the in-memory
-            ringbuffer to disk. For performance reasons liblxc will only write
-            the in-memory ringbuffer to disk when requested. Note that the this
-            option is only used by liblxc when
-            <option>lxc.console.buffer.size</option> is set.
-
-            By default liblxc will dump the contents of the in-memory ringbuffer
-            to disk when the container terminates. This allows users to diagnose
-            boot failures when the container crashed before an API request to
-            retrieve the in-memory ringbuffer could be sent or handled.
-            </para>
-          </listitem>
-        </varlistentry>
-
         <varlistentry>
           <term>
             <option>lxc.console.logfile</option>
index 37443c0d02e7077b0a0f4d32c19649dddff0279d..92363fa871e335e59a0b44e8ef41a94482ff4d8f 100644 (file)
@@ -934,7 +934,6 @@ int lxc_cmd_console_log(const char *name, const char *lxcpath,
        data.clear = log->clear;
        data.read = log->read;
        data.read_max = *log->read_max;
-       data.write_logfile = log->write_logfile;
 
        cmd.req.cmd = LXC_CMD_CONSOLE_LOG;
        cmd.req.data = &data;
@@ -968,7 +967,6 @@ static int lxc_cmd_console_log_callback(int fd, struct lxc_cmd_req *req,
        struct lxc_cmd_rsp rsp;
        uint64_t buffer_size = handler->conf->console.buffer_size;
        const struct lxc_cmd_console_log *log = req->data;
-       struct lxc_console *console = &handler->conf->console;
        struct lxc_ringbuf *buf = &handler->conf->console.ringbuf;
 
        rsp.ret = -EFAULT;
@@ -991,45 +989,12 @@ static int lxc_cmd_console_log_callback(int fd, struct lxc_cmd_req *req,
        if (log->read && (buf->r_off == buf->w_off))
                goto out;
 
-       if (log->write_logfile && rsp.datalen > 0) {
-               rsp.ret = -ENOENT;
-               if (!console->buffer_log_file)
-                       goto out;
-
-               rsp.ret = lxc_console_write_ringbuffer(console);
-               if (rsp.ret < 0)
-                       goto out;
-       }
-
        rsp.ret = 0;
-       if (log->clear) {
+       if (log->clear)
                /* clear the ringbuffer */
                lxc_ringbuf_clear(buf);
-
-               /* truncate the ringbuffer log file */
-               if (console->buffer_log_file) {
-                       rsp.ret = -ENOENT;
-                       if (!file_exists(console->buffer_log_file))
-                               goto out;
-
-                       /* be very certain things are kosher */
-                       rsp.ret = -EBADF;
-                       if (console->buffer_log_file_fd < 0)
-                               goto out;
-
-                       rsp.ret = lxc_unpriv(ftruncate(console->buffer_log_file_fd, 0));
-                       if (rsp.ret < 0) {
-                               ERROR("%s - Failed to truncate console "
-                                     "ringbuffer log file \"%s\"",
-                                     strerror(errno), console->buffer_log_file);
-                               goto out;
-                       }
-               }
-
-               rsp.ret = lxc_console_rotate_log_file(console);
-       } else if (rsp.datalen > 0) {
+       else if (rsp.datalen > 0)
                lxc_ringbuf_move_read_addr(buf, rsp.datalen);
-       }
 
 out:
        return lxc_cmd_rsp_send(fd, &rsp);
index e6d385c2ce169354231f82b96821d41d0abedec3..e1cca759705707c5023fe30ab3912e1f9c94dc98 100644 (file)
@@ -2609,8 +2609,6 @@ struct lxc_conf *lxc_conf_init(void)
        new->loglevel = LXC_LOG_LEVEL_NOTSET;
        new->personality = -1;
        new->autodev = 1;
-       new->console.buffer_log_file = NULL;
-       new->console.buffer_log_file_fd = -1;
        new->console.buffer_size = 0;
        new->console.log_path = NULL;
        new->console.log_fd = -1;
index 7bbb3fdfc1223fea1747cb57ec62da7c7bfbc9f3..d554b5f24b35edd8a2fe42a387acb427269452a6 100644 (file)
@@ -193,12 +193,6 @@ struct lxc_console {
                /* size of the ringbuffer */
                uint64_t buffer_size;
 
-               /* path to the log file for the ringbuffer */
-               char *buffer_log_file;
-
-               /* fd to the log file for the ringbuffer */
-               int buffer_log_file_fd;
-
                /* the in-memory ringbuffer */
                struct lxc_ringbuf ringbuf;
        };
index b1e2192c68341668c70a154308662dd976439e4f..a7fef897d563fa8056fc0432163d2f9b59a7accd 100644 (file)
@@ -82,7 +82,6 @@ lxc_config_define(cap_keep);
 lxc_config_define(cgroup_controller);
 lxc_config_define(cgroup2_controller);
 lxc_config_define(cgroup_dir);
-lxc_config_define(console_buffer_logfile);
 lxc_config_define(console_buffer_size);
 lxc_config_define(console_logfile);
 lxc_config_define(console_path);
@@ -156,7 +155,6 @@ static struct lxc_config_t config[] = {
        { "lxc.cgroup2",                   set_config_cgroup2_controller,          get_config_cgroup2_controller,          clr_config_cgroup2_controller,        },
        { "lxc.cgroup.dir",                set_config_cgroup_dir,                  get_config_cgroup_dir,                  clr_config_cgroup_dir,                },
        { "lxc.cgroup",                    set_config_cgroup_controller,           get_config_cgroup_controller,           clr_config_cgroup_controller,         },
-       { "lxc.console.buffer.logfile",    set_config_console_buffer_logfile,      get_config_console_buffer_logfile,      clr_config_console_buffer_logfile,    },
        { "lxc.console.buffer.size",       set_config_console_buffer_size,         get_config_console_buffer_size,         clr_config_console_buffer_size,       },
        { "lxc.console.logfile",           set_config_console_logfile,             get_config_console_logfile,             clr_config_console_logfile,           },
        { "lxc.console.path",              set_config_console_path,                get_config_console_path,                clr_config_console_path,              },
@@ -2010,13 +2008,6 @@ static int set_config_console_size(const char *key, const char *value,
        return 0;
 }
 
-static int set_config_console_buffer_logfile(const char *key, const char *value,
-                                            struct lxc_conf *lxc_conf,
-                                            void *data)
-{
-       return set_config_path_item(&lxc_conf->console.buffer_log_file, value);
-}
-
 int append_unexp_config_line(const char *line, struct lxc_conf *conf)
 {
        size_t len = conf->unexpanded_len, linelen = strlen(line);
@@ -3354,13 +3345,6 @@ static int get_config_console_size(const char *key, char *retv, int inlen,
 }
 
 
-static int get_config_console_buffer_logfile(const char *key, char *retv,
-                                            int inlen, struct lxc_conf *c,
-                                            void *data)
-{
-       return lxc_get_conf_str(retv, inlen, c->console.buffer_log_file);
-}
-
 static int get_config_seccomp_profile(const char *key, char *retv, int inlen,
                                      struct lxc_conf *c, void *data)
 {
@@ -3903,15 +3887,6 @@ static inline int clr_config_console_size(const char *key, struct lxc_conf *c,
        return 0;
 }
 
-static inline int clr_config_console_buffer_logfile(const char *key,
-                                                   struct lxc_conf *c,
-                                                   void *data)
-{
-       free(c->console.buffer_log_file);
-       c->console.buffer_log_file = NULL;
-       return 0;
-}
-
 static inline int clr_config_seccomp_profile(const char *key,
                                             struct lxc_conf *c, void *data)
 {
index b4f13f38a29145f03c1e677c668c25e920338a06..21be155ef7b97f125da7b11c63e3ac34089d3aa9 100644 (file)
@@ -705,36 +705,10 @@ out:
        return ret;
 }
 
-int lxc_console_write_ringbuffer(struct lxc_console *console)
-{
-       char *r_addr;
-       ssize_t ret;
-       uint64_t used;
-       struct lxc_ringbuf *buf = &console->ringbuf;
-
-       if (!console->buffer_log_file)
-               return 0;
-
-       used = lxc_ringbuf_used(buf);
-       if (used == 0)
-               return 0;
-
-       r_addr = lxc_ringbuf_get_read_addr(buf);
-       ret = lxc_write_nointr(console->buffer_log_file_fd, r_addr, used);
-       if (ret < 0)
-               return -EIO;
-
-       return 0;
-}
-
 void lxc_console_delete(struct lxc_console *console)
 {
        int ret;
 
-       ret = lxc_console_write_ringbuffer(console);
-       if (ret < 0)
-               WARN("Failed to write console log to disk");
-
        if (console->tios && console->peer >= 0) {
                ret = tcsetattr(console->peer, TCSAFLUSH, console->tios);
                if (ret < 0)
@@ -758,31 +732,6 @@ void lxc_console_delete(struct lxc_console *console)
        if (console->log_fd >= 0)
                close(console->log_fd);
        console->log_fd = -1;
-
-       if (console->buffer_log_file_fd >= 0)
-               close(console->buffer_log_file_fd);
-       console->buffer_log_file_fd = -1;
-}
-
-/* This is the console ringbuffer log file. Please note that the console
- * ringbuffer log file is (implementation wise not content wise) independent of
- * the console log file.
- */
-static int lxc_console_create_ringbuf_log_file(struct lxc_console *console)
-{
-       if (!console->buffer_log_file)
-               return 0;
-
-       console->buffer_log_file_fd = lxc_unpriv(open(console->buffer_log_file,
-                           O_CLOEXEC | O_RDWR | O_CREAT | O_TRUNC, 0600));
-       if (console->buffer_log_file_fd < 0) {
-               SYSERROR("Failed to open console ringbuffer log file \"%s\"",
-                        console->buffer_log_file);
-               return -EIO;
-       }
-
-       DEBUG("Using \"%s\" as console ringbuffer log file", console->buffer_log_file);
-       return 0;
 }
 
 /**
@@ -912,11 +861,6 @@ int lxc_console_create(struct lxc_conf *conf)
        if (ret < 0)
                goto err;
 
-       /* create console ringbuffer log file */
-       ret = lxc_console_create_ringbuf_log_file(console);
-       if (ret < 0)
-               goto err;
-
        return 0;
 
 err:
@@ -1166,13 +1110,11 @@ void lxc_pty_init(struct lxc_console *pty)
        pty->master = -EBADF;
        pty->peer = -EBADF;
        pty->log_fd = -EBADF;
-       pty->buffer_log_file_fd = -EBADF;
        lxc_pty_info_init(&pty->peerpty);
 }
 
 void lxc_pty_conf_free(struct lxc_console *console)
 {
-       free(console->buffer_log_file);
        free(console->log_path);
        free(console->path);
        if (console->buffer_size > 0 && console->ringbuf.addr)
index a385ed1f7fa9bd696d187f7de84e629732c6c299..e6e323ed0c05a40cc2fbebf1f76568b6fc094336 100644 (file)
@@ -227,7 +227,6 @@ extern int lxc_console_cb_signal_fd(int fd, uint32_t events, void *cbdata,
  */
 extern void lxc_console_signal_fini(struct lxc_tty_state *ts);
 
-extern int lxc_console_write_ringbuffer(struct lxc_console *console);
 extern int lxc_console_create_log_file(struct lxc_console *console);
 extern int lxc_console_cb_con(int fd, uint32_t events, void *data,
                              struct lxc_epoll_descr *descr);
index 47baed6042da0c1e97e95b0e216ad9104c4b47a6..7bbac2f06c7b97ff09ca32332d14d68f6f61fcc5 100644 (file)
@@ -967,12 +967,6 @@ struct lxc_console_log {
         * "data" is invalid.
         */
        char *data;
-
-       /* If a console log file was specified this flag indicates whether the
-        * contents of the ringbuffer should be written to the logfile when a
-        * request is sent to the ringbuffer.
-        */
-       bool write_logfile;
 };
 
 /*!
index 3949b14e1defc4b6de0e2aade37714c23b78a034..1e875086b013bf59ec9673264f44c5bcbdff55f0 100644 (file)
 
 int main(int argc, char *argv[])
 {
-       int logfd, ret;
-       char buf[4096 + 1];
-       ssize_t bytes;
-       struct stat st_buffer_log_file, st_log_file, st_log_file_old;
+       int ret;
+       struct stat st_log_file;
        struct lxc_container *c;
        struct lxc_console_log log;
        bool do_unlink = false;
@@ -62,12 +60,6 @@ int main(int argc, char *argv[])
                goto on_error_put;
        }
 
-       /* Set ringbuffer log file. */
-       if (!c->set_config_item(c, "lxc.console.buffer.logfile", "/tmp/console-buffer-log.log")) {
-               lxc_error("%s\n", "Failed to set config item \"lxc.console.buffer.logfile\"");
-               goto on_error_put;
-       }
-
        /* Set console log file. */
        if (!c->set_config_item(c, "lxc.console.logfile", "/tmp/console-log.log")) {
                lxc_error("%s\n", "Failed to set config item \"lxc.console.logfile\"");
@@ -108,7 +100,6 @@ int main(int argc, char *argv[])
        log.clear = false;
        log.read_max = &(uint64_t){0};
        log.read = true;
-       log.write_logfile = false;
 
        ret = c->console_log(c, &log);
        if (ret < 0) {
@@ -126,7 +117,6 @@ int main(int argc, char *argv[])
        /* Clear the console ringbuffer. */
        log.read_max = &(uint64_t){0};
        log.read = false;
-       log.write_logfile = false;
        log.clear = true;
        ret = c->console_log(c, &log);
        if (ret < 0) {
@@ -156,58 +146,6 @@ int main(int argc, char *argv[])
        /* Leave some time for the container to write something to the log. */
        sleep(2);
 
-       log.read_max = &(uint64_t){0};
-       log.read = true;
-       log.write_logfile = true;
-       log.clear = false;
-       ret = c->console_log(c, &log);
-       if (ret < 0) {
-               lxc_error("%s - Failed to retrieve console log \n", strerror(-ret));
-               goto on_error_stop;
-       } else {
-               lxc_debug("Retrieved %" PRIu64
-                         " bytes from console log. Contents are \"%s\"\n",
-                         *log.read_max, log.data);
-       }
-
-       logfd = open("/tmp/console-buffer-log.log", O_RDONLY);
-       if (logfd < 0) {
-               lxc_error("%s - Failed to open console ringbuffer log file "
-                         "\"/tmp/console-buffer-log.log\"\n", strerror(errno));
-               goto on_error_stop;
-       }
-
-       bytes = lxc_read_nointr(logfd, buf, 4096 + 1);
-       close(logfd);
-       if (bytes < 0 || ((uint64_t)bytes != *log.read_max)) {
-               lxc_error("%s - Failed to read console ringbuffer log file "
-                         "\"/tmp/console-buffer-log.log\"\n", strerror(errno));
-               goto on_error_stop;
-       }
-
-       ret = stat("/tmp/console-buffer-log.log", &st_buffer_log_file);
-       if (ret < 0) {
-               lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno));
-               goto on_error_stop;
-       }
-
-       if ((uint64_t)st_buffer_log_file.st_size != *log.read_max) {
-               lxc_error("On-disk logfile size and used ringbuffer size do "
-                         "not match: %" PRIu64 " != %" PRIu64 "\n",
-                         (uint64_t)st_buffer_log_file.st_size, *log.read_max);
-               goto on_error_stop;
-       }
-
-       if (memcmp(log.data, buf, *log.read_max)) {
-               lxc_error("%s - Contents of in-memory ringbuffer and on-disk "
-                         "logfile do not match\n", strerror(errno));
-               goto on_error_stop;
-       } else {
-               lxc_debug("Retrieved %" PRIu64 " bytes from console log and "
-                         "console ringbuffer log file. Contents are: \"%s\" - "
-                         "\"%s\"\n", *log.read_max, log.data, buf);
-       }
-
        ret = stat("/tmp/console-log.log", &st_log_file);
        if (ret < 0) {
                lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno));
@@ -233,59 +171,6 @@ int main(int argc, char *argv[])
        /* Leave some time for the container to write something to the log. */
        sleep(2);
 
-       /* The console log file size must be greater than the console log file
-        * size since we append to the latter and we truncated the former
-        * already.
-        */
-       if (st_log_file.st_size <= st_buffer_log_file.st_size) {
-               lxc_error("%s - Console log file size was smaller than the "
-                         "console buffer log file size: %zu < %zu\n",
-                         strerror(errno), (size_t)st_log_file.st_size,
-                         (size_t)st_buffer_log_file.st_size);
-               goto on_error_stop;
-       } else {
-               lxc_debug("Console log file size is %zu bytes and console "
-                         "buffer log file size is %zu bytes\n",
-                         (size_t)st_log_file.st_size,
-                         (size_t)st_buffer_log_file.st_size);
-       }
-
-       ret = stat("/tmp/console-log.log", &st_log_file);
-       if (ret < 0) {
-               lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno));
-               goto on_error_stop;
-       }
-
-       log.read_max = &(uint64_t){0};
-       log.read = false;
-       log.write_logfile = false;
-       log.clear = true;
-       ret = c->console_log(c, &log);
-       if (ret < 0) {
-               lxc_error("%s - Failed to retrieve console log \n", strerror(-ret));
-               goto on_error_stop;
-       }
-
-       /* There should now be a rotated log file called
-        * "/tmp/console-log.log.1"
-        */
-       ret = stat("/tmp/console-log.log.1", &st_log_file_old);
-       if (ret < 0) {
-               lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno));
-               goto on_error_stop;
-       }
-
-       /* The rotated log file should have the same size as before the
-        * rotation.
-        */
-       if (st_log_file.st_size != st_log_file_old.st_size) {
-               lxc_error("%s - Console log file size changed during log "
-                         "rotation: %zu != %zu\n",
-                         strerror(errno), (size_t)st_log_file.st_size,
-                         (size_t)st_log_file_old.st_size);
-               goto on_error_stop;
-       }
-
        fret = 0;
 
 on_error_stop: