Products | Versions |
---|---|
TIBCO ActiveSpaces | - |
Not Applicable | - |
Resolution:
This is expected behavior. If the thread/process has lock, unlocking will occur as normal.
Unlock could throw an exception if you go below min_seeder, or if data loss is due to a seeder dropped (space becomes NOT_READY and protocol timeout happens if seeders do not come back), the space becomes invalid (closeAll from some other thread that makes the space reference invalid).
To avoid data loss, we advise using replicate_all, high replication to avoid a data loss condition on lock space.
If min_seeder is equal to 1, loosing the last seeder, is not a concern as the lock will disappear since no more seeders are in the space. Other than these conditions, unlock does not throw exception when
- [1] entry is not locked.
- [2] entry is not found.
- [3] entry is locked by some other thread/process.
[1] and [3] can happen if the user has low lock ttl and the lock expired before they attempt to unlock.
We did not feel the need to throw exception when these conditions are met.
If it is not locked, no need to get unlock to throw exception. User already has the goal.
If it is not found, it is entry_not_found, we don't throw exception for any op (get/take/unlock)
If it is locked by some other process, from the thread/process' perspective their lock is already released.