code: @VisibleForTesting
    static void propagateMetadataFromProps(Map<String, String> metaData, Props inputProps, String nodeType,
        String nodeName, Logger logger) {
  
      // Backward compatibility: Unless user specifies, this will be absent from flows and jobs
      // .. if so, do a no-op like before
      if (!inputProps.containsKey(AZKABAN_EVENT_REPORTING_PROPERTIES_TO_PROPAGATE)) {
        return;
      }
  
      if (null == metaData || null == inputProps || null == logger ||
          Strings.isNullOrEmpty(nodeType) || Strings.isNullOrEmpty(nodeName)) {
        throw new IllegalArgumentException("Input params should not be null or empty.");
      }
  
      final String propsToPropagate = inputProps.getString(AZKABAN_EVENT_REPORTING_PROPERTIES_TO_PROPAGATE);
      if (Strings.isNullOrEmpty(propsToPropagate)) {
        // Nothing to propagate
        logger.info(String.format("No properties to propagate to metadata for %s: %s", nodeType, nodeName));
        return;
      } else {
        logger.info(String.format("Propagating: %s to metadata for %s: %s", propsToPropagate, nodeType, nodeName));
      }
  
      final List<String> propsToPropagateList = SPLIT_ON_COMMA.splitToList(propsToPropagate);
      for (String propKey : propsToPropagateList) {
        if (!inputProps.containsKey(propKey)) {
          logger.warn(String.format("%s does not contains: %s property; "
              + "skipping propagation to metadata", nodeName, propKey));
          continue;
        }
        metaData.put(propKey, inputProps.getString(propKey));
      }
    }
docs: *
  Propagate properties (specified in {@code AZKABAN_EVENT_REPORTING_PROPERTIES_TO_PROPAGATE})
  to metadata for event reporting.
  @param metaData Metadata map to update with properties.
  @param inputProps Input properties for flow or job.
  @param nodeType Flow or job.
  @param nodeName Flow or job name.
  @param logger Logger from invoking class for log sanity.