kvutils: Simpler constructors for common caching classes. (#7231)

* kvutils: Use `CachingDamlLedgerStateReader.apply`.

* kvutils: Simplify the constructor of CachingCommitStrategy.

CHANGELOG_BEGIN
CHANGELOG_END
This commit is contained in:
Samir Talwar 2020-08-26 09:34:01 +02:00 committed by GitHub
parent d33e130f47
commit b707bc825d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 22 deletions

View File

@ -67,22 +67,17 @@ object BatchedSubmissionValidatorFactory {
keySerializationStrategy: StateKeySerializationStrategy = DefaultStateKeySerializationStrategy,
)(implicit executionContext: ExecutionContext)
: (DamlLedgerStateReader with QueryableReadSet, CommitStrategy[LogResult]) = {
val ledgerStateReader = new CachingDamlLedgerStateReader(
val ledgerStateReader = CachingDamlLedgerStateReader(
stateCache,
cacheUpdatePolicy.shouldCacheOnRead,
cacheUpdatePolicy,
new LedgerStateReaderAdapter[LogResult](ledgerStateOperations),
keySerializationStrategy,
DamlLedgerStateReader.from(
new LedgerStateReaderAdapter[LogResult](ledgerStateOperations),
keySerializationStrategy,
),
)
val commitStrategy = new CachingCommitStrategy(
val commitStrategy = CachingCommitStrategy(
stateCache,
cacheUpdatePolicy.shouldCacheOnWrite,
new LogAppendingCommitStrategy[LogResult](
ledgerStateOperations,
keySerializationStrategy,
)
cacheUpdatePolicy,
ledgerStateOperations,
keySerializationStrategy,
)
(ledgerStateReader, commitStrategy)
}

View File

@ -8,14 +8,21 @@ import com.daml.ledger.participant.state.kvutils.DamlKvutils
import com.daml.ledger.participant.state.kvutils.DamlKvutils.{DamlStateKey, DamlStateValue}
import com.daml.ledger.participant.state.kvutils.export.SubmissionAggregator
import com.daml.ledger.participant.state.v1.ParticipantId
import com.daml.ledger.validator.CommitStrategy
import com.daml.ledger.validator.caching.CachingDamlLedgerStateReader.StateCache
import com.daml.ledger.validator.{
CommitStrategy,
LedgerStateOperations,
LogAppendingCommitStrategy,
StateKeySerializationStrategy
}
import scala.concurrent.{ExecutionContext, Future}
class CachingCommitStrategy[Result](
final class CachingCommitStrategy[Result](
cache: Cache[DamlStateKey, DamlStateValue],
shouldCache: DamlStateKey => Boolean,
delegate: CommitStrategy[Result])(implicit executionContext: ExecutionContext)
delegate: CommitStrategy[Result],
)(implicit executionContext: ExecutionContext)
extends CommitStrategy[Result] {
override def commit(
participantId: ParticipantId,
@ -43,3 +50,17 @@ class CachingCommitStrategy[Result](
)
} yield result
}
object CachingCommitStrategy {
def apply[LogResult](
stateCache: StateCache,
cacheUpdatePolicy: CacheUpdatePolicy,
ledgerStateOperations: LedgerStateOperations[LogResult],
keySerializationStrategy: StateKeySerializationStrategy,
)(implicit executionContext: ExecutionContext): CachingCommitStrategy[LogResult] =
new CachingCommitStrategy(
stateCache,
cacheUpdatePolicy.shouldCacheOnWrite,
new LogAppendingCommitStrategy(ledgerStateOperations, keySerializationStrategy),
)
}

View File

@ -10,7 +10,6 @@ import com.daml.ledger.validator.caching.CachingDamlLedgerStateReader.StateCache
import com.daml.ledger.validator.{
DamlLedgerStateReader,
LedgerStateReader,
RawToDamlLedgerStateReaderAdapter,
StateKeySerializationStrategy
}
@ -29,11 +28,12 @@ trait QueryableReadSet {
* This is crucial for caching access to large frequently accessed state, for example
* package state values (which are too expensive to deserialize from bytes every time).
*/
class CachingDamlLedgerStateReader(
final class CachingDamlLedgerStateReader(
val cache: StateCache,
shouldCache: DamlStateKey => Boolean,
keySerializationStrategy: StateKeySerializationStrategy,
delegate: DamlLedgerStateReader)(implicit executionContext: ExecutionContext)
delegate: DamlLedgerStateReader,
)(implicit executionContext: ExecutionContext)
extends DamlLedgerStateReader
with QueryableReadSet {
@ -73,15 +73,16 @@ object CachingDamlLedgerStateReader {
type StateCache = Cache[DamlStateKey, DamlStateValue]
private[validator] def apply(
def apply(
cache: StateCache,
cachingPolicy: CacheUpdatePolicy,
ledgerStateOperations: LedgerStateReader,
keySerializationStrategy: StateKeySerializationStrategy)(
implicit executionContext: ExecutionContext): CachingDamlLedgerStateReader =
keySerializationStrategy: StateKeySerializationStrategy,
)(implicit executionContext: ExecutionContext): CachingDamlLedgerStateReader =
new CachingDamlLedgerStateReader(
cache,
cachingPolicy.shouldCacheOnRead,
keySerializationStrategy,
new RawToDamlLedgerStateReaderAdapter(ledgerStateOperations, keySerializationStrategy))
DamlLedgerStateReader.from(ledgerStateOperations, keySerializationStrategy),
)
}