lttng-relayd: show man page with --help and remove usage
[lttng-tools.git] / src / bin / lttng-relayd / main.c
index e4ded2b8655d17c5f270bd67cfffca65697766f8..b5b56aa0191849c96de4f43969e90c7278492ed5 100644 (file)
@@ -162,24 +162,6 @@ static struct option long_options[] = {
 
 static const char *config_ignore_options[] = { "help", "config" };
 
-/*
- * usage function on stderr
- */
-static void usage(void)
-{
-       fprintf(stderr, "Usage: %s OPTIONS\n\nOptions:\n", progname);
-       fprintf(stderr, "  -h, --help                Display this usage.\n");
-       fprintf(stderr, "  -d, --daemonize           Start as a daemon.\n");
-       fprintf(stderr, "  -b, --background          Start as a daemon, keeping console open.\n");
-       fprintf(stderr, "  -C, --control-port URL    Control port listening.\n");
-       fprintf(stderr, "  -D, --data-port URL       Data port listening.\n");
-       fprintf(stderr, "  -L, --live-port URL       Live view port listening.\n");
-       fprintf(stderr, "  -o, --output PATH         Output path for traces. Must use an absolute path.\n");
-       fprintf(stderr, "  -v, --verbose             Verbose mode. Activate DBG() macro.\n");
-       fprintf(stderr, "  -g, --group NAME          Specify the tracing group name. (default: tracing)\n");
-       fprintf(stderr, "  -f  --config              Load daemon configuration file\n");
-}
-
 /*
  * Take an option from the getopt output and set it in the right variable to be
  * used later.
@@ -263,7 +245,11 @@ static int set_option(int opt, const char *arg, const char *optname)
                }
                break;
        case 'h':
-               usage();
+               ret = utils_show_man_page(8, "lttng-relayd");
+               if (ret) {
+                       ERR("Cannot view man page lttng-relayd(8)");
+                       perror("exec");
+               }
                exit(EXIT_FAILURE);
        case 'o':
                if (lttng_is_setuid_setgid()) {
@@ -1330,6 +1316,90 @@ end_no_session:
        return ret;
 }
 
+/*
+ * relay_reset_metadata: reset a metadata stream
+ */
+static
+int relay_reset_metadata(struct lttcomm_relayd_hdr *recv_hdr,
+               struct relay_connection *conn)
+{
+       int ret, send_ret;
+       struct relay_session *session = conn->session;
+       struct lttcomm_relayd_reset_metadata stream_info;
+       struct lttcomm_relayd_generic_reply reply;
+       struct relay_stream *stream;
+
+       DBG("Reset metadata received");
+
+       if (!session || conn->version_check_done == 0) {
+               ERR("Trying to reset a metadata stream before version check");
+               ret = -1;
+               goto end_no_session;
+       }
+
+       ret = conn->sock->ops->recvmsg(conn->sock, &stream_info,
+                       sizeof(struct lttcomm_relayd_reset_metadata), 0);
+       if (ret < sizeof(struct lttcomm_relayd_reset_metadata)) {
+               if (ret == 0) {
+                       /* Orderly shutdown. Not necessary to print an error. */
+                       DBG("Socket %d did an orderly shutdown", conn->sock->fd);
+               } else {
+                       ERR("Relay didn't receive valid reset_metadata struct "
+                                       "size : %d", ret);
+               }
+               ret = -1;
+               goto end_no_session;
+       }
+       DBG("Update metadata to version %" PRIu64, be64toh(stream_info.version));
+
+       /* Unsupported for live sessions for now. */
+       if (session->live_timer != 0) {
+               ret = -1;
+               goto end;
+       }
+
+       stream = stream_get_by_id(be64toh(stream_info.stream_id));
+       if (!stream) {
+               ret = -1;
+               goto end;
+       }
+       pthread_mutex_lock(&stream->lock);
+       if (!stream->is_metadata) {
+               ret = -1;
+               goto end_unlock;
+       }
+
+       ret = utils_rotate_stream_file(stream->path_name, stream->channel_name,
+                       0, 0, -1, -1, stream->stream_fd->fd, NULL,
+                       &stream->stream_fd->fd);
+       if (ret < 0) {
+               ERR("Failed to rotate metadata file %s of channel %s",
+                               stream->path_name, stream->channel_name);
+               goto end_unlock;
+       }
+
+end_unlock:
+       pthread_mutex_unlock(&stream->lock);
+       stream_put(stream);
+
+end:
+       memset(&reply, 0, sizeof(reply));
+       if (ret < 0) {
+               reply.ret_code = htobe32(LTTNG_ERR_UNK);
+       } else {
+               reply.ret_code = htobe32(LTTNG_OK);
+       }
+       send_ret = conn->sock->ops->sendmsg(conn->sock, &reply,
+                       sizeof(struct lttcomm_relayd_generic_reply), 0);
+       if (send_ret < 0) {
+               ERR("Relay sending reset metadata reply");
+               ret = send_ret;
+       }
+
+end_no_session:
+       return ret;
+}
+
 /*
  * relay_unknown_command: send -1 if received unknown command
  */
@@ -2060,6 +2130,9 @@ static int relay_process_control(struct lttcomm_relayd_hdr *recv_hdr,
        case RELAYD_STREAMS_SENT:
                ret = relay_streams_sent(recv_hdr, conn);
                break;
+       case RELAYD_RESET_METADATA:
+               ret = relay_reset_metadata(recv_hdr, conn);
+               break;
        case RELAYD_UPDATE_SYNC_INFO:
        default:
                ERR("Received unknown command (%u)", be32toh(recv_hdr->cmd));
This page took 0.026426 seconds and 4 git commands to generate.