Skip to content

Simplify HttpClient global AbortSignal handling - #4108

Closed
dapplion wants to merge 2 commits into
unstablefrom
dapplion/http-client-global-signal
Closed

Simplify HttpClient global AbortSignal handling#4108
dapplion wants to merge 2 commits into
unstablefrom
dapplion/http-client-global-signal

Conversation

@dapplion

@dapplion dapplion commented Jun 3, 2022

Copy link
Copy Markdown
Contributor

Motivation

Simplify how global signals are provided to the HttpClient instance.

Description

Instead of providing a function to get the global signal everytime, add a method to update the global signal only when necessary. In my opinion it makes consuming the library less awkward, and this complexity is hidden for consumers that don't need to update the signals.

@dapplion
dapplion requested a review from a team as a code owner June 3, 2022 06:51
@github-actions

github-actions Bot commented Jun 3, 2022

Copy link
Copy Markdown
Contributor

Performance Report

鉁旓笍 no performance regression detected

Full benchmark results
Benchmark suite Current: 85f201c Previous: c8d5c56 Ratio
BeaconState.hashTreeRoot - No change 444.00 ns/op 487.00 ns/op 0.91
BeaconState.hashTreeRoot - 1 full validator 56.177 us/op 68.737 us/op 0.82
BeaconState.hashTreeRoot - 32 full validator 547.97 us/op 691.04 us/op 0.79
BeaconState.hashTreeRoot - 512 full validator 6.2476 ms/op 7.3244 ms/op 0.85
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 69.117 us/op 91.729 us/op 0.75
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 974.05 us/op 1.2309 ms/op 0.79
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 13.974 ms/op 15.864 ms/op 0.88
BeaconState.hashTreeRoot - 1 balances 55.960 us/op 65.302 us/op 0.86
BeaconState.hashTreeRoot - 32 balances 485.97 us/op 595.21 us/op 0.82
BeaconState.hashTreeRoot - 512 balances 4.7314 ms/op 5.3220 ms/op 0.89
BeaconState.hashTreeRoot - 250000 balances 98.103 ms/op 127.11 ms/op 0.77
processSlot - 1 slots 11.217 us/op 13.627 us/op 0.82
processSlot - 32 slots 1.6712 ms/op 1.9985 ms/op 0.84
getCommitteeAssignments - req 1 vs - 250000 vc 5.3351 ms/op 4.9908 ms/op 1.07
getCommitteeAssignments - req 100 vs - 250000 vc 7.3329 ms/op 7.3096 ms/op 1.00
getCommitteeAssignments - req 1000 vs - 250000 vc 7.7999 ms/op 7.9169 ms/op 0.99
computeProposers - vc 250000 16.931 ms/op 17.039 ms/op 0.99
computeEpochShuffling - vc 250000 166.92 ms/op 178.45 ms/op 0.94
getNextSyncCommittee - vc 250000 278.98 ms/op 306.70 ms/op 0.91
altair processAttestation - 250000 vs - 7PWei normalcase 4.4085 ms/op 3.8351 ms/op 1.15
altair processAttestation - 250000 vs - 7PWei worstcase 5.9260 ms/op 6.0243 ms/op 0.98
altair processAttestation - setStatus - 1/6 committees join 192.91 us/op 203.20 us/op 0.95
altair processAttestation - setStatus - 1/3 committees join 371.57 us/op 378.37 us/op 0.98
altair processAttestation - setStatus - 1/2 committees join 519.90 us/op 540.41 us/op 0.96
altair processAttestation - setStatus - 2/3 committees join 668.61 us/op 707.91 us/op 0.94
altair processAttestation - setStatus - 4/5 committees join 926.40 us/op 999.50 us/op 0.93
altair processAttestation - setStatus - 100% committees join 1.1082 ms/op 1.1654 ms/op 0.95
altair processBlock - 250000 vs - 7PWei normalcase 27.166 ms/op 28.140 ms/op 0.97
altair processBlock - 250000 vs - 7PWei normalcase hashState 39.514 ms/op 40.464 ms/op 0.98
altair processBlock - 250000 vs - 7PWei worstcase 82.361 ms/op 88.511 ms/op 0.93
altair processBlock - 250000 vs - 7PWei worstcase hashState 103.32 ms/op 121.71 ms/op 0.85
altair processEth1Data - 250000 vs - 7PWei normalcase 1.0268 ms/op 907.01 us/op 1.13
altair processEpoch - mainnet_e81889 583.17 ms/op 596.33 ms/op 0.98
mainnet_e81889 - altair beforeProcessEpoch 166.18 ms/op 152.00 ms/op 1.09
mainnet_e81889 - altair processJustificationAndFinalization 21.087 us/op 66.932 us/op 0.32
mainnet_e81889 - altair processInactivityUpdates 11.740 ms/op 12.011 ms/op 0.98
mainnet_e81889 - altair processRewardsAndPenalties 137.69 ms/op 136.82 ms/op 1.01
mainnet_e81889 - altair processRegistryUpdates 3.1800 us/op 18.157 us/op 0.18
mainnet_e81889 - altair processSlashings 838.00 ns/op 5.0840 us/op 0.16
mainnet_e81889 - altair processEth1DataReset 796.00 ns/op 4.9900 us/op 0.16
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.7551 ms/op 2.4621 ms/op 1.12
mainnet_e81889 - altair processSlashingsReset 4.4370 us/op 22.195 us/op 0.20
mainnet_e81889 - altair processRandaoMixesReset 5.6740 us/op 31.912 us/op 0.18
mainnet_e81889 - altair processHistoricalRootsUpdate 879.00 ns/op 5.2270 us/op 0.17
mainnet_e81889 - altair processParticipationFlagUpdates 3.1550 us/op 16.504 us/op 0.19
mainnet_e81889 - altair processSyncCommitteeUpdates 789.00 ns/op 5.2200 us/op 0.15
mainnet_e81889 - altair afterProcessEpoch 192.64 ms/op 194.38 ms/op 0.99
altair processInactivityUpdates - 250000 normalcase 34.875 ms/op 43.955 ms/op 0.79
altair processInactivityUpdates - 250000 worstcase 29.068 ms/op 32.856 ms/op 0.88
altair processRewardsAndPenalties - 250000 normalcase 102.23 ms/op 105.17 ms/op 0.97
altair processRewardsAndPenalties - 250000 worstcase 111.67 ms/op 119.83 ms/op 0.93
altair processSyncCommitteeUpdates - 250000 287.20 ms/op 305.95 ms/op 0.94
Tree 40 250000 create 858.00 ms/op 815.98 ms/op 1.05
Tree 40 250000 get(125000) 289.24 ns/op 291.66 ns/op 0.99
Tree 40 250000 set(125000) 2.5550 us/op 2.8328 us/op 0.90
Tree 40 250000 toArray() 33.952 ms/op 33.420 ms/op 1.02
Tree 40 250000 iterate all - toArray() + loop 34.218 ms/op 33.466 ms/op 1.02
Tree 40 250000 iterate all - get(i) 112.01 ms/op 123.98 ms/op 0.90
MutableVector 250000 create 16.157 ms/op 16.431 ms/op 0.98
MutableVector 250000 get(125000) 14.753 ns/op 13.378 ns/op 1.10
MutableVector 250000 set(125000) 683.87 ns/op 802.98 ns/op 0.85
MutableVector 250000 toArray() 7.3951 ms/op 6.6150 ms/op 1.12
MutableVector 250000 iterate all - toArray() + loop 7.5577 ms/op 6.9942 ms/op 1.08
MutableVector 250000 iterate all - get(i) 3.4698 ms/op 3.1854 ms/op 1.09
Array 250000 create 6.7221 ms/op 5.9597 ms/op 1.13
Array 250000 clone - spread 3.5679 ms/op 4.3300 ms/op 0.82
Array 250000 get(125000) 1.5090 ns/op 1.7200 ns/op 0.88
Array 250000 set(125000) 1.5130 ns/op 1.7120 ns/op 0.88
Array 250000 iterate all - loop 170.29 us/op 130.14 us/op 1.31
effectiveBalanceIncrements clone Uint8Array 300000 99.790 us/op 144.72 us/op 0.69
effectiveBalanceIncrements clone MutableVector 300000 1.1400 us/op 838.00 ns/op 1.36
effectiveBalanceIncrements rw all Uint8Array 300000 252.58 us/op 264.33 us/op 0.96
effectiveBalanceIncrements rw all MutableVector 300000 238.84 ms/op 188.22 ms/op 1.27
aggregationBits - 2048 els - zipIndexesInBitList 37.916 us/op 25.579 us/op 1.48
regular array get 100000 times 67.475 us/op 53.569 us/op 1.26
wrappedArray get 100000 times 67.487 us/op 51.813 us/op 1.30
arrayWithProxy get 100000 times 29.453 ms/op 36.877 ms/op 0.80
ssz.Root.equals 551.00 ns/op 495.00 ns/op 1.11
byteArrayEquals 540.00 ns/op 485.00 ns/op 1.11
phase0 processBlock - 250000 vs - 7PWei normalcase 4.1174 ms/op 3.8237 ms/op 1.08
phase0 processBlock - 250000 vs - 7PWei worstcase 47.525 ms/op 59.010 ms/op 0.81
phase0 afterProcessEpoch - 250000 vs - 7PWei 185.28 ms/op 186.12 ms/op 1.00
phase0 beforeProcessEpoch - 250000 vs - 7PWei 102.82 ms/op 74.472 ms/op 1.38
phase0 processEpoch - mainnet_e58758 608.71 ms/op 594.14 ms/op 1.02
mainnet_e58758 - phase0 beforeProcessEpoch 238.45 ms/op 257.90 ms/op 0.92
mainnet_e58758 - phase0 processJustificationAndFinalization 21.497 us/op 62.346 us/op 0.34
mainnet_e58758 - phase0 processRewardsAndPenalties 142.82 ms/op 138.42 ms/op 1.03
mainnet_e58758 - phase0 processRegistryUpdates 9.7040 us/op 39.977 us/op 0.24
mainnet_e58758 - phase0 processSlashings 831.00 ns/op 6.3990 us/op 0.13
mainnet_e58758 - phase0 processEth1DataReset 754.00 ns/op 4.9990 us/op 0.15
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.1347 ms/op 2.2736 ms/op 0.94
mainnet_e58758 - phase0 processSlashingsReset 4.9960 us/op 24.998 us/op 0.20
mainnet_e58758 - phase0 processRandaoMixesReset 5.3450 us/op 21.154 us/op 0.25
mainnet_e58758 - phase0 processHistoricalRootsUpdate 843.00 ns/op 4.7700 us/op 0.18
mainnet_e58758 - phase0 processParticipationRecordUpdates 5.2920 us/op 24.158 us/op 0.22
mainnet_e58758 - phase0 afterProcessEpoch 158.69 ms/op 162.97 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.8759 ms/op 2.2816 ms/op 1.26
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 3.0466 ms/op 2.4355 ms/op 1.25
phase0 processRegistryUpdates - 250000 normalcase 8.5140 us/op 32.769 us/op 0.26
phase0 processRegistryUpdates - 250000 badcase_full_deposits 410.26 us/op 470.39 us/op 0.87
phase0 processRegistryUpdates - 250000 worstcase 0.5 220.75 ms/op 228.40 ms/op 0.97
phase0 getAttestationDeltas - 250000 normalcase 15.448 ms/op 14.526 ms/op 1.06
phase0 getAttestationDeltas - 250000 worstcase 15.262 ms/op 14.715 ms/op 1.04
phase0 processSlashings - 250000 worstcase 6.1468 ms/op 6.6800 ms/op 0.92
shuffle list - 16384 els 10.978 ms/op 11.411 ms/op 0.96
shuffle list - 250000 els 162.15 ms/op 164.21 ms/op 0.99
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 379.01 us/op 446.06 us/op 0.85
pass gossip attestations to forkchoice per slot 3.2821 ms/op 3.4777 ms/op 0.94
computeDeltas 3.5704 ms/op 3.9640 ms/op 0.90
computeProposerBoostScoreFromBalances 921.38 us/op 810.21 us/op 1.14
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.4678 ms/op 2.0989 ms/op 1.18
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 78.841 us/op 77.965 us/op 1.01
BLS verify - blst-native 1.8582 ms/op 2.3868 ms/op 0.78
BLS verifyMultipleSignatures 3 - blst-native 3.8042 ms/op 5.0807 ms/op 0.75
BLS verifyMultipleSignatures 8 - blst-native 8.1914 ms/op 10.577 ms/op 0.77
BLS verifyMultipleSignatures 32 - blst-native 29.683 ms/op 40.169 ms/op 0.74
BLS aggregatePubkeys 32 - blst-native 39.368 us/op 54.211 us/op 0.73
BLS aggregatePubkeys 128 - blst-native 153.53 us/op 228.05 us/op 0.67
getAttestationsForBlock 70.096 ms/op 64.543 ms/op 1.09
isKnown best case - 1 super set check 454.00 ns/op 477.00 ns/op 0.95
isKnown normal case - 2 super set checks 438.00 ns/op 459.00 ns/op 0.95
isKnown worse case - 16 super set checks 435.00 ns/op 456.00 ns/op 0.95
CheckpointStateCache - add get delete 11.244 us/op 12.087 us/op 0.93
validate gossip signedAggregateAndProof - struct 4.2642 ms/op 5.5759 ms/op 0.76
validate gossip attestation - struct 2.0278 ms/op 2.6054 ms/op 0.78
altair verifyImport mainnet_s3766816:31 6.2909 s/op 7.7760 s/op 0.81
pickEth1Vote - no votes 2.1325 ms/op 2.2532 ms/op 0.95
pickEth1Vote - max votes 28.175 ms/op 26.000 ms/op 1.08
pickEth1Vote - Eth1Data hashTreeRoot value x2048 11.976 ms/op 13.345 ms/op 0.90
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 24.229 ms/op 26.042 ms/op 0.93
pickEth1Vote - Eth1Data fastSerialize value x2048 1.6420 ms/op 1.6569 ms/op 0.99
pickEth1Vote - Eth1Data fastSerialize tree x2048 20.021 ms/op 12.308 ms/op 1.63
bytes32 toHexString 1.1050 us/op 1.0440 us/op 1.06
bytes32 Buffer.toString(hex) 758.00 ns/op 700.00 ns/op 1.08
bytes32 Buffer.toString(hex) from Uint8Array 991.00 ns/op 930.00 ns/op 1.07
bytes32 Buffer.toString(hex) + 0x 762.00 ns/op 660.00 ns/op 1.15
Object access 1 prop 0.37400 ns/op 0.35500 ns/op 1.05
Map access 1 prop 0.29400 ns/op 0.31300 ns/op 0.94
Object get x1000 17.626 ns/op 14.986 ns/op 1.18
Map get x1000 0.98500 ns/op 0.87500 ns/op 1.13
Object set x1000 124.91 ns/op 98.017 ns/op 1.27
Map set x1000 74.914 ns/op 65.391 ns/op 1.15
Return object 10000 times 0.37350 ns/op 0.38170 ns/op 0.98
Throw Error 10000 times 5.9368 us/op 6.3574 us/op 0.93
enrSubnets - fastDeserialize 64 bits 2.8460 us/op 2.5980 us/op 1.10
enrSubnets - ssz BitVector 64 bits 792.00 ns/op 754.00 ns/op 1.05
enrSubnets - fastDeserialize 4 bits 427.00 ns/op 378.00 ns/op 1.13
enrSubnets - ssz BitVector 4 bits 762.00 ns/op 767.00 ns/op 0.99
prioritizePeers score -10:0 att 32-0.1 sync 2-0 97.955 us/op 95.630 us/op 1.02
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 139.49 us/op 139.11 us/op 1.00
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 241.53 us/op 243.86 us/op 0.99
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 399.49 us/op 551.31 us/op 0.72
prioritizePeers score 0:0 att 64-1 sync 4-1 472.26 us/op 590.03 us/op 0.80
RateTracker 1000000 limit, 1 obj count per request 198.43 ns/op 182.09 ns/op 1.09
RateTracker 1000000 limit, 2 obj count per request 149.08 ns/op 133.94 ns/op 1.11
RateTracker 1000000 limit, 4 obj count per request 122.68 ns/op 113.83 ns/op 1.08
RateTracker 1000000 limit, 8 obj count per request 108.68 ns/op 104.51 ns/op 1.04
RateTracker with prune 4.6930 us/op 4.2770 us/op 1.10
array of 16000 items push then shift 3.2040 us/op 4.8233 us/op 0.66
LinkedList of 16000 items push then shift 28.738 ns/op 26.900 ns/op 1.07
array of 16000 items push then pop 253.19 ns/op 227.53 ns/op 1.11
LinkedList of 16000 items push then pop 23.083 ns/op 22.857 ns/op 1.01
array of 24000 items push then shift 4.5604 us/op 7.1561 us/op 0.64
LinkedList of 24000 items push then shift 28.991 ns/op 26.001 ns/op 1.11
array of 24000 items push then pop 202.13 ns/op 196.04 ns/op 1.03
LinkedList of 24000 items push then pop 22.731 ns/op 22.761 ns/op 1.00
intersect bitArray bitLen 8 11.509 ns/op 11.816 ns/op 0.97
intersect array and set length 8 169.53 ns/op 165.36 ns/op 1.03
intersect bitArray bitLen 128 72.154 ns/op 67.406 ns/op 1.07
intersect array and set length 128 2.3570 us/op 2.1398 us/op 1.10

by benchmarkbot/action

@dapplion dapplion changed the title Fix HttpClient event handler leak Simplify HttpClient global AbortSignal handling Jun 3, 2022
this.logger = logger ?? null;
}

setAbortSignal(signal: AbortSignal): void {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

should this only be allowed once? Eg: if (this.signal) throw .. else this.signal = signal

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

No, to allow the validator client to work it must allowed N times. Every time the validator is started a new signal is created, so it must be set to the HttpClient every time.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I forget that our validator can start and stop (and restart). I still think its weird.

@ightevenmckane1 ightevenmckane1 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Looking back on mergers and file changes and deletions and restrictions on main branches.Like to know more on these changes.

@wemeetagain

Copy link
Copy Markdown
Member

closing in favor of #4178 and subsequent refactors that it allows.

@dapplion
dapplion deleted the dapplion/http-client-global-signal branch August 6, 2022 08:12
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