mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-27 11:13:50 +00:00
confile: remove lxc.console.buffer.logfile
All of its functionality is now covered over by lxc.console.logfile. Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
861813e52b
commit
23e0d9af76
@ -860,26 +860,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</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>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<option>lxc.console.logfile</option>
|
<option>lxc.console.logfile</option>
|
||||||
|
@ -934,7 +934,6 @@ int lxc_cmd_console_log(const char *name, const char *lxcpath,
|
|||||||
data.clear = log->clear;
|
data.clear = log->clear;
|
||||||
data.read = log->read;
|
data.read = log->read;
|
||||||
data.read_max = *log->read_max;
|
data.read_max = *log->read_max;
|
||||||
data.write_logfile = log->write_logfile;
|
|
||||||
|
|
||||||
cmd.req.cmd = LXC_CMD_CONSOLE_LOG;
|
cmd.req.cmd = LXC_CMD_CONSOLE_LOG;
|
||||||
cmd.req.data = &data;
|
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;
|
struct lxc_cmd_rsp rsp;
|
||||||
uint64_t buffer_size = handler->conf->console.buffer_size;
|
uint64_t buffer_size = handler->conf->console.buffer_size;
|
||||||
const struct lxc_cmd_console_log *log = req->data;
|
const struct lxc_cmd_console_log *log = req->data;
|
||||||
struct lxc_console *console = &handler->conf->console;
|
|
||||||
struct lxc_ringbuf *buf = &handler->conf->console.ringbuf;
|
struct lxc_ringbuf *buf = &handler->conf->console.ringbuf;
|
||||||
|
|
||||||
rsp.ret = -EFAULT;
|
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))
|
if (log->read && (buf->r_off == buf->w_off))
|
||||||
goto out;
|
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;
|
rsp.ret = 0;
|
||||||
if (log->clear) {
|
if (log->clear)
|
||||||
/* clear the ringbuffer */
|
/* clear the ringbuffer */
|
||||||
lxc_ringbuf_clear(buf);
|
lxc_ringbuf_clear(buf);
|
||||||
|
else if (rsp.datalen > 0)
|
||||||
/* 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) {
|
|
||||||
lxc_ringbuf_move_read_addr(buf, rsp.datalen);
|
lxc_ringbuf_move_read_addr(buf, rsp.datalen);
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
return lxc_cmd_rsp_send(fd, &rsp);
|
return lxc_cmd_rsp_send(fd, &rsp);
|
||||||
|
@ -2609,8 +2609,6 @@ struct lxc_conf *lxc_conf_init(void)
|
|||||||
new->loglevel = LXC_LOG_LEVEL_NOTSET;
|
new->loglevel = LXC_LOG_LEVEL_NOTSET;
|
||||||
new->personality = -1;
|
new->personality = -1;
|
||||||
new->autodev = 1;
|
new->autodev = 1;
|
||||||
new->console.buffer_log_file = NULL;
|
|
||||||
new->console.buffer_log_file_fd = -1;
|
|
||||||
new->console.buffer_size = 0;
|
new->console.buffer_size = 0;
|
||||||
new->console.log_path = NULL;
|
new->console.log_path = NULL;
|
||||||
new->console.log_fd = -1;
|
new->console.log_fd = -1;
|
||||||
|
@ -193,12 +193,6 @@ struct lxc_console {
|
|||||||
/* size of the ringbuffer */
|
/* size of the ringbuffer */
|
||||||
uint64_t buffer_size;
|
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 */
|
/* the in-memory ringbuffer */
|
||||||
struct lxc_ringbuf ringbuf;
|
struct lxc_ringbuf ringbuf;
|
||||||
};
|
};
|
||||||
|
@ -82,7 +82,6 @@ lxc_config_define(cap_keep);
|
|||||||
lxc_config_define(cgroup_controller);
|
lxc_config_define(cgroup_controller);
|
||||||
lxc_config_define(cgroup2_controller);
|
lxc_config_define(cgroup2_controller);
|
||||||
lxc_config_define(cgroup_dir);
|
lxc_config_define(cgroup_dir);
|
||||||
lxc_config_define(console_buffer_logfile);
|
|
||||||
lxc_config_define(console_buffer_size);
|
lxc_config_define(console_buffer_size);
|
||||||
lxc_config_define(console_logfile);
|
lxc_config_define(console_logfile);
|
||||||
lxc_config_define(console_path);
|
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.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.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.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.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.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, },
|
{ "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;
|
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)
|
int append_unexp_config_line(const char *line, struct lxc_conf *conf)
|
||||||
{
|
{
|
||||||
size_t len = conf->unexpanded_len, linelen = strlen(line);
|
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,
|
static int get_config_seccomp_profile(const char *key, char *retv, int inlen,
|
||||||
struct lxc_conf *c, void *data)
|
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;
|
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,
|
static inline int clr_config_seccomp_profile(const char *key,
|
||||||
struct lxc_conf *c, void *data)
|
struct lxc_conf *c, void *data)
|
||||||
{
|
{
|
||||||
|
@ -705,36 +705,10 @@ out:
|
|||||||
return ret;
|
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)
|
void lxc_console_delete(struct lxc_console *console)
|
||||||
{
|
{
|
||||||
int ret;
|
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) {
|
if (console->tios && console->peer >= 0) {
|
||||||
ret = tcsetattr(console->peer, TCSAFLUSH, console->tios);
|
ret = tcsetattr(console->peer, TCSAFLUSH, console->tios);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -758,31 +732,6 @@ void lxc_console_delete(struct lxc_console *console)
|
|||||||
if (console->log_fd >= 0)
|
if (console->log_fd >= 0)
|
||||||
close(console->log_fd);
|
close(console->log_fd);
|
||||||
console->log_fd = -1;
|
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)
|
if (ret < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* create console ringbuffer log file */
|
|
||||||
ret = lxc_console_create_ringbuf_log_file(console);
|
|
||||||
if (ret < 0)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
@ -1166,13 +1110,11 @@ void lxc_pty_init(struct lxc_console *pty)
|
|||||||
pty->master = -EBADF;
|
pty->master = -EBADF;
|
||||||
pty->peer = -EBADF;
|
pty->peer = -EBADF;
|
||||||
pty->log_fd = -EBADF;
|
pty->log_fd = -EBADF;
|
||||||
pty->buffer_log_file_fd = -EBADF;
|
|
||||||
lxc_pty_info_init(&pty->peerpty);
|
lxc_pty_info_init(&pty->peerpty);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lxc_pty_conf_free(struct lxc_console *console)
|
void lxc_pty_conf_free(struct lxc_console *console)
|
||||||
{
|
{
|
||||||
free(console->buffer_log_file);
|
|
||||||
free(console->log_path);
|
free(console->log_path);
|
||||||
free(console->path);
|
free(console->path);
|
||||||
if (console->buffer_size > 0 && console->ringbuf.addr)
|
if (console->buffer_size > 0 && console->ringbuf.addr)
|
||||||
|
@ -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 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_create_log_file(struct lxc_console *console);
|
||||||
extern int lxc_console_cb_con(int fd, uint32_t events, void *data,
|
extern int lxc_console_cb_con(int fd, uint32_t events, void *data,
|
||||||
struct lxc_epoll_descr *descr);
|
struct lxc_epoll_descr *descr);
|
||||||
|
@ -967,12 +967,6 @@ struct lxc_console_log {
|
|||||||
* "data" is invalid.
|
* "data" is invalid.
|
||||||
*/
|
*/
|
||||||
char *data;
|
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;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -36,10 +36,8 @@
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int logfd, ret;
|
int ret;
|
||||||
char buf[4096 + 1];
|
struct stat st_log_file;
|
||||||
ssize_t bytes;
|
|
||||||
struct stat st_buffer_log_file, st_log_file, st_log_file_old;
|
|
||||||
struct lxc_container *c;
|
struct lxc_container *c;
|
||||||
struct lxc_console_log log;
|
struct lxc_console_log log;
|
||||||
bool do_unlink = false;
|
bool do_unlink = false;
|
||||||
@ -62,12 +60,6 @@ int main(int argc, char *argv[])
|
|||||||
goto on_error_put;
|
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. */
|
/* Set console log file. */
|
||||||
if (!c->set_config_item(c, "lxc.console.logfile", "/tmp/console-log.log")) {
|
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\"");
|
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.clear = false;
|
||||||
log.read_max = &(uint64_t){0};
|
log.read_max = &(uint64_t){0};
|
||||||
log.read = true;
|
log.read = true;
|
||||||
log.write_logfile = false;
|
|
||||||
|
|
||||||
ret = c->console_log(c, &log);
|
ret = c->console_log(c, &log);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -126,7 +117,6 @@ int main(int argc, char *argv[])
|
|||||||
/* Clear the console ringbuffer. */
|
/* Clear the console ringbuffer. */
|
||||||
log.read_max = &(uint64_t){0};
|
log.read_max = &(uint64_t){0};
|
||||||
log.read = false;
|
log.read = false;
|
||||||
log.write_logfile = false;
|
|
||||||
log.clear = true;
|
log.clear = true;
|
||||||
ret = c->console_log(c, &log);
|
ret = c->console_log(c, &log);
|
||||||
if (ret < 0) {
|
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. */
|
/* Leave some time for the container to write something to the log. */
|
||||||
sleep(2);
|
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);
|
ret = stat("/tmp/console-log.log", &st_log_file);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno));
|
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. */
|
/* Leave some time for the container to write something to the log. */
|
||||||
sleep(2);
|
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;
|
fret = 0;
|
||||||
|
|
||||||
on_error_stop:
|
on_error_stop:
|
||||||
|
Loading…
Reference in New Issue
Block a user