void QueryManagerBase::markOperatorFinished(const dag_node_index index) { query_exec_state_->setExecutionFinished(index); for (const dag_node_index dependent_op_index : blocking_dependents_[index]) { blocking_dependencies_[dependent_op_index].erase(index); } for (const dag_node_index dependent_op_index : output_consumers_[index]) { non_blocking_dependencies_[dependent_op_index].erase(index); } RelationalOperator *op = query_dag_->getNodePayloadMutable(index); op->updateCatalogOnCompletion(); const relation_id output_rel = op->getOutputRelationID(); for (const pair<dag_node_index, bool> &dependent_link : query_dag_->getDependents(index)) { const dag_node_index dependent_op_index = dependent_link.first; if (output_rel >= 0) { // Signal dependent operator that current operator is done feeding input blocks. query_dag_->getNodePayloadMutable(dependent_op_index)->doneFeedingInputBlocks(output_rel); } if (checkAllBlockingDependenciesMet(dependent_op_index)) { // Process the dependent operator (of the operator whose WorkOrder // was just executed) for which all the dependencies have been met. if (!fetchNormalWorkOrders(dependent_op_index) && non_blocking_dependencies_[dependent_op_index].empty() && checkNormalExecutionOver(dependent_op_index) && (!checkRebuildRequired(dependent_op_index) || initiateRebuild(dependent_op_index))) { markOperatorFinished(dependent_op_index); } } } }
void QueryManager::markOperatorFinished(const dag_node_index index) { query_exec_state_->setExecutionFinished(index); RelationalOperator *op = query_dag_->getNodePayloadMutable(index); op->updateCatalogOnCompletion(); const relation_id output_rel = op->getOutputRelationID(); for (const pair<dag_node_index, bool> &dependent_link : query_dag_->getDependents(index)) { const dag_node_index dependent_op_index = dependent_link.first; RelationalOperator *dependent_op = query_dag_->getNodePayloadMutable(dependent_op_index); // Signal dependent operator that current operator is done feeding input blocks. if (output_rel >= 0) { dependent_op->doneFeedingInputBlocks(output_rel); } if (checkAllBlockingDependenciesMet(dependent_op_index)) { dependent_op->informAllBlockingDependenciesMet(); } } }