X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fenable_rotation.c;h=80fc495ba8de8dcbf94a76bf98cc9c164e3f8ef3;hp=a746f016f4ceb189b9fff4243ab23cf0ef1cc874;hb=90936dcf0968343f20b2f6fd365b9c015cdb9717;hpb=1d757b1cd3b4669b52e2d9ceafb03eafd42490ff diff --git a/src/bin/lttng/commands/enable_rotation.c b/src/bin/lttng/commands/enable_rotation.c index a746f016f..80fc495ba 100644 --- a/src/bin/lttng/commands/enable_rotation.c +++ b/src/bin/lttng/commands/enable_rotation.c @@ -40,6 +40,7 @@ enum { OPT_HELP = 1, OPT_LIST_OPTIONS, OPT_TIMER, + OPT_SIZE, }; static struct poptOption long_options[] = { @@ -48,10 +49,11 @@ static struct poptOption long_options[] = { {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, {"session", 's', POPT_ARG_STRING, &opt_session_name, 0, 0, 0}, {"timer", 0, POPT_ARG_INT, 0, OPT_TIMER, 0, 0}, + {"size", 0, POPT_ARG_INT, 0, OPT_SIZE, 0, 0}, {0, 0, 0, 0, 0, 0, 0} }; -static int setup_rotate(char *session_name, uint64_t timer) +static int setup_rotate(char *session_name, uint64_t timer, uint64_t size) { int ret = 0; struct lttng_rotation_schedule_attr *attr = NULL; @@ -93,6 +95,18 @@ static int setup_rotate(char *session_name, uint64_t timer) } } } + if (size) { + lttng_rotation_schedule_attr_set_size(attr, size); + MSG("Configuring session %s to rotate every %" PRIu64 " bytes written", + session_name, size); + if (lttng_opt_mi) { + ret = mi_lttng_writer_write_element_unsigned_int(writer, + config_element_rotation_size, size); + if (ret) { + goto end; + } + } + } ret = lttng_rotation_set_schedule(attr); if (ret) { @@ -147,8 +161,8 @@ int cmd_enable_rotation(int argc, const char **argv) static poptContext pc; char *session_name = NULL; char *opt_arg = NULL; - uint64_t timer = 0; bool free_session_name = false; + uint64_t timer = 0, size = 0; pc = poptGetContext(NULL, argc, argv, long_options, 0); popt_ret = poptReadDefaultConfig(pc, 0); @@ -181,6 +195,16 @@ int cmd_enable_rotation(int argc, const char **argv) } DBG("Rotation timer set to %" PRIu64, timer); break; + case OPT_SIZE: + errno = 0; + opt_arg = poptGetOptArg(pc); + if (utils_parse_size_suffix(opt_arg, &size) < 0 || !size) { + ERR("Wrong value for --size option: %s", opt_arg); + ret = CMD_ERROR; + goto end; + } + DBG("Rotation size set to %" PRIu64, size); + break; default: ret = CMD_UNDEFINED; goto end; @@ -223,12 +247,12 @@ int cmd_enable_rotation(int argc, const char **argv) } /* No config options, just rotate the session now */ - if (timer == 0) { - ERR("No timer given"); + if (timer == 0 && size == 0) { + ERR("No timer or size given"); success = 0; command_ret = -1; } else { - command_ret = setup_rotate(session_name, timer); + command_ret = setup_rotate(session_name, timer, size); } if (command_ret) {