On 20.02.2012 11:52, Anca Vamanu wrote:
Hi Klaus,
On 02/20/2012 10:54 AM, Klaus Darilion wrote:
Hi Anca!
I wonder what happens if I build a server cluster (p1 and p2) with
subs_db_mode=3 and publ_cache=0.
Then a subscription to user1 is received from p1 and stored into the DB.
Then user1 sends a publish via p2, which is stored in the DB.
Who will send the NOTIFY for the subscription? p1 or p2? I guess p2 as
p1 has no idea about the publish - correct?
The machine that received the Publish,
in this case p2 will send the
Notify. Looking now in the code, I saw that when sending out this
Notify, p2 will actually put in the Contact header the contact of the p1
(initial contact). I don't think there should be any problem with this (
except someone compares Via and Contact, but probably not). In this way
always the reSubscribes will get to the same machine.
Makes sense.
I see now an opportunity to improve the performance
because of this
behavior - having a mode in which to read from memory for Subscribes,
but always read from DB for Publishes.
What if publ_cache=1. What really happens on incoming PUBLISH?
I have not read the code but I suspect with subs_db_mode=3 and
publ_cache=0 the module does (without permissions checking):
incoming PUBLISH without e-tag:
INSERT INTO presentity .....
incoming PUBLISH with e-tag:
UPDATE presentity ... WHERE etag='..' AND ......
incoming SUBSCRIBE without to-tag:
INSERT INTO active-watchers ...
SELECT * FROM presentity WHERE ....
incoming SUBSCRIBE with to-tag:
UPDATE active-watchers ...
SELECT * FROM presentity WHERE ....
So what changes if publ_cache=1?
thanks
Klaus
Regards,
Anca
thanks
Klaus