-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
feat: events: Index events by emitter actor ID #11723
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will do one more pass once the tests are up.
chain/events/filter/index.go
Outdated
} | ||
clauses = append(clauses, "("+strings.Join(subclauses, " OR ")+")") | ||
// Explicitly exclude reverted events, since at least one emitter is present and reverts cannot be considered. | ||
excludeReverted = true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What does this mean ? Why does having atleast one matching emitter with the filter lead us to exclude reverted events ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because we cannot confidently resolve the address for reverted events.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should just always exclude reverted events when prefilling (for now). The option to not exclude them only exists for testing.
I've filed an issue. #11770
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think until we've done proper work to resolve #11770 (see thread there) you'd have to include reverted even in the case of having emitters to consider. I think you need to give maximal information to someone seeking to do a look-back because they're likely trying to catch up unless they exclude reverted themselves in which case they are not doing a "tell me what happened since I last looked" catch-up but a "tell me how it is now".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The issue with that is address resolution; events database may contain reverted events without emitter actor ID. Therefore, we cannot confidently infer whether those events should be included in pre-filling or not. Does that make sense?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well, after the migration, they'll have IDs, they just won't have addresses. But you're right that we won't be able to confidently pre-fill (quickly, at least).
I'm going to have to disagree with @rvagg here. Our handling of reverted events in the current APIs is not very useful, as discussed in the linked issue.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Progressed with always excluding reverted events during backfill. Please mark as unresolved if there is anything that I have missed here. thanks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah never mind.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I left a ramble below on the different possible address resolutions mostly for informative purposes, but I'm a little confused about why we need an AddressResolver
at all. I fee like if we're doing this correctly, we should only ever be going in one direction (to ID addresses).
49522b0
to
ba2e7a1
Compare
chain/events/filter/event.go
Outdated
} | ||
|
||
type eventFilter struct { | ||
ActorResolver |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any reason for this to be public?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, why add this field on the event filter itself?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unexported ActorResolver
.
why add this field on the event filter itself?
I think either event filter keeps a reference to manager to access the resolver or takes the resolver reference directly. The latter seems like a more concise reference for what it is used today.
chain/events/filter/index.go
Outdated
} | ||
clauses = append(clauses, "("+strings.Join(subclauses, " OR ")+")") | ||
// Explicitly exclude reverted events, since at least one emitter is present and reverts cannot be considered. | ||
excludeReverted = true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should just always exclude reverted events when prefilling (for now). The option to not exclude them only exists for testing.
I've filed an issue. #11770
531f207
to
d7e57ae
Compare
The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * #11723 (comment)
The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * #11723 (comment)
The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * #11723 (comment)
d7e57ae
to
fc44955
Compare
fc44955
to
b4c02f7
Compare
This seems pretty close, albeit a scary migration and big change. With a few of my diff suggestions applied and rebased to current {"level":"info","ts":"2024-04-30T14:59:54.325+1000","logger":"filter","caller":"filter/index.go:588","msg":"Upgrading event index from version 3 to version 4"}
{"level":"info","ts":"2024-04-30T14:59:54.325+1000","logger":"filter","caller":"filter/index.go:370","msg":"Successfully migrated event index from version 3 to version 4 in 31.81µs"}
{"level":"info","ts":"2024-04-30T14:59:54.325+1000","logger":"filter","caller":"filter/index.go:598","msg":"Upgrading event index from version 4 to version 5"}
{"level":"info","ts":"2024-04-30T14:59:59.709+1000","logger":"filter","caller":"filter/index.go:520","msg":"Performing DB vacuum and wal checkpointing to free up space after the migration"}
{"level":"info","ts":"2024-04-30T15:00:07.075+1000","logger":"filter","caller":"filter/index.go:512","msg":"Successfully migrated event index from version 4 to version 5 in 12.749369829s"} So 👍 that the migration was successful at least. I then ran a couple of queries before and after to see what the difference is: Just built-in actor events:
This one produced no difference, so that's good! They're already actor IDs anyway. Same epoch span, but all events:
This one has differences, but formatting JSON and diffing just shows the addresses changed.
However, using the more common
{"jsonrpc":"2.0","id":1,"error":{"code":1,"message":"state get actor: actor not found"}} Logs have: {"level":"warn","ts":"2024-04-30T15:21:51.735+1000","logger":"rpc","caller":"[email protected]/handler.go:444","msg":"error in RPC call to 'Filecoin.EthGetLogs': state get actor:\n github.com/filecoin-project/lotus/node/impl/full.ethFilterResultFromEvents\n /home/rvagg/go/src/github.com/filecoin-project/lotus/node/impl/full/eth_events.go:123\n - actor not found"} Extra debugging shows it tripping up on this event: {"level":"warn","ts":"2024-04-30T15:34:02.894+1000","logger":"fullnode","caller":"full/eth_events.go:124","msg":"failed to get actor","actor":"t084452","event":{"Entries":[{"Flags":3,"Key":"t1","Codec":85,"Value":"j6pwh4ZxzNIS0gdxt5XFCvj9P/bPJ/S95X5dTeCutnM="},{"Flags":3,"Key":"d","Codec":85,"Value":"<snipped>"}],"Emitter":84452,"EventIdx":1,"Reverted":false,"Height":1441489,"TipSetKey":[{"/":"bafy2bzacedlxximvilreromjdsbqdd5irj7j6plhu57rm64xexkhusptdorj2"},{"/":"bafy2bzacedi3vqjodd63k7cycvvnnjvmcdkkcfvmhn67bus7szwc4a4x42uda"}],"MsgIdx":1,"MsgCid":{"/":"bafy2bzacebl5mfp7ekw56xdetv7vscukqnbhos5t7jbg3wmtb3z4nmvstnkfw"}},"error":"actor not found"} Which isn't a reverted event, but apparently not found in state. I'll investigate further after I fix an error I found with my v4 migration! |
OK, here's the problem: The actor exists at the current head: curl -s -X POST -H "Content-Type: application/json" --data '{"method":"Filecoin.StateGetActor","params":["t084452",[]],"id":1,"jsonrpc":"2.0"}' http://localhost:1235/rpc/v1 {"jsonrpc":"2.0","result":{"Code":{"/":"bafk2bzacec5ibmbtzuzjgwjmksm2n6zfq3gkicxqywwu7tsscqgdzajpfctxk"},"Head":{"/":"bafy2bzacebezeusg7k3z4g2j2cl3uvx5wvydgvbn7f2p5hzgu3mmvfmn4ldqw"},"Nonce":0,"Balance":"0","Address":"t410fczebosgrdb3oapy37zzmwpli7o5tjdvi7yfv2dy"},"id":1} But it doesn't exist at the tipset of the event: curl -s -X POST -H "Content-Type: application/json" --data '{"method":"Filecoin.StateGetActor","params":["t084452",[{"/":"bafy2bzacedlxximvilreromjdsbqdd5irj7j6plhu57rm64xexkhusptdorj2"},{"/":"bafy2bzacedi3vqjodd63k7cycvvnnjvmcdkkcfvmhn67bus7szwc4a4x42uda"}]],"id":1,"jsonrpc":"2.0"}' http://localhost:1235/rpc/v1 {"jsonrpc":"2.0","id":1,"error":{"code":1,"message":"actor not found"}} But if we fast-forward by one epoch, it does exist: curl -s -X POST -H "Content-Type: application/json" --data '{"method":"Filecoin.StateGetActor","params":["t084452",[{"/":"bafy2bzaceckcfvpj5uxarwoky37uinq2kcbxuijliisloxvopf2xc75mqvvfc"},{"/":"bafy2bzacebjhy3nw3abeasz2symc4y4ze4w76tdgpl6b4e23j6unhr2qmqwym"},{"/":"bafy2bzaceavtrohq4y7pprr3m4ecjxauo66j3xxfcq6harwpg3qxus2qbxepg"},{"/":"bafy2bzacec27r2slvaysjzqac4k6oy5yesqogpqgoncvl3phrfkdkcl6uqu5g"}]],"id":1,"jsonrpc":"2.0"}' http://localhost:1235/rpc/v1 {"jsonrpc":"2.0","result":{"Code":{"/":"bafk2bzacec5ibmbtzuzjgwjmksm2n6zfq3gkicxqywwu7tsscqgdzajpfctxk"},"Head":{"/":"bafy2bzacedyonsvsf6f3ufayfdaaiepvl23dt2c5btfbmhlqlcpepetqavirk"},"Nonce":0,"Balance":"0","Address":"t410fczebosgrdb3oapy37zzmwpli7o5tjdvi7yfv2dy"},"id":1} Deferred execution yay. I'm not sure the best way to deal with this. Perhaps we could:
|
Changes the chain event indexing mechanism to index events solely by their emitter actor ID, instead of their address. This change means: 1) index can accommodate non-EVM actors, and 2) improved performance and efficiency due to reduced number of resolutions and storage footprint. The work introduces a caching mechanism to momentarily cache the resolutions to/fro actor ID and address. Further experimentation is needed to tune the cache for optimal performance. For now, the introduction of a unified cache reduces lookup time and memory allocation foot print compared to the previous implementation where ephemeral caches were being instantiated per event filter. Fixes #1159
9abe818
to
994fe50
Compare
I just found this, which will need to be included in this PR: lotus/cmd/lotus-shed/indexes.go Line 110 in 6bbe090
|
OK, with #11953 applied, the However, it takes 1.16 seconds to get 10198 events. Without this PR and needing to do the address translation on request, the same call for 10198 events takes 0.56s seconds to fetch. So we've doubled the time due to the need to load state and map addresses on output. |
That's the time measurement on a warm instance with caches populated? |
* Fixing dead links (#11907) * ci: ci: create gh workflow that updates sorted pr checks (#11861) * ci: create gh workflow that updates sorted pr checks * ci: use grouped_by_result template for pr checks sticky comment * chore: apply pr review suggestion * Avoid cfg lookup on chain remove since unenabled splitstore delete is noop anyway (#11916) Co-authored-by: zenground0 <[email protected]> * Fix mismatched method names in comments (#11913) Signed-off-by: forcedebug <[email protected]> * release: v1.26.3 (#11908) (#11915) (#11922) * deps: update dependencies to address migration memory bloat to address memory concerns during a heavy migration Ref: filecoin-project/go-state-types#260 Ref: whyrusleeping/cbor-gen#96 Ref: filecoin-project/go-amt-ipld#90 * release: prep v1.26.3 patch Prep v1.26.3 patch release: - Update changelog, version and make gen + make docsgen-cli * deps: update cbor-gen to tagged version deps: update cbor-gen to tagged version * deps: update go-state-types to tagged version deps: update go-state-types to tagged version v0.13.2 * chore: deps: update go-state-types to v0.13.3 Fixes a panic when we have fewer than 1k proposals. --------- Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> * Refactor `LookupID*` APIs in `StateManager` and `StateTree` The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * #11723 (comment) * Add v13 support to invariants-checker (#11931) Add v13 support to invariants-checker * chore: docs: nv-skeleton documentation (#11065) * nv-skeleton documentation Add a tutorial for how one can create a nv-skeleton in Lotus * Add footnote for `Add migration` step Add footnote for `Add migration` step * Indent migration-code Indent migration-code to make it show properly as a footnote. * Add ref-fvm and filecoin-ffi checklist Add ref-fvm and filecoin-ffi checklist * Add Filecoin-FFI steps Add Filecoin-FFI steps * Add step to params_butterfly.go Add step to params_butterfly.go * Fix typo Fix typo * Add links to reference PRs Add links to reference PRs * Update ref-fvm list Update ref-fvm list * feat: curio: add StorageInit api (#11918) * feat: add StorageInit api * remove unused variables * fix gen check * feat: curio: simpler reservation release logic (#11900) * simpler release logic * oops, plus simpler * simpler * fix NewLine (#11893) * fix(events): check for sync-in-progress (#11932) * feat(events): adjust indexes in event index db to match query patterns Introduces a v4 migration that just adjusts indexes. Copies some improvements from #11723 Closes: #11909 * fix(pipeline): should return if error occurred when get network version (#11902) * fix(events): correct log msg for v4 events index db migration * chore: remove duplicate words in strings and comments * fix(events): register events index db migration v4 * fix: curio seal: Failed commit retry strategy (#11870) * ffi: improved-error-handling * curio seal: Failed commit retry strategy * use master ffi * mod tidy * fix: curio: Update pgx imports, fix db_storage alloc * feat: curioweb: Improve task_history indexes (#11911) * mod tidy * Event index should be unique for tipsets (#11952) * event index should be unique for tipsets * fix formatting * migrate to version 5 * chore: bump build version in master (#11946) * Bump version Bump version in master branch in preperation for cutting v1.27.0-rc1 * chore: bump build-version chore: bump build-version * feat: curioweb: Show piece info on the sector page (#11955) * curio: feat: break trees task into TreeD(prefetch) and TreeRC (#11895) * break trees task * fix TreeD reservation * fix nil pointer err * apply suggestions * fix allocate file types * fix dbIndex inserts * set resource, move release func * refactor func(), update memory * remove extra release --------- Signed-off-by: forcedebug <[email protected]> Co-authored-by: parthshah1 <[email protected]> Co-authored-by: Piotr Galar <[email protected]> Co-authored-by: ZenGround0 <[email protected]> Co-authored-by: zenground0 <[email protected]> Co-authored-by: forcedebug <[email protected]> Co-authored-by: Jiaying Wang <[email protected]> Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> Co-authored-by: Masih H. Derkani <[email protected]> Co-authored-by: Lee <[email protected]> Co-authored-by: Andrew Jackson (Ajax) <[email protected]> Co-authored-by: beck <[email protected]> Co-authored-by: 0x5459 <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Aarsh Shah <[email protected]>
The issue is likely that we're constantly re-loading the init actor and address map. If we could cache that (even within a single trace), we'd get much better performance (#11723 (comment)). Although this is something we should be able to look at with a pprof profile. |
* fix: curio: Update pgx imports, fix db_storage alloc * feat: curioweb: Improve task_history indexes (#11911) * 1 * relatable * add and delete layer * chore: curio: merge master (#11956) * Fixing dead links (#11907) * ci: ci: create gh workflow that updates sorted pr checks (#11861) * ci: create gh workflow that updates sorted pr checks * ci: use grouped_by_result template for pr checks sticky comment * chore: apply pr review suggestion * Avoid cfg lookup on chain remove since unenabled splitstore delete is noop anyway (#11916) Co-authored-by: zenground0 <[email protected]> * Fix mismatched method names in comments (#11913) Signed-off-by: forcedebug <[email protected]> * release: v1.26.3 (#11908) (#11915) (#11922) * deps: update dependencies to address migration memory bloat to address memory concerns during a heavy migration Ref: filecoin-project/go-state-types#260 Ref: whyrusleeping/cbor-gen#96 Ref: filecoin-project/go-amt-ipld#90 * release: prep v1.26.3 patch Prep v1.26.3 patch release: - Update changelog, version and make gen + make docsgen-cli * deps: update cbor-gen to tagged version deps: update cbor-gen to tagged version * deps: update go-state-types to tagged version deps: update go-state-types to tagged version v0.13.2 * chore: deps: update go-state-types to v0.13.3 Fixes a panic when we have fewer than 1k proposals. --------- Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> * Refactor `LookupID*` APIs in `StateManager` and `StateTree` The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * #11723 (comment) * Add v13 support to invariants-checker (#11931) Add v13 support to invariants-checker * chore: docs: nv-skeleton documentation (#11065) * nv-skeleton documentation Add a tutorial for how one can create a nv-skeleton in Lotus * Add footnote for `Add migration` step Add footnote for `Add migration` step * Indent migration-code Indent migration-code to make it show properly as a footnote. * Add ref-fvm and filecoin-ffi checklist Add ref-fvm and filecoin-ffi checklist * Add Filecoin-FFI steps Add Filecoin-FFI steps * Add step to params_butterfly.go Add step to params_butterfly.go * Fix typo Fix typo * Add links to reference PRs Add links to reference PRs * Update ref-fvm list Update ref-fvm list * feat: curio: add StorageInit api (#11918) * feat: add StorageInit api * remove unused variables * fix gen check * feat: curio: simpler reservation release logic (#11900) * simpler release logic * oops, plus simpler * simpler * fix NewLine (#11893) * fix(events): check for sync-in-progress (#11932) * feat(events): adjust indexes in event index db to match query patterns Introduces a v4 migration that just adjusts indexes. Copies some improvements from #11723 Closes: #11909 * fix(pipeline): should return if error occurred when get network version (#11902) * fix(events): correct log msg for v4 events index db migration * chore: remove duplicate words in strings and comments * fix(events): register events index db migration v4 * fix: curio seal: Failed commit retry strategy (#11870) * ffi: improved-error-handling * curio seal: Failed commit retry strategy * use master ffi * mod tidy * fix: curio: Update pgx imports, fix db_storage alloc * feat: curioweb: Improve task_history indexes (#11911) * mod tidy * Event index should be unique for tipsets (#11952) * event index should be unique for tipsets * fix formatting * migrate to version 5 * chore: bump build version in master (#11946) * Bump version Bump version in master branch in preperation for cutting v1.27.0-rc1 * chore: bump build-version chore: bump build-version * feat: curioweb: Show piece info on the sector page (#11955) * curio: feat: break trees task into TreeD(prefetch) and TreeRC (#11895) * break trees task * fix TreeD reservation * fix nil pointer err * apply suggestions * fix allocate file types * fix dbIndex inserts * set resource, move release func * refactor func(), update memory * remove extra release --------- Signed-off-by: forcedebug <[email protected]> Co-authored-by: parthshah1 <[email protected]> Co-authored-by: Piotr Galar <[email protected]> Co-authored-by: ZenGround0 <[email protected]> Co-authored-by: zenground0 <[email protected]> Co-authored-by: forcedebug <[email protected]> Co-authored-by: Jiaying Wang <[email protected]> Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> Co-authored-by: Masih H. Derkani <[email protected]> Co-authored-by: Lee <[email protected]> Co-authored-by: Andrew Jackson (Ajax) <[email protected]> Co-authored-by: beck <[email protected]> Co-authored-by: 0x5459 <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Aarsh Shah <[email protected]> * linter oops * gen cleanup * fix * named returns are confusing --------- Signed-off-by: forcedebug <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: LexLuthr <[email protected]> Co-authored-by: parthshah1 <[email protected]> Co-authored-by: Piotr Galar <[email protected]> Co-authored-by: ZenGround0 <[email protected]> Co-authored-by: zenground0 <[email protected]> Co-authored-by: forcedebug <[email protected]> Co-authored-by: Jiaying Wang <[email protected]> Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> Co-authored-by: Masih H. Derkani <[email protected]> Co-authored-by: Lee <[email protected]> Co-authored-by: beck <[email protected]> Co-authored-by: 0x5459 <[email protected]> Co-authored-by: Aarsh Shah <[email protected]>
* Fixing dead links (#11907) * ci: ci: create gh workflow that updates sorted pr checks (#11861) * ci: create gh workflow that updates sorted pr checks * ci: use grouped_by_result template for pr checks sticky comment * chore: apply pr review suggestion * Avoid cfg lookup on chain remove since unenabled splitstore delete is noop anyway (#11916) Co-authored-by: zenground0 <[email protected]> * Fix mismatched method names in comments (#11913) Signed-off-by: forcedebug <[email protected]> * release: v1.26.3 (#11908) (#11915) (#11922) * deps: update dependencies to address migration memory bloat to address memory concerns during a heavy migration Ref: filecoin-project/go-state-types#260 Ref: whyrusleeping/cbor-gen#96 Ref: filecoin-project/go-amt-ipld#90 * release: prep v1.26.3 patch Prep v1.26.3 patch release: - Update changelog, version and make gen + make docsgen-cli * deps: update cbor-gen to tagged version deps: update cbor-gen to tagged version * deps: update go-state-types to tagged version deps: update go-state-types to tagged version v0.13.2 * chore: deps: update go-state-types to v0.13.3 Fixes a panic when we have fewer than 1k proposals. --------- Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> * Refactor `LookupID*` APIs in `StateManager` and `StateTree` The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * filecoin-project/lotus#11723 (comment) * Add v13 support to invariants-checker (#11931) Add v13 support to invariants-checker * chore: docs: nv-skeleton documentation (#11065) * nv-skeleton documentation Add a tutorial for how one can create a nv-skeleton in Lotus * Add footnote for `Add migration` step Add footnote for `Add migration` step * Indent migration-code Indent migration-code to make it show properly as a footnote. * Add ref-fvm and filecoin-ffi checklist Add ref-fvm and filecoin-ffi checklist * Add Filecoin-FFI steps Add Filecoin-FFI steps * Add step to params_butterfly.go Add step to params_butterfly.go * Fix typo Fix typo * Add links to reference PRs Add links to reference PRs * Update ref-fvm list Update ref-fvm list * feat: curio: add StorageInit api (#11918) * feat: add StorageInit api * remove unused variables * fix gen check * feat: curio: simpler reservation release logic (#11900) * simpler release logic * oops, plus simpler * simpler * fix NewLine (#11893) * fix(events): check for sync-in-progress (#11932) * feat(events): adjust indexes in event index db to match query patterns Introduces a v4 migration that just adjusts indexes. Copies some improvements from filecoin-project/lotus#11723 Closes: filecoin-project/lotus#11909 * fix(pipeline): should return if error occurred when get network version (#11902) * fix(events): correct log msg for v4 events index db migration * chore: remove duplicate words in strings and comments * fix(events): register events index db migration v4 * fix: curio seal: Failed commit retry strategy (#11870) * ffi: improved-error-handling * curio seal: Failed commit retry strategy * use master ffi * mod tidy * fix: curio: Update pgx imports, fix db_storage alloc * feat: curioweb: Improve task_history indexes (#11911) * mod tidy * Event index should be unique for tipsets (#11952) * event index should be unique for tipsets * fix formatting * migrate to version 5 * chore: bump build version in master (#11946) * Bump version Bump version in master branch in preperation for cutting v1.27.0-rc1 * chore: bump build-version chore: bump build-version * feat: curioweb: Show piece info on the sector page (#11955) * curio: feat: break trees task into TreeD(prefetch) and TreeRC (#11895) * break trees task * fix TreeD reservation * fix nil pointer err * apply suggestions * fix allocate file types * fix dbIndex inserts * set resource, move release func * refactor func(), update memory * remove extra release --------- Signed-off-by: forcedebug <[email protected]> Co-authored-by: parthshah1 <[email protected]> Co-authored-by: Piotr Galar <[email protected]> Co-authored-by: ZenGround0 <[email protected]> Co-authored-by: zenground0 <[email protected]> Co-authored-by: forcedebug <[email protected]> Co-authored-by: Jiaying Wang <[email protected]> Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> Co-authored-by: Masih H. Derkani <[email protected]> Co-authored-by: Lee <[email protected]> Co-authored-by: Andrew Jackson (Ajax) <[email protected]> Co-authored-by: beck <[email protected]> Co-authored-by: 0x5459 <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Aarsh Shah <[email protected]>
* Fixing dead links (#11907) * ci: ci: create gh workflow that updates sorted pr checks (#11861) * ci: create gh workflow that updates sorted pr checks * ci: use grouped_by_result template for pr checks sticky comment * chore: apply pr review suggestion * Avoid cfg lookup on chain remove since unenabled splitstore delete is noop anyway (#11916) Co-authored-by: zenground0 <[email protected]> * Fix mismatched method names in comments (#11913) Signed-off-by: forcedebug <[email protected]> * release: v1.26.3 (#11908) (#11915) (#11922) * deps: update dependencies to address migration memory bloat to address memory concerns during a heavy migration Ref: filecoin-project/go-state-types#260 Ref: whyrusleeping/cbor-gen#96 Ref: filecoin-project/go-amt-ipld#90 * release: prep v1.26.3 patch Prep v1.26.3 patch release: - Update changelog, version and make gen + make docsgen-cli * deps: update cbor-gen to tagged version deps: update cbor-gen to tagged version * deps: update go-state-types to tagged version deps: update go-state-types to tagged version v0.13.2 * chore: deps: update go-state-types to v0.13.3 Fixes a panic when we have fewer than 1k proposals. --------- Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> * Refactor `LookupID*` APIs in `StateManager` and `StateTree` The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * filecoin-project/lotus#11723 (comment) * Add v13 support to invariants-checker (#11931) Add v13 support to invariants-checker * chore: docs: nv-skeleton documentation (#11065) * nv-skeleton documentation Add a tutorial for how one can create a nv-skeleton in Lotus * Add footnote for `Add migration` step Add footnote for `Add migration` step * Indent migration-code Indent migration-code to make it show properly as a footnote. * Add ref-fvm and filecoin-ffi checklist Add ref-fvm and filecoin-ffi checklist * Add Filecoin-FFI steps Add Filecoin-FFI steps * Add step to params_butterfly.go Add step to params_butterfly.go * Fix typo Fix typo * Add links to reference PRs Add links to reference PRs * Update ref-fvm list Update ref-fvm list * feat: curio: add StorageInit api (#11918) * feat: add StorageInit api * remove unused variables * fix gen check * feat: curio: simpler reservation release logic (#11900) * simpler release logic * oops, plus simpler * simpler * fix NewLine (#11893) * fix(events): check for sync-in-progress (#11932) * feat(events): adjust indexes in event index db to match query patterns Introduces a v4 migration that just adjusts indexes. Copies some improvements from filecoin-project/lotus#11723 Closes: filecoin-project/lotus#11909 * fix(pipeline): should return if error occurred when get network version (#11902) * fix(events): correct log msg for v4 events index db migration * chore: remove duplicate words in strings and comments * fix(events): register events index db migration v4 * fix: curio seal: Failed commit retry strategy (#11870) * ffi: improved-error-handling * curio seal: Failed commit retry strategy * use master ffi * mod tidy * fix: curio: Update pgx imports, fix db_storage alloc * feat: curioweb: Improve task_history indexes (#11911) * mod tidy * Event index should be unique for tipsets (#11952) * event index should be unique for tipsets * fix formatting * migrate to version 5 * chore: bump build version in master (#11946) * Bump version Bump version in master branch in preperation for cutting v1.27.0-rc1 * chore: bump build-version chore: bump build-version * feat: curioweb: Show piece info on the sector page (#11955) * curio: feat: break trees task into TreeD(prefetch) and TreeRC (#11895) * break trees task * fix TreeD reservation * fix nil pointer err * apply suggestions * fix allocate file types * fix dbIndex inserts * set resource, move release func * refactor func(), update memory * remove extra release --------- Signed-off-by: forcedebug <[email protected]> Co-authored-by: parthshah1 <[email protected]> Co-authored-by: Piotr Galar <[email protected]> Co-authored-by: ZenGround0 <[email protected]> Co-authored-by: zenground0 <[email protected]> Co-authored-by: forcedebug <[email protected]> Co-authored-by: Jiaying Wang <[email protected]> Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> Co-authored-by: Masih H. Derkani <[email protected]> Co-authored-by: Lee <[email protected]> Co-authored-by: Andrew Jackson (Ajax) <[email protected]> Co-authored-by: beck <[email protected]> Co-authored-by: 0x5459 <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Aarsh Shah <[email protected]>
* fix: curio: Update pgx imports, fix db_storage alloc * feat: curioweb: Improve task_history indexes (#11911) * 1 * relatable * add and delete layer * chore: curio: merge master (#11956) * Fixing dead links (#11907) * ci: ci: create gh workflow that updates sorted pr checks (#11861) * ci: create gh workflow that updates sorted pr checks * ci: use grouped_by_result template for pr checks sticky comment * chore: apply pr review suggestion * Avoid cfg lookup on chain remove since unenabled splitstore delete is noop anyway (#11916) Co-authored-by: zenground0 <[email protected]> * Fix mismatched method names in comments (#11913) Signed-off-by: forcedebug <[email protected]> * release: v1.26.3 (#11908) (#11915) (#11922) * deps: update dependencies to address migration memory bloat to address memory concerns during a heavy migration Ref: filecoin-project/go-state-types#260 Ref: whyrusleeping/cbor-gen#96 Ref: filecoin-project/go-amt-ipld#90 * release: prep v1.26.3 patch Prep v1.26.3 patch release: - Update changelog, version and make gen + make docsgen-cli * deps: update cbor-gen to tagged version deps: update cbor-gen to tagged version * deps: update go-state-types to tagged version deps: update go-state-types to tagged version v0.13.2 * chore: deps: update go-state-types to v0.13.3 Fixes a panic when we have fewer than 1k proposals. --------- Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> * Refactor `LookupID*` APIs in `StateManager` and `StateTree` The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * filecoin-project/lotus#11723 (comment) * Add v13 support to invariants-checker (#11931) Add v13 support to invariants-checker * chore: docs: nv-skeleton documentation (#11065) * nv-skeleton documentation Add a tutorial for how one can create a nv-skeleton in Lotus * Add footnote for `Add migration` step Add footnote for `Add migration` step * Indent migration-code Indent migration-code to make it show properly as a footnote. * Add ref-fvm and filecoin-ffi checklist Add ref-fvm and filecoin-ffi checklist * Add Filecoin-FFI steps Add Filecoin-FFI steps * Add step to params_butterfly.go Add step to params_butterfly.go * Fix typo Fix typo * Add links to reference PRs Add links to reference PRs * Update ref-fvm list Update ref-fvm list * feat: curio: add StorageInit api (#11918) * feat: add StorageInit api * remove unused variables * fix gen check * feat: curio: simpler reservation release logic (#11900) * simpler release logic * oops, plus simpler * simpler * fix NewLine (#11893) * fix(events): check for sync-in-progress (#11932) * feat(events): adjust indexes in event index db to match query patterns Introduces a v4 migration that just adjusts indexes. Copies some improvements from filecoin-project/lotus#11723 Closes: filecoin-project/lotus#11909 * fix(pipeline): should return if error occurred when get network version (#11902) * fix(events): correct log msg for v4 events index db migration * chore: remove duplicate words in strings and comments * fix(events): register events index db migration v4 * fix: curio seal: Failed commit retry strategy (#11870) * ffi: improved-error-handling * curio seal: Failed commit retry strategy * use master ffi * mod tidy * fix: curio: Update pgx imports, fix db_storage alloc * feat: curioweb: Improve task_history indexes (#11911) * mod tidy * Event index should be unique for tipsets (#11952) * event index should be unique for tipsets * fix formatting * migrate to version 5 * chore: bump build version in master (#11946) * Bump version Bump version in master branch in preperation for cutting v1.27.0-rc1 * chore: bump build-version chore: bump build-version * feat: curioweb: Show piece info on the sector page (#11955) * curio: feat: break trees task into TreeD(prefetch) and TreeRC (#11895) * break trees task * fix TreeD reservation * fix nil pointer err * apply suggestions * fix allocate file types * fix dbIndex inserts * set resource, move release func * refactor func(), update memory * remove extra release --------- Signed-off-by: forcedebug <[email protected]> Co-authored-by: parthshah1 <[email protected]> Co-authored-by: Piotr Galar <[email protected]> Co-authored-by: ZenGround0 <[email protected]> Co-authored-by: zenground0 <[email protected]> Co-authored-by: forcedebug <[email protected]> Co-authored-by: Jiaying Wang <[email protected]> Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> Co-authored-by: Masih H. Derkani <[email protected]> Co-authored-by: Lee <[email protected]> Co-authored-by: Andrew Jackson (Ajax) <[email protected]> Co-authored-by: beck <[email protected]> Co-authored-by: 0x5459 <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Aarsh Shah <[email protected]> * linter oops * gen cleanup * fix * named returns are confusing --------- Signed-off-by: forcedebug <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: LexLuthr <[email protected]> Co-authored-by: parthshah1 <[email protected]> Co-authored-by: Piotr Galar <[email protected]> Co-authored-by: ZenGround0 <[email protected]> Co-authored-by: zenground0 <[email protected]> Co-authored-by: forcedebug <[email protected]> Co-authored-by: Jiaying Wang <[email protected]> Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> Co-authored-by: Masih H. Derkani <[email protected]> Co-authored-by: Lee <[email protected]> Co-authored-by: beck <[email protected]> Co-authored-by: 0x5459 <[email protected]> Co-authored-by: Aarsh Shah <[email protected]>
* Fixing dead links (#11907) * ci: ci: create gh workflow that updates sorted pr checks (#11861) * ci: create gh workflow that updates sorted pr checks * ci: use grouped_by_result template for pr checks sticky comment * chore: apply pr review suggestion * Avoid cfg lookup on chain remove since unenabled splitstore delete is noop anyway (#11916) Co-authored-by: zenground0 <[email protected]> * Fix mismatched method names in comments (#11913) Signed-off-by: forcedebug <[email protected]> * release: v1.26.3 (#11908) (#11915) (#11922) * deps: update dependencies to address migration memory bloat to address memory concerns during a heavy migration Ref: filecoin-project/go-state-types#260 Ref: whyrusleeping/cbor-gen#96 Ref: filecoin-project/go-amt-ipld#90 * release: prep v1.26.3 patch Prep v1.26.3 patch release: - Update changelog, version and make gen + make docsgen-cli * deps: update cbor-gen to tagged version deps: update cbor-gen to tagged version * deps: update go-state-types to tagged version deps: update go-state-types to tagged version v0.13.2 * chore: deps: update go-state-types to v0.13.3 Fixes a panic when we have fewer than 1k proposals. --------- Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> * Refactor `LookupID*` APIs in `StateManager` and `StateTree` The naming of `LookupID` can cause confusion when resolving actor IDs vs ID addresses. To avoid this: * Refactor `StateTree` `LookupID` to `LookupIDAddress`, because it returns ID address. * Refactor `StateManager` `LookupID` to `LookupIDAddress` because it also returns ID address via a chain call to `StateTree`. * Introduce a new API `StateManager` dedicated to resolving address to actor ID, called `LookupID` which returns `abi.ActorID`. For context, see: * filecoin-project/lotus#11723 (comment) * Add v13 support to invariants-checker (#11931) Add v13 support to invariants-checker * chore: docs: nv-skeleton documentation (#11065) * nv-skeleton documentation Add a tutorial for how one can create a nv-skeleton in Lotus * Add footnote for `Add migration` step Add footnote for `Add migration` step * Indent migration-code Indent migration-code to make it show properly as a footnote. * Add ref-fvm and filecoin-ffi checklist Add ref-fvm and filecoin-ffi checklist * Add Filecoin-FFI steps Add Filecoin-FFI steps * Add step to params_butterfly.go Add step to params_butterfly.go * Fix typo Fix typo * Add links to reference PRs Add links to reference PRs * Update ref-fvm list Update ref-fvm list * feat: curio: add StorageInit api (#11918) * feat: add StorageInit api * remove unused variables * fix gen check * feat: curio: simpler reservation release logic (#11900) * simpler release logic * oops, plus simpler * simpler * fix NewLine (#11893) * fix(events): check for sync-in-progress (#11932) * feat(events): adjust indexes in event index db to match query patterns Introduces a v4 migration that just adjusts indexes. Copies some improvements from filecoin-project/lotus#11723 Closes: filecoin-project/lotus#11909 * fix(pipeline): should return if error occurred when get network version (#11902) * fix(events): correct log msg for v4 events index db migration * chore: remove duplicate words in strings and comments * fix(events): register events index db migration v4 * fix: curio seal: Failed commit retry strategy (#11870) * ffi: improved-error-handling * curio seal: Failed commit retry strategy * use master ffi * mod tidy * fix: curio: Update pgx imports, fix db_storage alloc * feat: curioweb: Improve task_history indexes (#11911) * mod tidy * Event index should be unique for tipsets (#11952) * event index should be unique for tipsets * fix formatting * migrate to version 5 * chore: bump build version in master (#11946) * Bump version Bump version in master branch in preperation for cutting v1.27.0-rc1 * chore: bump build-version chore: bump build-version * feat: curioweb: Show piece info on the sector page (#11955) * curio: feat: break trees task into TreeD(prefetch) and TreeRC (#11895) * break trees task * fix TreeD reservation * fix nil pointer err * apply suggestions * fix allocate file types * fix dbIndex inserts * set resource, move release func * refactor func(), update memory * remove extra release --------- Signed-off-by: forcedebug <[email protected]> Co-authored-by: parthshah1 <[email protected]> Co-authored-by: Piotr Galar <[email protected]> Co-authored-by: ZenGround0 <[email protected]> Co-authored-by: zenground0 <[email protected]> Co-authored-by: forcedebug <[email protected]> Co-authored-by: Jiaying Wang <[email protected]> Co-authored-by: Phi-rjan <[email protected]> Co-authored-by: Rod Vagg <[email protected]> Co-authored-by: Steven Allen <[email protected]> Co-authored-by: Masih H. Derkani <[email protected]> Co-authored-by: Lee <[email protected]> Co-authored-by: Andrew Jackson (Ajax) <[email protected]> Co-authored-by: beck <[email protected]> Co-authored-by: 0x5459 <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Łukasz Magiera <[email protected]> Co-authored-by: Aarsh Shah <[email protected]>
Time to either close this PR and salvage what's useful or get it landed. @rvagg is this PR still relevant/worth brining up-to-date or shall we close it off? |
I've raised in #12421 that we may want to consider pulling it into there. I still don't know. After tinkering with this stuff for months now I don't really feel any clearer on whether this change is worth it for anything other than saving bytes on disk! It just seems like we're shifting the complexity around whichever way we do it. Maybe @Stebalien can enlighten us before #12421 lands because doing it when while replacing the indexer entirely would be a good time to make it happen so it doesn't need yet another migration. |
Reopen if needed, or salvage what you will from this PR. |
Related Issues
Fixes #11594
Proposed Changes
Changes the chain event indexing mechanism to index events
solely by their emitter actor ID, instead of their address. This change
means: 1) index can accommodate non-EVM actors, and 2) improved
performance and efficiency due to reduced number of resolutions and
storage footprint.
Additional Info
The work introduces a caching mechanism to momentarily cache the
resolutions to/fro actor ID and address. Further experimentation is
needed to tune the cache for optimal performance. For now, the
introduction of a unified cache reduces lookup time and memory
allocation foot print compared to the previous implementation where
ephemeral caches were being instantiated per event filter.
Checklist
Before you mark the PR ready for review, please make sure that:
<PR type>: <area>: <change being made>
fix: mempool: Introduce a cache for valid signatures
PR type
: fix, feat, build, chore, ci, docs, perf, refactor, revert, style, testarea
, e.g. api, chain, state, market, mempool, multisig, networking, paych, proving, sealing, wallet, deps