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

[network] Added caching to node server #3048

Merged
merged 7 commits into from
May 21, 2020

Conversation

JackyWYX
Copy link
Contributor

@JackyWYX JackyWYX commented May 19, 2020

Issue

Added caching mechanism to node handling sync traffic for two requests:

  1. DownloaderRequest_BLOCKHEADER
  2. DownloaderRequest_BLOCK

The two requested are heavily handled in explorer node. Caching these two requests will save one rlp CPU time each request.

Test

Code passed local test.

test log

After changed the solution from singleflight to lru.Cache, tested again and passed.

test log

Operational Checklist

  1. Does this PR introduce backward-incompatible changes to the on-disk data structure and/or the over-the-wire protocol?. (If no, skip to question 8.)

    NO

  2. Does this PR introduce backward-incompatible changes NOT related to on-disk data structure and/or over-the-wire protocol? (If no, continue to question 11.)

    NO

  3. Does this PR introduce significant changes to the operational requirements of the node software, such as >20% increase in CPU, memory, and/or disk usage?

    NO

@JackyWYX JackyWYX self-assigned this May 19, 2020
@JackyWYX JackyWYX requested review from rlan35 and a team May 19, 2020 02:43
node/node_syncing.go Outdated Show resolved Hide resolved
@@ -477,3 +470,49 @@ func (node *Node) CalculateResponse(request *downloader_pb.DownloaderRequest, in
}
return response, nil
}

