[GHC] #10841: Run handler on STM retry

GHC ghc-devs at haskell.org
Wed Sep 9 09:00:31 UTC 2015


#10841: Run handler on STM retry
-------------------------------------+-------------------------------------
        Reporter:  shlevy            |                   Owner:
            Type:  feature request   |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  libraries         |                 Version:  7.10.2
  (other)                            |
      Resolution:                    |                Keywords:  stm
Operating System:  Unknown/Multiple  |            Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by simonpj):

 My use-case is this.  Suppose a long-running transaction is repeatedly
 aborted because short-running transactions get in first.  It might
 "starve".  Then what?  At the moment there is literally nothing the
 programmer can do because starvation is un-observable.  Adding a retry
 handler makes it observable.

 Example: a librarian wants to re-organise the science fiction shelves of
 the library, but his long-running "reorganise" transaction is always
 aborted by someone doing a short-running "borrow-book" transaction.

 There is no automatic solution to this; it's an application-domain
 problem.  For example, if the reorg became too long delayed, the librarian
 might temporarily close the SF section to borrowers.  In the transactional
 setting, the retry handler might (in a separate, preliminary transaction)
 take a lock on the section, which borrowers must respect.

 None of this can happen unless the programmer can observe excessive
 retries and code a response.  For example, she could count retries, and
 use an alternative strategy if the count got too high.

 (Actually, it might be convenient if the retry count was passed to the
 hander, so that the handler didn't need to create the state-and-increment
 stuff to manage the count.)

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10841#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list