dlmarion opened a new issue, #5130:
URL: https://github.com/apache/accumulo/issues/5130

   In main the `Manager` instantiates two instances of Fate, one for the 
`MetaFateStore` and one for the `UserFateStore`. Each instance of Fate contains 
a single thread pool of `Property.MANAGER_FATE_THREADPOOL_SIZE` size which is 
used to process Fate transactions. The threads in the Fate thread pool try to 
process transactions in a fair manner, by spending time on a different 
transaction in the queue when done with the current transactions' step (see 
#3852 and `FateInterleavingIT` for more information). The default size of 
`MANAGER_FATE_THREADPOOL_SIZE` is 4, which may need to be increased in main, 
could allow for some transactions to go a long time without making progress 
(It's possible that this could be the cause of the long delete table 
transaction times we are seeing in integration tests).
   
   It may be advisable to dedicate some number of threads to specific 
transaction types. For example, maybe 1 thread dedicated to creating and 
deleting tables, and a larger thread pool dedicated to bulk imports and 
compactions. I'm initially thinking of a change to the 
`MANAGER_FATE_THREADPOOL_SIZE` property such that instead of it being a count 
of the number of threads, the property is renamed to 
`MANAGER_FATE_THREADPOOL_CONFIGURATION` and contains a json map where the key 
is a comma separated list of Fate transaction names and the value is the number 
of threads, like:
   ```
   {
     
"SET_AVAILABILITY,CREATE_TABLE,DELETE_TABLE,CREATE_NAMESPACE,DELETE_NAMESPACE,RENAME_NAMESPACE":
 1,
     "BULK_IMPORT": 2,
     "COMPACT": 4,
     "MERGE,SPLIT,IMPORT_TABLE,EXPORT_TABLE": 2
   }
   ```
   
   The Manager would parse this configuration and start one Fate instance for 
each Key,Value pair in the map. The Fate instance would be responsible for 
managing only the types that it's given. Currently 
`MANAGER_FATE_THREADPOOL_SIZE` is watched and the size of the threadpool 
changes when the property changes. That may be harder to do with this idea. I 
think the name of the transaction is currently serialized into the transaction 
and I think the transactions can be filtered by type, so this would build upon 
that capability.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@accumulo.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to