We do have a number of walkers abstractions around (for network, images, etc.).
They may have seemed like a good abstraction at the time, but they are more trouble than anything, because they just hide the fact that resources come and go - and by the time they call the handler, the corresponding resource may have disappeared - unless the caller does enforce locking around the walker, which defeats the purpose of a simple functional abstraction.
At this point, it feels like walkers are just over-engineering with no purpose: a pattern that does not deliver any concrete value, while making issues harder to debug.
Describe the solution you'd like
Remove walkers and replace them with simple functions returning slices.
If the consumer wants a walker, they can implement it themselves very easily.
While looking at concurrency issues again (#3501) it is clear they are part of the problem.
What is the problem you're trying to solve
We do have a number of
walkers
abstractions around (for network, images, etc.).They may have seemed like a good abstraction at the time, but they are more trouble than anything, because they just hide the fact that resources come and go - and by the time they call the handler, the corresponding resource may have disappeared - unless the caller does enforce locking around the walker, which defeats the purpose of a simple functional abstraction.
At this point, it feels like
walkers
are just over-engineering with no purpose: a pattern that does not deliver any concrete value, while making issues harder to debug.Describe the solution you'd like
Remove walkers and replace them with simple functions returning slices. If the consumer wants a walker, they can implement it themselves very easily. While looking at concurrency issues again (#3501) it is clear they are part of the problem.
Additional context
No response