-
Notifications
You must be signed in to change notification settings - Fork 205
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HA PoC behind a feature flag [DPP-426] #10227
HA PoC behind a feature flag [DPP-426] #10227
Conversation
a38a249
to
373d056
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good stuff @nmarton-da ! Some small comments, but nothing major.
ledger/participant-integration-api/src/main/scala/platform/indexer/IndexerConfig.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/JdbcIndexer.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/HaCoordinator.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/HaCoordinator.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/PreemptableSequence.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/PreemptableSequence.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/store/backend/StorageBackend.scala
Outdated
Show resolved
Hide resolved
...t-integration-api/src/main/scala/platform/store/backend/common/InitHookDataSourceProxy.scala
Outdated
Show resolved
Hide resolved
...pant-integration-api/src/main/scala/platform/store/backend/oracle/OracleStorageBackend.scala
Outdated
Show resolved
Hide resolved
libs-scala/oracle-testing/src/main/scala/testing/oracle/OracleAround.scala
Show resolved
Hide resolved
373d056
to
efc03cc
Compare
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/PreemptableSequence.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/store/backend/StorageBackend.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/KillSwitchCaptor.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/PollingChecker.scala
Show resolved
Hide resolved
4175a74
to
5a7cd1a
Compare
...t-integration-api/src/main/scala/platform/store/backend/common/InitHookDataSourceProxy.scala
Outdated
Show resolved
Hide resolved
...r/participant-integration-api/src/main/scala/platform/store/appendonlydao/DbDispatcher.scala
Outdated
Show resolved
Hide resolved
89d4e45
to
e3097ee
Compare
...cipant-integration-api/src/main/scala/platform/indexer/parallel/ParallelIndexerFactory.scala
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only cosmetic changes. Feel free to postpone.
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/HaCoordinator.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/HaCoordinator.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/HaCoordinator.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/HaCoordinator.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/HaCoordinator.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/PollingChecker.scala
Outdated
Show resolved
Hide resolved
...pant-integration-api/src/main/scala/platform/store/backend/oracle/OracleStorageBackend.scala
Outdated
Show resolved
Hide resolved
...cipant-integration-api/src/main/scala/platform/indexer/parallel/ParallelIndexerFactory.scala
Show resolved
Hide resolved
...-state/kvutils/app/src/main/scala/com/daml/ledger/participant/state/kvutils/app/Config.scala
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have reviewed the first few commits in detail. I have not found any issue with the changed implementation of connection acquisition and async commit handling (but we should also rely on tests because this refactoring is hard to review).
...ntegration-api/src/main/scala/platform/store/backend/postgresql/PostgresStorageBackend.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/store/backend/StorageBackend.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/store/backend/StorageBackend.scala
Outdated
Show resolved
Hide resolved
...t-integration-api/src/main/scala/platform/store/backend/common/InitHookDataSourceProxy.scala
Outdated
Show resolved
Hide resolved
...tegration-api/src/main/scala/platform/store/appendonlydao/HikariJdbcConnectionProvider.scala
Show resolved
Hide resolved
...tegration-api/src/main/scala/platform/store/appendonlydao/HikariJdbcConnectionProvider.scala
Outdated
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/HaCoordinator.scala
Show resolved
Hide resolved
ledger/participant-integration-api/src/main/scala/platform/indexer/ha/PreemptableSequence.scala
Outdated
Show resolved
Hide resolved
@@ -108,12 +127,11 @@ object ParallelIndexerFactory { | |||
.map(_ -> System.nanoTime()) | |||
) | |||
.map(_ => ()) | |||
.keepAlive( | |||
.keepAlive( // TODO ha: remove as stable. This keepAlive approach was introduced for safety with async commit. This is still needed until HA is mandatory for Postgres to ensure safety with async commit. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What removes the need of this keepAlive
here? is it the PollingChecker
from the HaCoordinator
?
If yes, it might be good to mention it here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The keepAlive's main purpose here is to let the indexing die if connectivity to DB is lost, to prevent the corner case scenario with async commit, and unnoticed DB restarts.
With postgres+async commit+ha DB restarts cannot go unnoticed, because if the main connection (which holds the main indexer lock) breaks, we loose the indexer lock, and shut down indexing as soon as detected.
(Also we cannot initialize an additional connection to database, if we cannot verify that the main connection still holds the lock.)
I'll make a note about this in the TODO
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Left two minor comments regarding logging and comments
Previous async commit features had - async commit configured by conifg-param - special treatments to stil force sync commit for certain threadpools - special treatment to stil force sync commit on transaction level for certain transactions. This is a preparation step to clean the path for adding a new approach for async commit treatment: - only session/connection level async configuration - no transaction level special treatments - only enable async commit for specific Connection pools (where it is needed / is safe) See next commits changelog_begin changelog_end
- to spawn DataSources in a controlled fashion these will be needed in upcoming commits for the HikariCP - DataSources can have Connection init hooks defined with the help of the InitHookDataSourceProxy (this is needed for HA implementation) - added DataSourceConfig to capture needed level of fine-tuning for DataSource creation changelog_begin changelog_end
changelog_begin changelog_end
- this is the abstraction and the implementation of database level locking - with support for Oracle and Postgres changelog_begin changelog_end
- this is the core implementation of the Participant HA feature changelog_begin changelog_end
changelog_begin changelog_end
changelog_begin changelog_end
* Pulling out and fixing concurrency issue with KillSwitchCaptor * Fixing typos, doc * Renames * Fixes logging changelog_begin changelog_end
changelog_begin changelog_end
* Adds feature flag * Removes TODOs * Removes extra logging * Remove main-connection-lost simulation changelog_begin changelog_end
changelog_begin changelog_end
changelog_begin changelog_end
We need this extra level of safety until HA is behind feature flag We can remove this part as soon as HA is mandatory, since HA coordination takes care of this aspect implicitly, and more precisely (aspect: detecting loss of connection to db) changelog_begin changelog_end
* Increase log level for a potentially transient log message * Adds logging to the second getConnection method in InitHookDataSourceProxy * Rename changelog_begin changelog_end
As suggested in the design document changelog_begin changelog_end
* Wording changes * Unwrapping a single abstract method for clarity * Comment changes * Logging changes * Changes the name of the feature flag changelog_begin changelog_end
As discussed in the PR, the note is not needed by now. changelog_begin changelog_end
* removing jdbcUrl from HikariDataSourceOwner * comment changes * renames * re-adding an override * removing some parsing logic from PgSynchronousCommitValue changelog_begin changelog_end
…lementation related configurations changelog_begin changelog_end
changelog_begin changelog_end
changelog_begin changelog_end
6b9da61
to
a8382b2
Compare
This PR has been created by a script, which is not very smart and does not have all the context. Please do double-check that the version prefix is correct before merging. @remyhaemmerle-da is in charge of this release. Commit log: ``` b5e9d86 Moved DamlSubmission* into separate proto file [KVL-980] (#10362) 0da814d Let stable packages bypass LF version restrictions. (#10377) c97cbca [JSON-API] Validate schema version & add minimal options for schema creation (#10374) ebb8fab Add a ContractDao benchmark for payload queries (#10426) 85af078 LF: parser for LF versions (#10424) b976c9c Disable autocommit for hikariCP for http-json-api db conn (#10427) 3ca46a4 Removed unused import. (#10425) 4d12493 Introduce buf checks [KVL-980] (#10411) 1c4ae50 Revert "Upgrade hikari to latest jdk8 version (#10406)" (#10421) fe1b642 Don't fail if logs directory exists already (#10423) 7c88b56 participant-integration-api: Fix completion debug log output. (#10415) fc305e6 [JSON-API] Shutdown on startup if the db connection is invalid (#10360) 6db5869 Update vcredist (#10417) 4b55f1a Connection pool for Contract Dao (#10359) 72cf2f3 LF: replace bazel keyword stable by default (#10410) 2bdcb7b update NOTICES file (#10414) 39c6e0b Fix oracle message too long error (#10413) 2094e24 Indexer ValidateAndWaitOnly startup mode for canton participant HA (#10290) ad13a86 Windows dev-env Powershell 7 compatibility (#10408) 3cedd83 Easy to parse ledger-api-bench-tool logs (#10320) 16ff20c Fix links in changelog (#10409) b325e8a participant-state: Remove `WriteService#rejectSubmission`. (#10407) 9be520c Keep the participant-state API prefixed. [KVL-1002] (#10405) d88dc71 Upgrade hikari to latest jdk8 version (#10406) 8b337bd Publish ledger-indexer-benchmark (#10401) 9e05f38 ledger-api-domain: Store the deduplication duration in `Commands`. [KVL-1002] (#10403) 9c064da Allow imports of internal modules (#10397) b9518ce participant-state-metrics: Add wrappers for v2. (#10404) c3a3d60 don't call Gary, he's on holiday (#10400) 221d0a0 use doobie 0.9.0 Fragment-in-Fragment interpolation in json-api db-backend (#10399) 17709b5 use a single SQL query for any number of json-api query pairs (#10344) 6a16684 Stop publishing the db-backend artifact (#10396) 1bed05f Treat KeyWithMaintainers field structurally in all node types. (#10392) d7077e1 Introduce locally-defined `Rejection` reasons instead of the participant-state rejection reason type. [KVL-1002] (#10376) 96f0483 [Divulgence pruning] Conformance tests implementation [DPP-484] (#10385) 28c5e9a update NOTICES file (#10386) 3879452 fix cut&paste typo bug; there are no insig lookup tweaks! (#10389) 7df9758 Daml export: make paths relative to daml.yaml (#10388) 90c3582 treat exerciseResult structurally for isReplayedBy (#10381) 27a0c69 Stop swallowing error message in non-repudiation conformance tests (#10387) 22b6101 rotate release duty after 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10346) 5242e2c LF: drop old serializability check for Values (#10382) ee75530 LF: Specify nesting constraint for serialized values. (#10375) 4a33c03 LF: Add check of nesting in SValue.toValue (#10370) 91529ee clear up record specifications in http-json integration tests (#10366) e8247af update compat versions for 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10354) 74751ba Populate workflow-id in the test-tool scenarios (#10372) da9f8e3 clean-up perf tests (#10355) 42b70ad Fetch actingParties always non-empty for supported versions (>=1.6) (#10357) 37ff1a6 ledger-configuration: Return a structured error from checkTime. [KVL-1002] (#10373) 66284c1 Limit length of package ids to 64 characters (#10368) a56cfea even earlier mount failure detection (#10371) 1bc0ccd update NOTICES file (#10367) 9c9b91e Support deletion of a large number of contracts (#10353) 1b5f99e Stop printing stacktrace on logging setup failures (#10364) c0a24fe HA PoC behind a feature flag [DPP-426] (#10227) 63739fa Add conformance test for deeply nested values (#10319) faf479e LF: add context in LookupError (#10314) 68dcda0 Drop unused textType from JSON API Oracle queries (#10356) 49745f6 Re-add `application_id` to `DamlCommandDedupKey` [KVL-1000] (#10341) 27d439d LF: Compile netsed ELets using constant stack (#10337) 628aa22 kvutils: Refined transaction validation [KVL-1015] (#10066) d1e84c8 participant-integration-api: Fill out stubs in ApiSubmissionServiceSpec. (#10349) 905d8ad remove duplicated rule in create-daml-app dlint (#10352) bdc3e50 Separate ledger export related message from other kvutils messages [KVL-980] (#10343) 70e8ff4 participant-integration-api: De-spacify PostCommitValidationSpec. (#10350) 186d279 release 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10345) e58c7ba fix template dot-files (#10342) cf2b61e participant-state: Remove the aliases to `Ref.LedgerString`. (#10325) 8148137 [JSON-API] Include the logging context in the ledger client for consistent logging (#10332) c9666c7 Drop unnecessary mutability from speedy OnLedger state (#10340) 60dd96a update NOTICES file (#10347) ``` Changelog: ``` [Integration Kit] Moved definitions of `DamlSubmission` and `DamlSubmissionBatch` to a separate proto file under the package `com.daml.ledger.participant.state.kvutils.wire`. In case you are directly referencing these messages you will have to update your imports. - [JSON-API] Schema versioning was introduced to the db schema. Because of this the field `createSchema` in the jdbcConfig was deprecated. Via the field `start-mode` you can specify: 1. `create-only`: This is equal to the behaviour of `createSchema=true` so the db schema is created and then the application terminates. 2. `start-only`: With this the schema version is checked and if no version or an version was found which is not equal to the internal schema version then the application terminates. This is also the replacement of `createsSchema=false`. 3. `create-if-needed-and-start`: With this the schema version is checked and if no version or an version was found which is not equal to the internal schema version then the schema will be created/updated and the application proceeds with the startup. 4. `create-and-start`: Similar to the first option but instead of terminating the application proceeds with the startup. - [JSON-API] The json api now correctly shutdowns at startup if the provided db connection is invalid in case of `createSchema=false` simplify oracle migration scripts - [Daml Compiler] Imports of internal modules from stable packages are no longer illegal. Previously, the compiler raised an error when it encountered imports of internal modules such as `DA.Internal.Template`. Such imports are now accepted by the compiler. Note, however, that internal modules are still not part of the stable API. Fixes #10379 [Integration kit] Extended the Ledger API test tool with tests for the pruning of all divulgence events. - [Daml export] The generated paths to data-dependencies DALFs are now relative to the generated daml.yaml. Fixes #10378. - [JSON API] Fix an error where transactions that delete a large number of contracts resulted in stackoverflows with the PostgreSQL backend and database errors with Oracle. [Integration Kit] The command de-duplication key now also includes the daml application ID * [Integration Kit] Made `daml_kvutils.proto`'s location follow its proto package and moved `LedgerExportEntry` into a separate proto file. You may have to update your proto import statements in case you are directly importing proto files from the kvutils library. - [JSON-API] Connection tries from the json api to the ledger now include the logging context, more specifically the instance_uuid is included in each logging statement. ``` CHANGELOG_BEGIN CHANGELOG_END
This PR has been created by a script, which is not very smart and does not have all the context. Please do double-check that the version prefix is correct before merging. @remyhaemmerle-da is in charge of this release. Commit log: ``` b5e9d86 Moved DamlSubmission* into separate proto file [KVL-980] (#10362) 0da814d Let stable packages bypass LF version restrictions. (#10377) c97cbca [JSON-API] Validate schema version & add minimal options for schema creation (#10374) ebb8fab Add a ContractDao benchmark for payload queries (#10426) 85af078 LF: parser for LF versions (#10424) b976c9c Disable autocommit for hikariCP for http-json-api db conn (#10427) 3ca46a4 Removed unused import. (#10425) 4d12493 Introduce buf checks [KVL-980] (#10411) 1c4ae50 Revert "Upgrade hikari to latest jdk8 version (#10406)" (#10421) fe1b642 Don't fail if logs directory exists already (#10423) 7c88b56 participant-integration-api: Fix completion debug log output. (#10415) fc305e6 [JSON-API] Shutdown on startup if the db connection is invalid (#10360) 6db5869 Update vcredist (#10417) 4b55f1a Connection pool for Contract Dao (#10359) 72cf2f3 LF: replace bazel keyword stable by default (#10410) 2bdcb7b update NOTICES file (#10414) 39c6e0b Fix oracle message too long error (#10413) 2094e24 Indexer ValidateAndWaitOnly startup mode for canton participant HA (#10290) ad13a86 Windows dev-env Powershell 7 compatibility (#10408) 3cedd83 Easy to parse ledger-api-bench-tool logs (#10320) 16ff20c Fix links in changelog (#10409) b325e8a participant-state: Remove `WriteService#rejectSubmission`. (#10407) 9be520c Keep the participant-state API prefixed. [KVL-1002] (#10405) d88dc71 Upgrade hikari to latest jdk8 version (#10406) 8b337bd Publish ledger-indexer-benchmark (#10401) 9e05f38 ledger-api-domain: Store the deduplication duration in `Commands`. [KVL-1002] (#10403) 9c064da Allow imports of internal modules (#10397) b9518ce participant-state-metrics: Add wrappers for v2. (#10404) c3a3d60 don't call Gary, he's on holiday (#10400) 221d0a0 use doobie 0.9.0 Fragment-in-Fragment interpolation in json-api db-backend (#10399) 17709b5 use a single SQL query for any number of json-api query pairs (#10344) 6a16684 Stop publishing the db-backend artifact (#10396) 1bed05f Treat KeyWithMaintainers field structurally in all node types. (#10392) d7077e1 Introduce locally-defined `Rejection` reasons instead of the participant-state rejection reason type. [KVL-1002] (#10376) 96f0483 [Divulgence pruning] Conformance tests implementation [DPP-484] (#10385) 28c5e9a update NOTICES file (#10386) 3879452 fix cut&paste typo bug; there are no insig lookup tweaks! (#10389) 7df9758 Daml export: make paths relative to daml.yaml (#10388) 90c3582 treat exerciseResult structurally for isReplayedBy (#10381) 27a0c69 Stop swallowing error message in non-repudiation conformance tests (#10387) 22b6101 rotate release duty after 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10346) 5242e2c LF: drop old serializability check for Values (#10382) ee75530 LF: Specify nesting constraint for serialized values. (#10375) 4a33c03 LF: Add check of nesting in SValue.toValue (#10370) 91529ee clear up record specifications in http-json integration tests (#10366) e8247af update compat versions for 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10354) 74751ba Populate workflow-id in the test-tool scenarios (#10372) da9f8e3 clean-up perf tests (#10355) 42b70ad Fetch actingParties always non-empty for supported versions (>=1.6) (#10357) 37ff1a6 ledger-configuration: Return a structured error from checkTime. [KVL-1002] (#10373) 66284c1 Limit length of package ids to 64 characters (#10368) a56cfea even earlier mount failure detection (#10371) 1bc0ccd update NOTICES file (#10367) 9c9b91e Support deletion of a large number of contracts (#10353) 1b5f99e Stop printing stacktrace on logging setup failures (#10364) c0a24fe HA PoC behind a feature flag [DPP-426] (#10227) 63739fa Add conformance test for deeply nested values (#10319) faf479e LF: add context in LookupError (#10314) 68dcda0 Drop unused textType from JSON API Oracle queries (#10356) 49745f6 Re-add `application_id` to `DamlCommandDedupKey` [KVL-1000] (#10341) 27d439d LF: Compile netsed ELets using constant stack (#10337) 628aa22 kvutils: Refined transaction validation [KVL-1015] (#10066) d1e84c8 participant-integration-api: Fill out stubs in ApiSubmissionServiceSpec. (#10349) 905d8ad remove duplicated rule in create-daml-app dlint (#10352) bdc3e50 Separate ledger export related message from other kvutils messages [KVL-980] (#10343) 70e8ff4 participant-integration-api: De-spacify PostCommitValidationSpec. (#10350) 186d279 release 1.16.0-snapshot.20210720.7404.0.b7cf42d1 (#10345) e58c7ba fix template dot-files (#10342) cf2b61e participant-state: Remove the aliases to `Ref.LedgerString`. (#10325) 8148137 [JSON-API] Include the logging context in the ledger client for consistent logging (#10332) c9666c7 Drop unnecessary mutability from speedy OnLedger state (#10340) 60dd96a update NOTICES file (#10347) ``` Changelog: ``` [Integration Kit] Moved definitions of `DamlSubmission` and `DamlSubmissionBatch` to a separate proto file under the package `com.daml.ledger.participant.state.kvutils.wire`. In case you are directly referencing these messages you will have to update your imports. - [JSON-API] Schema versioning was introduced to the db schema. Because of this the field `createSchema` in the jdbcConfig was deprecated. Via the field `start-mode` you can specify: 1. `create-only`: This is equal to the behaviour of `createSchema=true` so the db schema is created and then the application terminates. 2. `start-only`: With this the schema version is checked and if no version or an version was found which is not equal to the internal schema version then the application terminates. This is also the replacement of `createsSchema=false`. 3. `create-if-needed-and-start`: With this the schema version is checked and if no version or an version was found which is not equal to the internal schema version then the schema will be created/updated and the application proceeds with the startup. 4. `create-and-start`: Similar to the first option but instead of terminating the application proceeds with the startup. - [JSON-API] The json api now correctly shutdowns at startup if the provided db connection is invalid in case of `createSchema=false` simplify oracle migration scripts - [Daml Compiler] Imports of internal modules from stable packages are no longer illegal. Previously, the compiler raised an error when it encountered imports of internal modules such as `DA.Internal.Template`. Such imports are now accepted by the compiler. Note, however, that internal modules are still not part of the stable API. Fixes #10379 [Integration kit] Extended the Ledger API test tool with tests for the pruning of all divulgence events. - [Daml export] The generated paths to data-dependencies DALFs are now relative to the generated daml.yaml. Fixes #10378. - [JSON API] Fix an error where transactions that delete a large number of contracts resulted in stackoverflows with the PostgreSQL backend and database errors with Oracle. [Integration Kit] The command de-duplication key now also includes the daml application ID * [Integration Kit] Made `daml_kvutils.proto`'s location follow its proto package and moved `LedgerExportEntry` into a separate proto file. You may have to update your proto import statements in case you are directly importing proto files from the kvutils library. - [JSON-API] Connection tries from the json api to the ledger now include the logging context, more specifically the instance_uuid is included in each logging statement. ``` CHANGELOG_BEGIN CHANGELOG_END Co-authored-by: Azure Pipelines DAML Build <[email protected]>
changelog_begin
changelog_end
Pull Request Checklist
CHANGELOG_BEGIN
andCHANGELOG_END
tagsNOTE: CI is not automatically run on non-members pull-requests for security
reasons. The reviewer will have to comment with
/AzurePipelines run
totrigger the build.