use of org.apache.accumulo.tserver.TabletMutations in project accumulo by apache.
the class TabletServerLogger method logManyTablets.
public void logManyTablets(Map<CommitSession, Mutations> mutations) throws IOException {
final Map<CommitSession, Mutations> loggables = new HashMap<>(mutations);
for (Entry<CommitSession, Mutations> entry : mutations.entrySet()) {
if (entry.getValue().getDurability() == Durability.NONE) {
loggables.remove(entry.getKey());
}
}
if (loggables.size() == 0)
return;
write(loggables.keySet(), false, new Writer() {
@Override
public LoggerOperation write(DfsLogger logger) throws Exception {
List<TabletMutations> copy = new ArrayList<>(loggables.size());
for (Entry<CommitSession, Mutations> entry : loggables.entrySet()) {
CommitSession cs = entry.getKey();
Durability durability = entry.getValue().getDurability();
copy.add(new TabletMutations(cs.getLogId(), cs.getWALogSeq(), entry.getValue().getMutations(), durability));
}
return logger.logManyTablets(copy);
}
});
for (Mutations entry : loggables.values()) {
if (entry.getMutations().size() < 1) {
throw new IllegalArgumentException("logManyTablets: logging empty mutation list");
}
for (Mutation m : entry.getMutations()) {
logSizeEstimate.addAndGet(m.numBytes());
}
}
}
use of org.apache.accumulo.tserver.TabletMutations in project accumulo by apache.
the class DfsLoggerTest method testDurabilityForGroupCommit.
@Test
public void testDurabilityForGroupCommit() {
List<TabletMutations> lst = new ArrayList<>();
assertEquals(Durability.NONE, DfsLogger.chooseDurabilityForGroupCommit(lst));
TabletMutations m1 = new TabletMutations(0, 1, Collections.emptyList(), Durability.NONE);
lst.add(m1);
assertEquals(Durability.NONE, DfsLogger.chooseDurabilityForGroupCommit(lst));
TabletMutations m2 = new TabletMutations(0, 1, Collections.emptyList(), Durability.LOG);
lst.add(m2);
assertEquals(Durability.LOG, DfsLogger.chooseDurabilityForGroupCommit(lst));
TabletMutations m3 = new TabletMutations(0, 1, Collections.emptyList(), Durability.NONE);
lst.add(m3);
assertEquals(Durability.LOG, DfsLogger.chooseDurabilityForGroupCommit(lst));
TabletMutations m4 = new TabletMutations(0, 1, Collections.emptyList(), Durability.FLUSH);
lst.add(m4);
assertEquals(Durability.FLUSH, DfsLogger.chooseDurabilityForGroupCommit(lst));
TabletMutations m5 = new TabletMutations(0, 1, Collections.emptyList(), Durability.LOG);
lst.add(m5);
assertEquals(Durability.FLUSH, DfsLogger.chooseDurabilityForGroupCommit(lst));
TabletMutations m6 = new TabletMutations(0, 1, Collections.emptyList(), Durability.SYNC);
lst.add(m6);
assertEquals(Durability.SYNC, DfsLogger.chooseDurabilityForGroupCommit(lst));
TabletMutations m7 = new TabletMutations(0, 1, Collections.emptyList(), Durability.FLUSH);
lst.add(m7);
assertEquals(Durability.SYNC, DfsLogger.chooseDurabilityForGroupCommit(lst));
}
use of org.apache.accumulo.tserver.TabletMutations in project accumulo by apache.
the class DfsLogger method logManyTablets.
public LoggerOperation logManyTablets(List<TabletMutations> mutations) throws IOException {
Durability durability = Durability.NONE;
List<Pair<LogFileKey, LogFileValue>> data = new ArrayList<>();
for (TabletMutations tabletMutations : mutations) {
LogFileKey key = new LogFileKey();
key.event = MANY_MUTATIONS;
key.seq = tabletMutations.getSeq();
key.tid = tabletMutations.getTid();
LogFileValue value = new LogFileValue();
value.mutations = tabletMutations.getMutations();
data.add(new Pair<>(key, value));
if (tabletMutations.getDurability().ordinal() > durability.ordinal()) {
durability = tabletMutations.getDurability();
}
}
return logFileData(data, chooseDurabilityForGroupCommit(mutations));
}
Aggregations