[
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)