Skip to content

Commit a801d7f

Browse files
author
Shota Jolbordi
authored
ATL-3693 DID Update operation causes operations counter blew up in PRISM Node (#810)
1 parent ba7b3e3 commit a801d7f

File tree

3 files changed

+76
-5
lines changed

3 files changed

+76
-5
lines changed

prism-backend/node/src/main/scala/io/iohk/atala/prism/node/metrics/OperationsCounters.scala

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,17 @@ object OperationsCounters {
3131
private val REVOKE_CREDENTIALS_TAG_VALUE = "revoke-credentials"
3232
private val CREATE_DID_TAG_VALUE = "create-did"
3333
private val ISSUE_CREDENTIAL_BATCH_TAG_VALUE = "issue-credential-batch"
34+
private val PROTOCOL_VERSION_UPDATE_OPERATION_VALUE = "protocol-version-update"
3435
private val UPDATE_DID_OPERATION_TAG_VALUE = "did-update"
36+
private val DEACTIVATE_DID_TAG_VALUE = "deactivate-did"
3537

3638
// Values for atala update did operations
3739
private val EMPTY_ACTION_TAG_VALUE = "empty-did-update"
3840
private val ADD_KEY_ACTION_TAG_VALUE = "add-key"
3941
private val REMOVE_KEY_ACTION_TAG_VALUE = "remove-key"
42+
private val ADD_SERVICE_ACTION_TAG_VALUE = "add-service"
43+
private val REMOVE_SERVICE_ACTION_TAG_VALUE = "remove-service"
44+
private val UPDATE_SERVICE_ACTION_TAG_VALUE = "update-service"
4045

4146
private lazy val receivedObjectsCounter: Metric.Counter =
4247
Kamon.counter(RECEIVED_OPERATION_METRIC_NAME)
@@ -47,7 +52,7 @@ object OperationsCounters {
4752
private lazy val failedToProcessBlocksCounter =
4853
Kamon.counter(FAILED_TO_PROCESS_BLOCKS_METRIC_NAME)
4954

50-
def countReceivedAtalaOperations(in: List[SignedAtalaOperation]): Unit =
55+
def countReceivedAtalaOperations(in: List[SignedAtalaOperation]): Either[Throwable, Unit] =
5156
increaseOperationsOccurrencesCounter(
5257
in,
5358
receivedObjectsCounter,
@@ -57,7 +62,7 @@ object OperationsCounters {
5762
def failedToStoreToDbAtalaOperations(
5863
in: List[SignedAtalaOperation],
5964
error: NodeError
60-
): Unit =
65+
): Either[Throwable, Unit] =
6166
increaseOperationsOccurrencesCounter(
6267
in,
6368
failedToStoreObjectsCounter,
@@ -97,14 +102,18 @@ object OperationsCounters {
97102
in: List[SignedAtalaOperation],
98103
counter: Metric.Counter,
99104
tagSetBuilder: TagSet.Builder
100-
): Unit =
101-
Try {
105+
): Either[Throwable, Unit] = {
106+
val res = Try {
102107
val operationAndOccurrences =
103108
in.map(_.getOperation).groupBy(_.operation).view.mapValues(_.size)
104109
operationAndOccurrences.foreach { case (operation, occurrences) =>
105110
countAtalaDidOperations(operation, occurrences, counter, tagSetBuilder)
106111
}
107-
}.toEither.left.foreach(error => logger.error(s"${counter.name} counter just blew up", error))
112+
}.toEither
113+
114+
res.left.foreach(error => logger.error(s"${counter.name} counter just blew up", error))
115+
res
116+
}
108117

109118
private def countAtalaDidOperations(
110119
in: AtalaOperation.Operation,
@@ -165,6 +174,8 @@ object OperationsCounters {
165174
case AtalaOperation.Operation.RevokeCredentials(_) =>
166175
REVOKE_CREDENTIALS_TAG_VALUE
167176
case AtalaOperation.Operation.CreateDid(_) => CREATE_DID_TAG_VALUE
177+
case AtalaOperation.Operation.DeactivateDid(_) => DEACTIVATE_DID_TAG_VALUE
178+
case AtalaOperation.Operation.ProtocolVersionUpdate(_) => PROTOCOL_VERSION_UPDATE_OPERATION_VALUE
168179
case AtalaOperation.Operation.IssueCredentialBatch(_) =>
169180
ISSUE_CREDENTIAL_BATCH_TAG_VALUE
170181
// Just in case, must be impossible
@@ -175,6 +186,9 @@ object OperationsCounters {
175186
case Action.Empty => EMPTY_ACTION_TAG_VALUE
176187
case Action.AddKey(_) => ADD_KEY_ACTION_TAG_VALUE
177188
case Action.RemoveKey(_) => REMOVE_KEY_ACTION_TAG_VALUE
189+
case Action.AddService(_) => ADD_SERVICE_ACTION_TAG_VALUE
190+
case Action.RemoveService(_) => REMOVE_SERVICE_ACTION_TAG_VALUE
191+
case Action.UpdateService(_) => UPDATE_SERVICE_ACTION_TAG_VALUE
178192
}
179193

180194
}

prism-backend/node/src/main/scala/io/iohk/atala/prism/node/services/ObjectManagementService.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ private final class ObjectManagementServiceImpl[F[_]: MonadCancelThrow](
231231
OperationsCounters
232232
.failedToStoreToDbAtalaOperations(List(atalaOperation), err)
233233
AtalaOperationId.of(atalaOperation).asRight[NodeError]
234+
// success case
234235
case ((atalaOperation, _), Right(_)) =>
235236
OperationsCounters
236237
.countReceivedAtalaOperations(List(atalaOperation))
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package io.iohk.atala.prism.node.metrics
2+
3+
import io.iohk.atala.prism.crypto.EC.{INSTANCE => EC}
4+
import org.scalatest.wordspec.AnyWordSpec
5+
import io.iohk.atala.prism.node.services.BlockProcessingServiceSpec
6+
import io.iohk.atala.prism.protos.node_models.{AtalaOperation, SignedAtalaOperation}
7+
import org.scalatest.EitherValues._
8+
import org.scalatest.matchers.must.Matchers
9+
10+
import io.iohk.atala.prism.node.operations.{
11+
CreateDIDOperationSpec,
12+
UpdateDIDOperationSpec,
13+
IssueCredentialBatchOperationSpec,
14+
RevokeCredentialsOperationSpec,
15+
ProtocolVersionUpdateOperationSpec,
16+
DeactivateDIDOperationSpec
17+
}
18+
19+
class OperationsCounterSpec extends AnyWordSpec with Matchers {
20+
"countReceivedAtalaOperations" should {
21+
"count all types of operations" in {
22+
val signingKeyId = "master"
23+
val signingKey = EC.generateKeyPair().getPrivateKey
24+
def sign(op: AtalaOperation): SignedAtalaOperation = BlockProcessingServiceSpec.signOperation(
25+
op,
26+
signingKeyId,
27+
signingKey
28+
)
29+
30+
val createDidOperation = sign(CreateDIDOperationSpec.exampleOperation)
31+
32+
// Includes all type of update actions
33+
val updateDidOperation = sign(UpdateDIDOperationSpec.exampleAllActionsOperation)
34+
val issueCredentialBatchOperation = sign(IssueCredentialBatchOperationSpec.exampleOperation)
35+
val revokeCredentialsOperation = sign(RevokeCredentialsOperationSpec.revokeFullBatchOperation)
36+
val protocolVersionUpdateOperation = sign(
37+
ProtocolVersionUpdateOperationSpec.protocolUpdateOperation(
38+
ProtocolVersionUpdateOperationSpec.protocolVersionInfo1
39+
)
40+
)
41+
val deactivateDIDOperation = sign(DeactivateDIDOperationSpec.exampleOperation)
42+
43+
val operations = List(
44+
createDidOperation,
45+
updateDidOperation,
46+
issueCredentialBatchOperation,
47+
revokeCredentialsOperation,
48+
protocolVersionUpdateOperation,
49+
deactivateDIDOperation
50+
)
51+
52+
OperationsCounters.countReceivedAtalaOperations(operations).value mustBe ()
53+
54+
}
55+
}
56+
}

0 commit comments

Comments
 (0)