Hi,
I am trying a new algorithm for load balancing with balancer plugin.
I am computing the time taken for one byte transfer by a server and based on
that I am deciding.
Before that I just used the delay as it is without concerning the file size and
was working fine.
Now thought of considering time taken for one byte transfer and now the traffic
server crashes few times but most of the time it is working.
I am not sure whether my code is causing the problem.
snippet of my code:
case TS_EVENT_HTTP_TXN_CLOSE:
{
url = TSHttpTxnEffectiveUrlStringGet(txn, &len);
TSHttpTxnMilestoneGet(txn, TS_MILESTONE_UA_BEGIN, &start_time);
TSHttpTxnMilestoneGet(txn, TS_MILESTONE_SERVER_CLOSE, &end_time);
interval_time = end_time - start_time;
if (TS_SUCCESS == TSHttpTxnServerRespGet(txn, &hdr_bufp, &hdr_loc))
{ //This block of code was taken from
plugins/background_fetch/rules.cc<http://rules.cc>
TSMLoc loc = TSMimeHdrFieldFind(hdr_bufp, hdr_loc,
"Content-Length", -1);
if (TS_NULL_MLOC != loc) {
content_len = TSMimeHdrFieldValueUintGet(hdr_bufp, hdr_loc,
loc, 0 );
}
TSHandleMLocRelease(hdr_bufp, hdr_loc, loc);
}
if(content_len != 0){
byte_time = interval_time/content_len ;
}
I tried to read the content length from TS_EVENT_HTTP_READ_RESPONSE_HDR and I
was afraid that there might be synchronization problem with threads in using
“content_len” variable.
Any pointers on how to solve this issue is appreciated.
Please find attached the traffic.out file which contains the crash information.
Thanks
Gandhimathi