Jan,
No, it does not show the entry because it is expired. What is the value of flags field of that line ?
flags is set to 0 (like the other entries).
Situation like this can happen when there are some problems connecting the database, I would suggest you to wipe the line out. Let me know if it happens again.
... and ...
--On 04 April 2004 20:47 +0200 Klaus Darilion klaus.mailinglists@pernau.at wrote:
ser does only delete expired contact if they are in the ram, furthermore the new entry can't be inserted into the location table, as (username,contact,domain) are a key, so the db insert fails.
I see 2 reasons:
- ser doesn't the location database at startup
- ser does delete the expired contact from RAM, but not from the db
Indeed - it seems ser has got into a state where the state has been wiped in RAM, but not in the database.
I realise I can fix the symptom just by deleting the appropriate line. However, this won't fix the underlying problem, which I think is a) ser shouldn't get into this state (probably inevitable if ser crashes, and I think it could have got into this state from me deliberately testing failover by being nasty to the boxes)
b) ser does not recover gracefully from this state (requires manual intervention). I /think/ what is happening here (and I haven't done a full code inspection) is ser tries to write into the database, it fails because a line with the same (username, domain, contact) 3-tuple is already there, but then it can as that entry is already expired, it never seems to get purged, and ser gets stuck.
I wonder if the solution is that if a database write fails, see if an entry with the same 3-tuple is already there, if it is, check (manually on expiry date) to see if it has expired, and if so, delete it, and reinsert the original entry.
I'm sort of perplexed as to why this particular long-expired entry hasn't just got deleted through expiry.
Alex