On 09/06/12 15:03, Laurent Pellegrino wrote:
Hello,
I have some questions about StoreConnection:
1) There is no public method to force a release. Is there a reason for
not having a public release(Location location, boolean force) method
that calls expel(location, true)?
The "force" mode ignores outstanding transactions - as it releases the
location from the cache, it then be possible to have a new managed
datasets which believed it was in full control, and an existing
transaction on a different managed datasets which also believed it was
in full control. That can corrupt the data.
2) A call to release throws an exception if there is still some active
transactions when the operation is handled. Thus, if I want to remove
repository files as soon as the connection is closed I have to
iteratively call StoreConnection.release while it does not throws an
exception. I suggest to add a small feature that offers to register an
action to execute once the connection is released. Then, internally it
is possible to use wait/notify mechanism (through
transactionManager.activeTransactions) to execute the action which
have been registered as soon as no transactions are running and the
store is released. Is there already such a feature or can I propose a
small patch for that?
May I ask why do you want to do this? StoreConnection.release is a low
level operation to be used with a lot of care - as the API operations
says "(testing only)".. Dropping and reopening is expensive. Can the
app manage transactions as presumably dropping while something a
transaction is active indicates some implicit constraint is not being
adhered to.
Please do suggest a patch - a blocking call to closedown might be better.
If there is a way to releasing when clean after are new transactions
going to be blocked? And just waiting for no transactions
asynchronously needs some care to avoid a concurrency problem of a new
txn being requested immediately after seeing counts go to zero.
The only reason I know of for needing this is the cache management
implications In an ideal world, there would be a single cache layer
and this would not be necessary. Is that what is the requirement here?
Andy
Kind Regards,
Laurent