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

fix: prevent updating execution engine state during shutdown #5770

Merged
merged 1 commit into from
Jul 18, 2023

Conversation

nflaig
Copy link
Member

@nflaig nflaig commented Jul 18, 2023

Motivation

Closes #5769

Description

Prevent updating execution engine state during shutdown by ignoring aborted errors.

@nflaig nflaig requested a review from a team as a code owner July 18, 2023 08:41
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 5596024 Previous: ec81531 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 663.57 us/op 499.51 us/op 1.33
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 81.057 us/op 77.714 us/op 1.04
BLS verify - blst-native 1.2547 ms/op 1.2404 ms/op 1.01
BLS verifyMultipleSignatures 3 - blst-native 2.5689 ms/op 2.4868 ms/op 1.03
BLS verifyMultipleSignatures 8 - blst-native 5.5223 ms/op 5.4670 ms/op 1.01
BLS verifyMultipleSignatures 32 - blst-native 19.882 ms/op 19.455 ms/op 1.02
BLS aggregatePubkeys 32 - blst-native 26.495 us/op 25.936 us/op 1.02
BLS aggregatePubkeys 128 - blst-native 103.43 us/op 102.79 us/op 1.01
getAttestationsForBlock 53.062 ms/op 58.167 ms/op 0.91
isKnown best case - 1 super set check 287.00 ns/op 361.00 ns/op 0.80
isKnown normal case - 2 super set checks 270.00 ns/op 296.00 ns/op 0.91
isKnown worse case - 16 super set checks 268.00 ns/op 309.00 ns/op 0.87
CheckpointStateCache - add get delete 5.2900 us/op 5.6110 us/op 0.94
validate api signedAggregateAndProof - struct 2.8180 ms/op 2.8282 ms/op 1.00
validate gossip signedAggregateAndProof - struct 2.8255 ms/op 2.8034 ms/op 1.01
validate api attestation - struct 1.3359 ms/op 1.3411 ms/op 1.00
validate gossip attestation - struct 1.3614 ms/op 1.3540 ms/op 1.01
pickEth1Vote - no votes 1.2155 ms/op 1.2052 ms/op 1.01
pickEth1Vote - max votes 11.038 ms/op 9.2216 ms/op 1.20
pickEth1Vote - Eth1Data hashTreeRoot value x2048 9.0228 ms/op 9.1892 ms/op 0.98
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 15.440 ms/op 13.699 ms/op 1.13
pickEth1Vote - Eth1Data fastSerialize value x2048 647.03 us/op 725.07 us/op 0.89
pickEth1Vote - Eth1Data fastSerialize tree x2048 5.7153 ms/op 4.8911 ms/op 1.17
bytes32 toHexString 508.00 ns/op 540.00 ns/op 0.94
bytes32 Buffer.toString(hex) 286.00 ns/op 302.00 ns/op 0.95
bytes32 Buffer.toString(hex) from Uint8Array 441.00 ns/op 514.00 ns/op 0.86
bytes32 Buffer.toString(hex) + 0x 283.00 ns/op 344.00 ns/op 0.82
Object access 1 prop 0.16300 ns/op 0.18900 ns/op 0.86
Map access 1 prop 0.14700 ns/op 0.16000 ns/op 0.92
Object get x1000 7.8650 ns/op 8.6720 ns/op 0.91
Map get x1000 0.53000 ns/op 0.60800 ns/op 0.87
Object set x1000 51.864 ns/op 55.033 ns/op 0.94
Map set x1000 40.563 ns/op 45.812 ns/op 0.89
Return object 10000 times 0.24760 ns/op 0.24940 ns/op 0.99
Throw Error 10000 times 3.9136 us/op 3.8930 us/op 1.01
fastMsgIdFn sha256 / 200 bytes 3.4210 us/op 3.4850 us/op 0.98
fastMsgIdFn h32 xxhash / 200 bytes 299.00 ns/op 339.00 ns/op 0.88
fastMsgIdFn h64 xxhash / 200 bytes 361.00 ns/op 391.00 ns/op 0.92
fastMsgIdFn sha256 / 1000 bytes 11.699 us/op 11.885 us/op 0.98
fastMsgIdFn h32 xxhash / 1000 bytes 436.00 ns/op 515.00 ns/op 0.85
fastMsgIdFn h64 xxhash / 1000 bytes 438.00 ns/op 492.00 ns/op 0.89
fastMsgIdFn sha256 / 10000 bytes 105.36 us/op 110.40 us/op 0.95
fastMsgIdFn h32 xxhash / 10000 bytes 2.0250 us/op 2.2110 us/op 0.92
fastMsgIdFn h64 xxhash / 10000 bytes 1.3810 us/op 1.4460 us/op 0.96
enrSubnets - fastDeserialize 64 bits 1.4120 us/op 1.6580 us/op 0.85
enrSubnets - ssz BitVector 64 bits 437.00 ns/op 555.00 ns/op 0.79
enrSubnets - fastDeserialize 4 bits 166.00 ns/op 263.00 ns/op 0.63
enrSubnets - ssz BitVector 4 bits 440.00 ns/op 516.00 ns/op 0.85
prioritizePeers score -10:0 att 32-0.1 sync 2-0 110.95 us/op 117.40 us/op 0.95
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 136.84 us/op 146.99 us/op 0.93
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 177.94 us/op 201.14 us/op 0.88
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 319.16 us/op 352.50 us/op 0.91
prioritizePeers score 0:0 att 64-1 sync 4-1 361.88 us/op 388.15 us/op 0.93
array of 16000 items push then shift 1.6065 us/op 1.6361 us/op 0.98
LinkedList of 16000 items push then shift 9.0600 ns/op 9.3710 ns/op 0.97
array of 16000 items push then pop 49.639 ns/op 58.786 ns/op 0.84
LinkedList of 16000 items push then pop 8.8210 ns/op 9.6370 ns/op 0.92
array of 24000 items push then shift 2.4372 us/op 2.4937 us/op 0.98
LinkedList of 24000 items push then shift 9.2230 ns/op 9.5940 ns/op 0.96
array of 24000 items push then pop 117.56 ns/op 123.04 ns/op 0.96
LinkedList of 24000 items push then pop 8.8600 ns/op 9.2830 ns/op 0.95
intersect bitArray bitLen 8 6.9220 ns/op 6.9870 ns/op 0.99
intersect array and set length 8 61.546 ns/op 68.111 ns/op 0.90
intersect bitArray bitLen 128 31.934 ns/op 33.071 ns/op 0.97
intersect array and set length 128 796.94 ns/op 838.72 ns/op 0.95
bitArray.getTrueBitIndexes() bitLen 128 1.6830 us/op 1.8600 us/op 0.90
bitArray.getTrueBitIndexes() bitLen 248 2.6570 us/op 2.9950 us/op 0.89
bitArray.getTrueBitIndexes() bitLen 512 5.3970 us/op 5.7730 us/op 0.93
Buffer.concat 32 items 1.1150 us/op 1.2170 us/op 0.92
Uint8Array.set 32 items 1.8400 us/op 2.3020 us/op 0.80
transfer serialized Status (84 B) 1.9260 us/op 1.9430 us/op 0.99
copy serialized Status (84 B) 1.6150 us/op 1.7150 us/op 0.94
transfer serialized SignedVoluntaryExit (112 B) 2.2130 us/op 2.2160 us/op 1.00
copy serialized SignedVoluntaryExit (112 B) 1.9110 us/op 1.9360 us/op 0.99
transfer serialized ProposerSlashing (416 B) 3.1530 us/op 2.7160 us/op 1.16
copy serialized ProposerSlashing (416 B) 3.1060 us/op 2.5350 us/op 1.23
transfer serialized Attestation (485 B) 3.3110 us/op 2.6170 us/op 1.27
copy serialized Attestation (485 B) 3.1330 us/op 2.3920 us/op 1.31
transfer serialized AttesterSlashing (33232 B) 3.2490 us/op 2.3140 us/op 1.40
copy serialized AttesterSlashing (33232 B) 6.3930 us/op 7.6890 us/op 0.83
transfer serialized Small SignedBeaconBlock (128000 B) 3.3160 us/op 2.6050 us/op 1.27
copy serialized Small SignedBeaconBlock (128000 B) 14.620 us/op 16.162 us/op 0.90
transfer serialized Avg SignedBeaconBlock (200000 B) 3.7350 us/op 3.5800 us/op 1.04
copy serialized Avg SignedBeaconBlock (200000 B) 24.337 us/op 24.036 us/op 1.01
transfer serialized BlobsSidecar (524380 B) 3.7300 us/op 3.4520 us/op 1.08
copy serialized BlobsSidecar (524380 B) 86.660 us/op 118.30 us/op 0.73
transfer serialized Big SignedBeaconBlock (1000000 B) 3.7570 us/op 4.3110 us/op 0.87
copy serialized Big SignedBeaconBlock (1000000 B) 164.67 us/op 181.71 us/op 0.91
pass gossip attestations to forkchoice per slot 2.2756 ms/op 2.2886 ms/op 0.99
forkChoice updateHead vc 100000 bc 64 eq 0 2.1591 ms/op 2.3048 ms/op 0.94
forkChoice updateHead vc 600000 bc 64 eq 0 14.561 ms/op 14.659 ms/op 0.99
forkChoice updateHead vc 1000000 bc 64 eq 0 19.117 ms/op 23.681 ms/op 0.81
forkChoice updateHead vc 600000 bc 320 eq 0 19.110 ms/op 21.132 ms/op 0.90
forkChoice updateHead vc 600000 bc 1200 eq 0 85.598 ms/op 89.007 ms/op 0.96
forkChoice updateHead vc 600000 bc 64 eq 1000 19.270 ms/op 22.222 ms/op 0.87
forkChoice updateHead vc 600000 bc 64 eq 10000 21.445 ms/op 28.512 ms/op 0.75
forkChoice updateHead vc 600000 bc 64 eq 300000 27.338 ms/op 46.369 ms/op 0.59
computeDeltas 3.0430 ms/op 3.5909 ms/op 0.85
computeProposerBoostScoreFromBalances 395.55 us/op 408.21 us/op 0.97
altair processAttestation - 250000 vs - 7PWei normalcase 2.3849 ms/op 2.5074 ms/op 0.95
altair processAttestation - 250000 vs - 7PWei worstcase 3.4129 ms/op 3.6328 ms/op 0.94
altair processAttestation - setStatus - 1/6 committees join 222.64 us/op 234.39 us/op 0.95
altair processAttestation - setStatus - 1/3 committees join 413.09 us/op 440.40 us/op 0.94
altair processAttestation - setStatus - 1/2 committees join 644.19 us/op 620.63 us/op 1.04
altair processAttestation - setStatus - 2/3 committees join 692.34 us/op 714.34 us/op 0.97
altair processAttestation - setStatus - 4/5 committees join 1.0283 ms/op 1.0034 ms/op 1.02
altair processAttestation - setStatus - 100% committees join 1.1743 ms/op 1.2135 ms/op 0.97
altair processBlock - 250000 vs - 7PWei normalcase 10.062 ms/op 10.240 ms/op 0.98
altair processBlock - 250000 vs - 7PWei normalcase hashState 17.553 ms/op 17.942 ms/op 0.98
altair processBlock - 250000 vs - 7PWei worstcase 39.140 ms/op 41.606 ms/op 0.94
altair processBlock - 250000 vs - 7PWei worstcase hashState 63.067 ms/op 62.390 ms/op 1.01
phase0 processBlock - 250000 vs - 7PWei normalcase 2.4309 ms/op 2.4706 ms/op 0.98
phase0 processBlock - 250000 vs - 7PWei worstcase 30.474 ms/op 32.483 ms/op 0.94
altair processEth1Data - 250000 vs - 7PWei normalcase 489.30 us/op 635.69 us/op 0.77
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:15 12.966 us/op 19.635 us/op 0.66
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:219 75.706 us/op 93.603 us/op 0.81
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:42 23.368 us/op 32.103 us/op 0.73
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:18 15.255 us/op 22.196 us/op 0.69
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1020 226.24 us/op 194.57 us/op 1.16
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11777 1.1732 ms/op 1.8345 ms/op 0.64
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 1.6414 ms/op 2.3220 ms/op 0.71
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 1.5995 ms/op 2.2242 ms/op 0.72
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 3.2461 ms/op 4.1340 ms/op 0.79
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.6084 ms/op 2.8205 ms/op 0.92
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 6.3814 ms/op 7.3576 ms/op 0.87
Tree 40 250000 create 367.71 ms/op 431.55 ms/op 0.85
Tree 40 250000 get(125000) 208.72 ns/op 212.47 ns/op 0.98
Tree 40 250000 set(125000) 931.68 ns/op 1.7240 us/op 0.54
Tree 40 250000 toArray() 21.235 ms/op 27.023 ms/op 0.79
Tree 40 250000 iterate all - toArray() + loop 20.571 ms/op 24.356 ms/op 0.84
Tree 40 250000 iterate all - get(i) 71.036 ms/op 84.792 ms/op 0.84
MutableVector 250000 create 10.539 ms/op 14.785 ms/op 0.71
MutableVector 250000 get(125000) 6.8590 ns/op 7.0570 ns/op 0.97
MutableVector 250000 set(125000) 279.69 ns/op 516.80 ns/op 0.54
MutableVector 250000 toArray() 2.9278 ms/op 3.0889 ms/op 0.95
MutableVector 250000 iterate all - toArray() + loop 2.9563 ms/op 3.4674 ms/op 0.85
MutableVector 250000 iterate all - get(i) 1.5704 ms/op 1.8186 ms/op 0.86
Array 250000 create 2.6547 ms/op 3.0940 ms/op 0.86
Array 250000 clone - spread 1.2071 ms/op 1.6260 ms/op 0.74
Array 250000 get(125000) 0.60400 ns/op 0.83000 ns/op 0.73
Array 250000 set(125000) 0.68700 ns/op 0.91700 ns/op 0.75
Array 250000 iterate all - loop 87.785 us/op 89.398 us/op 0.98
effectiveBalanceIncrements clone Uint8Array 300000 32.039 us/op 57.068 us/op 0.56
effectiveBalanceIncrements clone MutableVector 300000 360.00 ns/op 394.00 ns/op 0.91
effectiveBalanceIncrements rw all Uint8Array 300000 179.17 us/op 191.16 us/op 0.94
effectiveBalanceIncrements rw all MutableVector 300000 88.004 ms/op 112.46 ms/op 0.78
phase0 afterProcessEpoch - 250000 vs - 7PWei 117.79 ms/op 119.53 ms/op 0.99
phase0 beforeProcessEpoch - 250000 vs - 7PWei 37.494 ms/op 43.228 ms/op 0.87
altair processEpoch - mainnet_e81889 340.29 ms/op 389.34 ms/op 0.87
mainnet_e81889 - altair beforeProcessEpoch 68.578 ms/op 76.800 ms/op 0.89
mainnet_e81889 - altair processJustificationAndFinalization 15.315 us/op 21.296 us/op 0.72
mainnet_e81889 - altair processInactivityUpdates 7.4304 ms/op 6.9439 ms/op 1.07
mainnet_e81889 - altair processRewardsAndPenalties 53.438 ms/op 55.163 ms/op 0.97
mainnet_e81889 - altair processRegistryUpdates 3.3550 us/op 4.7590 us/op 0.70
mainnet_e81889 - altair processSlashings 526.00 ns/op 873.00 ns/op 0.60
mainnet_e81889 - altair processEth1DataReset 565.00 ns/op 989.00 ns/op 0.57
mainnet_e81889 - altair processEffectiveBalanceUpdates 1.2956 ms/op 2.0109 ms/op 0.64
mainnet_e81889 - altair processSlashingsReset 4.2900 us/op 5.7410 us/op 0.75
mainnet_e81889 - altair processRandaoMixesReset 5.4810 us/op 9.8020 us/op 0.56
mainnet_e81889 - altair processHistoricalRootsUpdate 908.00 ns/op 1.9570 us/op 0.46
mainnet_e81889 - altair processParticipationFlagUpdates 3.1010 us/op 5.0420 us/op 0.62
mainnet_e81889 - altair processSyncCommitteeUpdates 1.1780 us/op 1.4940 us/op 0.79
mainnet_e81889 - altair afterProcessEpoch 134.08 ms/op 140.29 ms/op 0.96
phase0 processEpoch - mainnet_e58758 356.22 ms/op 425.49 ms/op 0.84
mainnet_e58758 - phase0 beforeProcessEpoch 151.11 ms/op 181.74 ms/op 0.83
mainnet_e58758 - phase0 processJustificationAndFinalization 23.264 us/op 24.079 us/op 0.97
mainnet_e58758 - phase0 processRewardsAndPenalties 67.543 ms/op 73.725 ms/op 0.92
mainnet_e58758 - phase0 processRegistryUpdates 16.528 us/op 20.131 us/op 0.82
mainnet_e58758 - phase0 processSlashings 760.00 ns/op 1.0620 us/op 0.72
mainnet_e58758 - phase0 processEth1DataReset 771.00 ns/op 884.00 ns/op 0.87
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.1849 ms/op 3.6006 ms/op 0.33
mainnet_e58758 - phase0 processSlashingsReset 5.7300 us/op 3.5000 us/op 1.64
mainnet_e58758 - phase0 processRandaoMixesReset 9.7410 us/op 4.9680 us/op 1.96
mainnet_e58758 - phase0 processHistoricalRootsUpdate 613.00 ns/op 833.00 ns/op 0.74
mainnet_e58758 - phase0 processParticipationRecordUpdates 5.2620 us/op 5.3940 us/op 0.98
mainnet_e58758 - phase0 afterProcessEpoch 100.87 ms/op 101.36 ms/op 1.00
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.2754 ms/op 1.2894 ms/op 0.99
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 1.4762 ms/op 1.5259 ms/op 0.97
altair processInactivityUpdates - 250000 normalcase 31.834 ms/op 25.146 ms/op 1.27
altair processInactivityUpdates - 250000 worstcase 28.102 ms/op 23.977 ms/op 1.17
phase0 processRegistryUpdates - 250000 normalcase 8.6340 us/op 11.120 us/op 0.78
phase0 processRegistryUpdates - 250000 badcase_full_deposits 362.44 us/op 383.63 us/op 0.94
phase0 processRegistryUpdates - 250000 worstcase 0.5 138.21 ms/op 165.40 ms/op 0.84
altair processRewardsAndPenalties - 250000 normalcase 63.903 ms/op 80.914 ms/op 0.79
altair processRewardsAndPenalties - 250000 worstcase 73.896 ms/op 74.366 ms/op 0.99
phase0 getAttestationDeltas - 250000 normalcase 9.1478 ms/op 9.1916 ms/op 1.00
phase0 getAttestationDeltas - 250000 worstcase 8.8568 ms/op 11.086 ms/op 0.80
phase0 processSlashings - 250000 worstcase 2.4293 ms/op 2.4875 ms/op 0.98
altair processSyncCommitteeUpdates - 250000 161.52 ms/op 169.12 ms/op 0.96
BeaconState.hashTreeRoot - No change 291.00 ns/op 367.00 ns/op 0.79
BeaconState.hashTreeRoot - 1 full validator 52.949 us/op 52.018 us/op 1.02
BeaconState.hashTreeRoot - 32 full validator 512.42 us/op 508.35 us/op 1.01
BeaconState.hashTreeRoot - 512 full validator 5.2742 ms/op 5.5139 ms/op 0.96
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 63.592 us/op 63.497 us/op 1.00
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 860.29 us/op 882.49 us/op 0.97
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 11.181 ms/op 11.409 ms/op 0.98
BeaconState.hashTreeRoot - 1 balances 48.761 us/op 47.965 us/op 1.02
BeaconState.hashTreeRoot - 32 balances 439.86 us/op 439.06 us/op 1.00
BeaconState.hashTreeRoot - 512 balances 4.0476 ms/op 4.2768 ms/op 0.95
BeaconState.hashTreeRoot - 250000 balances 74.933 ms/op 74.826 ms/op 1.00
aggregationBits - 2048 els - zipIndexesInBitList 17.460 us/op 21.594 us/op 0.81
regular array get 100000 times 33.892 us/op 35.948 us/op 0.94
wrappedArray get 100000 times 33.855 us/op 35.992 us/op 0.94
arrayWithProxy get 100000 times 15.681 ms/op 15.326 ms/op 1.02
ssz.Root.equals 237.00 ns/op 256.00 ns/op 0.93
byteArrayEquals 246.00 ns/op 258.00 ns/op 0.95
shuffle list - 16384 els 7.1940 ms/op 7.5896 ms/op 0.95
shuffle list - 250000 els 105.31 ms/op 106.62 ms/op 0.99
processSlot - 1 slots 7.8590 us/op 8.2370 us/op 0.95
processSlot - 32 slots 1.3744 ms/op 1.5065 ms/op 0.91
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 53.810 ms/op 66.345 ms/op 0.81
getCommitteeAssignments - req 1 vs - 250000 vc 2.5973 ms/op 2.8123 ms/op 0.92
getCommitteeAssignments - req 100 vs - 250000 vc 3.8720 ms/op 4.1924 ms/op 0.92
getCommitteeAssignments - req 1000 vs - 250000 vc 4.1628 ms/op 4.3252 ms/op 0.96
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 5.2100 ns/op 5.7400 ns/op 0.91
state getBlockRootAtSlot - 250000 vs - 7PWei 607.79 ns/op 665.09 ns/op 0.91
computeProposers - vc 250000 9.5231 ms/op 9.5163 ms/op 1.00
computeEpochShuffling - vc 250000 106.98 ms/op 113.83 ms/op 0.94
getNextSyncCommittee - vc 250000 165.73 ms/op 173.85 ms/op 0.95
computeSigningRoot for AttestationData 13.270 us/op 14.199 us/op 0.93
hash AttestationData serialized data then Buffer.toString(base64) 2.3923 us/op 2.3946 us/op 1.00
toHexString serialized data 1.0838 us/op 1.2598 us/op 0.86
Buffer.toString(base64) 224.11 ns/op 250.01 ns/op 0.90

by benchmarkbot/action

@wemeetagain wemeetagain merged commit 5116493 into unstable Jul 18, 2023
11 checks passed
@wemeetagain wemeetagain deleted the nflaig/ee-ignore-aborted-errors branch July 18, 2023 12:44
@wemeetagain
Copy link
Member

🎉 This PR is included in v1.10.0 🎉

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.

"ExecutionEngine went offline" log when shutting down process
2 participants