use of com.hortonworks.streamline.streams.Result in project streamline by hortonworks.
the class DefaultSplitter method splitEvent.
@Override
public List<Result> splitEvent(StreamlineEvent inputEvent, Set<String> outputStreams) {
List<Result> results = new ArrayList<>();
String groupId = getGroupId(inputEvent);
int curPartNo = 0;
int totalParts = outputStreams.size();
for (String stream : outputStreams) {
StreamlineEvent partitionedEvent = createPartitionEvent(inputEvent, groupId, ++curPartNo, stream, totalParts);
results.add(new Result(stream, Collections.singletonList(partitionedEvent)));
}
return results;
}
use of com.hortonworks.streamline.streams.Result in project streamline by hortonworks.
the class SplitJoinTest method testStageProcessor.
@Test
public void testStageProcessor() {
final String enrichFieldName = "foo";
final String enrichedValue = "foo-enriched-value";
Map<Object, Object> data = new HashMap<Object, Object>() {
{
put("foo-value", enrichedValue);
}
};
InmemoryTransformDataProvider transformDataProvider = new InmemoryTransformDataProvider(data);
EnrichmentTransform enrichmentTransform = new EnrichmentTransform("enricher", Collections.singletonList(enrichFieldName), transformDataProvider);
StageAction stageAction = new StageAction(Collections.<Transform>singletonList(enrichmentTransform));
stageAction.setOutputStreams(Collections.singleton("output-stream"));
StageActionRuntime stageActionRuntime = new StageActionRuntime(stageAction);
stageActionRuntime.setActionRuntimeContext(new ActionRuntimeContext(null, stageAction));
stageActionRuntime.initialize(Collections.<String, Object>emptyMap());
final List<Result> results = stageActionRuntime.execute(createRootEvent());
for (Result result : results) {
for (StreamlineEvent event : result.events) {
final Map enrichments = (Map) event.getAuxiliaryFieldsAndValues().get(EnrichmentTransform.ENRICHMENTS_FIELD_NAME);
Assert.assertEquals(enrichments.get(enrichFieldName), enrichedValue);
}
}
}
use of com.hortonworks.streamline.streams.Result in project streamline by hortonworks.
the class SplitJoinTest method testStageProcessorWithRules.
@Test
public void testStageProcessorWithRules() {
final String enrichFieldName = "foo";
final String enrichedValue = "foo-enriched-value";
Map<Object, Object> data = new HashMap<Object, Object>() {
{
put("foo-value", enrichedValue);
}
};
InmemoryTransformDataProvider transformDataProvider = new InmemoryTransformDataProvider(data);
EnrichmentTransform enrichmentTransform = new EnrichmentTransform("enricher", Collections.singletonList(enrichFieldName), transformDataProvider);
StageAction stageAction = new StageAction(Collections.<Transform>singletonList(enrichmentTransform));
SplitJoinRule stageRule = new SplitJoinRule("stage-1", stageAction, Collections.singleton("output-stream"));
StageActionRuntime stageActionRuntime = new StageActionRuntime(stageAction);
stageActionRuntime.setActionRuntimeContext(new ActionRuntimeContext(stageRule, stageAction));
stageActionRuntime.initialize(Collections.<String, Object>emptyMap());
final List<Result> results = stageActionRuntime.execute(createRootEvent());
for (Result result : results) {
for (StreamlineEvent event : result.events) {
final Map enrichments = (Map) event.getAuxiliaryFieldsAndValues().get(EnrichmentTransform.ENRICHMENTS_FIELD_NAME);
Assert.assertEquals(enrichments.get(enrichFieldName), enrichedValue);
}
}
}
use of com.hortonworks.streamline.streams.Result in project streamline by hortonworks.
the class SplitJoinTest method runSplitJoin.
private void runSplitJoin(SplitJoinRule splitRule, SplitJoinRule joinRule, Map<String, Object> config) {
final SplitAction splitAction = (SplitAction) splitRule.getAction();
SplitActionRuntime splitActionRuntime = new SplitActionRuntime(splitAction);
splitActionRuntime.setActionRuntimeContext(new ActionRuntimeContext(splitRule, splitAction));
splitActionRuntime.initialize(config);
StreamlineEvent streamlineEvent = createRootEvent();
final List<Result> results = splitActionRuntime.execute(streamlineEvent);
JoinAction joinAction = (JoinAction) joinRule.getAction();
JoinActionRuntime joinActionRuntime = new JoinActionRuntime(joinAction);
joinActionRuntime.setActionRuntimeContext(new ActionRuntimeContext(joinRule, joinAction));
joinActionRuntime.initialize(config);
List<Result> effectiveResult = null;
for (Result result : results) {
for (StreamlineEvent event : result.events) {
List<Result> processedResult = joinActionRuntime.execute(event);
if (processedResult != null) {
effectiveResult = processedResult;
}
}
}
Assert.assertNotNull(effectiveResult);
}
use of com.hortonworks.streamline.streams.Result in project streamline by hortonworks.
the class MultiLangProcessorRuntime method processEvent.
private List<Result> processEvent(StreamlineEvent inputEvent) {
List<Result> results = new LinkedList<>();
try {
markWaitingSubprocess();
ProcessorMsg processorMsg = createProcessorMessage(inputEvent);
shellProcess.writeProcessorMsg(processorMsg);
ShellMsg errorMsg = null;
Map<String, List<ShellMsg>> emitMsgMap = new HashMap<>();
while (true) {
ShellMsg shellMsg = shellProcess.readShellMsg();
String command = shellMsg.getCommand();
if (command == null) {
throw new IllegalArgumentException("Command not found in shell message: " + shellMsg);
}
setHeartbeat();
if (command.equals("sync")) {
break;
} else if (command.equals("error")) {
errorMsg = shellMsg;
} else if (command.equals("emit")) {
String stream = shellMsg.getOutputStream();
List<ShellMsg> eventList = emitMsgMap.get(stream);
if (eventList == null) {
eventList = new LinkedList<>();
emitMsgMap.put(stream, eventList);
}
eventList.add(shellMsg);
} else {
throw new RuntimeException("Unknown command received: " + command);
}
}
if (errorMsg != null) {
LOG.error(errorMsg.getMsg());
throw new ProcessingException(errorMsg.getMsg());
}
for (Map.Entry<String, List<ShellMsg>> entry : emitMsgMap.entrySet()) {
results.add(convertShellMsg(entry.getKey(), entry.getValue(), inputEvent));
}
} catch (IOException | ProcessingException e) {
String processInfo = shellProcess.getProcessInfoString() + shellProcess.getProcessTerminationInfoString();
throw new RuntimeException(processInfo, e);
} finally {
completedWaitingSubprocess();
}
return results;
}
Aggregations