At present, RAMCloud has a fixed timeout value for transactions of about 50ms in PreparedOps.h:410. This value is not appropriate for very large transactions involving thousands of objects which take longer than 50ms to complete.
Give application ability to set timeout setting on a per-transaction basis, for instance, as a parameter to commit(). When unspecified, a default is used (say 50ms). Application can then set higher timeout settings for large transactions (or set a tighter timeout to achieve greater performance for small transactions).
Additional (should be filed as separate JIRA issue?):
To help the application choose an appropriate timeout before calling commit(), the application would benefit greatly from being able to query the Transaction object for statistics such as the total number of objects in the cache, how many of those are cached writes, and the total size of the cached writes in bytes. Otherwise the application must interpose on every Transaction.read and Transaction.write call to gather these statistics itself, which is inconvenient and also adds another layer on top of transactions, adding latency.