Fix: sessiond: handle empty scheduled rotations
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 6 Jul 2022 16:09:41 +0000 (12:09 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 7 Jul 2022 18:49:38 +0000 (14:49 -0400)
A number of error codes were added to cmd_rotate_session since the
implementation of size-based rotations. The rotation thread doesn't
expect LTTNG_ERR_ROTATION_MULTIPLE_AFTER_STOP and
LTTNG_ERR_ROTATION_AFTER_STOP_CLEAR which are not fatal failures.

These rotations would simply result in an empty trace archive and are,
therefore, not produced. In both cases, it is safe to wait for the next
size cycle.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ib90526b586de17c0b14d16970c862d9f981ed464

src/bin/lttng-sessiond/rotation-thread.cpp

index 5efc24edda31b81af320718c4f05bcbd2f5774e2..22891dd13ec4d5f20c99d10aa650c0fe0af65e7c 100644 (file)
@@ -693,19 +693,28 @@ int handle_condition(const struct lttng_notification *notification,
                goto end_unlock;
        }
 
-       ret = cmd_rotate_session(session, NULL, false,
-               LTTNG_TRACE_CHUNK_COMMAND_TYPE_MOVE_TO_COMPLETED);
-       if (ret == -LTTNG_ERR_ROTATION_PENDING) {
+       ret = cmd_rotate_session(
+                       session, NULL, false, LTTNG_TRACE_CHUNK_COMMAND_TYPE_MOVE_TO_COMPLETED);
+       switch (ret) {
+       case LTTNG_OK:
+               break;
+       case -LTTNG_ERR_ROTATION_PENDING:
                DBG("Rotate already pending, subscribe to the next threshold value");
-       } else if (ret != LTTNG_OK) {
-               ERR("Failed to rotate on size notification with error: %s",
-                               lttng_strerror(ret));
+               break;
+       case -LTTNG_ERR_ROTATION_MULTIPLE_AFTER_STOP:
+               DBG("Rotation already happened since last stop, subscribe to the next threshold value");
+               break;
+       case -LTTNG_ERR_ROTATION_AFTER_STOP_CLEAR:
+               DBG("Rotation already happened since last stop and clear, subscribe to the next threshold value");
+               break;
+       default:
+               ERR("Failed to rotate on size notification with error: %s", lttng_strerror(ret));
                ret = -1;
                goto end_unlock;
        }
-       ret = subscribe_session_consumed_size_rotation(session,
-                       consumed + session->rotate_size,
-                       notification_thread_handle);
+
+       ret = subscribe_session_consumed_size_rotation(
+                       session, consumed + session->rotate_size, notification_thread_handle);
        if (ret) {
                ERR("Failed to subscribe to session consumed size condition");
                goto end_unlock;
This page took 0.02509 seconds and 4 git commands to generate.