Suggest Method Names for DBIx::Connector
Thanks to feedback from Tim Bunce and Peter Rabbitson in a DBIx::Class bug report, I've been reworking DBIx::Connector's block-handling methods. Tim's objection is that the the feature of do() and txn_do() that executes the code reference a second time in the event of a connection failure can be dangerous. That is, it can lead to action-at-a-distance bugs that are hard to find and fix. Tim suggested renaming the methods do_with_retry() and txn_do_with_retry() in order to make explicit what's going on, and to have non-retry versions of the methods.
I've made this change in the repository. But I wasn't happy with the method names; even though they're unambiguous, they are also overly long and not very friendly. I want people to use the retrying methods, but felt that the long names make the non-retrying preferable to users. While I was at it, I also wanted to get rid of do(), since it quickly became clear that it could cause some confusion with the DBI's do() method.
I've been thesaurus spelunking for the last few days, and have come up with a few options, but would love to hear other suggestions. I like using run instead of do to avoid confusion with the DBI, but otherwise I'm not really happy with what I've come up with. There are basically five different methods (using Tim's suggestions for the moment):
run( sub {} )- Just run a block of code.
txn_run( sub {} )- Run a block of code inside a transaction.
run_with_retry( sub {} )- Run a block of code without pinging the database, and re-run the code if it throws an exception and the database turned out to be disconnected.
txn_run_with_rerun( sub {} )- Like
run_with_retry(), but run the block inside a transaction. svp_run( sub {} )- Run a block of code inside a savepoint (no retry for savepoints).
Here are some of the names I've come up with so far:
| Run block | Run in txn | Run in savepoint | Run with retry | Run in txn with retry | Retry Mnemonic |
|---|---|---|---|---|---|
run |
txn_run |
svp_run |
runup |
txn_runup |
Run assuming the db is up, retry if not. |
run |
txn_run |
svp_run |
run_up |
txn_run_up |
Same as above. |
run |
txn_run |
svp_run |
rerun |
txn_rerun |
Run assuming the db is up, rerun if not. |
run |
txn_run |
svp_run |
run::retry |
txn_run::retry |
:: means “with” |
That last one is a cute hack suggested
by Rob Kinyon on IRC. As you can see, I'm pretty consistent
with the non-retrying method names; it's the methods that retry that I'm not
satisfied with. A approach I've avoided is to use an adverb for the non-retry
methods, mainly because there is no retry possible for the savepoint methods,
so it seemed silly to have svp_run_safely() to
complement do_safely() and txn_do_safely().
Brilliant suggestions warmly appreciated.
Backtalk
Tim Bunce wrote:
notbenh wrote:
Theory wrote:
Theory wrote:
Brig wrote:
Brig wrote:
Mark Lawrence wrote:
Mark Lawrence wrote:
Theory wrote:
Mark Lawrence wrote:
Mark wrote:
Theory wrote:
Ron Savage wrote:
Theory wrote: