Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Duplicate
-
None
-
None
-
None
-
None
Description
If a batch of mutations comes into a tablet server AND the tablet server just got a new walog then it will sync the walog for each tablet. Below is a sketch of what the tablet server currently does.
foreach(Tablet t : tabletsInMutationBatch){ if(!tabletIsDefinedInWalog(t, currentWalog)){ defineTablet(currentWalog, t); //syncs walog addWalogToMetadataTable(currentWalog, t); //syncronous metadata table update } }
Seems like doing the following would be better. Then no matter how many undefined tablets there are, only one walog sync would be done.
foreach(Tablet t : tabletsInMutationBatch){ Set<Tablet> undefined = new HashSet<Tablet>(); if(!tabletIsDefinedInWalog(t, currentWalog)){ undefined.add(t); } } defineTablets(currentWalog, undefined); //syncs walog after writing all definitions addWalogToMetadataTable(currentWalog, undefined); //syncronous metadata table batch write
There is not problem when all tablets in a batch update are defined in the walog. In this case a batch update that contains multiple tablet will only sync the log once after adding all the mutations from all tablets.
Noticed this while looking into ACCUMULO-2172
Attachments
Issue Links
- is duplicated by
-
ACCUMULO-2801 define tablet syncs walog for each tablet in a batch
- Resolved