Hi,
while hunting down some memory consumption issues in 0.7.10 I realized
that MemtableThroughput condition is tested before writing the new data.
As this causes memtables to grow larger than expected I changed
Memtable apply(DecoratedKey key, ColumnFamily columnFamily)
{
long start = System.nanoTime();
boolean flushRequested = memtable.isThresholdViolated();
memtable.put(key, columnFamily);
ColumnFamily cachedRow = getRawCachedRow(key);
if (cachedRow != null)
cachedRow.addAll(columnFamily);
writeStats.addNano(System.nanoTime() - start);
return flushRequested ? memtable : null;
}
to
Memtable apply(DecoratedKey key, ColumnFamily columnFamily)
{
long start = System.nanoTime();
memtable.put(key, columnFamily);
ColumnFamily cachedRow = getRawCachedRow(key);
if (cachedRow != null)
cachedRow.addAll(columnFamily);
writeStats.addNano(System.nanoTime() - start);
boolean flushRequested = memtable.isThresholdViolated();
return flushRequested ? memtable : null;
}
Are there any objections to this change? So far it works for me.
Best,
Thomas