private List<Long> importOutputStreams(Long newTopologyId, Map<Long, Long> oldToNewStreamIds, List<TopologyStream> streams) { List<Long> importedOutputStreamIds = new ArrayList<>(); for (TopologyStream stream : streams) { Long oldId = stream.getId(); Long newId = oldToNewStreamIds.get(oldId); if (newId == null) { stream.setId(null); TopologyStream addedTopologyStream = addStreamInfo(newTopologyId, stream); newId = addedTopologyStream.getId(); oldToNewStreamIds.put(oldId, newId); } importedOutputStreamIds.add(newId); } return importedOutputStreamIds; }
private List<Long> updateOutputStreams(TopologyOutputComponent outputComponent) { List<Long> newStreamIds = new ArrayList<>(); for (TopologyStream topologyStream : outputComponent.getOutputStreams()) { if (topologyStream.getId() != null && getStreamInfo(outputComponent.getTopologyId(), topologyStream.getId()) != null) { addOrUpdateStreamInfo(outputComponent.getTopologyId(), topologyStream.getId(), topologyStream); newStreamIds.add(topologyStream.getId()); } else { newStreamIds.add(addStreamInfo(outputComponent.getTopologyId(), topologyStream).getId()); } } return newStreamIds; }
private Collection<TopologyProcessor> fillProcessorStreams(Collection<TopologyProcessor> processors) { if (processors != null) { for (TopologyProcessor processor : processors) { List<TopologyStream> topologyStreams = getOutputStreams(processor); processor.setOutputStreams(topologyStreams); processor.setOutputStreamIds(new ArrayList<>(Collections2.transform(topologyStreams, new Function<TopologyStream, Long>() { @Nullable @Override public Long apply(@Nullable TopologyStream input) { return input.getId(); } }))); } } return processors; }
private void setReconfigureTarget(TopologyEdge edge, TopologyStream stream) { TopologyComponent component = getTo(edge); component.setReconfigure(true); dao.addOrUpdate(component); // if component is a processor, update any rules in that processor that uses any of the streams if (component instanceof TopologyProcessor) { setReconfigureRules(Collections.singletonList((TopologyProcessor) component), edge.getStreamGroupings() .stream() .map(StreamGrouping::getStreamId) .map(sid -> getStreamInfo(edge.getTopologyId(), sid, edge.getVersionId())) .filter(curStream -> stream == null || curStream.getId().equals(stream.getId())) .collect(Collectors.toList())); } }
private Collection<TopologySource> fillSourceStreams(Collection<TopologySource> sources) { if (sources != null) { for (TopologySource source : sources) { List<TopologyStream> topologyStreams = getOutputStreams(source); source.setOutputStreams(topologyStreams); source.setOutputStreamIds(new ArrayList<>(Collections2.transform(topologyStreams, new Function<TopologyStream, Long>() { @Nullable @Override public Long apply(@Nullable TopologyStream input) { return input.getId(); } }))); } } return sources; }
private void setReconfigureTarget(TopologyStream stream) { // reconfigure all targets of processors that use this output stream List<QueryParam> params = QueryParam.params( TopologyProcessorStreamMap.FIELD_VERSION_ID, String.valueOf(stream.getVersionId()), TopologyProcessorStreamMap.FIELD_STREAM_ID, String.valueOf(stream.getId())); listTopologyProcessorStreamMapping(params) .stream() .map(sm -> getTopologyProcessor(stream.getTopologyId(), sm.getProcessorId(), sm.getVersionId())) .flatMap(p -> getEdgesFrom(p).stream()) .filter(e -> e.getStreamGroupings().stream().map(StreamGrouping::getStreamId).anyMatch(sgid -> sgid.equals(stream.getId()))) .forEach(e -> setReconfigureTarget(e, stream)); // reconfigure all targets of source that use this output stream params = QueryParam.params( TopologySourceStreamMap.FIELD_VERSION_ID, String.valueOf(stream.getVersionId()), TopologySourceStreamMap.FIELD_STREAM_ID, String.valueOf(stream.getId())); listTopologySourceStreamMapping(params) .stream() .map(sm -> getTopologySource(stream.getTopologyId(), sm.getSourceId(), sm.getVersionId())) .flatMap(source -> getEdgesFrom(source).stream()) .filter(e -> e.getStreamGroupings().stream().map(StreamGrouping::getStreamId).anyMatch(sgid -> sgid.equals(stream.getId()))) .forEach(e -> setReconfigureTarget(e, stream)); }
public TopologyStream(TopologyStream other) { if (other != null) { setId(other.getId()); setVersionId(other.getVersionId()); setStreamId(other.getStreamId()); setDescription(other.getDescription()); setTopologyId(other.getTopologyId()); if (other.getFields() != null) { setFields(other.getFields().stream().map(Field::copy).collect(Collectors.toList())); } setVersionTimestamp(other.getVersionTimestamp()); } }
private void createProcessorStreamMapping(TopologyProcessor topologyProcessor, List<TopologyStream> streams) { for (TopologyStream outputStream : streams) { TopologyStream addedStream = addStreamInfo(topologyProcessor.getTopologyId(), outputStream); dao.<TopologyProcessorStreamMap>add(new TopologyProcessorStreamMap(topologyProcessor.getId(), topologyProcessor.getVersionId(), addedStream.getId())); } }
public TopologyStream addStreamInfo(Long topologyId, Long versionId, TopologyStream topologyStream) { if (topologyStream.getId() == null) { topologyStream.setId(dao.nextId(STREAMINFO_NAMESPACE)); } long timestamp = System.currentTimeMillis(); topologyStream.setVersionTimestamp(timestamp); topologyStream.setVersionId(versionId); topologyStream.setTopologyId(topologyId); validateStreamInfo(topologyStream); dao.add(topologyStream); updateVersionTimestamp(versionId, timestamp); return topologyStream; }
public TopologyStream addOrUpdateStreamInfo(Long topologyId, Long id, TopologyStream stream) { stream.setId(id); Long currentVersionId = getCurrentVersionId(topologyId); stream.setVersionId(currentVersionId); stream.setTopologyId(topologyId); long timestamp = System.currentTimeMillis(); stream.setVersionTimestamp(timestamp); validateStreamInfo(stream); TopologyStream curStream = getStreamInfo(topologyId, stream.getId()); if (!curStream.getFields().equals(stream.getFields())) { setReconfigureTarget(stream); } dao.addOrUpdate(stream); updateVersionTimestamp(currentVersionId, timestamp); return stream; }
removeStreamInfo(topologyId, topologyStream.getId(), versionId);