Skip to content

Commit 9ac48cb

Browse files
author
Leonor Boga
committed
ETCM-1061 Remove caching from ArchiveStateStorage and ReferenceCountedStateStorage
1 parent f86aea9 commit 9ac48cb

File tree

7 files changed

+31
-58
lines changed

7 files changed

+31
-58
lines changed

src/it/scala/io/iohk/ethereum/txExecTest/util/FixtureProvider.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,11 @@ object FixtureProvider {
5757
override val transactionMappingStorage: TransactionMappingStorage = new TransactionMappingStorage(dataSource)
5858
override val appStateStorage: AppStateStorage = new AppStateStorage(dataSource)
5959
val nodeStorage: NodeStorage = new NodeStorage(dataSource)
60-
val cachedNodeStorage: CachedNodeStorage = new CachedNodeStorage(nodeStorage, caches.nodeCache)
6160
val pruningMode: PruningMode = ArchivePruning
6261
override val stateStorage: StateStorage =
6362
StateStorage(
6463
pruningMode,
6564
nodeStorage,
66-
cachedNodeStorage,
6765
new LruCache[NodeHash, HeapEntry](
6866
Config.InMemoryPruningNodeCacheConfig,
6967
Some(CachedReferenceCountedStorage.saveOnlyNotificationHandler(nodeStorage))

src/main/scala/io/iohk/ethereum/db/components/Storages.scala

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ object Storages {
3131

3232
override val nodeStorage: NodeStorage = new NodeStorage(dataSource)
3333

34-
val cachedNodeStorage: CachedNodeStorage = new CachedNodeStorage(nodeStorage, caches.nodeCache)
35-
3634
override val fastSyncStateStorage: FastSyncStateStorage = new FastSyncStateStorage(dataSource)
3735

3836
override val evmCodeStorage: EvmCodeStorage = new EvmCodeStorage(dataSource)
@@ -50,7 +48,6 @@ object Storages {
5048
StateStorage(
5149
pruningMode,
5250
nodeStorage,
53-
cachedNodeStorage,
5451
new LruCache[NodeHash, HeapEntry](
5552
Config.InMemoryPruningNodeCacheConfig,
5653
Some(CachedReferenceCountedStorage.saveOnlyNotificationHandler(nodeStorage))

src/main/scala/io/iohk/ethereum/db/storage/StateStorage.scala

Lines changed: 19 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -31,76 +31,57 @@ trait StateStorage {
3131
def forcePersist(reason: FlushSituation): Boolean
3232
}
3333

34-
class ArchiveStateStorage(private val nodeStorage: NodeStorage, private val cachedNodeStorage: CachedNodeStorage)
35-
extends StateStorage {
34+
class ArchiveStateStorage(private val nodeStorage: NodeStorage) extends StateStorage {
3635

37-
override def forcePersist(reason: FlushSituation): Boolean = {
38-
cachedNodeStorage.forcePersist()
39-
true
40-
}
36+
override def forcePersist(reason: FlushSituation): Boolean = true
4137

4238
override def onBlockSave(bn: BigInt, currentBestSavedBlock: BigInt)(updateBestBlocksData: () => Unit): Unit =
43-
if (cachedNodeStorage.persist()) {
44-
updateBestBlocksData()
45-
}
39+
updateBestBlocksData()
4640

4741
override def onBlockRollback(bn: BigInt, currentBestSavedBlock: BigInt)(updateBestBlocksData: () => Unit): Unit =
48-
if (cachedNodeStorage.persist()) {
49-
updateBestBlocksData()
50-
}
42+
updateBestBlocksData()
5143

5244
override def getReadOnlyStorage: MptStorage =
53-
new SerializingMptStorage(ReadOnlyNodeStorage(new ArchiveNodeStorage(cachedNodeStorage)))
45+
new SerializingMptStorage(ReadOnlyNodeStorage(new ArchiveNodeStorage(nodeStorage)))
5446

5547
override def getBackingStorage(bn: BigInt): MptStorage =
56-
new SerializingMptStorage(new ArchiveNodeStorage(cachedNodeStorage))
48+
new SerializingMptStorage(new ArchiveNodeStorage(nodeStorage))
5749

5850
override def saveNode(nodeHash: NodeHash, nodeEncoded: NodeEncoded, bn: BigInt): Unit =
5951
nodeStorage.put(nodeHash, nodeEncoded)
6052

6153
override def getNode(nodeHash: NodeHash): Option[MptNode] =
62-
cachedNodeStorage.get(nodeHash).map(_.toMptNode)
54+
nodeStorage.get(nodeHash).map(_.toMptNode)
6355
}
6456

6557
class ReferenceCountedStateStorage(
6658
private val nodeStorage: NodeStorage,
67-
private val cachedNodeStorage: CachedNodeStorage,
6859
private val pruningHistory: BigInt
6960
) extends StateStorage {
70-
override def forcePersist(reason: FlushSituation): Boolean = {
71-
cachedNodeStorage.forcePersist()
72-
true
73-
}
61+
override def forcePersist(reason: FlushSituation): Boolean = true
7462

7563
override def onBlockSave(bn: BigInt, currentBestSavedBlock: BigInt)(updateBestBlocksData: () => Unit): Unit = {
7664
val blockToPrune = bn - pruningHistory
77-
78-
ReferenceCountNodeStorage.prune(blockToPrune, cachedNodeStorage, inMemory = blockToPrune > currentBestSavedBlock)
79-
80-
if (cachedNodeStorage.persist()) {
81-
updateBestBlocksData()
82-
}
65+
ReferenceCountNodeStorage.prune(blockToPrune, nodeStorage, inMemory = blockToPrune > currentBestSavedBlock)
66+
updateBestBlocksData()
8367
}
8468

8569
override def onBlockRollback(bn: BigInt, currentBestSavedBlock: BigInt)(updateBestBlocksData: () => Unit): Unit = {
86-
ReferenceCountNodeStorage.rollback(bn, cachedNodeStorage, inMemory = bn > currentBestSavedBlock)
87-
88-
if (cachedNodeStorage.persist()) {
89-
updateBestBlocksData()
90-
}
70+
ReferenceCountNodeStorage.rollback(bn, nodeStorage, inMemory = bn > currentBestSavedBlock)
71+
updateBestBlocksData()
9172
}
9273

9374
override def getBackingStorage(bn: BigInt): MptStorage =
94-
new SerializingMptStorage(new ReferenceCountNodeStorage(cachedNodeStorage, bn))
75+
new SerializingMptStorage(new ReferenceCountNodeStorage(nodeStorage, bn))
9576

9677
override def getReadOnlyStorage: MptStorage =
97-
new SerializingMptStorage(ReadOnlyNodeStorage(new FastSyncNodeStorage(cachedNodeStorage, 0)))
78+
new SerializingMptStorage(ReadOnlyNodeStorage(new FastSyncNodeStorage(nodeStorage, 0)))
9879

9980
override def saveNode(nodeHash: NodeHash, nodeEncoded: NodeEncoded, bn: BigInt): Unit =
10081
new FastSyncNodeStorage(nodeStorage, bn).update(Nil, Seq(nodeHash -> nodeEncoded))
10182

10283
override def getNode(nodeHash: NodeHash): Option[MptNode] =
103-
new FastSyncNodeStorage(cachedNodeStorage, 0).get(nodeHash).map(_.toMptNode)
84+
new FastSyncNodeStorage(nodeStorage, 0).get(nodeHash).map(_.toMptNode)
10485
}
10586

10687
class CachedReferenceCountedStateStorage(
@@ -159,12 +140,11 @@ object StateStorage {
159140
def apply(
160141
pruningMode: PruningMode,
161142
nodeStorage: NodeStorage,
162-
cachedNodeStorage: CachedNodeStorage,
163143
lruCache: LruCache[NodeHash, HeapEntry]
164144
): StateStorage =
165145
pruningMode match {
166-
case ArchivePruning => new ArchiveStateStorage(nodeStorage, cachedNodeStorage)
167-
case pruning.BasicPruning(history) => new ReferenceCountedStateStorage(nodeStorage, cachedNodeStorage, history)
146+
case ArchivePruning => new ArchiveStateStorage(nodeStorage)
147+
case pruning.BasicPruning(history) => new ReferenceCountedStateStorage(nodeStorage, history)
168148
case pruning.InMemoryPruning(history) => new CachedReferenceCountedStateStorage(nodeStorage, history, lruCache)
169149
}
170150

@@ -185,8 +165,9 @@ object StateStorage {
185165
}
186166
val nodeStorage = new NodeStorage(source)
187167
val cachedNodeStorage = new CachedNodeStorage(nodeStorage, MapCache.createTestCache(testCacheSize))
168+
188169
(
189-
StateStorage(pruningMode, nodeStorage, cachedNodeStorage, new LruCache[NodeHash, HeapEntry](testCacheConfig)),
170+
StateStorage(pruningMode, nodeStorage, new LruCache[NodeHash, HeapEntry](testCacheConfig)),
190171
nodeStorage,
191172
cachedNodeStorage
192173
)

src/test/scala/io/iohk/ethereum/db/storage/ReadOnlyNodeStorageSpec.scala

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ import io.iohk.ethereum.utils.Config.NodeCacheConfig
2323
class ReadOnlyNodeStorageSpec extends AnyFlatSpec with Matchers {
2424

2525
"ReadOnlyNodeStorage" should "not update dataSource" in new TestSetup {
26-
val readOnlyNodeStorage = stateStorage.getReadOnlyStorage
26+
val readOnlyNodeStorage = archiveStateStorage.getReadOnlyStorage
2727
readOnlyNodeStorage.updateNodesInStorage(Some(newLeaf), Nil)
2828
dataSource.storage.size shouldEqual 0
2929
}
3030

3131
it should "be able to persist to underlying storage when needed" in new TestSetup {
32-
val (nodeKey, nodeVal) = MptStorage.collapseNode(Some(newLeaf))._2.head
33-
val readOnlyNodeStorage = stateStorage.getReadOnlyStorage
32+
val (nodeKey, _) = MptStorage.collapseNode(Some(newLeaf))._2.head
33+
val readOnlyNodeStorage = archiveStateStorage.getReadOnlyStorage
3434

3535
readOnlyNodeStorage.updateNodesInStorage(Some(newLeaf), Nil)
3636

@@ -41,12 +41,11 @@ class ReadOnlyNodeStorageSpec extends AnyFlatSpec with Matchers {
4141

4242
readOnlyNodeStorage.persist()
4343

44-
stateStorage.forcePersist(GenesisDataLoad)
4544
dataSource.storage.size shouldEqual 1
4645
}
4746

4847
it should "be able to persist to underlying storage when Genesis loading" in new TestSetup {
49-
val (nodeKey, nodeVal) = MptStorage.collapseNode(Some(newLeaf))._2.head
48+
val (nodeKey, _) = MptStorage.collapseNode(Some(newLeaf))._2.head
5049
val readOnlyNodeStorage = cachedStateStorage.getReadOnlyStorage
5150

5251
readOnlyNodeStorage.updateNodesInStorage(Some(newLeaf), Nil)
@@ -65,7 +64,7 @@ class ReadOnlyNodeStorageSpec extends AnyFlatSpec with Matchers {
6564
trait TestSetup {
6665
val newLeaf: LeafNode = LeafNode(ByteString(1), ByteString(1))
6766
val dataSource: EphemDataSource = EphemDataSource()
68-
val (stateStorage, nodeStorage, cachedStorage) = StateStorage.createTestStateStorage(dataSource)
67+
val (archiveStateStorage, nodeStorage, cachedStorage) = StateStorage.createTestStateStorage(dataSource)
6968

7069
object TestCacheConfig extends NodeCacheConfig {
7170
override val maxSize: Long = 100
@@ -76,7 +75,6 @@ class ReadOnlyNodeStorageSpec extends AnyFlatSpec with Matchers {
7675
val testCache: Cache[NodeHash, NodeEncoded] = MapCache.createTestCache[NodeHash, NodeEncoded](10)
7776
val newCachedNodeStorage = new CachedNodeStorage(newNodeStorage, testCache)
7877

79-
val cachedStateStorage: StateStorage =
80-
StateStorage(InMemoryPruning(10), newNodeStorage, newCachedNodeStorage, lruCache)
78+
val cachedStateStorage: StateStorage = StateStorage(InMemoryPruning(10), newNodeStorage, lruCache)
8179
}
8280
}

src/test/scala/io/iohk/ethereum/db/storage/StateStorageSpec.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,12 @@ class StateStorageSpec extends AnyFlatSpec with Matchers with ScalaCheckProperty
179179
val lruCache = new LruCache[NodeHash, HeapEntry](TestCacheConfig)
180180

181181
val archiveNodeStorage = new ArchiveNodeStorage(nodeStorage)
182-
val archiveStateStorage: StateStorage = StateStorage(ArchivePruning, nodeStorage, cachedNodeStorage, lruCache)
182+
val archiveStateStorage: StateStorage = StateStorage(ArchivePruning, nodeStorage, lruCache)
183183

184184
val refCountNodeStorage = new ReferenceCountNodeStorage(nodeStorage, 10)
185-
val referenceCounteStateStorage: StateStorage =
186-
StateStorage(BasicPruning(10), nodeStorage, cachedNodeStorage, lruCache)
185+
val referenceCounteStateStorage: StateStorage = StateStorage(BasicPruning(10), nodeStorage, lruCache)
187186

188-
val cachedStateStorage: StateStorage = StateStorage(InMemoryPruning(10), nodeStorage, cachedNodeStorage, lruCache)
187+
val cachedStateStorage: StateStorage = StateStorage(InMemoryPruning(10), nodeStorage, lruCache)
189188
val cachedPrunedNodeStorage = new CachedReferenceCountedStorage(nodeStorage, lruCache, changeLog, 10)
190189
}
191190
}

src/test/scala/io/iohk/ethereum/ledger/BlockImportSpec.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ class BlockImportSpec extends AnyFlatSpec with Matchers with ScalaFutures {
196196
// dying before updating the storage but after updating the cache, inconsistency is created
197197
blockchain.saveBestKnownBlocks(oldBlock4.number)
198198

199-
blockchainReader.getBestBlock() shouldBe Some(ancestorForValidation)
199+
blockchainReader.getBestBlock() shouldBe Some(newBlock3)
200200
}
201201

202202
it should "handle error when trying to reorganise chain" in new EphemBlockchain {

src/test/scala/io/iohk/ethereum/mpt/MerklePatriciaTrieSuite.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import io.iohk.ethereum.proof.ProofVerifyResult.ValidProof
2727
class MerklePatriciaTrieSuite extends AnyFunSuite with ScalaCheckPropertyChecks with ObjectGenerators {
2828

2929
val dataSource: EphemDataSource = EphemDataSource()
30-
val (stateStorage, emptyNodeStorage, _) = StateStorage.createTestStateStorage(dataSource)
30+
val (stateStorage, emptyNodeStorage, cachedNodeStorage) = StateStorage.createTestStateStorage(dataSource)
3131
val emptyEphemNodeStorage: MptStorage = stateStorage.getBackingStorage(0)
3232
val emptyMpt: MerklePatriciaTrie[Array[Byte], Array[Byte]] =
3333
MerklePatriciaTrie[Array[Byte], Array[Byte]](emptyEphemNodeStorage)
@@ -484,7 +484,7 @@ class MerklePatriciaTrieSuite extends AnyFunSuite with ScalaCheckPropertyChecks
484484

485485
val pruningOffset = 10
486486

487-
val (stateStorage, nodeStorage, cachedNodeStorage) =
487+
val (stateStorage, _, cachedNodeStorage) =
488488
StateStorage.createTestStateStorage(EphemDataSource(), BasicPruning(40))
489489

490490
val referenceCountBlock0 = stateStorage.getBackingStorage(0)

0 commit comments

Comments
 (0)