use of org.apache.asterix.external.feed.runtime.AdapterRuntimeManager in project asterixdb by apache.
the class FeedIntakeOperatorNodePushable method start.
@Override
protected void start() throws HyracksDataException, InterruptedException {
try {
writer.open();
Thread.currentThread().setName("Intake Thread");
FeedAdapter adapter = (FeedAdapter) adapterFactory.createAdapter(ctx, partition);
adapterRuntimeManager = new AdapterRuntimeManager(ctx, runtimeId.getEntityId(), adapter, writer, partition);
IFrame message = new VSizeFrame(ctx);
TaskUtil.putInSharedMap(HyracksConstants.KEY_MESSAGE, message, ctx);
/*
* Set null feed message. Feed pipeline carries with it a message with each frame
* Initially, the message is set to a null message that can be changed by feed adapters.
* One use case is adapters which consume data sources that allow restartability. Such adapters
* can propagate progress information through the ingestion pipeline to storage nodes
*/
message.getBuffer().put(MessagingFrameTupleAppender.NULL_FEED_MESSAGE);
message.getBuffer().flip();
adapterRuntimeManager.start();
synchronized (adapterRuntimeManager) {
while (!adapterRuntimeManager.isDone()) {
adapterRuntimeManager.wait();
}
}
if (adapterRuntimeManager.isFailed()) {
throw new RuntimeDataException(ErrorCode.OPERATORS_FEED_INTAKE_OPERATOR_NODE_PUSHABLE_FAIL_AT_INGESTION);
}
} catch (Exception e) {
/*
* An Interrupted Exception is thrown if the Intake job cannot progress further due to failure of another
* node involved in the Hyracks job. As the Intake job involves only the intake operator, the exception is
* indicative of a failure at the sibling intake operator location. The surviving intake partitions must
* continue to live and receive data from the external source.
*/
writer.fail();
throw e;
} finally {
writer.close();
}
}
Aggregations