[sr-dev] git:master: pv: use msg context id when caching the value for $TV

Klaus Darilion klaus.mailinglists at pernau.at
Mon Apr 16 19:45:32 CEST 2012


Hi Daniel!

Am 15.04.2012 23:02, schrieb Daniel-Constantin Mierla:
> Hello,
>
> On 4/15/12 10:02 PM, Klaus Darilion wrote:
>> Hi Daniel!
>>
>> I reviewed the patch and it still does not work reliable. The new 
>> approach uses msg-id and pid to find out if $TV(s) still works on the 
>> same message or if a new message is processed and time stamp needs to 
>> be fetched.
>>
>> Consider the following scenario:
>>
>> worker process with pid 100 receives msg with msg-id 7:
>> --> msg context id = 100,7
>> --> $TV(s) is calculated on first usage
>>
>> forwarding times out, timer with pid 99 processes message with msg-id 
>> 7 in failure route:
>> --> msg context id = 99,7
>> --> $TV(s) is calculated on first usage
>>
>> second forwarding times out, timer with pid 99 processes message with 
>> msg-id 7 in failure route:
>> --> msg context id = 99,7
>> --> $TV(s) is not calculated context ids are the same
>>
>>
>> Thus, $TV(s) is different in request route and failure route, but 
>> identically in both failure routes, if the failure route does not 
>> process another message. Thus, current implementation behaves 
>> different, depending on if other requests are forwarded/failed too.
>>
>> So, we need a different implementation. Before implementing, we 
>> should define the expected behavior. There are 2 possible (useful) 
>> implementations.
>> a) $TV(s) in failure route has always the same value as in request route
>> b) $TV(s) in failure route has always the value when the requests 
>> entered the respective failure route
>>
>> I would vote for implementation 2.
>>
>
> these are cached values per (message,process) to skip execution of 
> system calls many times, but also to have more or less same value for 
> several actions in a raw. So such values are valid as long as a pid is 
> processing same message one time or many times without handling 
> another one in between.

Yes, that's the problem. A PV should always return the same value, 
regardless if there was a another message processed inbetween or not.

IMO, it is a bug. If not, we need a new PVs (see below).

Maybe we should store a timestamp in sip_msg and set it automatically 
when the request was received or processing recovered in failure route.

> There are other PVs giving the current time attributes always, without 
> any caching -- one can store the result in other type of variable then 
> and reuse that.

$TV(sn) and $TV(un) are useless, as they need to be queried one after 
the other, this getting different points in time.

$TV(Sn) needs string processing afterwards to split it into seconds and 
useconds, otherwise time calculations are not possible.

I would be more usefull, e.g. if TV(un) reports the cached time, set 
when querying for TV(sn).

>
> IMO, the caching system should be coherent across all PVs relying on 
> it, for other kind of needs there should be different variables.
>
User should also rely that PVs return the same result for the same 
scenario, regardless if other messages are received or not.

regards
Klaus





More information about the sr-dev mailing list