Hello all,
During some chasing after some locks issues, I have encountered some commands that are not
using the transaction framework properly (IMHO).
For example,
ExportRepoImageCommand - has no annotation indicating it should not be run in
transaction.
It contains IMHO a classic flow of -
a. get from db (and potential update)
b. send a call to VDSM -> this may be long !!!
c. update results in DB.
IMHO,
ExportRepoImageCommand should be annotated with @NonTransactive(forceCompensation=true)
and should include compensation code.
If I am wrong with the specific command, please add a nice comment indicating why this was
not done, so the next person who reads the code and deals with locks, transactions and all
these
interesting issues should be aware.
Transactions should be kept as short as possible, as they are an expensive , limited
resource.
This is not the first time I encountered this issue with developers in the last weeks, and
maybe I sound angry or something - this is not the intention, I can't say I know all
engine code myself (and even around the infra side), and I think that one of the good
things in the way we work is we can learn from each other.
If any of of you feel like they need some "reminding" on our transactions
framework (and yes, I believe there is room to improvement in it, I already spoke with
Oved about at least one idea) - feel free to address me, with enough audience I might even
run a session when I visit TLV (I would have done it form home, but my internet condition
is pretty bad, I'm afraid).
Cheers,
Yair