nifi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MINIFI-275) Configuration without IDs for components causes exceptions
Date Tue, 02 May 2017 17:28:05 GMT

    [ https://issues.apache.org/jira/browse/MINIFI-275?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15993326#comment-15993326
] 

ASF GitHub Bot commented on MINIFI-275:
---------------------------------------

Github user phrocker commented on a diff in the pull request:

    https://github.com/apache/nifi-minifi-cpp/pull/85#discussion_r114375962
  
    --- Diff: libminifi/src/core/yaml/YamlConfiguration.cpp ---
    @@ -538,14 +561,62 @@ void YamlConfiguration::parsePropertiesNodeYaml(
           std::string rawValueString = propertyValueNode.as<std::string>();
           if (!processor->setProperty(propertyName, rawValueString)) {
             logger_->log_warn(
    -            "Received property %s with value %s but is not one of the properties for
%s",
    -            propertyName.c_str(), rawValueString.c_str(),
    -            processor->getName().c_str());
    +            "Received property %s with value %s but it is not one of the properties for
%s",
    +            propertyName,
    +            rawValueString,
    +            processor->getName());
           }
         }
       }
     }
     
    +std::string YamlConfiguration::getOrGenerateId(
    +    YAML::Node *yamlNode,
    +    std::string idField) {
    +  std::string id;
    +  YAML::Node node = yamlNode->as<YAML::Node>();
    +
    +  if (node[idField]) {
    +    if (YAML::NodeType::Scalar == node[idField].Type()) {
    +      id = node[idField].as<std::string>();
    +    } else {
    +      throw std::invalid_argument(
    +          "getOrGenerateId: idField is expected to reference YAML::Node "
    +              "of YAML::NodeType::Scalar.");
    +    }
    +  } else {
    +    uuid_t uuid;
    +    uuid_generate(uuid);
    +    char uuid_str[37];
    +    uuid_unparse(uuid, uuid_str);
    +    id = uuid_str;
    +    logger_->log_debug("Generating random ID: id => [%s]", id);
    +  }
    +  return id;
    +}
    +
    +void YamlConfiguration::checkRequiredField(
    --- End diff --
    
    Sorry, the double reply was likely confusing. I'm good with the function itself. The code
that I'm looking at in our third party directory returns a Node
    template <typename Key>
      const Node operator[](const Key& key) const;
    
    The exception I reference is below and throws an InvalidNode if the node is invalid some
how. Is this also handled?
    `template <typename Key>
    inline const Node Node::operator[](const Key& key) const {
      if (!m_isValid)
        throw InvalidNode();
      EnsureNodeExists();
      detail::node* value = static_cast<const detail::node&>(*m_pNode)
                                .get(detail::to_value(key), m_pMemory);
      if (!value) {
        return Node(ZombieNode);
      }
      return Node(*value, m_pMemory);
    }`


> Configuration without IDs for components causes exceptions
> ----------------------------------------------------------
>
>                 Key: MINIFI-275
>                 URL: https://issues.apache.org/jira/browse/MINIFI-275
>             Project: Apache NiFi MiNiFi
>          Issue Type: Bug
>          Components: C++, Processing Configuration
>            Reporter: Aldrin Piri
>            Assignee: Kevin Doran
>            Priority: Blocker
>             Fix For: cpp-0.2.0
>
>         Attachments: config.TEST.yml
>
>
> One of the changes to how components are handled in C++ introduced a defect into the
original construct over the version 1 schema of the YAML.  
> The absence of this ID causes a YAML exception.  
> We should provide handling to support configurations how they were created originally,
possibly providing a default/generated ID where one isn't specified, and start laying the
foundation for versioned schemas as provided in our Java implementation.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message