const (
headerCacheSize = 50000000
Copy link
Contributor

Choose a reason for hiding this comment

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

This number is not not size in byte. It's number of items.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed. Thanks!

Copy link
Contributor

Choose a reason for hiding this comment

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

Should be 10000

Copy link
Contributor

Choose a reason for hiding this comment

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

Should be 10000

@rlan35
Copy link
Contributor

rlan35 commented May 20, 2020

After comment fixed and tested. We are good to go.

@JackyWYX
Copy link
Contributor Author

JackyWYX commented May 20, 2020

After changed the code, tested again locally according to these steps and passed.

@LeoHChen LeoHChen merged commit a0a4837 into harmony-one:master May 21, 2020
rlan35 added a commit that referenced this pull request May 26, 2020
* fix signers share computation to use only non-harmony nodes (#3008)

* Add LastEpochInCommittee at prestaking epoch too (#3014)

* write validator stats at the end of prestaking epoch (#3021)

* write validator stats at the end of prestaking epoch

* also need to write block reward accumulator

* [build] enable static build by default (#2885)

scripts/go_executable_build.sh -s (static build, default)
scripts/go_executable_build.sh -S (non-static build)

Signed-off-by: Leo Chen <leo@harmony.one>

* Code formatting fix based on `staticcheck` (#3023)

* fix some static check issues

* more fixes according to staticcheck

* add nil check on getHeader

* Add more log info

* [rpc] Revert change to v2 GetBalance RPC (#3037)

* Cherrypick crosslink related fixes from t3 to master. (#3045)

* Optimize crosslink verification logic and add more cache (#3032)

* make crosslink broadcast smarter and more efficient (#3036)

* adjust catch up speed to be a sane number

* Fix crosslink broadcast condition (#3041)

* Tx pool error report fix & local build fix (#3046)

* [tx_list] Add transaction after you can fetch tx cost

* [tx_pool] Add error sink reports for removed tx

* Correct log levels for known transactions
* Remove redundant hash to `enqueue` and `add` signatures
* Update tests for signature changes

* [build] Fix local build for MacOs

* [tx_pool] Correct typo & logging level for known tx

* [config] Create Testnet config

* [node.sh] update testnet network config

* [config] correct testnet config

* [main] Enable beacon sync for explorer nodes (#3059)

* [apr] should not use snapshot from last epoch, use current epoch snapshot (#3051)

* use snapshot total delegation instead of current total delegation

* should not use snapshot from last epoch, use current epoch snapshot (#3049)

Co-authored-by: Rongjian Lan <rongjian.lan@gmail.com>

Co-authored-by: Rongjian Lan <rongjian.lan@gmail.com>

* cherrypick log level change

* [rpc] Add active status back to Validator information
[validator] Fix typo for ValidatorRPCEnhanced
[Makefile] Change make exe to build non-static by default

* [network] Added caching to node server (#3048)

* [network] Added caching to node server

* [network] renamed two singleflight.Group

* [network] added two error handling

* [network] added forget logic for single flight

* [network] changed single flight to lru cache solution

* [network] adjusted the cache size

* [network] changed cache size to 10000

* Transaction api improvements (#3057)

* [node] Add option to broadcast invalid tx (on by default)

* update main args to take in broadcast invalid tx
* update node.sh for new broadcast invalid tx option

* [rpc] Do not submit transaction if tx has been finalized

* Support legacy behavior and not return errors on tx submission

* [main] make broadcasting invalid tx default false

* [node] Fix formatting

* Add timeouts for the explorer HTTP service

* [test] State trans unit test (#3043)

* completing create-validator tests

generalizing create validator tests, started with edit validator tests

one round completed before major refactor

* [test] finished coding test TestCheckDuplicateFields

* [test] finished debug TestCheckDuplicateFields

* [test] Added TestDescription_EnsureLength

* [test] added test in validator_test.go TestUpdateDescription

* [test] Added test TestComputed_String

* [test] refactored TestValidatorSanityCheck and added some message in error message returned from sanity check

* [test] removed test index for debugging

* [test] Added test TestValidatorWrapper_SanityCheck. Added value check for TestMarshalUnmarshalValidator. Fixed rlp usage defect in UnmarshalValidator

* [test] added test TestVerifyBLSKeys

* [test] added test TestContainsHarmonyBLSKeys

* [test] added test TestCreateValidatorFromNewMsg

* [test] fixed some tests errors

* [test] added test TestUpdateValidatorFromEditMsg, last editted the test file, finished testing validator_test.go

* [staking] added numeric.Dec.Copy method

* [staking] added CommissionRates.Copy

* [staking] add nil case handle to copy method and related test case

* [test] added nil case for commissionRates.Copy test

* [staking] finished CreateValidator.Copy and related test case

* [staking] added EditValidator.Copy method and related test case

* [test] added zero test cases for Copy method

* [staking] implemented Delegate.Copy and related unit test case

* [staking] added Undelegate.Copy and CollectReward.Copy method. Implemented corresponding test cases

* [test] added two more simple unit tests

* [test] solving the merge conflict with deep copy fix

* [test] added schedule for sharding

* [test] refactored double_sign_test.go

* [test] comment out all test cases for now.

* [test] added record Copy method for testing

* [test] added the first test case in TestVerify

* [test] finished test TestVerify

* [test] Added test TestVerify, TestApplySlashRate, TestSetDifference

* [test] half through TestDelegatorSlashApply

* [test] fix the problem cause by unsafe usage of big.Int

* [staking] added the copy methods to validatorWrapper

* [test] added test cases for copy method for staking/validatorWrapper

* [test] added test case TestApply

* [test] added test case TestRate

* [test] fix the golint errors

* [test] removed commented out unit test code

* [test] remote the empty line in imports

* [test] moved copy methods to stake_testing module

* [test] removed usage of interface stateDB

* [test] removed empty lines in imports

* [test] fixed golint package name issues

* [test] removed a todo when writing code

* [test] moved record.Copy to staking/slash/test

* [test] add some changes

* [test] added prototypes in staketest module

* [test] fix the golint issue in staketest

* [test] make prototype more beautiful

* [test] refactored test TestCheckDuplicateFields

* [test] add createValidator test data

* [test] added positive test case for VerifyAndCreateValidatorFromMsg

* [test] added create validator test

* [test] added the positive test case for TestVerifyAndEditValidatorFromMsg

* [test] added the tests case TestVerifyAndEditValidatorFromMsg

* [test] fix one of the error is not triggered as expected

* [test] more changes in test

* [test] fix the positive test data for TestVerifyAndDelegateFromMsg

* [test] Fixed two comment golint errors

* [test] added delegate tests

* [test] added a make function. WIP

* [test] added undelegate positive test

* [test] added negative test cases for undelegate

* [test] added positive test. not passed. Need to add assert method in test suites

* [test] added equal function to check Validator Equality

* [test] added equals for staketest

* [test] replaced deep equal with new equal methods:

* [test] removed unused codes

* [test] Finishing touch

* [test] fix comment golint issue

* [test] removed dead code in staking_verifier_test.go

Co-authored-by: Ganesha Upadhyaya <ganeshrvce@gmail.com>

* changed the sync port to dns port in flag

* [network] Limit client sync connection (#3071)

* [network] limit client connected peers
* Changed signature and added tests

* Set secure permissions on generated blskey pass file in node.sh

* Fix spellin gtypo in node.sh

* fix latest param handling in api v1

* added comment for the isGreaterThanLatestBlockNum check

* fix a nil pointer crash due to previous revert

Signed-off-by: Leo Chen <leo@harmony.one>

* fix nil pointer crash

Signed-off-by: Leo Chen <leo@harmony.one>

* fix nil pointer of block

Signed-off-by: Leo Chen <leo@harmony.one>

* [rpc] add viewID and epoch to RPCMarshalBlock (#3009)

* [rpc] add viewID and epoch to RPCMarshalBlock

* add apt-get update

* Do not rollback current block on failed block sync (#3101)

Co-authored-by: Ganesha Upadhyaya <ganeshrvce@gmail.com>
Co-authored-by: Rongjian Lan <rongjian.lan@gmail.com>
Co-authored-by: Jacky Wang <jackyw.se@gmail.com>
Co-authored-by: Janet Liang <56005637+janet-harmony@users.noreply.github.com>
Co-authored-by: Daniel Van Der Maden <dvandermaden0@berkeley.edu>
Co-authored-by: Janet Liang <janet@harmony.one>
Co-authored-by: Sebastian Johnsson <sebastian.johnsson@gmail.com>
Co-authored-by: hsiung <hsiung@pinterest.com>
Co-authored-by: Dennis Won <jhwon0820@gmail.com>
Co-authored-by: Yishuang Chen <34232522+ivorytowerdds@users.noreply.github.com>
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.

None yet

3 participants