From 3c97529c0a41017d9c9cd6ebd1303dc24ad672f9 Mon Sep 17 00:00:00 2001 From: Viktor Kolomeyko Date: Fri, 30 Jun 2023 16:08:59 +0100 Subject: [PATCH 1/2] CORE-15103: Constrain version of Jackson used for Avro (#1166) Also update version of Jackson to the latest. --- data/avro-schema/build.gradle | 5 +++++ gradle.properties | 5 ++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/data/avro-schema/build.gradle b/data/avro-schema/build.gradle index a8ceb198e7..b8901837ee 100644 --- a/data/avro-schema/build.gradle +++ b/data/avro-schema/build.gradle @@ -12,6 +12,11 @@ plugins { dependencies { api "org.apache.avro:avro:$avroVersion" + constraints { + implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion") { + because "required until new version of Avro available which updates Jackson" + } + } implementation platform(project(':corda-api')) implementation project(':base') diff --git a/gradle.properties b/gradle.properties index 76b770c4ae..cfc16fe71a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,6 @@ # their own projects. So don't get fancy with syntax! org.gradle.java.installations.auto-download=false -org.gradle.jvmargs=-Dfile.encoding=UTF-8 # Versioning cordaProductVersion = 5.0.0 @@ -28,7 +27,7 @@ artifactoryContextUrl = https://software.r3.com/artifactory # Gradle # dokka need more metaspace - https://github.com/Kotlin/dokka/issues/1405 -org.gradle.jvmargs=-XX:MaxMetaspaceSize=2g +org.gradle.jvmargs=-Dfile.encoding=UTF-8 -XX:MaxMetaspaceSize=2g internalPublishVersion = 1.+ dokkaVersion = 1.8.+ detektPluginVersion = 1.22.+ @@ -46,7 +45,7 @@ bouncycastleVersion = 1.73 grgitPluginVersion = 5.2.0 taskTreePluginVersion = 2.1.1 javaxPersistenceApiVersion = 2.2 -jacksonVersion = 2.15.0 +jacksonVersion = 2.15.2 # Testing assertjVersion = 3.24.+ From 813604fa9feaf2019ebae2912a50d54fe71ef2b8 Mon Sep 17 00:00:00 2001 From: Nikolett Nagy <61757742+nikinagy@users.noreply.github.com> Date: Tue, 11 Jul 2023 15:33:54 +0100 Subject: [PATCH 2/2] CORE-13098 - Merge feature branch back into release branch (#1169) Merging re-registration feature branch to release. --- .../registration/RegistrationCommand.avsc | 2 ++ .../PersistMemberRegistrationState.avsc | 2 +- .../mgm/CheckForPendingRegistration.avsc | 23 +++++++++++++++ .../registration/mgm/QueueRegistration.avsc | 28 +++++++++++++++++++ .../registration/mgm/StartRegistration.avsc | 18 +----------- .../common/RegistrationRequestDetails.avsc | 7 ++++- .../common/v2/RegistrationStatus.avsc | 20 +++++++++++++ .../command/PersistRegistrationRequest.avsc | 2 +- .../UpdateRegistrationRequestStatus.avsc | 2 +- .../query/QueryRegistrationRequests.avsc | 2 +- .../p2p/v2/SetOwnRegistrationStatus.avsc | 21 ++++++++++++++ .../configuration/MembershipConfig.java | 10 +++++++ .../membership/1.0/corda.membership.json | 14 ++++++++++ gradle.properties | 2 +- 14 files changed, 130 insertions(+), 23 deletions(-) create mode 100644 data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/CheckForPendingRegistration.avsc create mode 100644 data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/QueueRegistration.avsc create mode 100644 data/avro-schema/src/main/resources/avro/net/corda/data/membership/common/v2/RegistrationStatus.avsc create mode 100644 data/avro-schema/src/main/resources/avro/net/corda/data/membership/p2p/v2/SetOwnRegistrationStatus.avsc diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/RegistrationCommand.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/RegistrationCommand.avsc index 6b1f09e8cc..192e984626 100644 --- a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/RegistrationCommand.avsc +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/RegistrationCommand.avsc @@ -8,6 +8,8 @@ "name": "command", "doc": "Indicator of the type of registration command that was issued.", "type": [ + "net.corda.data.membership.command.registration.mgm.QueueRegistration", + "net.corda.data.membership.command.registration.mgm.CheckForPendingRegistration", "net.corda.data.membership.command.registration.mgm.StartRegistration", "net.corda.data.membership.command.registration.mgm.VerifyMember", "net.corda.data.membership.command.registration.mgm.ProcessMemberVerificationResponse", diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/member/PersistMemberRegistrationState.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/member/PersistMemberRegistrationState.avsc index 66dc1e3f02..5a4e606f66 100644 --- a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/member/PersistMemberRegistrationState.avsc +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/member/PersistMemberRegistrationState.avsc @@ -12,7 +12,7 @@ { "name": "setStatusRequest", "doc" : "The request to set the status.", - "type": "net.corda.data.membership.p2p.SetOwnRegistrationStatus" + "type": "net.corda.data.membership.p2p.v2.SetOwnRegistrationStatus" } ] } \ No newline at end of file diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/CheckForPendingRegistration.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/CheckForPendingRegistration.avsc new file mode 100644 index 0000000000..7b48eeb335 --- /dev/null +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/CheckForPendingRegistration.avsc @@ -0,0 +1,23 @@ +{ + "type": "record", + "name": "CheckForPendingRegistration", + "namespace": "net.corda.data.membership.command.registration.mgm", + "doc": " Command issued when a member registration request is successfully queued.", + "fields": [ + { + "name": "mgm", + "doc": "Holding identity of the MGM.", + "type": "net.corda.data.identity.HoldingIdentity" + }, + { + "name": "member", + "doc": "Holding identity of the registering member as provided during P2P communication. Used to verify the registration request.", + "type": "net.corda.data.identity.HoldingIdentity" + }, + { + "name": "numberOfRetriesSoFar", + "doc": "The number of times this request failed so far.", + "type": "int" + } + ] +} \ No newline at end of file diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/QueueRegistration.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/QueueRegistration.avsc new file mode 100644 index 0000000000..b77d6ae081 --- /dev/null +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/QueueRegistration.avsc @@ -0,0 +1,28 @@ +{ + "type": "record", + "name": "QueueRegistration", + "namespace": "net.corda.data.membership.command.registration.mgm", + "doc": " Command issued when a member registration request is received and needs to be processed.", + "fields": [ + { + "name": "mgm", + "doc": "Holding identity of the target MGM.", + "type": "net.corda.data.identity.HoldingIdentity" + }, + { + "name": "member", + "doc": "Holding identity of the requesting member.", + "type": "net.corda.data.identity.HoldingIdentity" + }, + { + "name": "memberRegistrationRequest", + "doc": "The full registration request as received from a registering member.", + "type": "net.corda.data.membership.p2p.MembershipRegistrationRequest" + }, + { + "name": "numberOfRetriesSoFar", + "doc": "The number of times this request failed so far.", + "type": "int" + } + ] +} \ No newline at end of file diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/StartRegistration.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/StartRegistration.avsc index 76bcdcb00b..586942d895 100644 --- a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/StartRegistration.avsc +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/command/registration/mgm/StartRegistration.avsc @@ -3,21 +3,5 @@ "name": "StartRegistration", "namespace": "net.corda.data.membership.command.registration.mgm", "doc": " Command issued when a member registration request is received and needs to be processed.", - "fields": [ - { - "name": "destination", - "doc": "Holding identity of the target MGM.", - "type": "net.corda.data.identity.HoldingIdentity" - }, - { - "name": "source", - "doc": "Holding identity of the requesting member.", - "type": "net.corda.data.identity.HoldingIdentity" - }, - { - "name": "memberRegistrationRequest", - "doc": "The full registration request as received from a registering member.", - "type": "net.corda.data.membership.p2p.MembershipRegistrationRequest" - } - ] + "fields": [] } \ No newline at end of file diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/common/RegistrationRequestDetails.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/common/RegistrationRequestDetails.avsc index 9ea0e18c67..b3b90d6550 100644 --- a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/common/RegistrationRequestDetails.avsc +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/common/RegistrationRequestDetails.avsc @@ -23,13 +23,18 @@ { "name": "registrationStatus", "doc": "Status of the registration request.", - "type": "RegistrationStatus" + "type": "net.corda.data.membership.common.v2.RegistrationStatus" }, { "name": "registrationId", "doc": "ID of the registration request.", "type": "string" }, + { + "name": "holdingIdentityId", + "doc": "ID of the owner of this registration request.", + "type": "string" + }, { "name": "registrationProtocolVersion", "doc": "Registration protocol number.", diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/common/v2/RegistrationStatus.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/common/v2/RegistrationStatus.avsc new file mode 100644 index 0000000000..da88957759 --- /dev/null +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/common/v2/RegistrationStatus.avsc @@ -0,0 +1,20 @@ +{ + "type": "enum", + "name": "RegistrationStatus", + "namespace": "net.corda.data.membership.common.v2", + "doc": "Registration request status.", + "symbols": [ + "NEW", + "SENT_TO_MGM", + "RECEIVED_BY_MGM", + "STARTED_PROCESSING_BY_MGM", + "PENDING_MEMBER_VERIFICATION", + "PENDING_MANUAL_APPROVAL", + "PENDING_AUTO_APPROVAL", + "DECLINED", + "INVALID", + "FAILED", + "APPROVED" + ], + "default": "NEW" +} \ No newline at end of file diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/command/PersistRegistrationRequest.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/command/PersistRegistrationRequest.avsc index 414f6ee40d..eb2baffe3c 100644 --- a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/command/PersistRegistrationRequest.avsc +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/command/PersistRegistrationRequest.avsc @@ -7,7 +7,7 @@ { "name": "status", "doc": "Indicator of the current status of the request.", - "type": "net.corda.data.membership.common.RegistrationStatus" + "type": "net.corda.data.membership.common.v2.RegistrationStatus" }, { "name": "registeringHoldingIdentity", diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/command/UpdateRegistrationRequestStatus.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/command/UpdateRegistrationRequestStatus.avsc index e204e8604d..db1331d894 100644 --- a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/command/UpdateRegistrationRequestStatus.avsc +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/command/UpdateRegistrationRequestStatus.avsc @@ -15,7 +15,7 @@ { "name": "registrationStatus", "doc": "The new status for this registration request.", - "type": "net.corda.data.membership.common.RegistrationStatus" + "type": "net.corda.data.membership.common.v2.RegistrationStatus" }, { "name": "reason", diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/query/QueryRegistrationRequests.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/query/QueryRegistrationRequests.avsc index 1bd3ca4d42..cec36111f3 100644 --- a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/query/QueryRegistrationRequests.avsc +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/db/request/query/QueryRegistrationRequests.avsc @@ -14,7 +14,7 @@ "doc": "Requests in the specified statuses will be included in the query result.", "type": { "type": "array", - "items": "net.corda.data.membership.common.RegistrationStatus" + "items": "net.corda.data.membership.common.v2.RegistrationStatus" } }, { diff --git a/data/avro-schema/src/main/resources/avro/net/corda/data/membership/p2p/v2/SetOwnRegistrationStatus.avsc b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/p2p/v2/SetOwnRegistrationStatus.avsc new file mode 100644 index 0000000000..f58ed8ee4c --- /dev/null +++ b/data/avro-schema/src/main/resources/avro/net/corda/data/membership/p2p/v2/SetOwnRegistrationStatus.avsc @@ -0,0 +1,21 @@ +{ + "type": "record", + "name": "SetOwnRegistrationStatus", + "namespace": "net.corda.data.membership.p2p.v2", + "doc": "Set the member registration status.", + "fields": [ + { + "name": "registrationId", + "doc": "ID of the registration to set the status.", + "type": { + "type": "string", + "logicalType": "uuid" + } + }, + { + "name": "newStatus", + "doc": "The new registration status.", + "type": "net.corda.data.membership.common.v2.RegistrationStatus" + } + ] +} \ No newline at end of file diff --git a/data/config-schema/src/main/java/net/corda/schema/configuration/MembershipConfig.java b/data/config-schema/src/main/java/net/corda/schema/configuration/MembershipConfig.java index 65ff5397ce..4f57ee2562 100644 --- a/data/config-schema/src/main/java/net/corda/schema/configuration/MembershipConfig.java +++ b/data/config-schema/src/main/java/net/corda/schema/configuration/MembershipConfig.java @@ -12,6 +12,16 @@ private MembershipConfig() { */ public static final String MAX_DURATION_BETWEEN_SYNC_REQUESTS_MINUTES = "maxDurationBetweenSyncRequestsMinutes"; + /** + * The configuration key to get the maximum duration in minutes between polling for expired registration requests. + */ + public static final String MAX_DURATION_BETWEEN_EXPIRED_REGISTRATION_REQUESTS_POLLS = "frequencyOfExpirationPoll"; + + /** + * The configuration key to get the time frame in minutes after which a registration request is considered as expired and gets force declined. + */ + public static final String EXPIRATION_DATE_FOR_REGISTRATION_REQUESTS = "expirationTimeFrame"; + public static final class TtlsConfig { private TtlsConfig() { } diff --git a/data/config-schema/src/main/resources/net/corda/schema/configuration/membership/1.0/corda.membership.json b/data/config-schema/src/main/resources/net/corda/schema/configuration/membership/1.0/corda.membership.json index be6e1ec153..664165aab7 100644 --- a/data/config-schema/src/main/resources/net/corda/schema/configuration/membership/1.0/corda.membership.json +++ b/data/config-schema/src/main/resources/net/corda/schema/configuration/membership/1.0/corda.membership.json @@ -13,6 +13,20 @@ "maximum": 2880, "default": 480 }, + "frequencyOfExpirationPoll": { + "description": "The maximum duration in minutes between polling for expired registration requests.", + "type": "integer", + "minimum": 1, + "maximum": 2880, + "default": 300 + }, + "expirationTimeFrame": { + "description": "The time frame in minutes after which a registration request is considered as expired and gets force declined.", + "type": "integer", + "minimum": 1, + "maximum": 2880, + "default": 180 + }, "TTLs": { "description": "The maximum durations in minutes to wait for different types of message to send. If set to null, Corda waits forever.", "type": "object", diff --git a/gradle.properties b/gradle.properties index b754bfecee..6fdb3d926e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ cordaProductVersion = 5.1.0 # NOTE: update this each time this module contains a breaking change ## NOTE: currently this is a top level revision, so all API versions will line up, but this could be moved to ## a per module property in which case module versions can change independently. -cordaApiRevision = 5 +cordaApiRevision = 6 # Main kotlinVersion = 1.8.21