Skip to content
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

add checkErrorHandler #12037

Merged
merged 1 commit into from
Feb 15, 2024
Merged

Conversation

shileiwill
Copy link
Contributor

@shileiwill shileiwill commented Feb 14, 2024

AUTO-9015

Add checkErrorHandler in contracts/src/v0.8/automation/interfaces/StreamsLookupCompatibleInterface.sol

All new contracts can add this checkErrorHandler function so they can have the streams lookup errors.

Copy link
Contributor

I see that you haven't updated any CHANGELOG files. Would it make sense to do so?

@@ -116,4 +116,12 @@ contract VerifiableLoadLogTriggerUpkeep is VerifiableLoadBase, StreamsLookupComp
bytes memory performData = abi.encode(values, extraData);
return (true, performData);
}

function checkErrorHandler(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are Automation test files correct? Can we move them into the Automation folder? The top level test folder is deprecated and everything should be moving out to project folders

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is a test contract used by automation, will do the migration, tracked in https://smartcontract-it.atlassian.net/browse/AUTO-9028

@@ -17,4 +17,17 @@ interface StreamsLookupCompatibleInterface {
bytes[] memory values,
bytes memory extraData
) external view returns (bool upkeepNeeded, bytes memory performData);

/**
* @dev this is a new, optional function in v2.1. It is meant to surface streams lookup errors.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit.

  • use @notice as above function
  • this is a new, optional function in v2.1. -> this is a new, optional function in streams lookup. (Streams lookup is independent of v2.1 and will be supported in future versions)

Comment on lines 147 to 154
function checkErrorHandler(
uint256 errCode,
bytes memory extraData
) external view override returns (bool upkeepNeeded, bytes memory performData) {
// dummy function, just return true and extraData
return (true, extraData);
}

Copy link
Contributor

@infiloop2 infiloop2 Feb 15, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

default implementation should be false to keep existing behaviour

return (false, new bytes(0))

Also you might be able to define this within the interface itself without requiring all contracts to change (not sure if that works)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well, just checked : Functions in interfaces cannot have an implementation.

@cl-sonarqube-production
Copy link

Quality Gate passed Quality Gate passed

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
No data about Duplication

See analysis details on SonarQube

@shileiwill shileiwill requested a review from amirylm February 15, 2024 18:45
@shileiwill shileiwill merged commit 8ae5f77 into auto-9004-stream-err-handler Feb 15, 2024
115 checks passed
@shileiwill shileiwill deleted the AUTO-9015-new branch February 15, 2024 19:10
infiloop2 added a commit that referenced this pull request Feb 27, 2024
* Stop retry flow for error handling (log trigger) (#12026)

* return timeout for retry interval

* identify retryTimeout + placeholder for err handler

* err codes

* comments

* added function and tests for handling err code

* add checkErrorHandler (#12037)

* Stop retry flow for error handling (conditional trigger) (#12032)

* err codes for conditionals

* unit tests for conditional

* refactor streams error handler

* fix mercury v0.2 request handling

* fix mercury 0.3 DoRequest

* fix tests

* connect check error callback

* add todo

* add todo

* improve comments

* polish 0.2

* fix debug.go, refactor eth_call on checkCallback and checkErrorHandler, fix some minor comments (typo and test)

* small fixes

* calculate retry config for conditionals

* rename to clarify function

* cleanup pipeline execution errors

* fix unit tests for v02_request.go

* Fix bug in 0.3 request error code

* add state assertion to single feed request tests

* add test case for invalid response bytes

* add tests for more retryable errors

* add tests for retryable -> error conversion

* polish 0.2 combining multiple feeds

* add more tests for different combination of feed responses

* remove unused fields

* unit tests for v03

* fix mercury_test.go

* minor polishing

* thread control: added function that accept a context

* use threadCtrl.GoCtx to ensure the timeout is applied with the provided context

* added timeout for mercury requests (including retries)

* fix lint

* set timeout to 10s

* use GoCtx within request clients

* lint

* add more 0.3 tests

* set err code to timeout if ctx is done

* Finalize stream error codes, polish requests to return consistent nil bytes upon error, use HttpToStreamsErrCode everywhere

* add tests for checkErrorHanlder

* treat timeout as non retryable error codes

* allow empty feed request which returns error code

* update test contract with a flag for checkErr result

* generate wrappers for LogTriggeredStreamsLookup

* handling empty performData case for err handler

* test (wip)

* fixing contract

* waiting for err handler logs (wip)

* update contract and generate wrappers

* lint

* use startBlock instead of 1

* add missing arg

* check multiple responses:

- server timeout
- unauthorized
- bad req
- internal server err
- not found

* fix test

* cleanup

* set timeout in http client

* Add timeout test for streams (#12170)

* Add timeout test

* fix DoRequest() to consider ctx (client v0.3)

* make sure we timeout in time

* align thread control test

* hacky context timeout

* trying to wait for timeout with child context

* push hack

* update

* another fix

* fix

* use ctx background

* add log

* Use new ctx to implement timeout

* fix test

* add v0.2 test

---------

Co-authored-by: amirylm <[email protected]>

* Empty Commit

---------

Co-authored-by: Amir Y <[email protected]>
Co-authored-by: Lei <[email protected]>
infiloop2 added a commit that referenced this pull request Feb 27, 2024
* Stop retry flow for error handling (log trigger) (#12026)

* return timeout for retry interval

* identify retryTimeout + placeholder for err handler

* err codes

* comments

* added function and tests for handling err code

* add checkErrorHandler (#12037)

* Stop retry flow for error handling (conditional trigger) (#12032)

* err codes for conditionals

* unit tests for conditional

* refactor streams error handler

* fix mercury v0.2 request handling

* fix mercury 0.3 DoRequest

* fix tests

* connect check error callback

* add todo

* add todo

* improve comments

* polish 0.2

* fix debug.go, refactor eth_call on checkCallback and checkErrorHandler, fix some minor comments (typo and test)

* small fixes

* calculate retry config for conditionals

* rename to clarify function

* cleanup pipeline execution errors

* fix unit tests for v02_request.go

* Fix bug in 0.3 request error code

* add state assertion to single feed request tests

* add test case for invalid response bytes

* add tests for more retryable errors

* add tests for retryable -> error conversion

* polish 0.2 combining multiple feeds

* add more tests for different combination of feed responses

* remove unused fields

* unit tests for v03

* fix mercury_test.go

* minor polishing

* thread control: added function that accept a context

* use threadCtrl.GoCtx to ensure the timeout is applied with the provided context

* added timeout for mercury requests (including retries)

* fix lint

* set timeout to 10s

* use GoCtx within request clients

* lint

* add more 0.3 tests

* set err code to timeout if ctx is done

* Finalize stream error codes, polish requests to return consistent nil bytes upon error, use HttpToStreamsErrCode everywhere

* add tests for checkErrorHanlder

* treat timeout as non retryable error codes

* allow empty feed request which returns error code

* update test contract with a flag for checkErr result

* generate wrappers for LogTriggeredStreamsLookup

* handling empty performData case for err handler

* test (wip)

* fixing contract

* waiting for err handler logs (wip)

* update contract and generate wrappers

* lint

* use startBlock instead of 1

* add missing arg

* check multiple responses:

- server timeout
- unauthorized
- bad req
- internal server err
- not found

* fix test

* cleanup

* set timeout in http client

* Add timeout test for streams (#12170)

* Add timeout test

* fix DoRequest() to consider ctx (client v0.3)

* make sure we timeout in time

* align thread control test

* hacky context timeout

* trying to wait for timeout with child context

* push hack

* update

* another fix

* fix

* use ctx background

* add log

* Use new ctx to implement timeout

* fix test

* add v0.2 test

---------

Co-authored-by: amirylm <[email protected]>

* Empty Commit

---------

Co-authored-by: Amir Y <[email protected]>
Co-authored-by: Lei <[email protected]>
github-merge-queue bot pushed a commit that referenced this pull request Feb 27, 2024
* Stream fallback: error handler (#12173)

* Stop retry flow for error handling (log trigger) (#12026)

* return timeout for retry interval

* identify retryTimeout + placeholder for err handler

* err codes

* comments

* added function and tests for handling err code

* add checkErrorHandler (#12037)

* Stop retry flow for error handling (conditional trigger) (#12032)

* err codes for conditionals

* unit tests for conditional

* refactor streams error handler

* fix mercury v0.2 request handling

* fix mercury 0.3 DoRequest

* fix tests

* connect check error callback

* add todo

* add todo

* improve comments

* polish 0.2

* fix debug.go, refactor eth_call on checkCallback and checkErrorHandler, fix some minor comments (typo and test)

* small fixes

* calculate retry config for conditionals

* rename to clarify function

* cleanup pipeline execution errors

* fix unit tests for v02_request.go

* Fix bug in 0.3 request error code

* add state assertion to single feed request tests

* add test case for invalid response bytes

* add tests for more retryable errors

* add tests for retryable -> error conversion

* polish 0.2 combining multiple feeds

* add more tests for different combination of feed responses

* remove unused fields

* unit tests for v03

* fix mercury_test.go

* minor polishing

* thread control: added function that accept a context

* use threadCtrl.GoCtx to ensure the timeout is applied with the provided context

* added timeout for mercury requests (including retries)

* fix lint

* set timeout to 10s

* use GoCtx within request clients

* lint

* add more 0.3 tests

* set err code to timeout if ctx is done

* Finalize stream error codes, polish requests to return consistent nil bytes upon error, use HttpToStreamsErrCode everywhere

* add tests for checkErrorHanlder

* treat timeout as non retryable error codes

* allow empty feed request which returns error code

* update test contract with a flag for checkErr result

* generate wrappers for LogTriggeredStreamsLookup

* handling empty performData case for err handler

* test (wip)

* fixing contract

* waiting for err handler logs (wip)

* update contract and generate wrappers

* lint

* use startBlock instead of 1

* add missing arg

* check multiple responses:

- server timeout
- unauthorized
- bad req
- internal server err
- not found

* fix test

* cleanup

* set timeout in http client

* Add timeout test for streams (#12170)

* Add timeout test

* fix DoRequest() to consider ctx (client v0.3)

* make sure we timeout in time

* align thread control test

* hacky context timeout

* trying to wait for timeout with child context

* push hack

* update

* another fix

* fix

* use ctx background

* add log

* Use new ctx to implement timeout

* fix test

* add v0.2 test

---------

Co-authored-by: amirylm <[email protected]>

* Empty Commit

---------

Co-authored-by: Amir Y <[email protected]>
Co-authored-by: Lei <[email protected]>

* Empty Commit

---------

Co-authored-by: Amir Y <[email protected]>
Co-authored-by: Lei <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants