code: private void findPath(Map<Spec, SpecExecutor> specExecutorInstanceMap, Spec spec) {
      inMemoryWeightGraphGenerator();
      FlowSpec flowSpec = (FlowSpec) spec;
      if (optionalUserSpecifiedPath.isPresent()) {
        log.info("Starting to evaluate user's specified path ... ");
        if (userSpecifiedPathVerificator(specExecutorInstanceMap, flowSpec)) {
          log.info("User specified path[ " + optionalUserSpecifiedPath.get() + "] successfully verified.");
          return;
        } else {
          log.error("Will not execute user specified path[ " + optionalUserSpecifiedPath.get() + "]");
          log.info("Start to execute FlowCompiler's algorithm for valid data movement path");
        }
      }
  
      ServiceNode sourceNode =
          new BaseServiceNodeImpl(flowSpec.getConfig().getString(ServiceConfigKeys.FLOW_SOURCE_IDENTIFIER_KEY));
  
      ServiceNode targetNode =
          new BaseServiceNodeImpl(flowSpec.getConfig().getString(ServiceConfigKeys.FLOW_DESTINATION_IDENTIFIER_KEY));
  
      List<FlowEdge> resultEdgePath = dijkstraBasedPathFindingHelper(sourceNode, targetNode, this.weightedGraph);
      for (int i = 0; i < resultEdgePath.size() ; i++) {
        FlowEdge tmpFlowEdge = resultEdgePath.get(i);
        ServiceNode edgeSrcNode = ((LoadBasedFlowEdgeImpl) tmpFlowEdge).getSourceNode();
        ServiceNode edgeTgtNode = ((LoadBasedFlowEdgeImpl) tmpFlowEdge).getTargetNode();
        specExecutorInstanceMap.put(convertHopToJobSpec(edgeSrcNode, edgeTgtNode, flowSpec),
            ((LoadBasedFlowEdgeImpl) (resultEdgePath.get(i))).getSpecExecutorInstance());
      }
    }
docs: that a topologySpec not being reflected in findPath.