docs: private ImmutableSet<Pipeline> selectPipelines(InterpreterListener interpreterListener,
                                                     Set<Tuple2<String, String>> processingBlacklist,
                                                     Message message,
                                                     Set<String> initialStreamIds,
                                                     ImmutableSetMultimap<String, Pipeline> streamConnection) {
          final String msgId = message.getId();
  
          // if a message-stream combination has already been processed (is in the set), skip that execution
          final Set<String> streamsIds = initialStreamIds.stream()
                  .filter(streamId -> !processingBlacklist.contains(tuple(msgId, streamId)))
                  .filter(streamConnection::containsKey)
                  .collect(Collectors.toSet());
          final ImmutableSet<Pipeline> pipelinesToRun = streamsIds.stream()
                  .flatMap(streamId -> streamConnection.get(streamId).stream())
                  .collect(ImmutableSet.toImmutableSet());
          interpreterListener.processStreams(message, pipelinesToRun, streamsIds);
          log.debug("[{}] running pipelines {} for streams {}", msgId, pipelinesToRun, streamsIds);
          return pipelinesToRun;
      }