/**
* Copyright (C) 2014-2016 LinkedIn Corp. (pinot-core@linkedin.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.linkedin.pinot.core.plan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.linkedin.pinot.common.utils.DataTable;
import com.linkedin.pinot.core.operator.UResultOperator;
import com.linkedin.pinot.core.operator.blocks.InstanceResponseBlock;
/**
* GlobalPlan for a query applied to all the pruned segments.
*
*
*/
public class GlobalPlanImplV0 extends Plan {
private static final Logger LOGGER = LoggerFactory.getLogger(GlobalPlanImplV0.class);
private InstanceResponsePlanNode _rootNode;
private DataTable _instanceResponseDataTable;
public GlobalPlanImplV0(InstanceResponsePlanNode rootNode) {
_rootNode = rootNode;
}
@Override
public void print() {
_rootNode.showTree("");
}
@Override
public PlanNode getRoot() {
return _rootNode;
}
@Override
public void execute() {
long startTime = System.currentTimeMillis();
PlanNode root = getRoot();
UResultOperator operator = (UResultOperator) root.run();
try {
long endTime1 = System.currentTimeMillis();
LOGGER.debug("InstanceResponsePlanNode.run took:{}", (endTime1 - startTime));
InstanceResponseBlock instanceResponseBlock = (InstanceResponseBlock) operator.nextBlock();
long endTime2 = System.currentTimeMillis();
LOGGER.debug("UResultOperator took :{}", (endTime2 - endTime1));
_instanceResponseDataTable = instanceResponseBlock.getInstanceResponseDataTable();
long endTime3 = System.currentTimeMillis();
LOGGER.debug("Converting to InstanceResponseBlock to DataTable took :{}", (endTime3 - endTime2));
long endTime = System.currentTimeMillis();
_instanceResponseDataTable.getMetadata().put(DataTable.TIME_USED_MS_METADATA_KEY, "" + (endTime - startTime));
} finally {
operator.close();
}
}
@Override
public DataTable getInstanceResponse() {
return _instanceResponseDataTable;
}
}