| 221 | |
| 222 | template <typename It> |
| 223 | void StopProducingImpl(It begin, It end) { |
| 224 | for (auto it = begin; it != end; ++it) { |
| 225 | auto node = *it; |
| 226 | EVENT_ON_CURRENT_SPAN( |
| 227 | "StopProducing:" + node->label(), |
| 228 | {{"node.label", node->label()}, {"node.kind_name", node->kind_name()}}); |
| 229 | Status st = node->StopProducing(); |
| 230 | if (!st.ok()) { |
| 231 | // If an error occurs during StopProducing then we submit a task to fail. If we |
| 232 | // have already aborted then this will be ignored. This way the failing status |
| 233 | // will get communicated to finished_. |
| 234 | query_context()->async_scheduler()->AddSimpleTask( |
| 235 | [st] { return st; }, "ExecPlan::StopProducingErrorReporter"sv); |
| 236 | } |
| 237 | } |
| 238 | } |
| 239 | |
| 240 | NodeVector TopoSort() const { |
| 241 | struct Impl { |
nothing calls this directly
no test coverage detected