29 jan 2013 kl. 11:48 skrev Peter Dunkley <[email protected]>:
> Hello,
>
> The polled notification stuff in 3.3.3 has some issues. There are some
> database related race-hazards that mean you could have problems. These have
> been resolved by adding new features to the database library - but as these
> are new features they are only present in git master at the moment. The
> presence modules in git master have been updated to use these new features.
>
> It is also worth noting that the PostgreSQL database driver in git master is
> significantly more advanced, in terms of features, than the other database
> drivers. The presence notifier stuff has only been tested with PostgreSQL
> and may well be totally dependent on features that are only in the driver for
> that database (it should still run without crashing when using other
> databases but will probably not function correctly). When you do your retest
> please make sure that you use PostgreSQL - if you must use another database
> then you will need to update the Kamailio driver for that database to include
> support for the following new APIs:
> init2
> start_transaction
> end_transaction
> abort_transaction
> query_lock
>
> Please retry with git master and PostgreSQL and let me know if the problem
> persists.
Peter - is this documented in any README?
Anyone that can take a look at the mySQL database driver?
/O
>
> Regards,
>
> Peter
>
> On Tue, 2013-01-29 at 13:32 +1300, Shane Harrison wrote:
>>
>> Hi there,
>>
>> I have a situation where subscriptions do not get notified and have tracked
>> it down to a problem with the polled notify processing. Can you advise if
>> this is a bug or correct my understanding of the code.
>>
>>
>> I am using kamailio 3.3.3 and have 1 notify process. I have extended the
>> support for the ua-profile event (rfc 6080). When a new subscription arrives
>> it is added to the active_watchers table, the 'updated' column is assigned a
>> number in the range 0 - N-1, where N is effectively the total number of
>> polled update tasks that are called in a round-robin fashion, distributed
>> across the notify processes. In this case updated = 7.
>>
>> In subscribe.c:
>> int update_subscription_notifier(struct sip_msg* msg, subs_t* subs, int
>> to_tag_gen, int* sent_reply)
>> {
>> ...
>> /* Set the notifier/update fields for the subscription */
>> subs->updated = core_hash(&subs->callid, &subs->from_tag, 0) %
>> (pres_waitn_time * pres_notifier_poll_rate
>> * pres_notifier_processes);
>>
>>
>> The notify process periodically calls pres_timer_send_notify(), which
>> calculates the round (the update task number) and does the notify update by
>> checking the active_watchers table for entries with updated = round. The
>> update is done twice, first for the event then for event.winfo.
>>
>> In notify.c:
>> void pres_timer_send_notify(unsigned int ticks, void *param)
>> {
>> int process_num = *((int *) param);
>> int round = subset + (pres_waitn_time * pres_notifier_poll_rate
>> * process_num);
>> if (process_dialogs(round, 0) < 0)
>> {
>> LM_ERR("Handling non presence.winfo dialogs\n");
>> return;
>> }
>> if (process_dialogs(round, 1) < 0)
>> {
>> LM_ERR("Handling presence.winfo dialogs\n");
>> return;
>> }
>> }
>>
>>
>> In this instance process_num = 0, so round = subset. However subset is
>> incremented in process_dialogs() in notify.c:
>>
>>
>> if (++subset > (pres_waitn_time * pres_notifier_poll_rate) -1)
>> subset = 0;
>>
>>
>> This means that round is incremented twice between calls to
>> process_dialogs(round, 0), in my case round is always even, hence not
>> detecting the subscription with updated = 7.
>>
>>
>> It seems that the subset increment should be done in
>> pres_timer_send_notify() rather than in process_dialogs(). Does that make
>> sense?
>>
>>
>> Additionally, is there a need for the second call that only handles
>> presence.winfo subscriptions? The code could be simplified by only making
>> one call and processing all subscriptions for the round.
>>
>>
>> Cheers
>> Shane Harrison
>>
>> --
>>
>> Imagination NZ Ltd
>> Level 6
>>
>> 92 Queens Drive
>> P0 Box 30449
>> Lower Hutt 5040
>>
>> +64 4 5703870 Extn 875
>> +64 21 608919 (mobile)
>>
>>
>> _______________________________________________
>> sr-dev mailing list
>> [email protected]
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>
> --
> Peter Dunkley
> Technical Director
> Crocodile RCS Ltd
> _______________________________________________
> sr-dev mailing list
> [email protected]
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev