ChainSafe / gossamer

🕸️ Go Implementation of the Polkadot Host
https://chainsafe.github.io/gossamer
GNU Lesser General Public License v3.0
431 stars 112 forks source link

feat(dot/parachain): manage communication between different parachain subsystems (i.e., build overseer) #3418

Open kishansagathiya opened 1 year ago

kishansagathiya commented 1 year ago

Issue summary

lib/parachain has a bunch of subsystems that need to run in parallel and there are more of these subsystems that will get added.

Many of them need to communicate with each other by say calling some function or fetching some data.

It would not be a nice design to connect two parachain subsystems directly, because

It would be nicer to have say a separate subsystem to manage these communications (equivalent to polkadot's overseer subsystem). The idea is that

Because overseer would mandate each subsystem to perform some common task, we could create an interface say SubSystem that could have tasks like

Feel free to do these task as separate function or as part of the same function based on your best judgement.

I will update this issue as I go and make my understanding more clear.

Sub Issues

Other information and links

kishansagathiya commented 1 year ago

@kanishkatn @edwardmack @axaysagathiya

I would love to know if you have any alternate or additional design ideas for this.

kanishkatn commented 12 months ago

I'm taking a look at the overseer and I have some concerns.

In the Rust implementation, it supports three usecases

In the current implementation, I've noticed that there is only one channel between the overseer and a subsystem. This may lead to channels getting blocked and lead to hard to debug issues.

I suggest not to keep one single channel to send a response message from overseer to the subsystems and add a way for the subsystem to specify the receiver channel along with the message to the overseer.

I'm not sure if this has already been discussed; I'm open to suggestions as well!

kishansagathiya commented 12 months ago

I suggest not to keep one single channel to send a response message from overseer to the subsystems and add a way for the subsystem to specify the receiver channel along with the message to the overseer.

This has been discussed. We have plans for adding a response channel in messages itself. If you look at this line in a recent PR, that exactly what happens. https://github.com/ChainSafe/gossamer/pull/3535/files#diff-1798eac991bfd7b07d6a7ff83ec171d8c42e31207d805115c9f8f86a95df33c3R205

kanishkatn commented 12 months ago

This has been discussed. We have plans for adding a response channel in messages itself. If you look at this line in a recent PR, that exactly what happens. https://github.com/ChainSafe/gossamer/pull/3535/files#diff-1798eac991bfd7b07d6a7ff83ec171d8c42e31207d805115c9f8f86a95df33c3R205

Glad y'all are aware and it is being addressed!

I also see a need for these