sessiond: Implement clear for sessions with local and remote output
[lttng-tools.git] / src / bin / lttng-sessiond / clear.c
index a0917dca8186c57a9b0ffcbdc2e49b324de65935..e83818dc081c2fdc97b5ef66cba7e5e5a16e3aa0 100644 (file)
@@ -41,28 +41,21 @@ int cmd_clear_session(struct ltt_session *session)
                 goto end;
        }
 
-       /*
-        * Unsupported feature in lttng-relayd before 2.12.
-        */
-       if (session->consumer->type == CONSUMER_DST_NET &&
-                       (session->consumer->relay_major_version == 2 &&
-                       session->consumer->relay_minor_version < 12)) {
-               ret = LTTNG_ERR_CLEAR_NOT_AVAILABLE_RELAY;
-               goto end;
-       }
-
-       /* TODO: Should we check for disallowed here or consumer side? */
-
-       /* Snapshot session are the only one supported for now */
-       if (!session->snapshot_mode) {
-               /*
-                * TODO: this error code is temporary and will be removed since
-                * we will be supporting all session type
-                */
-               ret = LTTNG_ERR_CLEAR_NOT_AVAILABLE;
-               goto end;
+       if (session->ust_session) {
+               switch (session->ust_session->buffer_type) {
+               case LTTNG_BUFFER_PER_PID:
+                       ERR("Clear command not supported for per-pid buffers.");
+                       ret = LTTNG_ERR_CLEAR_NOT_AVAILABLE;
+                       goto error;
+               case LTTNG_BUFFER_PER_UID:
+               case LTTNG_BUFFER_GLOBAL:
+                       break;
+               }
        }
 
+       /*
+        * Clear kernel and UST session buffers and local files (if any).
+        */
        if (session->kernel_session) {
                ret = kernel_clear_session(session);
                if (ret != LTTNG_OK) {
@@ -75,6 +68,16 @@ int cmd_clear_session(struct ltt_session *session)
                        goto error;
                }
        }
+
+       /*
+        * Clear remote (relayd) session files.
+        */
+       ret = consumer_clear_session(session);
+       if (ret < 0) {
+               ret = LTTNG_ERR_CLEAR_FAIL_CONSUMER;
+               goto error;
+       }
+       ret = LTTNG_OK;
 error:
 end:
        return ret;
This page took 0.025279 seconds and 5 git commands to generate.