Closed gibson042 closed 5 months ago
There was a kref representation issue in the first slog file that has been resolved by uploading a replacement. After addressing that, build-mezzanine-db.js (to be added in a future PR) was able to ingest all 9 slog files in something like 14 hours. The mezzanine database is now fully loaded and functional, and I'm working on classifying the open promises, starting with those between v9-zoe and v43-walletFactory.
First results from the classification tool being developed: 11 of the open promises are v9-zoe subscribing to the results of done()
on adminNodes for voteCounter contract instance vats created on its behalf by v2-vatAdmin.
$ packages/SwingSet/misc-tools/classify-promises.js run-9-slog.sqlite | grep -v unknown
{"kpid":"kp21624","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp37031","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp70884","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp71126","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp71175","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp231233","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp231621","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp266281","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp1692320","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp2898305","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
{"kpid":"kp3015712","decider":"v2","subscriber":"v9","type":"voteCounterInstanceVat.done()"}
Classifications now available for all but 66 of the 414 unsettled promises in run-9, including all of those between Zoe and WalletFactory. PR coming soon.
$ packages/SwingSet/misc-tools/classify-promises.js /mnt/Downloads/run-9-slog.sqlite | grep unknown | \
jq -c '{ decider, subscriber }' | sort | uniq -c
10 {"decider":"v14","subscriber":"v28"}
1 {"decider":"v14","subscriber":"v43"}
3 {"decider":"v29","subscriber":"v46"}
23 {"decider":"v43","subscriber":"v10"}
1 {"decider":"v45","subscriber":"v48"}
1 {"decider":"v46","subscriber":"v45"}
2 {"decider":"v46","subscriber":"v48"}
1 {"decider":"v5","subscriber":"v23"}
1 {"decider":"v5","subscriber":"v48"}
23 {"decider":"v9","subscriber":"v63"}
this is good enough
What is the Problem Being Solved?
Promises are considered ephemeral; they are stored in vat heaps rather than in durable vat storage. Restarting a vat breaks any promise for which it is the decider, and causes it to forget about any promise to which it is subscribing without using a watcher. @warner has identified and enumerated 228 promises of concern in mainnet.
Description of the Design
We're tracking the status of those promises in a spreadsheet and need to predict what will happen for each when its decider or any particular subscriber is restarted. This has already been done for some deciders and subscribers.
A followup will address how to deal with problems revealed by this investigation. Related issues: #8219, #8104, #8158
Security Considerations
Breaking or dropping a promise may result in loss of availability, or possibly even crash a vat or the chain itself.
Scaling Considerations
n/a
Test Plan
TBD
Upgrade Considerations
nods vigorously