1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

support asprocess for oryx. 2.0.218

This commit is contained in:
winlin 2016-09-23 15:00:50 +08:00
parent 2a01540433
commit b748fac23a
7 changed files with 53 additions and 3 deletions

View file

@ -343,6 +343,7 @@ Remark:
## History ## History
* v2.0, 2016-09-23, support asprocess for oryx. 2.0.218
* v2.0, 2016-09-23, support change work_dir for oryx. * v2.0, 2016-09-23, support change work_dir for oryx.
* v2.0, 2016-09-15, fix #640, typo for rtmp type. 2.0.217 * v2.0, 2016-09-15, fix #640, typo for rtmp type. 2.0.217
* v2.0, 2016-09-12, fix fast stream error bug. 2.0.216 * v2.0, 2016-09-12, fix fast stream error bug. 2.0.216

View file

@ -55,6 +55,13 @@ utc_time off;
# @reamrk do not support reload. # @reamrk do not support reload.
# default: ./ # default: ./
work_dir ./; work_dir ./;
# whether quit when parent process changed,
# used for supervisor mode(not daemon), srs should always quit when
# supervisor process exited.
# @remark conflict with daemon, error when both daemon and asprocess are on.
# @reamrk do not support reload.
# default: off
asprocess off;
############################################################################################# #############################################################################################
# heartbeat/stats sections # heartbeat/stats sections

View file

@ -1567,7 +1567,7 @@ int SrsConfig::check_config()
&& n != "max_connections" && n != "daemon" && n != "heartbeat" && n != "max_connections" && n != "daemon" && n != "heartbeat"
&& n != "http_api" && n != "stats" && n != "vhost" && n != "pithy_print_ms" && n != "http_api" && n != "stats" && n != "vhost" && n != "pithy_print_ms"
&& n != "http_stream" && n != "http_server" && n != "stream_caster" && n != "http_stream" && n != "http_server" && n != "stream_caster"
&& n != "utc_time" && n != "work_dir" && n != "utc_time" && n != "work_dir" && n != "asprocess"
) { ) {
ret = ERROR_SYSTEM_CONFIG_INVALID; ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("unsupported directive %s, ret=%d", n.c_str(), ret); srs_error("unsupported directive %s, ret=%d", n.c_str(), ret);
@ -2055,6 +2055,13 @@ int SrsConfig::check_config()
// TODO: FIXME: required http server when hls storage is ram or both. // TODO: FIXME: required http server when hls storage is ram or both.
} }
// asprocess conflict with daemon
if (get_asprocess() && get_deamon()) {
ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("daemon conflict with asprocess, ret=%d", ret);
return ret;
}
return ret; return ret;
} }
@ -2183,6 +2190,18 @@ string SrsConfig::get_work_dir() {
return conf->arg0(); return conf->arg0();
} }
bool SrsConfig::get_asprocess()
{
static bool DEFAULT = false;
SrsConfDirective* conf = root->get("asprocess");
if (!conf || conf->arg0().empty()) {
return DEFAULT;
}
return SRS_CONF_PERFER_FALSE(conf->arg0());
}
vector<SrsConfDirective*> SrsConfig::get_stream_casters() vector<SrsConfDirective*> SrsConfig::get_stream_casters()
{ {
srs_assert(root); srs_assert(root);

View file

@ -379,6 +379,8 @@ public:
* ignore if empty string. * ignore if empty string.
*/ */
virtual std::string get_work_dir(); virtual std::string get_work_dir();
// whether use asprocess mode.
virtual bool get_asprocess();
// stream_caster section // stream_caster section
public: public:
/** /**

View file

@ -488,6 +488,7 @@ SrsServer::SrsServer()
signal_manager = NULL; signal_manager = NULL;
handler = NULL; handler = NULL;
ppid = -1;
// donot new object in constructor, // donot new object in constructor,
// for some global instance is not ready now, // for some global instance is not ready now,
@ -635,7 +636,16 @@ int SrsServer::initialize_st()
// set current log id. // set current log id.
_srs_context->generate_id(); _srs_context->generate_id();
srs_trace("server main cid=%d", _srs_context->get_id());
// check asprocess.
bool asprocess = _srs_config->get_asprocess();
if (ppid == 1) {
ret = ERROR_SYSTEM_ASSERT_FAILED;
srs_error("for asprocess, ppid should never be init(1), ret=%d", ret);
return ret;
}
srs_trace("server main cid=%d, pid=%d, ppid=%d, asprocess=%d",
_srs_context->get_id(), ::getpid(), ppid, asprocess);
return ret; return ret;
} }
@ -945,6 +955,9 @@ int SrsServer::do_cycle()
max = srs_max(max, SRS_SYS_NETWORK_RTMP_SERVER_RESOLUTION_TIMES); max = srs_max(max, SRS_SYS_NETWORK_RTMP_SERVER_RESOLUTION_TIMES);
#endif #endif
// for asprocess.
bool asprocess = _srs_config->get_asprocess();
// the deamon thread, update the time cache // the deamon thread, update the time cache
while (true) { while (true) {
if(handler && (ret = handler->on_cycle((int)conns.size())) != ERROR_SUCCESS){ if(handler && (ret = handler->on_cycle((int)conns.size())) != ERROR_SUCCESS){
@ -962,6 +975,12 @@ int SrsServer::do_cycle()
for (int i = 0; i < temp_max; i++) { for (int i = 0; i < temp_max; i++) {
st_usleep(SRS_SYS_CYCLE_INTERVAL * 1000); st_usleep(SRS_SYS_CYCLE_INTERVAL * 1000);
// asprocess check.
if (asprocess && ::getppid() != ppid) {
srs_warn("asprocess ppid changed from %d to %d", ppid, ::getppid());
return ret;
}
// gracefully quit for SIGINT or SIGTERM. // gracefully quit for SIGINT or SIGTERM.
if (signal_gracefully_quit) { if (signal_gracefully_quit) {
srs_trace("cleanup for gracefully terminate."); srs_trace("cleanup for gracefully terminate.");

View file

@ -277,6 +277,8 @@ private:
bool signal_reload; bool signal_reload;
bool signal_gmc_stop; bool signal_gmc_stop;
bool signal_gracefully_quit; bool signal_gracefully_quit;
// parent pid for asprocess.
int ppid;
public: public:
SrsServer(); SrsServer();
virtual ~SrsServer(); virtual ~SrsServer();

View file

@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version // current release version
#define VERSION_MAJOR 2 #define VERSION_MAJOR 2
#define VERSION_MINOR 0 #define VERSION_MINOR 0
#define VERSION_REVISION 217 #define VERSION_REVISION 218
// generated by configure, only macros. // generated by configure, only macros.
#include <srs_auto_headers.hpp> #include <srs_auto_headers.hpp>