From 23b04e2a574132fc967f2b7d7d604211279c1d5c Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 28 Apr 2014 17:57:59 +0800 Subject: [PATCH] completed the edge reload, to 0.9.79 --- trunk/src/app/srs_app_config.cpp | 18 ++++++++++++++++++ trunk/src/app/srs_app_config.hpp | 1 + trunk/src/app/srs_app_edge.cpp | 3 +-- trunk/src/app/srs_app_edge.hpp | 2 -- trunk/src/app/srs_app_reload.hpp | 3 +++ trunk/src/core/srs_core.hpp | 2 +- trunk/src/kernel/srs_kernel_error.hpp | 1 + 7 files changed, 25 insertions(+), 5 deletions(-) diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 6929c8cd5..ccc4738c7 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -763,6 +763,18 @@ int SrsConfig::reload_vhost(SrsConfDirective* old_root) SrsConfDirective* old_vhost = old_root->get("vhost", vhost); SrsConfDirective* new_vhost = root->get("vhost", vhost); + // mode, never supports reload. + // first, for the origin and edge role change is too complex. + // second, the vhosts in origin device group normally are all origin, + // they never change to edge sometimes. + // third, the origin or upnode device can always be restart, + // edge will retry and the users connected to edge are ok. + if (get_vhost_is_edge(old_vhost) != get_vhost_is_edge(new_vhost)) { + ret = ERROR_RTMP_EDGE_RELOAD; + srs_error("reload never supports mode changed. ret=%d", ret); + return ret; + } + // DISABLED => ENABLED if (!get_vhost_enabled(old_vhost) && get_vhost_enabled(new_vhost)) { srs_trace("vhost %s added, reload it.", vhost.c_str()); @@ -1823,6 +1835,12 @@ int SrsConfig::get_bw_check_limit_kbps(const string &vhost) bool SrsConfig::get_vhost_is_edge(std::string vhost) { SrsConfDirective* conf = get_vhost(vhost); + return get_vhost_is_edge(conf); +} + +bool SrsConfig::get_vhost_is_edge(SrsConfDirective* vhost) +{ + SrsConfDirective* conf = vhost; if (!conf) { return false; diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index 0c13cdb36..d5d43f98b 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -195,6 +195,7 @@ public: // vhost edge section public: virtual bool get_vhost_is_edge(std::string vhost); + virtual bool get_vhost_is_edge(SrsConfDirective* vhost); virtual SrsConfDirective* get_vhost_edge_origin(std::string vhost); // vhost transcode section public: diff --git a/trunk/src/app/srs_app_edge.cpp b/trunk/src/app/srs_app_edge.cpp index b56ab2ba0..b38b58642 100644 --- a/trunk/src/app/srs_app_edge.cpp +++ b/trunk/src/app/srs_app_edge.cpp @@ -252,7 +252,6 @@ int SrsEdgeIngester::connect_server() // reopen close_underlayer_socket(); - // TODO: FIXME: support reload SrsConfDirective* conf = _srs_config->get_vhost_edge_origin(_req->vhost); srs_assert(conf); @@ -494,6 +493,7 @@ int SrsEdgeForwarder::proxy(SrsCommonMessage* msg) return ret; } + // TODO: FIXME: use utility to copy msg to shared ptr msg. SrsSharedPtrMessage* copy = new SrsSharedPtrMessage(); SrsAutoFree(SrsSharedPtrMessage, copy, false); if ((ret = copy->initialize(msg)) != ERROR_SUCCESS) { @@ -522,7 +522,6 @@ int SrsEdgeForwarder::connect_server() // reopen close_underlayer_socket(); - // TODO: FIXME: support reload SrsConfDirective* conf = _srs_config->get_vhost_edge_origin(_req->vhost); srs_assert(conf); diff --git a/trunk/src/app/srs_app_edge.hpp b/trunk/src/app/srs_app_edge.hpp index 941cbbafd..d0e227e82 100644 --- a/trunk/src/app/srs_app_edge.hpp +++ b/trunk/src/app/srs_app_edge.hpp @@ -152,7 +152,6 @@ private: * play edge control service. * downloading edge speed-up. */ -// TODO: FIXME: support reload class SrsPlayEdge { private: @@ -183,7 +182,6 @@ public: * publish edge control service. * uploading edge speed-up. */ -// TODO: FIXME: support reload class SrsPublishEdge { private: diff --git a/trunk/src/app/srs_app_reload.hpp b/trunk/src/app/srs_app_reload.hpp index fa7f3426c..798a11ab2 100644 --- a/trunk/src/app/srs_app_reload.hpp +++ b/trunk/src/app/srs_app_reload.hpp @@ -34,6 +34,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /** * the handler for config reload. * when reload callback, the config is updated yet. +* +* features not support reload, +* @see: https://github.com/winlinvip/simple-rtmp-server/wiki/Reload#notsupportedfeatures */ class ISrsReloadHandler { diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index a1118a63f..6e8fbf4b1 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR "0" #define VERSION_MINOR "9" -#define VERSION_REVISION "78" +#define VERSION_REVISION "79" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "srs" diff --git a/trunk/src/kernel/srs_kernel_error.hpp b/trunk/src/kernel/srs_kernel_error.hpp index 1e909159b..7d2c9a6a3 100644 --- a/trunk/src/kernel/srs_kernel_error.hpp +++ b/trunk/src/kernel/srs_kernel_error.hpp @@ -82,6 +82,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // invalid state for client to publish edge stream. #define ERROR_RTMP_EDGE_PUBLISH_STATE 321 #define ERROR_RTMP_EDGE_PROXY_PULL 322 +#define ERROR_RTMP_EDGE_RELOAD 323 #define ERROR_SYSTEM_STREAM_INIT 400 #define ERROR_SYSTEM_PACKET_INVALID 401