From: Steinar H. Gunderson Date: Fri, 6 Apr 2018 17:11:03 +0000 (+0200) Subject: Automatically delete streams that are no longer in the configuration file. X-Git-Tag: 1.4.0~30 X-Git-Url: https://git.sesse.net/?p=cubemap;a=commitdiff_plain;h=2494f1e73d7910cfba3808be0bce9697f28df094 Automatically delete streams that are no longer in the configuration file. Earlier, you had to mark this by setting src=delete, or the stream would linger on in a sort of half-state; this was meant as a protection against configuration messup. It has shown not to be that easy to mess this up in practice, so remove it to make cleanup simpler. --- diff --git a/main.cpp b/main.cpp index c048878..858a6d0 100644 --- a/main.cpp +++ b/main.cpp @@ -165,9 +165,11 @@ void create_config_input(const string &src, Input::Encoding encoding, multimap *inputs) { for (const StreamConfig &stream_config : config.streams) { - if (stream_config.src != "delete") { - create_config_input(stream_config.src, Input::Encoding(stream_config.src_encoding), inputs); + if (stream_config.src == "delete") { + // Ignored for pre-1.4.0 configuration compatibility. + continue; } + create_config_input(stream_config.src, Input::Encoding(stream_config.src_encoding), inputs); } for (const UDPStreamConfig &udpstream_config : config.udpstreams) { create_config_input(udpstream_config.src, Input::INPUT_ENCODING_RAW, inputs); @@ -185,9 +187,8 @@ void create_streams(const Config &config, expecting_urls.erase(stream_config.url); - // Special-case deleted streams; they were never deserialized in the first place, - // so just ignore them. if (stream_config.src == "delete") { + // Ignored for pre-1.4.0 configuration compatibility. continue; } @@ -307,12 +308,16 @@ bool dry_run_config(const string &argv0, const string &config_filename) return (WIFEXITED(status) && WEXITSTATUS(status) == 0); } -void find_deleted_streams(const Config &config, set *deleted_urls) +void find_all_streams(const Config &config, set *all_urls) { for (const StreamConfig &stream_config : config.streams) { if (stream_config.src == "delete") { - log(INFO, "Deleting stream '%s'.", stream_config.url.c_str()); - deleted_urls->insert(stream_config.url); + log(WARNING, "stream '%s' has src=delete; ignoring it. Since Cubemap 1.4.0, you do not " + "need to set src=delete to delete streams anymore; just delete them from " + "the configuration file.", + stream_config.url.c_str()); + } else { + all_urls->insert(stream_config.url); } } } @@ -406,9 +411,9 @@ start: servers = new ServerPool(config.num_servers); - // Find all the streams that are to be deleted. - set deleted_urls; - find_deleted_streams(config, &deleted_urls); + // Find all the streams that are to be kept. + set all_urls; + find_all_streams(config, &all_urls); CubemapStateProto loaded_state; timespec serialize_start; @@ -432,8 +437,9 @@ start: // Deserialize the streams. map stream_headers_for_url; // See below. for (const StreamProto &stream : loaded_state.streams()) { - if (deleted_urls.count(stream.url()) != 0) { + if (all_urls.count(stream.url()) == 0) { // Delete the stream backlogs. + log(INFO, "Deleting stream '%s'.", stream.url().c_str()); for (const int fd : stream.data_fds()) { safe_close(fd); } @@ -498,7 +504,7 @@ start: loaded_state.mutable_clients()->end(), OrderByConnectionTime()); for (int i = 0; i < loaded_state.clients_size(); ++i) { - if (deleted_urls.count(loaded_state.clients(i).url()) != 0) { + if (all_urls.count(loaded_state.clients(i).url()) == 0) { safe_close(loaded_state.clients(i).sock()); } else { servers->add_client_from_serialized(loaded_state.clients(i));