[PIE-2322] Create file if logBloom-current.cache is missing (#438)

* create file if logBloom-current.cache is missing

Signed-off-by: Karim TAAM <karim.t2am@gmail.com>

* update populateLatestSegment in order to resolve the missing logs issue

Signed-off-by: Karim TAAM <karim.t2am@gmail.com>

* add lock for populateLatestSegment

Signed-off-by: Karim TAAM <karim.t2am@gmail.com>
pull/423/head
Karim T 5 years ago committed by GitHub
parent 634404c626
commit 9c576ccdc6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/query/TransactionLogBloomCacher.java

@ -56,6 +56,7 @@ public class TransactionLogBloomCacher {
private final Map<Long, Boolean> cachedSegments; private final Map<Long, Boolean> cachedSegments;
private final Lock submissionLock = new ReentrantLock(); private final Lock submissionLock = new ReentrantLock();
private final Lock populateLastFragmentLock = new ReentrantLock();
private final EthScheduler scheduler; private final EthScheduler scheduler;
private final Blockchain blockchain; private final Blockchain blockchain;
@ -170,9 +171,12 @@ public class TransactionLogBloomCacher {
private boolean populateLatestSegment() { private boolean populateLatestSegment() {
try { try {
long blockNumber = blockchain.getChainHeadBlockNumber(); if (populateLastFragmentLock.tryLock(100, TimeUnit.MILLISECONDS)) {
try {
final File currentFile = calculateCacheFileName(CURRENT, cacheDir); final File currentFile = calculateCacheFileName(CURRENT, cacheDir);
final long segmentNumber = blockNumber / BLOCKS_PER_BLOOM_CACHE;
final long segmentNumber = blockchain.getChainHeadBlockNumber() / BLOCKS_PER_BLOOM_CACHE;
long blockNumber = segmentNumber / BLOCKS_PER_BLOOM_CACHE;
try (final OutputStream out = new FileOutputStream(currentFile)) { try (final OutputStream out = new FileOutputStream(currentFile)) {
fillCacheFile(segmentNumber * BLOCKS_PER_BLOOM_CACHE, blockNumber, out); fillCacheFile(segmentNumber * BLOCKS_PER_BLOOM_CACHE, blockNumber, out);
} }
@ -189,8 +193,14 @@ public class TransactionLogBloomCacher {
return true; return true;
} catch (final IOException e) { } catch (final IOException e) {
LOG.error("Unhandled caching exception.", e); LOG.error("Unhandled caching exception.", e);
return false; } finally {
populateLastFragmentLock.unlock();
}
} }
} catch (final InterruptedException e) {
// ignore
}
return false;
} }
private void ensurePreviousSegmentsArePresent(final long blockNumber) { private void ensurePreviousSegmentsArePresent(final long blockNumber) {

Loading…
Cancel
Save