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

Refine redirect flow for origin cluster

This commit is contained in:
winlin 2019-11-30 19:06:41 +08:00
parent e5285ecabf
commit 517974d451
3 changed files with 18 additions and 18 deletions

View file

@ -160,7 +160,7 @@ SrsEdgeIngester::SrsEdgeIngester()
edge = NULL;
req = NULL;
upstream = new SrsEdgeRtmpUpstream(redirect);
upstream = new SrsEdgeRtmpUpstream("");
lb = new SrsLbRoundRobin();
trd = new SrsDummyCoroutine();
}
@ -243,7 +243,8 @@ srs_error_t SrsEdgeIngester::cycle()
srs_error_t SrsEdgeIngester::do_cycle()
{
srs_error_t err = srs_success;
std::string redirect;
while (true) {
if ((err = trd->pull()) != srs_success) {
return srs_error_wrap(err, "do cycle pull");
@ -252,10 +253,6 @@ srs_error_t SrsEdgeIngester::do_cycle()
srs_freep(upstream);
upstream = new SrsEdgeRtmpUpstream(redirect);
// we only use the redict once.
// reset the redirect to empty, for maybe the origin changed.
redirect = "";
if ((err = source->on_source_id_changed(_srs_context->get_id())) != srs_success) {
return srs_error_wrap(err, "on source id changed");
}
@ -267,8 +264,11 @@ srs_error_t SrsEdgeIngester::do_cycle()
if ((err = edge->on_ingest_play()) != srs_success) {
return srs_error_wrap(err, "notify edge play");
}
// set to larger timeout to read av data from origin.
upstream->set_recv_timeout(SRS_EDGE_INGESTER_TIMEOUT);
err = ingest();
err = ingest(redirect);
// retry for rtmp 302 immediately.
if (srs_error_code(err) == ERROR_CONTROL_REDIRECT) {
@ -286,15 +286,16 @@ srs_error_t SrsEdgeIngester::do_cycle()
return err;
}
srs_error_t SrsEdgeIngester::ingest()
srs_error_t SrsEdgeIngester::ingest(string& redirect)
{
srs_error_t err = srs_success;
SrsPithyPrint* pprint = SrsPithyPrint::create_edge();
SrsAutoFree(SrsPithyPrint, pprint);
// set to larger timeout to read av data from origin.
upstream->set_recv_timeout(SRS_EDGE_INGESTER_TIMEOUT);
// we only use the redict once.
// reset the redirect to empty, for maybe the origin changed.
redirect = "";
while (true) {
srs_error_t err = srs_success;
@ -318,7 +319,7 @@ srs_error_t SrsEdgeIngester::ingest()
srs_assert(msg);
SrsAutoFree(SrsCommonMessage, msg);
if ((err = process_publish_message(msg)) != srs_success) {
if ((err = process_publish_message(msg, redirect)) != srs_success) {
return srs_error_wrap(err, "process message");
}
}
@ -326,7 +327,7 @@ srs_error_t SrsEdgeIngester::ingest()
return err;
}
srs_error_t SrsEdgeIngester::process_publish_message(SrsCommonMessage* msg)
srs_error_t SrsEdgeIngester::process_publish_message(SrsCommonMessage* msg, string& redirect)
{
srs_error_t err = srs_success;