Page properties | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Table of Contents |
---|
Goals
- Exchange flow files between two NiFi environments using Site-to-Site via HTTP(S)
...
- /site-to-site/
- GET: Returns required information of Site-to-Site for the source NiFi environment. Representing Controller of target NiFi environment.
- /site-to-site/peers/
- GET: Returns available peers of this NiFi environment.
- /site-to-site/input-ports/{portId}/transactions/
- POST: Initiate new transaction to send data from source to target NiFi. A new transaction id is published and returned.
- /site-to-site/input-ports/{portId}/transactions/{transactionId}
- POST: Transfer data from source to target NiFi. The transaction will be held on server side instead of commit it immediately, in order to provide 2-phase style commit. Returns Checksum calculated on server side.
- DELETE: Commit the transaction which is held on server side.
- /site-to-site/output-ports/{portId}/transactions/
- POST: Initiate new transaction to receive data from target to source NiFi. A new transaction id is published and returned.
- /site-to-site/output-ports/{portId}/transactions/{transactionId}
- GET: Transfer data from target to source NiFi. The transaction will be held on server side instead of commit it immediately, in order to provide 2-phase style commit.
- DELETE: Commit the transaction which is held on server side. Client sends a Checksum calculated on client side.
Refer sequence diagrams 'REST interactions and scenarios' below for the details of how these REST endpoints are used.
REST interaction sequence diagrams
Here are sequence diagrams describing complete HTTP request/response sequence of successful scenario for both input-ports and output-ports. Other semi-normal and error cases are described in
input-ports/
PlantUML |
---|
actor A_component
actor HttpClient
actor HttpClientTransaction
actor SiteToSiteRestApiUtil
actor SiteToSiteResource
' comment: initialize
A_component -> HttpClient: createTransaction
HttpClient |
PlantUML |
actor A_component actor HttpClient actor HttpClientTransaction actor SiteToSiteRestApiUtil actor SiteToSiteResource ' comment: initialize A_component -> HttpClient: createTransaction HttpClient -> SiteToSiteRestApiUtil: initiateTransaction SiteToSiteRestApiUtil -> SiteToSiteResource: POST /site-to-site/output-ports/{portId}/transactions SiteToSiteRestApiUtil <-- SiteToSiteResource: transactionUrl-1, transactionProtocolVersion HttpClient <-- SiteToSiteRestApiUtil HttpClient -> HttpClientTransaction: new HttpClientTransaction -> HttpClientTransaction: state = TRANSACTION_STARTED HttpClientTransaction -> SiteToSiteRestApiUtil: openConnectionForReceiveinitiateTransaction SiteToSiteRestApiUtil -> SiteToSiteResource: GETPOST /site-to-site/outputinput-ports/{portId}/transactions/{transactionId-1} SiteToSiteRestApiUtil <-- SiteToSiteResource: 201 Created: transactionUrl-2 HttpClientTransaction <-- SiteToSiteRestApiUtil1, transactionProtocolVersion HttpClient <-- HttpClientTransaction A_component <-- HttpClient: Transaction 'comment: receive alt while there is data packet to receive A_component -> HttpClientTransaction: receive HttpClientTransaction <-- SiteToSiteResource: read from inputstream HttpClientTransaction -> HttpClientTransaction: state = DATA_EXCHANGED -- SiteToSiteRestApiUtil HttpClient -> HttpClientTransaction: new HttpClientTransaction -> HttpClientTransaction: state = TRANSACTION_STARTED HttpClientTransaction -> SiteToSiteRestApiUtil: openConnectionForSend SiteToSiteRestApiUtil -> SiteToSiteResource: POST /site-to-site/input-ports/{portId}/transactions/{transactionId-1} HttpClient <-- HttpClientTransaction A_component <-- HttpClientTransactionHttpClient: data packetTransaction end 'comment: confirm A_component -> HttpClientTransaction: confirm HttpClientTransaction -> SiteToSiteRestApiUtil: commitReceivingFlowFiles(checksum) SiteToSiteRestApiUtilreceive alt while there is data packet to send A_component -> SiteToSiteResource: DELETE /site-to-site/output-ports/{portId}/transactions/{transactionId-2} SiteToSiteRestApiUtil <--HttpClientTransaction: send HttpClientTransaction -> SiteToSiteResource: 200writes OK HttpClientTransaction <-- SiteToSiteRestApiUtil data to outputstream HttpClientTransaction -> HttpClientTransaction: state = TRANSACTIONDATA_CONFIRMEDEXCHANGED A_component <-- HttpClientTransaction end 'comment: completeconfirm A_component -> HttpClientTransaction: confirm HttpClientTransaction -> SiteToSiteRestApiUtil: complete finishTransferFlowFiles SiteToSiteRestApiUtil <-- SiteToSiteResource: 201 Created: transactionId-2, serverChecksum HttpClientTransaction -> HttpClientTransaction: state = TRANSACTION_COMPLETEDCONFIRMED A_component <-- HttpClientTransaction |
PlantUML |
actor A_component actor HttpClient actor HttpClientTransaction actor SiteToSiteRestApiUtil actor SiteToSiteResource-- HttpClientTransaction ' comment: initializecomplete A_component -> HttpClientHttpClientTransaction: createTransactioncomplete HttpClientHttpClientTransaction -> SiteToSiteRestApiUtil: initiateTransactioncommitTransferFlowFiles SiteToSiteRestApiUtil -> SiteToSiteResource: POSTDELETE /site-to-site/input-ports/{portId}/transactions SiteToSiteRestApiUtil/transactions/{transactionId-2} SiteToSiteRestApiUtil <-- SiteToSiteResource: 200 OK HttpClientTransaction <-- SiteToSiteRestApiUtil HttpClientTransaction -> HttpClientTransaction: state = TRANSACTION_COMPLETED A_component <-- HttpClientTransaction |
output-ports/
PlantUML |
---|
actor A_component actor HttpClient actor HttpClientTransaction actor SiteToSiteRestApiUtil actor SiteToSiteResource ' comment: initialize A_componentSiteToSiteResource: transactionUrl-1, transactionProtocolVersion HttpClient <-- SiteToSiteRestApiUtil HttpClient -> HttpClientTransaction: new HttpClientTransaction -> HttpClientTransactionHttpClient: state = TRANSACTION_STARTED HttpClientTransactioncreateTransaction HttpClient -> SiteToSiteRestApiUtil: openConnectionForSendinitiateTransaction SiteToSiteRestApiUtil -> SiteToSiteResource: POST /site-to-site/inputoutput-ports/{portId}/transactions/{transactionId-1} HttpClient SiteToSiteRestApiUtil <-- HttpClientTransaction A_componentSiteToSiteResource: transactionUrl-1, transactionProtocolVersion HttpClient <-- SiteToSiteRestApiUtil HttpClient: Transaction 'comment -> HttpClientTransaction: receivenew altHttpClientTransaction while-> thereHttpClientTransaction: isstate data packet to send A_component= TRANSACTION_STARTED HttpClientTransaction -> SiteToSiteRestApiUtil: openConnectionForReceive SiteToSiteRestApiUtil -> HttpClientTransaction: send HttpClientTransaction -> SiteToSiteResource: writes data to outputstream HttpClientTransaction -> HttpClientTransaction: state = DATA_EXCHANGED SiteToSiteResource: GET /site-to-site/output-ports/{portId}/transactions/{transactionId-1} SiteToSiteRestApiUtil <-- SiteToSiteResource: 201 Created: transactionUrl-2 HttpClientTransaction <-- SiteToSiteRestApiUtil HttpClient <-- HttpClientTransaction A_component <-- HttpClient: HttpClientTransactionTransaction end 'comment: confirm receive alt while there is data packet to receive A_component -> HttpClientTransaction: confirm HttpClientTransaction -> SiteToSiteRestApiUtil: finishTransferFlowFiles SiteToSiteRestApiUtilreceive HttpClientTransaction <-- SiteToSiteResource: 201read Created: transactionId-2, serverChecksum from inputstream HttpClientTransaction -> HttpClientTransaction: state = TRANSACTIONDATA_CONFIRMEDEXCHANGED A_component <-- HttpClientTransaction: data packet end 'comment: completeconfirm A_component -> HttpClientTransaction: completeconfirm HttpClientTransaction -> SiteToSiteRestApiUtil: commitTransferFlowFilescommitReceivingFlowFiles(checksum) SiteToSiteRestApiUtil -> SiteToSiteResource: DELETE /site-to-site/inputoutput-ports/{portId}/transactions/{transactionId-2} SiteToSiteRestApiUtil <-- SiteToSiteResource: 200 OK HttpClientTransaction SiteToSiteRestApiUtil <-- SiteToSiteResource: 200 OK HttpClientTransaction <-- SiteToSiteRestApiUtil HttpClientTransaction -> HttpClientTransaction: state = TRANSACTION_CONFIRMED A_component <-- SiteToSiteRestApiUtilHttpClientTransaction 'comment: complete A_component -> HttpClientTransaction: complete HttpClientTransaction -> HttpClientTransaction: state = TRANSACTION_COMPLETED A_component <-- HttpClientTransaction |
Refer 'REST interactions and scenarios' below for the details of how these REST endpoints are used.
REST interactions and scenarios
input-ports/
Scenario Type | {portId}/transactions | {portId}/transactions/{transactionId} | {portId}/transactions/{transactionId} |
---|---|---|---|
Transaction Initiation Failure |
| N/A | N/A |
Normal Case |
|
|
|
Normal Case - Destination becomes full | (after above interactions) | (after above interactions) | (branched from above interactions)
|
BAD_CHECKSUM | (after above interactions) | (after above interactions) |
|
Cancel transaction | (after above interactions) | (after above interactions) |
|
Defunct transaction | (after above interactions) | (after above interactions) |
|
Expired transaction | (after above interactions) | (after above interactions) |
|
Transaction Initiation Failure | (after above interactions) | (after above interactions) |
|
Defunct transaction | (after above interactions) |
| N/A |
Expired transaction | (after above interactions) |
| N/A |
Transaction Initiation Failure | (after above interactions) |
| N/A |
output-ports/
Scenario Type | {portId}/transactions | {portId}/transactions/{transactionId} | {portId}/transactions/{transactionId} |
---|---|---|---|
Transaction Initiation Failure |
| N/A | N/A |
Normal Case |
|
| -- confirm()
-- complete()
|
Normal Case - Destination becomes full | (after above interactions) | (after above interactions) | (branched from above interactions)
|
BAD_CHECKSUM | (after above interactions) | (after above interactions) |
|
Cancel transaction | (after above interactions) | (after above interactions) |
|
Defunct transaction | (after above interactions) | (after above interactions) |
|
Expired transaction | (after above interactions) | (after above interactions) |
|
Transaction Initiation Failure | (after above interactions) | (after above interactions) |
|
Defunct transaction | (after above interactions) |
| N/A |
Expired transaction | (after above interactions) |
| N/A |
Transaction Initiation Failure | (after above interactions) |
| N/A |
...