reuse existing PdbFiles
This commit is contained in:
@@ -93,7 +93,7 @@ public class TagsToFile implements AutoCloseable {
|
||||
|
||||
final CacheConfigurationBuilder<CacheKey, PdbWriter> cacheConfiguration = CacheConfigurationBuilder
|
||||
.newCacheConfigurationBuilder(CacheKey.class, PdbWriter.class, ResourcePoolsBuilder.heap(1000))
|
||||
.withExpiry(ExpiryPolicyBuilder.timeToIdleExpiration(Duration.ofMinutes(1)))
|
||||
.withExpiry(ExpiryPolicyBuilder.timeToIdleExpiration(Duration.ofSeconds(10)))
|
||||
.add(cacheEventListenerConfiguration);
|
||||
|
||||
final CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
|
||||
@@ -131,18 +131,31 @@ public class TagsToFile implements AutoCloseable {
|
||||
public PdbWriter getWriter(final long dateAsEpochMilli, final Tags tags) throws ReadException, WriteException {
|
||||
|
||||
final CacheKey cacheKey = new CacheKey(tags);
|
||||
PdbWriter cachedWriter = writerCache.get(cacheKey);
|
||||
if (cachedWriter == null) {
|
||||
PdbWriter writer = writerCache.get(cacheKey);
|
||||
if (writer == null) {
|
||||
|
||||
synchronized (this) {
|
||||
cachedWriter = writerCache.get(cacheKey);
|
||||
if (cachedWriter == null) {
|
||||
cachedWriter = newPdbWriter(tags);
|
||||
writerCache.put(cacheKey, cachedWriter);
|
||||
writer = writerCache.get(cacheKey);
|
||||
if (writer == null) {
|
||||
|
||||
LOGGER.info("getByTags({})", tags);
|
||||
final List<Doc> docsForTags = db.getByTags(tags);
|
||||
if (docsForTags.size() > 0) {
|
||||
try {
|
||||
final Doc doc = docsForTags.get(0);
|
||||
final PdbFile pdbFile = new PdbFile(doc.getRootBlockNumber(), tags);
|
||||
writer = new PdbWriter(pdbFile, db.getDiskStorage());
|
||||
} catch (final IOException e) {
|
||||
throw new ReadException(e);
|
||||
}
|
||||
} else {
|
||||
writer = newPdbWriter(tags);
|
||||
}
|
||||
writerCache.put(cacheKey, writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
return cachedWriter;
|
||||
return writer;
|
||||
}
|
||||
|
||||
public void clearWriterCache() {
|
||||
@@ -159,7 +172,6 @@ public class TagsToFile implements AutoCloseable {
|
||||
|
||||
METRICS_LOGGER_NEW_WRITER.debug("newPdbWriter took {}ms tags: {}",
|
||||
(System.nanoTime() - start) / 1_000_000.0, tags);
|
||||
|
||||
return result;
|
||||
} catch (final IOException e) {
|
||||
throw new WriteException(e);
|
||||
|
||||
Reference in New Issue
Block a user