You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by al...@apache.org on 2018/09/20 15:14:59 UTC

[4/9] nifi-minifi-cpp git commit: MINIFICPP-595: Provide basic support for windows. MINIFICPP-32: Add windows event log reader MINIFICPP-596: Build core and libminifi artifacts. Must abstract features that are operating system dependent, such as uuid

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/processors/GetTCP.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/processors/GetTCP.cpp b/libminifi/src/processors/GetTCP.cpp
index 0932ebd..2b3b93c 100644
--- a/libminifi/src/processors/GetTCP.cpp
+++ b/libminifi/src/processors/GetTCP.cpp
@@ -16,15 +16,17 @@
  * limitations under the License.
  */
 #include "processors/GetTCP.h"
-#include <sys/time.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <time.h>
 #include <stdio.h>
-#include <dirent.h>
+
 #include <limits.h>
+#ifndef WIN32
+#include <dirent.h>
 #include <unistd.h>
 #include <regex.h>
+#endif
 #include <vector>
 #include <queue>
 #include <map>

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/processors/ListenSyslog.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/processors/ListenSyslog.cpp b/libminifi/src/processors/ListenSyslog.cpp
index e820bd5..aab3c67 100644
--- a/libminifi/src/processors/ListenSyslog.cpp
+++ b/libminifi/src/processors/ListenSyslog.cpp
@@ -34,7 +34,7 @@ namespace apache {
 namespace nifi {
 namespace minifi {
 namespace processors {
-
+#ifndef WIN32
 core::Property ListenSyslog::RecvBufSize("Receive Buffer Size", "The size of each buffer used to receive Syslog messages.", "65507 B");
 core::Property ListenSyslog::MaxSocketBufSize("Max Size of Socket Buffer", "The maximum size of the socket buffer that should be used.", "1 MB");
 core::Property ListenSyslog::MaxConnections("Max Number of TCP Connections", "The maximum number of concurrent connections to accept Syslog messages in TCP mode.", "2");
@@ -153,7 +153,7 @@ void ListenSyslog::runThread() {
         clilen = sizeof(cli_addr);
         int newsockfd = accept(_serverSocket, reinterpret_cast<struct sockaddr *>(&cli_addr), &clilen);
         if (newsockfd > 0) {
-          if (_clientSockets.size() < (uint64_t)_maxConnections) {
+          if (_clientSockets.size() < (uint64_t) _maxConnections) {
             _clientSockets.push_back(newsockfd);
             logger_->log_info("ListenSysLog new client socket %d connection", newsockfd);
             continue;
@@ -166,7 +166,7 @@ void ListenSyslog::runThread() {
         struct sockaddr_in cli_addr;
         clilen = sizeof(cli_addr);
         int recvlen = recvfrom(_serverSocket, _buffer, sizeof(_buffer), 0, (struct sockaddr *) &cli_addr, &clilen);
-        if (recvlen > 0 && (uint64_t)(recvlen + getEventQueueByteSize()) <= _recvBufSize) {
+        if (recvlen > 0 && (uint64_t) (recvlen + getEventQueueByteSize()) <= _recvBufSize) {
           uint8_t *payload = new uint8_t[recvlen];
           memcpy(payload, _buffer, recvlen);
           putEvent(payload, recvlen);
@@ -183,7 +183,7 @@ void ListenSyslog::runThread() {
           logger_->log_debug("ListenSysLog client socket %d close", clientSocket);
           it = _clientSockets.erase(it);
         } else {
-          if ((uint64_t)(recvlen + getEventQueueByteSize()) <= _recvBufSize) {
+          if ((uint64_t) (recvlen + getEventQueueByteSize()) <= _recvBufSize) {
             uint8_t *payload = new uint8_t[recvlen];
             memcpy(payload, _buffer, recvlen);
             putEvent(payload, recvlen);
@@ -296,7 +296,7 @@ void ListenSyslog::onTrigger(core::ProcessContext *context, core::ProcessSession
   flowFile->addAttribute("syslog.port", std::to_string(_port));
   session->transfer(flowFile, Success);
 }
-
+#endif
 } /* namespace processors */
 } /* namespace minifi */
 } /* namespace nifi */

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/processors/LogAttribute.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/processors/LogAttribute.cpp b/libminifi/src/processors/LogAttribute.cpp
index 65f45c6..cec9191 100644
--- a/libminifi/src/processors/LogAttribute.cpp
+++ b/libminifi/src/processors/LogAttribute.cpp
@@ -18,7 +18,6 @@
  * limitations under the License.
  */
 #include "processors/LogAttribute.h"
-#include <sys/time.h>
 #include <time.h>
 #include <string.h>
 #include <memory>

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/processors/PutFile.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/processors/PutFile.cpp b/libminifi/src/processors/PutFile.cpp
index 0a45c68..fa461d4 100644
--- a/libminifi/src/processors/PutFile.cpp
+++ b/libminifi/src/processors/PutFile.cpp
@@ -19,10 +19,8 @@
  */
 
 #include "processors/PutFile.h"
-
+#include "utils/file/FileUtils.h"
 #include <sys/stat.h>
-#include <dirent.h>
-#include <unistd.h>
 #include <uuid/uuid.h>
 #include <cstdint>
 #include <cstdio>
@@ -30,6 +28,13 @@
 #include <memory>
 #include <string>
 #include <set>
+#ifdef WIN32
+#include <Windows.h>
+#endif
+
+#ifndef S_ISDIR
+#define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
+#endif
 
 namespace org {
 namespace apache {
@@ -40,33 +45,16 @@ namespace processors {
 std::shared_ptr<utils::IdGenerator> PutFile::id_generator_ = utils::IdGenerator::getIdGenerator();
 
 core::Property PutFile::Directory(
-    "Directory",
-    "The output directory to which to put files",
-    ".");
-core::Property PutFile::ConflictResolution(
-    "Conflict Resolution Strategy",
-    "Indicates what should happen when a file with the same name already exists in the output directory",
-    CONFLICT_RESOLUTION_STRATEGY_FAIL);
-core::Property PutFile::CreateDirs(
-    "Create Missing Directories",
-    "If true, then missing destination directories will be created. "
-        "If false, flowfiles are penalized and sent to failure.",
-    "true",
-    true,
-    "",
-    {"Directory"},
-    {});
-core::Property PutFile::MaxDestFiles(
-    "Maximum File Count",
-    "Specifies the maximum number of files that can exist in the output directory",
-    "-1");
-
-core::Relationship PutFile::Success(
-    "success",
-    "All files are routed to success");
-core::Relationship PutFile::Failure(
-    "failure",
-    "Failed files (conflict, write failure, etc.) are transferred to failure");
+    core::PropertyBuilder::createProperty("Directory")->withDescription("The output directory to which to put files")->supportsExpressionLanguage(true)->withDefaultValue(".")->build());
+core::Property PutFile::ConflictResolution("Conflict Resolution Strategy", "Indicates what should happen when a file with the same name already exists in the output directory",
+                                           CONFLICT_RESOLUTION_STRATEGY_FAIL);
+core::Property PutFile::CreateDirs("Create Missing Directories", "If true, then missing destination directories will be created. "
+                                   "If false, flowfiles are penalized and sent to failure.",
+                                   "true", true, "", { "Directory" }, { });
+core::Property PutFile::MaxDestFiles("Maximum File Count", "Specifies the maximum number of files that can exist in the output directory", "-1");
+
+core::Relationship PutFile::Success("success", "All files are routed to success");
+core::Relationship PutFile::Failure("failure", "Failed files (conflict, write failure, etc.) are transferred to failure");
 
 void PutFile::initialize() {
   // Set the supported properties
@@ -113,7 +101,7 @@ void PutFile::onTrigger(core::ProcessContext *context, core::ProcessSession *ses
 
   std::string directory;
 
-  if (!context->getProperty(Directory.getName(), directory, flowFile)) {
+  if (!context->getProperty(Directory, directory, flowFile)) {
     logger_->log_error("Directory attribute is missing or invalid");
   }
 
@@ -143,6 +131,8 @@ void PutFile::onTrigger(core::ProcessContext *context, core::ProcessSession *ses
     // something exists at directory path
     if (S_ISDIR(statResult.st_mode)) {
       // it's a directory, count the files
+      int64_t ct = 0;
+#ifndef WIN32
       DIR *myDir = opendir(directory.c_str());
       if (!myDir) {
         logger_->log_warn("Could not open %s", directory);
@@ -151,13 +141,13 @@ void PutFile::onTrigger(core::ProcessContext *context, core::ProcessSession *ses
       }
       struct dirent* entry = nullptr;
 
-      int64_t ct = 0;
       while ((entry = readdir(myDir)) != nullptr) {
         if ((strcmp(entry->d_name, ".") != 0) && (strcmp(entry->d_name, "..") != 0)) {
           ct++;
           if (ct >= max_dest_files_) {
             logger_->log_warn("Routing to failure because the output directory %s has at least %u files, which exceeds the "
-                "configured max number of files", directory, max_dest_files_);
+                              "configured max number of files",
+                              directory, max_dest_files_);
             session->transfer(flowFile, Failure);
             closedir(myDir);
             return;
@@ -165,13 +155,31 @@ void PutFile::onTrigger(core::ProcessContext *context, core::ProcessSession *ses
         }
       }
       closedir(myDir);
+#else
+      HANDLE hFind;
+      WIN32_FIND_DATA FindFileData;
+
+      if ((hFind = FindFirstFile(directory.c_str(), &FindFileData)) != INVALID_HANDLE_VALUE) {
+        do {
+          if ((strcmp(FindFileData.cFileName, ".") != 0) && (strcmp(FindFileData.cFileName, "..") != 0)) {
+            ct++;
+            if (ct >= max_dest_files_) {
+              logger_->log_warn("Routing to failure because the output directory %s has at least %u files, which exceeds the "
+                  "configured max number of files", directory, max_dest_files_);
+              session->transfer(flowFile, Failure);
+              FindClose(hFind);
+              return;
+            }
+          }
+        }while (FindNextFile(hFind, &FindFileData));
+        FindClose(hFind);
+      }
+#endif
     }
   }
 
   if (stat(destFile.c_str(), &statResult) == 0) {
-    logger_->log_warn("Destination file %s exists; applying Conflict Resolution Strategy: %s",
-                      destFile,
-                      conflict_resolution_);
+    logger_->log_warn("Destination file %s exists; applying Conflict Resolution Strategy: %s", destFile, conflict_resolution_);
 
     if (conflict_resolution_ == CONFLICT_RESOLUTION_STRATEGY_REPLACE) {
       putFile(session, flowFile, tmpFile, destFile, directory);
@@ -186,10 +194,8 @@ void PutFile::onTrigger(core::ProcessContext *context, core::ProcessSession *ses
 }
 
 std::string PutFile::tmpWritePath(const std::string &filename, const std::string &directory) const {
-  char tmpFileUuidStr[37];
-  uuid_t tmpFileUuid;
+  utils::Identifier tmpFileUuid;
   id_generator_->generate(tmpFileUuid);
-  uuid_unparse_lower(tmpFileUuid, tmpFileUuidStr);
   std::stringstream tmpFileSs;
   tmpFileSs << directory;
   auto lastSeparatorPos = filename.find_last_of("/");
@@ -197,22 +203,15 @@ std::string PutFile::tmpWritePath(const std::string &filename, const std::string
   if (lastSeparatorPos == std::string::npos) {
     tmpFileSs << "/." << filename;
   } else {
-    tmpFileSs << "/"
-              << filename.substr(0, lastSeparatorPos)
-              << "/."
-              << filename.substr(lastSeparatorPos + 1);
+    tmpFileSs << "/" << filename.substr(0, lastSeparatorPos) << "/." << filename.substr(lastSeparatorPos + 1);
   }
 
-  tmpFileSs << "." << tmpFileUuidStr;
+  tmpFileSs << "." << tmpFileUuid.to_string();
   std::string tmpFile = tmpFileSs.str();
   return tmpFile;
 }
 
-bool PutFile::putFile(core::ProcessSession *session,
-                      std::shared_ptr<FlowFileRecord> flowFile,
-                      const std::string &tmpFile,
-                      const std::string &destFile,
-                      const std::string &destDir) {
+bool PutFile::putFile(core::ProcessSession *session, std::shared_ptr<FlowFileRecord> flowFile, const std::string &tmpFile, const std::string &destFile, const std::string &destDir) {
   struct stat dir_stat;
 
   if (stat(destDir.c_str(), &dir_stat) && try_mkdirs_) {
@@ -230,7 +229,7 @@ bool PutFile::putFile(core::ProcessSession *session,
 
       if (!dir_path_component.empty()) {
         logger_->log_debug("Attempting to create directory if it does not already exist: %s", dir_path);
-        mkdir(dir_path.c_str(), 0700);
+        utils::file::FileUtils::create_dir(dir_path);
         dir_path_stream << '/';
       } else if (pos == 0) {
         // Support absolute paths
@@ -255,8 +254,7 @@ bool PutFile::putFile(core::ProcessSession *session,
   return false;
 }
 
-PutFile::ReadCallback::ReadCallback(const std::string &tmp_file,
-                                    const std::string &dest_file)
+PutFile::ReadCallback::ReadCallback(const std::string &tmp_file, const std::string &dest_file)
     : tmp_file_(tmp_file),
       dest_file_(dest_file),
       logger_(logging::LoggerFactory<PutFile::ReadCallback>::getLogger()) {
@@ -304,8 +302,7 @@ bool PutFile::ReadCallback::commit() {
 
   if (write_succeeded_) {
     if (rename(tmp_file_.c_str(), dest_file_.c_str())) {
-      logger_->log_info("PutFile commit put file operation to %s failed because rename() call failed",
-                        dest_file_);
+      logger_->log_info("PutFile commit put file operation to %s failed because rename() call failed", dest_file_);
     } else {
       success = true;
       logger_->log_info("PutFile commit put file operation to %s succeeded", dest_file_);

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/processors/RouteOnAttribute.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/processors/RouteOnAttribute.cpp b/libminifi/src/processors/RouteOnAttribute.cpp
index 6e78b6f..3e2bf61 100644
--- a/libminifi/src/processors/RouteOnAttribute.cpp
+++ b/libminifi/src/processors/RouteOnAttribute.cpp
@@ -30,32 +30,25 @@ namespace nifi {
 namespace minifi {
 namespace processors {
 
-core::Relationship RouteOnAttribute::Unmatched(
-    "unmatched",
-    "Files which do not match any expression are routed here");
-core::Relationship RouteOnAttribute::Failure(
-    "failure",
-    "Failed files are transferred to failure");
+core::Relationship RouteOnAttribute::Unmatched("unmatched", "Files which do not match any expression are routed here");
+core::Relationship RouteOnAttribute::Failure("failure", "Failed files are transferred to failure");
 
 void RouteOnAttribute::initialize() {
   std::set<core::Property> properties;
   setSupportedProperties(properties);
 }
 
-void RouteOnAttribute::onDynamicPropertyModified(const core::Property &orig_property,
-                                                 const core::Property &new_property) {
+void RouteOnAttribute::onDynamicPropertyModified(const core::Property &orig_property, const core::Property &new_property) {
   // Update the routing table when routes are added via dynamic properties.
   route_properties_[new_property.getName()] = new_property;
 
   std::set<core::Relationship> relationships;
 
   for (const auto &route : route_properties_) {
-    core::Relationship route_rel{route.first, "Dynamic route"};
+    core::Relationship route_rel { route.first, "Dynamic route" };
     route_rels_[route.first] = route_rel;
     relationships.insert(route_rel);
-    logger_->log_info("RouteOnAttribute registered route '%s' with expression '%s'",
-                      route.first,
-                      route.second.getValue());
+    logger_->log_info("RouteOnAttribute registered route '%s' with expression '%s'", route.first, route.second.getValue());
   }
 
   relationships.insert(Unmatched);
@@ -63,8 +56,7 @@ void RouteOnAttribute::onDynamicPropertyModified(const core::Property &orig_prop
   setSupportedRelationships(relationships);
 }
 
-void RouteOnAttribute::onTrigger(core::ProcessContext *context,
-                                 core::ProcessSession *session) {
+void RouteOnAttribute::onTrigger(core::ProcessContext *context, core::ProcessSession *session) {
   auto flow_file = session->get();
 
   // Do nothing if there are no incoming files
@@ -78,7 +70,7 @@ void RouteOnAttribute::onTrigger(core::ProcessContext *context,
     // Perform dynamic routing logic
     for (const auto &route : route_properties_) {
       std::string do_route;
-      context->getDynamicProperty(route.second.getName(), do_route, flow_file);
+      context->getDynamicProperty(route.second, do_route, flow_file);
 
       if (do_route == "true") {
         did_match = true;

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/processors/TailFile.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/processors/TailFile.cpp b/libminifi/src/processors/TailFile.cpp
index 61aa86b..df0afc4 100644
--- a/libminifi/src/processors/TailFile.cpp
+++ b/libminifi/src/processors/TailFile.cpp
@@ -17,14 +17,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <sys/time.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <time.h>
 #include <stdio.h>
-#include <dirent.h>
+
 #include <limits.h>
+#ifndef WIN32
+#include <dirent.h>
 #include <unistd.h>
+#endif
 #include <vector>
 #include <queue>
 #include <map>
@@ -40,6 +42,10 @@
 #include "core/ProcessContext.h"
 #include "core/ProcessSession.h"
 
+#ifndef S_ISDIR
+#define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
+#endif
+
 #if defined(__clang__)
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wsign-compare"
@@ -173,6 +179,7 @@ void TailFile::checkRollOver(const std::string &fileLocation, const std::string
     std::size_t found = fileName.find_last_of(".");
     if (found != std::string::npos)
       pattern = fileName.substr(0, found);
+#ifndef WIN32
     DIR *d;
     d = opendir(fileLocation.c_str());
     if (!d)
@@ -197,6 +204,33 @@ void TailFile::checkRollOver(const std::string &fileLocation, const std::string
       }
     }
     closedir(d);
+#else
+
+    HANDLE hFind;
+    WIN32_FIND_DATA FindFileData;
+
+    if ((hFind = FindFirstFile(fileLocation.c_str(), &FindFileData)) != INVALID_HANDLE_VALUE) {
+      do {
+        struct stat statbuf {};
+        if (stat(FindFileData.cFileName, &statbuf) != 0) {
+          logger_->log_warn("Failed to stat %s", FindFileData.cFileName);
+          break;
+        }
+
+        std::string fileFullName = fileLocation + "/" + FindFileData.cFileName;
+
+        if (fileFullName.find(pattern) != std::string::npos && stat(fileFullName.c_str(), &statbuf) == 0) {
+          if (((uint64_t)(statbuf.st_mtime) * 1000) >= modifiedTimeCurrentTailFile) {
+            TailMatchedFileItem item;
+            item.fileName = fileName;
+            item.modifiedTime = ((uint64_t)(statbuf.st_mtime) * 1000);
+            matchedFiles.push_back(item);
+          }
+        }
+      }while (FindNextFile(hFind, &FindFileData));
+      FindClose(hFind);
+    }
+#endif
 
     // Sort the list based on modified time
     std::sort(matchedFiles.begin(), matchedFiles.end(), sortTailMatchedFileItem);
@@ -244,7 +278,7 @@ void TailFile::onTrigger(core::ProcessContext *context, core::ProcessSession *se
   struct stat statbuf;
 
   if (stat(fullPath.c_str(), &statbuf) == 0) {
-    if ((uint64_t)statbuf.st_size <= this->_currentTailFilePosition) {
+    if ((uint64_t) statbuf.st_size <= this->_currentTailFilePosition) {
       // there are no new input for the current tail file
       context->yield();
       return;

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/processors/UpdateAttribute.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/processors/UpdateAttribute.cpp b/libminifi/src/processors/UpdateAttribute.cpp
index f431012..80b0215 100644
--- a/libminifi/src/processors/UpdateAttribute.cpp
+++ b/libminifi/src/processors/UpdateAttribute.cpp
@@ -30,12 +30,8 @@ namespace nifi {
 namespace minifi {
 namespace processors {
 
-core::Relationship UpdateAttribute::Success(
-    "success",
-    "All files are routed to success");
-core::Relationship UpdateAttribute::Failure(
-    "failure",
-    "Failed files are transferred to failure");
+core::Relationship UpdateAttribute::Success("success", "All files are routed to success");
+core::Relationship UpdateAttribute::Failure("failure", "Failed files are transferred to failure");
 
 void UpdateAttribute::initialize() {
   std::set<core::Property> properties;
@@ -47,20 +43,18 @@ void UpdateAttribute::initialize() {
   setSupportedRelationships(relationships);
 }
 
-void UpdateAttribute::onSchedule(core::ProcessContext *context,
-                                 core::ProcessSessionFactory *sessionFactory) {
+void UpdateAttribute::onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory) {
   attributes_.clear();
   const auto &dynamic_prop_keys = context->getDynamicPropertyKeys();
   logger_->log_info("UpdateAttribute registering %d keys", dynamic_prop_keys.size());
 
   for (const auto &key : dynamic_prop_keys) {
-    attributes_.emplace_back(key);
+    attributes_.emplace_back(core::PropertyBuilder::createProperty(key)->withDescription("auto generated")->supportsExpressionLanguage(true)->build());
     logger_->log_info("UpdateAttribute registered attribute '%s'", key);
   }
 }
 
-void UpdateAttribute::onTrigger(core::ProcessContext *context,
-                                core::ProcessSession *session) {
+void UpdateAttribute::onTrigger(core::ProcessContext *context, core::ProcessSession *session) {
   auto flow_file = session->get();
 
   // Do nothing if there are no incoming files
@@ -72,10 +66,8 @@ void UpdateAttribute::onTrigger(core::ProcessContext *context,
     for (const auto &attribute : attributes_) {
       std::string value;
       context->getDynamicProperty(attribute, value, flow_file);
-      flow_file->setAttribute(attribute, value);
-      logger_->log_info("Set attribute '%s' of flow file '%s' with value '%s'",
-                        attribute,
-                        flow_file->getUUIDStr(), value);
+      flow_file->setAttribute(attribute.getName(), value);
+      logger_->log_info("Set attribute '%s' of flow file '%s' with value '%s'", attribute.getName(), flow_file->getUUIDStr(), value);
     }
     session->transfer(flow_file, Success);
   } catch (const std::exception &e) {

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/provenance/Provenance.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/provenance/Provenance.cpp b/libminifi/src/provenance/Provenance.cpp
index 1edb191..9c43361 100644
--- a/libminifi/src/provenance/Provenance.cpp
+++ b/libminifi/src/provenance/Provenance.cpp
@@ -17,7 +17,6 @@
  */
 
 #include "provenance/Provenance.h"
-#include <arpa/inet.h>
 #include <cstdint>
 #include <memory>
 #include <string>

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/sitetosite/Peer.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/sitetosite/Peer.cpp b/libminifi/src/sitetosite/Peer.cpp
index 385f991..5505b0c 100644
--- a/libminifi/src/sitetosite/Peer.cpp
+++ b/libminifi/src/sitetosite/Peer.cpp
@@ -17,9 +17,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <sys/time.h>
 #include <stdio.h>
-#include <time.h>
 #include <chrono>
 #include <thread>
 #include <random>

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/sitetosite/RawSocketProtocol.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/sitetosite/RawSocketProtocol.cpp b/libminifi/src/sitetosite/RawSocketProtocol.cpp
index 2bccb0b..9b17db1 100644
--- a/libminifi/src/sitetosite/RawSocketProtocol.cpp
+++ b/libminifi/src/sitetosite/RawSocketProtocol.cpp
@@ -16,7 +16,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <sys/time.h>
 #include <stdio.h>
 #include <time.h>
 #include <chrono>
@@ -241,12 +240,10 @@ bool RawSiteToSiteClient::handShake() {
     return false;
   }
   logger_->log_debug("Site2Site Protocol Perform hand shake with destination port %s", port_id_str_);
-  uuid_t uuid;
+  utils::Identifier uuid;
   // Generate the global UUID for the com identify
   id_generator_->generate(uuid);
-  char uuidStr[37];
-  uuid_unparse_lower(uuid, uuidStr);
-  _commsIdentifier = uuidStr;
+  _commsIdentifier = uuid.to_string();
 
   int ret = peer_->writeUTF(_commsIdentifier);
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/src/utils/Id.cpp
----------------------------------------------------------------------
diff --git a/libminifi/src/utils/Id.cpp b/libminifi/src/utils/Id.cpp
index da0fea9..8994771 100644
--- a/libminifi/src/utils/Id.cpp
+++ b/libminifi/src/utils/Id.cpp
@@ -35,10 +35,92 @@ namespace nifi {
 namespace minifi {
 namespace utils {
 
+Identifier::Identifier(UUID_FIELD u)
+    : IdentifierBase(u) {
+  build_string();
+}
+
+Identifier::Identifier()
+    : IdentifierBase() {
+}
+
+Identifier::Identifier(const Identifier &other) {
+  if (!other.convert().empty()) {
+    copyInto(other);
+    build_string();
+  }
+}
+
+Identifier::Identifier(const IdentifierBase &other) {
+  if (!other.convert().empty()) {
+    copyInto(other);
+    build_string();
+  }
+}
+
+Identifier &Identifier::operator=(const Identifier &other) {
+  if (!other.convert().empty()) {
+    IdentifierBase::operator =(other);
+    build_string();
+  }
+  return *this;
+}
+
+Identifier &Identifier::operator=(const IdentifierBase &other) {
+  if (!other.convert().empty()) {
+    IdentifierBase::operator =(other);
+    build_string();
+  }
+  return *this;
+}
+
+Identifier &Identifier::operator=(UUID_FIELD o) {
+  IdentifierBase::operator=(o);
+  build_string();
+  return *this;
+}
+
+Identifier &Identifier::operator=(std::string id) {
+  uuid_parse(id.c_str(), id_);
+  converted_ = id;
+  return *this;
+}
+
+bool Identifier::operator==(std::nullptr_t nullp) {
+  return converted_.empty();
+}
+
+bool Identifier::operator!=(std::nullptr_t nullp) {
+  return !converted_.empty();
+}
+
+bool Identifier::operator!=(const Identifier &other) {
+  return converted_ != other.converted_;
+}
+
+bool Identifier::operator==(const Identifier &other) {
+  return converted_ == other.converted_;
+}
+
+std::string Identifier::to_string() {
+  return convert();
+}
+
+unsigned char *Identifier::toArray() {
+  return id_;
+}
+
+void Identifier::build_string() {
+  char uuidStr[37] = { 0 };
+  uuid_unparse_lower(id_, uuidStr);
+  converted_ = uuidStr;
+}
+
 uint64_t timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
 
 NonRepeatingStringGenerator::NonRepeatingStringGenerator()
-    : prefix_((std::to_string(timestamp) + "-")), incrementor_(0) {
+    : prefix_((std::to_string(timestamp) + "-")),
+      incrementor_(0) {
 }
 
 IdGenerator::IdGenerator()
@@ -69,7 +151,7 @@ uint64_t IdGenerator::getDeviceSegmentFromString(const std::string& str, int num
 
 uint64_t IdGenerator::getRandomDeviceSegment(int numBits) {
   uint64_t deviceSegment = 0;
-  uuid_t random_uuid;
+  UUID_FIELD random_uuid;
   for (int word = 0; word < 2; word++) {
     uuid_generate_random(random_uuid);
     for (int i = 0; i < 4; i++) {
@@ -122,14 +204,21 @@ void IdGenerator::initialize(const std::shared_ptr<Properties> & properties) {
     } else if ("time" == implementation_str) {
       logging::LOG_DEBUG(logger_) << "Using uuid_generate_time implementation for uids.";
     } else {
-      logging::LOG_DEBUG(logger_) << "Invalid value for uid.implementation ("  << implementation_str << "). Using uuid_generate_time implementation for uids.";
+      logging::LOG_DEBUG(logger_) << "Invalid value for uid.implementation (" << implementation_str << "). Using uuid_generate_time implementation for uids.";
     }
   } else {
     logging::LOG_DEBUG(logger_) << "Using uuid_generate_time implementation for uids.";
   }
 }
 
-void IdGenerator::generate(uuid_t output) {
+Identifier IdGenerator::generate() {
+  Identifier ident;
+  generate(ident);
+  return ident;
+}
+
+void IdGenerator::generate(Identifier &ident) {
+  UUID_FIELD output;
   switch (implementation_) {
     case UUID_RANDOM_IMPL:
       uuid_generate_random(output);
@@ -149,6 +238,7 @@ void IdGenerator::generate(uuid_t output) {
       uuid_generate_time(output);
       break;
   }
+  ident = output;
 }
 
 } /* namespace utils */

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/TestBase.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/TestBase.cpp b/libminifi/test/TestBase.cpp
index a97bc99..57ef71d 100644
--- a/libminifi/test/TestBase.cpp
+++ b/libminifi/test/TestBase.cpp
@@ -37,8 +37,9 @@ std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::shared_ptr<co
   }
   std::lock_guard<std::recursive_mutex> guard(mutex);
 
-  uuid_t uuid;
-  uuid_generate(uuid);
+  utils::Identifier uuid;
+
+  utils::IdGenerator::getIdGenerator()->generate(uuid);
 
   processor->setStreamFactory(stream_factory);
   // initialize the processor
@@ -67,7 +68,7 @@ std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::shared_ptr<co
     connection->setSource(last);
     connection->setDestination(processor);
 
-    uuid_t uuid_copy, uuid_copy_next;
+    utils::Identifier uuid_copy, uuid_copy_next;
     last->getUUID(uuid_copy);
     connection->setSourceUUID(uuid_copy);
     processor->getUUID(uuid_copy_next);
@@ -97,8 +98,11 @@ std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::string &proce
   }
   std::lock_guard<std::recursive_mutex> guard(mutex);
 
-  uuid_t uuid;
-  uuid_generate(uuid);
+  utils::Identifier uuid;
+
+  utils::IdGenerator::getIdGenerator()->generate(uuid);
+
+  std::cout << "generated " << uuid.to_string() << std::endl;
 
   auto ptr = core::ClassLoader::getDefaultClassLoader().instantiate(processor_name, uuid);
   if (nullptr == ptr) {
@@ -194,7 +198,7 @@ std::shared_ptr<minifi::Connection> TestPlan::buildFinalConnection(std::shared_p
   if (setDest)
     connection->setDestination(processor);
 
-  uuid_t uuid_copy;
+  utils::Identifier uuid_copy;
   last->getUUID(uuid_copy);
   connection->setSourceUUID(uuid_copy);
   if (setDest)

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/archive-tests/CompressContentTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/archive-tests/CompressContentTests.cpp b/libminifi/test/archive-tests/CompressContentTests.cpp
index 3c51277..2417cad 100644
--- a/libminifi/test/archive-tests/CompressContentTests.cpp
+++ b/libminifi/test/archive-tests/CompressContentTests.cpp
@@ -113,9 +113,9 @@ TEST_CASE("CompressFileGZip", "[compressfiletest1]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::CompressContent>("compresscontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -214,9 +214,9 @@ TEST_CASE("DecompressFileGZip", "[compressfiletest2]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::CompressContent>("compresscontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -316,9 +316,9 @@ TEST_CASE("CompressFileBZip", "[compressfiletest3]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::CompressContent>("compresscontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -418,9 +418,9 @@ TEST_CASE("DecompressFileBZip", "[compressfiletest4]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::CompressContent>("compresscontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -520,9 +520,9 @@ TEST_CASE("CompressFileLZMA", "[compressfiletest5]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::CompressContent>("compresscontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -628,9 +628,9 @@ TEST_CASE("DecompressFileLZMA", "[compressfiletest6]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::CompressContent>("compresscontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -737,9 +737,9 @@ TEST_CASE("CompressFileXYLZMA", "[compressfiletest7]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::CompressContent>("compresscontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -845,9 +845,9 @@ TEST_CASE("DecompressFileXYLZMA", "[compressfiletest8]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::CompressContent>("compresscontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/archive-tests/FocusArchiveTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/archive-tests/FocusArchiveTests.cpp b/libminifi/test/archive-tests/FocusArchiveTests.cpp
index 0934208..2d5cd84 100644
--- a/libminifi/test/archive-tests/FocusArchiveTests.cpp
+++ b/libminifi/test/archive-tests/FocusArchiveTests.cpp
@@ -55,7 +55,7 @@ TEST_CASE("Test Creation of UnfocusArchiveEntry", "[getfileCreate]") {
     TestController testController;
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::UnfocusArchiveEntry>("processorname");
     REQUIRE(processor->getName() == "processorname");
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
 }
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
index 3bc23b7..c254a39 100644
--- a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
+++ b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
@@ -111,7 +111,7 @@ TEST_CASE("Test creation of ManipulateArchive", "[manipulatearchiveCreate]") {
   TestController testController;
   std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::ManipulateArchive>("processorname");
   REQUIRE(processor->getName() == "processorname");
-  uuid_t processoruuid;
+  utils::Identifier processoruuid;
   REQUIRE(true == processor->getUUID(processoruuid));
 }
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/archive-tests/MergeFileTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/archive-tests/MergeFileTests.cpp b/libminifi/test/archive-tests/MergeFileTests.cpp
index d1b42c6..b919370 100644
--- a/libminifi/test/archive-tests/MergeFileTests.cpp
+++ b/libminifi/test/archive-tests/MergeFileTests.cpp
@@ -134,9 +134,9 @@ TEST_CASE("MergeFileDefragment", "[mergefiletest1]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::MergeContent>("mergecontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -306,9 +306,9 @@ TEST_CASE("MergeFileDefragmentDelimiter", "[mergefiletest2]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::MergeContent>("mergecontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -469,9 +469,9 @@ TEST_CASE("MergeFileDefragmentDropFlow", "[mergefiletest3]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::MergeContent>("mergecontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -634,9 +634,9 @@ TEST_CASE("MergeFileBinPack", "[mergefiletest4]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::MergeContent>("mergecontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -782,9 +782,9 @@ TEST_CASE("MergeFileTar", "[mergefiletest4]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::MergeContent>("mergecontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -939,9 +939,9 @@ TEST_CASE("MergeFileZip", "[mergefiletest5]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::MergeContent>("mergecontent");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/bustache-tests/ApplyTemplateTests.cpp b/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
index 02cc61a..e83167e 100644
--- a/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
+++ b/libminifi/test/bustache-tests/ApplyTemplateTests.cpp
@@ -50,7 +50,7 @@ TEST_CASE("Test Creation of ApplyTemplate", "[ApplyTemplateCreate]") {
     TestController testController;
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::ApplyTemplate>("processorname");
     REQUIRE(processor->getName() == "processorname");
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(processor->getUUID(processoruuid));
 }
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/expression-language-tests/RouteOnAttributeTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/expression-language-tests/RouteOnAttributeTests.cpp b/libminifi/test/expression-language-tests/RouteOnAttributeTests.cpp
index d8b4560..329ffe0 100644
--- a/libminifi/test/expression-language-tests/RouteOnAttributeTests.cpp
+++ b/libminifi/test/expression-language-tests/RouteOnAttributeTests.cpp
@@ -32,32 +32,19 @@ TEST_CASE("RouteOnAttributeMatchedTest", "[routeOnAttributeMatchedTest]") {
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
 
-  const auto &generate_proc = plan->addProcessor("GenerateFlowFile",
-                                                 "generate");
+  const auto &generate_proc = plan->addProcessor("GenerateFlowFile", "generate");
 
-  const auto &update_proc = plan->addProcessor("UpdateAttribute",
-                                               "update",
-                                               core::Relationship("success", "description"),
-                                               true);
+  const auto &update_proc = plan->addProcessor("UpdateAttribute", "update", core::Relationship("success", "description"), true);
   plan->setProperty(update_proc, "route_condition_attr", "true", true);
 
-  const auto &route_proc = plan->addProcessor("RouteOnAttribute",
-                                              "route",
-                                              core::Relationship("success", "description"),
-                                              true);
-  route_proc->setAutoTerminatedRelationships({{core::Relationship("unmatched", "description")}});
+  const auto &route_proc = plan->addProcessor("RouteOnAttribute", "route", core::Relationship("success", "description"), true);
+  route_proc->setAutoTerminatedRelationships({ { core::Relationship("unmatched", "description") } });
   plan->setProperty(route_proc, "route_matched", "${route_condition_attr}", true);
 
-  const auto &update_matched_proc = plan->addProcessor("UpdateAttribute",
-                                                       "update_matched",
-                                                       core::Relationship("route_matched", "description"),
-                                                       true);
+  const auto &update_matched_proc = plan->addProcessor("UpdateAttribute", "update_matched", core::Relationship("route_matched", "description"), true);
   plan->setProperty(update_matched_proc, "route_check_attr", "good", true);
 
-  const auto &log_proc = plan->addProcessor("LogAttribute",
-                                            "log",
-                                            core::Relationship("success", "description"),
-                                            true);
+  const auto &log_proc = plan->addProcessor("LogAttribute", "log", core::Relationship("success", "description"), true);
 
   testController.runSession(plan, false);  // generate
   testController.runSession(plan, false);  // update
@@ -80,31 +67,18 @@ TEST_CASE("RouteOnAttributeUnmatchedTest", "[routeOnAttributeUnmatchedTest]") {
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
 
-  const auto &generate_proc = plan->addProcessor("GenerateFlowFile",
-                                                 "generate");
+  const auto &generate_proc = plan->addProcessor("GenerateFlowFile", "generate");
 
-  const auto &update_proc = plan->addProcessor("UpdateAttribute",
-                                               "update",
-                                               core::Relationship("success", "description"),
-                                               true);
+  const auto &update_proc = plan->addProcessor("UpdateAttribute", "update", core::Relationship("success", "description"), true);
   plan->setProperty(update_proc, "route_condition_attr", "false", true);
 
-  const auto &route_proc = plan->addProcessor("RouteOnAttribute",
-                                              "route",
-                                              core::Relationship("success", "description"),
-                                              true);
+  const auto &route_proc = plan->addProcessor("RouteOnAttribute", "route", core::Relationship("success", "description"), true);
   plan->setProperty(route_proc, "route_matched", "${route_condition_attr}", true);
 
-  const auto &update_matched_proc = plan->addProcessor("UpdateAttribute",
-                                                       "update_matched",
-                                                       core::Relationship("unmatched", "description"),
-                                                       true);
+  const auto &update_matched_proc = plan->addProcessor("UpdateAttribute", "update_matched", core::Relationship("unmatched", "description"), true);
   plan->setProperty(update_matched_proc, "route_check_attr", "good", true);
 
-  const auto &log_proc = plan->addProcessor("LogAttribute",
-                                            "log",
-                                            core::Relationship("success", "description"),
-                                            true);
+  const auto &log_proc = plan->addProcessor("LogAttribute", "log", core::Relationship("success", "description"), true);
 
   testController.runSession(plan, false);  // generate
   testController.runSession(plan, false);  // update

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/integration/TestExecuteProcess.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/integration/TestExecuteProcess.cpp b/libminifi/test/integration/TestExecuteProcess.cpp
index 5f2c6e2..f4f28d9 100644
--- a/libminifi/test/integration/TestExecuteProcess.cpp
+++ b/libminifi/test/integration/TestExecuteProcess.cpp
@@ -56,7 +56,7 @@ int main(int argc, char **argv) {
   std::shared_ptr<minifi::FlowController> controller = std::make_shared<
       TestFlowController>(test_repo, test_repo, content_repo);
 
-  uuid_t processoruuid;
+  utils::Identifier processoruuid;
   assert(true == processor->getUUID(processoruuid));
   std::shared_ptr<minifi::Connection> connection = std::make_shared<minifi::Connection>(test_repo, content_repo, "executeProcessConnection");
   connection->setRelationship(core::Relationship("success", "description"));

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/rocksdb-tests/RepoTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/rocksdb-tests/RepoTests.cpp b/libminifi/test/rocksdb-tests/RepoTests.cpp
index c92133a..bf9f51c 100644
--- a/libminifi/test/rocksdb-tests/RepoTests.cpp
+++ b/libminifi/test/rocksdb-tests/RepoTests.cpp
@@ -30,6 +30,9 @@
 #include "properties/Configure.h"
 
 TEST_CASE("Test Repo Empty Value Attribute", "[TestFFR1]") {
+  LogTestController::getInstance().setDebug<core::ContentRepository>();
+  LogTestController::getInstance().setDebug<core::repository::FileSystemRepository>();
+  LogTestController::getInstance().setDebug<core::repository::FlowFileRepository>();
   TestController testController;
   char format[] = "/tmp/testRepo.XXXXXX";
   char *dir = testController.createTempDirectory(format);
@@ -44,10 +47,15 @@ TEST_CASE("Test Repo Empty Value Attribute", "[TestFFR1]") {
 
   REQUIRE(true == record.Serialize());
 
+  utils::file::FileUtils::delete_dir(FLOWFILE_CHECKPOINT_DIRECTORY, true);
+
   repository->stop();
 }
 
 TEST_CASE("Test Repo Empty Key Attribute ", "[TestFFR2]") {
+  LogTestController::getInstance().setDebug<core::ContentRepository>();
+  LogTestController::getInstance().setDebug<core::repository::FileSystemRepository>();
+  LogTestController::getInstance().setDebug<core::repository::FlowFileRepository>();
   TestController testController;
   char format[] = "/tmp/testRepo.XXXXXX";
   char *dir = testController.createTempDirectory(format);
@@ -63,10 +71,15 @@ TEST_CASE("Test Repo Empty Key Attribute ", "[TestFFR2]") {
 
   REQUIRE(true == record.Serialize());
 
+  utils::file::FileUtils::delete_dir(FLOWFILE_CHECKPOINT_DIRECTORY, true);
+
   repository->stop();
 }
 
 TEST_CASE("Test Repo Key Attribute Verify ", "[TestFFR3]") {
+  LogTestController::getInstance().setDebug<core::ContentRepository>();
+  LogTestController::getInstance().setDebug<core::repository::FileSystemRepository>();
+  LogTestController::getInstance().setDebug<core::repository::FlowFileRepository>();
   TestController testController;
   char format[] = "/tmp/testRepo.XXXXXX";
   char *dir = testController.createTempDirectory(format);
@@ -108,6 +121,8 @@ TEST_CASE("Test Repo Key Attribute Verify ", "[TestFFR3]") {
 
   REQUIRE(true == record2.getAttribute("keyB", value));
   REQUIRE("" == value);
+
+  utils::file::FileUtils::delete_dir(FLOWFILE_CHECKPOINT_DIRECTORY, true);
 }
 
 TEST_CASE("Test Delete Content ", "[TestFFR4]") {
@@ -159,16 +174,19 @@ TEST_CASE("Test Delete Content ", "[TestFFR4]") {
   std::ifstream fileopen(ss.str());
   REQUIRE(false == fileopen.good());
 
+  utils::file::FileUtils::delete_dir(FLOWFILE_CHECKPOINT_DIRECTORY, true);
+
   LogTestController::getInstance().reset();
 }
 
-
 TEST_CASE("Test Validate Checkpoint ", "[TestFFR5]") {
   TestController testController;
+  utils::file::FileUtils::delete_dir(FLOWFILE_CHECKPOINT_DIRECTORY, true);
   char format[] = "/tmp/testRepo.XXXXXX";
   LogTestController::getInstance().setDebug<core::ContentRepository>();
-  LogTestController::getInstance().setDebug<core::repository::FileSystemRepository>();
-  LogTestController::getInstance().setDebug<core::repository::FlowFileRepository>();
+  LogTestController::getInstance().setTrace<core::repository::FileSystemRepository>();
+  LogTestController::getInstance().setTrace<minifi::ResourceClaim>();
+  LogTestController::getInstance().setTrace<minifi::FlowFileRecord>();
 
   char *dir = testController.createTempDirectory(format);
 
@@ -190,30 +208,37 @@ TEST_CASE("Test Validate Checkpoint ", "[TestFFR5]") {
   repository->loadComponent(content_repo);
 
   std::shared_ptr<minifi::ResourceClaim> claim = std::make_shared<minifi::ResourceClaim>(ss.str(), content_repo);
+  {
+    minifi::FlowFileRecord record(repository, content_repo, attributes, claim);
 
-  minifi::FlowFileRecord record(repository, content_repo, attributes, claim);
+    record.addAttribute("keyA", "hasdgasdgjsdgasgdsgsadaskgasd");
 
-  record.addAttribute("keyA", "hasdgasdgjsdgasgdsgsadaskgasd");
+    record.addAttribute("", "hasdgasdgjsdgasgdsgsadaskgasd");
 
-  record.addAttribute("", "hasdgasdgjsdgasgdsgsadaskgasd");
+    REQUIRE(true == record.Serialize());
 
-  REQUIRE(true == record.Serialize());
-
-  repository->flush();
+    repository->flush();
 
-  repository->stop();
+    repository->stop();
 
-  repository->loadComponent(content_repo);
+    repository->loadComponent(content_repo);
 
-  repository->start();
+    repository->start();
 
-  // sleep for 100 ms to let the delete work.
-  std::this_thread::sleep_for(std::chrono::milliseconds(100));
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+    repository->stop();
+    claim = nullptr;
+    // sleep for 100 ms to let the delete work.
 
-  repository->stop();
+    std::this_thread::sleep_for(std::chrono::milliseconds(500));
+  }
 
   std::ifstream fileopen(ss.str());
-  REQUIRE(false == fileopen.good());
+
+  REQUIRE(true == fileopen.fail());
+
+  utils::file::FileUtils::delete_dir(FLOWFILE_CHECKPOINT_DIRECTORY, true);
 
   LogTestController::getInstance().reset();
 }
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/C2MetricsTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/C2MetricsTests.cpp b/libminifi/test/unit/C2MetricsTests.cpp
index 231e634..b21b3ee 100644
--- a/libminifi/test/unit/C2MetricsTests.cpp
+++ b/libminifi/test/unit/C2MetricsTests.cpp
@@ -46,8 +46,8 @@ TEST_CASE("TestSystemMetrics", "[c2m5]") {
 
   REQUIRE(2 == metrics.serialize().size());
 
-  REQUIRE("identifier" == metrics.serialize().at(0).name);
-  REQUIRE("systemInfo" == metrics.serialize().at(1).name);
+  REQUIRE("systemInfo" == metrics.serialize().at(0).name);
+  REQUIRE("identifier" == metrics.serialize().at(1).name);
 }
 
 TEST_CASE("QueueMetricsTestNoConnections", "[c2m2]") {

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/ExtractTextTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ExtractTextTests.cpp b/libminifi/test/unit/ExtractTextTests.cpp
index 545996e..5931210 100644
--- a/libminifi/test/unit/ExtractTextTests.cpp
+++ b/libminifi/test/unit/ExtractTextTests.cpp
@@ -46,7 +46,7 @@ TEST_CASE("Test Creation of ExtractText", "[extracttextCreate]") {
     TestController testController;
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::ExtractText>("processorname");
     REQUIRE(processor->getName() == "processorname");
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(processor->getUUID(processoruuid));
 }
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/GetTCPTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/GetTCPTests.cpp b/libminifi/test/unit/GetTCPTests.cpp
index 34765e7..777ffd5 100644
--- a/libminifi/test/unit/GetTCPTests.cpp
+++ b/libminifi/test/unit/GetTCPTests.cpp
@@ -36,6 +36,10 @@
 #include "core/reporting/SiteToSiteProvenanceReportingTask.h"
 
 TEST_CASE("GetTCPWithoutEOM", "[GetTCP1]") {
+  utils::Identifier ident = utils::Identifier();
+
+  std::cout << (ident == nullptr) << std::endl;
+  std::cout << ident.to_string() << std::endl;
   TestController testController;
   std::vector<uint8_t> buffer;
   for (auto c : "Hello World\nHello Warld\nGoodByte Cruel world") {
@@ -64,12 +68,14 @@ TEST_CASE("GetTCPWithoutEOM", "[GetTCP1]") {
   processor->setStreamFactory(stream_factory);
   processor->initialize();
 
-  uuid_t processoruuid;
+  utils::Identifier processoruuid;
   REQUIRE(true == processor->getUUID(processoruuid));
 
-  uuid_t logattribute_uuid;
+  utils::Identifier logattribute_uuid;
   REQUIRE(true == logAttribute->getUUID(logattribute_uuid));
 
+  REQUIRE(processoruuid.to_string() != logattribute_uuid.to_string());
+
   std::shared_ptr<minifi::Connection> connection = std::make_shared<minifi::Connection>(repo, content_repo, "gettcpexampleConnection");
   connection->setRelationship(core::Relationship("success", "description"));
 
@@ -176,10 +182,10 @@ TEST_CASE("GetTCPWithOEM", "[GetTCP2]") {
   processor->setStreamFactory(stream_factory);
   processor->initialize();
 
-  uuid_t processoruuid;
+  utils::Identifier processoruuid;
   REQUIRE(true == processor->getUUID(processoruuid));
 
-  uuid_t logattribute_uuid;
+  utils::Identifier logattribute_uuid;
   REQUIRE(true == logAttribute->getUUID(logattribute_uuid));
 
   std::shared_ptr<minifi::Connection> connection = std::make_shared<minifi::Connection>(repo, content_repo, "gettcpexampleConnection");
@@ -301,10 +307,10 @@ TEST_CASE("GetTCPWithOnlyOEM", "[GetTCP3]") {
   processor->setStreamFactory(stream_factory);
   processor->initialize();
 
-  uuid_t processoruuid;
+  utils::Identifier processoruuid;
   REQUIRE(true == processor->getUUID(processoruuid));
 
-  uuid_t logattribute_uuid;
+  utils::Identifier logattribute_uuid;
   REQUIRE(true == logAttribute->getUUID(logattribute_uuid));
 
   std::shared_ptr<minifi::Connection> connection = std::make_shared<minifi::Connection>(repo, content_repo, "gettcpexampleConnection");

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/IdTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/IdTests.cpp b/libminifi/test/unit/IdTests.cpp
index c60aedb..90ddcd2 100644
--- a/libminifi/test/unit/IdTests.cpp
+++ b/libminifi/test/unit/IdTests.cpp
@@ -100,13 +100,15 @@ TEST_CASE("Test Hex Device Segment 16 bits correct digits", "[id]") {
   std::shared_ptr<utils::IdGenerator> generator = utils::IdGenerator::getIdGenerator();
   generator->initialize(id_props);
 
-  uuid_t uid;
-  generator->generate(uid);
+  utils::Identifier uuid;
+  generator->generate(uuid);
+  auto uid = uuid.toArray();
   REQUIRE(0x09 == uid[0]);
   REQUIRE(0xaf == uid[1]);
   REQUIRE(0 == uid[15]);
 
-  generator->generate(uid);
+  generator->generate(uuid);
+  uid = uuid.toArray();
   REQUIRE(0x09 == uid[0]);
   REQUIRE(0xaf == uid[1]);
   REQUIRE(1 == uid[15]);
@@ -126,14 +128,16 @@ TEST_CASE("Test Hex Device Segment 16 bits too many digits", "[id]") {
   std::shared_ptr<utils::IdGenerator> generator = utils::IdGenerator::getIdGenerator();
   generator->initialize(id_props);
 
-  uuid_t uid;
-  generator->generate(uid);
+  utils::Identifier uuid;
+  generator->generate(uuid);
+  auto uid = uuid.toArray();
   REQUIRE(0x09 == uid[0]);
   REQUIRE(0xaf == uid[1]);
   REQUIRE(0 == (uid[2] & 128));
   REQUIRE(0 == uid[15]);
 
-  generator->generate(uid);
+  generator->generate(uuid);
+  uid = uuid.toArray();
   REQUIRE(0x09 == uid[0]);
   REQUIRE(0xaf == uid[1]);
   REQUIRE(0 == (uid[2] & 128));
@@ -155,19 +159,27 @@ TEST_CASE("Test Hex Device Segment 18 bits", "[id]") {
   std::shared_ptr<utils::IdGenerator> generator = utils::IdGenerator::getIdGenerator();
   generator->initialize(id_props);
 
-  uuid_t uid;
-  generator->generate(uid);
+  utils::Identifier uuid;
+  generator->generate(uuid);
+  auto uid = uuid.toArray();
   REQUIRE(0x09 == uid[0]);
   REQUIRE(0xaf == uid[1]);
   REQUIRE(128 == (uid[2] & 192));
   REQUIRE(0 == uid[15]);
 
-  generator->generate(uid);
+  generator->generate(uuid);
+  uid = uuid.toArray();
   REQUIRE(0x09 == uid[0]);
   REQUIRE(0xaf == uid[1]);
   REQUIRE(128 == (uid[2] & 192));
   REQUIRE(1 == uid[15]);
 
+
+  utils::Identifier uuid2;
+  generator->generate(uuid2);
+  REQUIRE(uuid.to_string() != uuid2.to_string());
+  REQUIRE(uuid != uuid2);
+
   REQUIRE(true == LogTestController::getInstance().contains("Using minifi uid prefix: 9af8"));
   LogTestController::getInstance().reset();
 }

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/ManifestTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ManifestTests.cpp b/libminifi/test/unit/ManifestTests.cpp
index 83811a2..7e463dd 100644
--- a/libminifi/test/unit/ManifestTests.cpp
+++ b/libminifi/test/unit/ManifestTests.cpp
@@ -59,8 +59,10 @@ TEST_CASE("Test Valid Regex", "[validRegex]") {
   const auto &prop_0 = prop_descriptors.children[0];
   REQUIRE(prop_0.children.size() >= 3);
   const auto &df = prop_0.children[3];
-  REQUIRE("defaultValue" == df.name);
-  const auto &prop_0_valid_regex = prop_0.children[4];
+  REQUIRE("expressionLanguageScope" == df.name);
+  const auto &prop_0_defv = prop_0.children[4];
+  REQUIRE("defaultValue" == prop_0_defv.name);
+  const auto &prop_0_valid_regex = prop_0.children[5];
   REQUIRE("validRegex" == prop_0_valid_regex.name);
 }
 
@@ -110,8 +112,8 @@ TEST_CASE("Test Dependent", "[dependent]") {
   REQUIRE(prop_descriptors.children.size() > 0);
   const auto &prop_0 = prop_descriptors.children[1];
   REQUIRE(prop_0.children.size() >= 3);
-  REQUIRE("defaultValue" == prop_0.children[3].name);
-  REQUIRE("validRegex" == prop_0.children[4].name);
+  REQUIRE("expressionLanguageScope" == prop_0.children[3].name);
+  REQUIRE("defaultValue" == prop_0.children[4].name);
   const auto &prop_0_dependent_0 = prop_descriptors.children[2];
   REQUIRE("Directory" == prop_0_dependent_0.name);
 }

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/MockClasses.h
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/MockClasses.h b/libminifi/test/unit/MockClasses.h
index 00eaf82..7f0bd88 100644
--- a/libminifi/test/unit/MockClasses.h
+++ b/libminifi/test/unit/MockClasses.h
@@ -33,13 +33,13 @@ class MockControllerService : public core::controller::ControllerService {
 
   }
 
-  explicit MockControllerService(const std::string &name, uuid_t uuid)
+  explicit MockControllerService(const std::string &name, utils::Identifier &  uuid)
       : ControllerService(name, uuid) {
 
   }
 
   explicit MockControllerService(const std::string &name)
-      : ControllerService(name, 0) {
+      : ControllerService(name) {
 
   }
   MockControllerService() {
@@ -81,13 +81,13 @@ class MockControllerService : public core::controller::ControllerService {
 class MockProcessor : public core::Processor {
  public:
 
-  explicit MockProcessor(const std::string &name, uuid_t uuid)
+  explicit MockProcessor(const std::string &name, utils::Identifier uuid)
       : Processor(name, uuid) {
     setTriggerWhenEmpty(true);
   }
 
   explicit MockProcessor(const std::string &name)
-      : Processor(name, 0) {
+      : Processor(name) {
     setTriggerWhenEmpty(true);
   }
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/ProcessorTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ProcessorTests.cpp b/libminifi/test/unit/ProcessorTests.cpp
index 8810763..32ba181 100644
--- a/libminifi/test/unit/ProcessorTests.cpp
+++ b/libminifi/test/unit/ProcessorTests.cpp
@@ -53,7 +53,7 @@ TEST_CASE("Test GetFileMultiple", "[getfileCreate3]") {
   char format[] = "/tmp/gt.XXXXXX";
   char *dir = testController.createTempDirectory(format);
 
-  uuid_t processoruuid;
+  utils::Identifier processoruuid;
   REQUIRE(true == processor->getUUID(processoruuid));
 
   std::shared_ptr<minifi::Connection> connection = std::make_shared<minifi::Connection>(test_repo, content_repo, "getfileCreate2Connection");
@@ -137,7 +137,7 @@ TEST_CASE("Test GetFile Ignore", "[getfileCreate3]") {
   char format[] = "/tmp/gt.XXXXXX";
   char *dir = testController.createTempDirectory(format);
 
-  uuid_t processoruuid;
+  utils::Identifier processoruuid;
   REQUIRE(true == processor->getUUID(processoruuid));
 
   std::shared_ptr<minifi::Connection> connection = std::make_shared<minifi::Connection>(test_repo, content_repo, "getfileCreate2Connection");
@@ -332,7 +332,7 @@ TEST_CASE("Test Find file", "[getfileCreate3]") {
 
 class TestProcessorNoContent : public minifi::core::Processor {
  public:
-  explicit TestProcessorNoContent(std::string name, uuid_t uuid = NULL)
+  explicit TestProcessorNoContent(std::string name, utils::Identifier uuid = NULL)
       : Processor(name, uuid),
         Success("success", "All files are routed to success") {
   }

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/ProvenanceTestHelper.h
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ProvenanceTestHelper.h b/libminifi/test/unit/ProvenanceTestHelper.h
index db7b35a..00547af 100644
--- a/libminifi/test/unit/ProvenanceTestHelper.h
+++ b/libminifi/test/unit/ProvenanceTestHelper.h
@@ -46,7 +46,7 @@
 class TestRepository : public core::Repository {
  public:
   TestRepository()
-      : core::SerializableComponent("repo_name", 0),
+      : core::SerializableComponent("repo_name"),
         Repository("repo_name", "./dir", 1000, 100, 0) {
   }
   // initialize
@@ -155,7 +155,7 @@ class TestRepository : public core::Repository {
 class TestFlowRepository : public core::Repository {
  public:
   TestFlowRepository()
-      : core::SerializableComponent("ff", 0),
+      : core::SerializableComponent("ff"),
         core::Repository("ff", "./dir", 1000, 100, 0) {
   }
   // initialize
@@ -256,19 +256,19 @@ class TestFlowController : public minifi::FlowController {
     return true;
   }
 
-  std::shared_ptr<core::Processor> createProcessor(std::string name, uuid_t uuid) {
+  std::shared_ptr<core::Processor> createProcessor(std::string name, utils::Identifier &  uuid) {
     return 0;
   }
 
-  core::ProcessGroup *createRootProcessGroup(std::string name, uuid_t uuid) {
+  core::ProcessGroup *createRootProcessGroup(std::string name, utils::Identifier &  uuid) {
     return 0;
   }
 
-  core::ProcessGroup *createRemoteProcessGroup(std::string name, uuid_t uuid) {
+  core::ProcessGroup *createRemoteProcessGroup(std::string name, utils::Identifier &  uuid) {
     return 0;
   }
 
-  std::shared_ptr<minifi::Connection> createConnection(std::string name, uuid_t uuid) {
+  std::shared_ptr<minifi::Connection> createConnection(std::string name, utils::Identifier &  uuid) {
     return 0;
   }
  protected:

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/Site2SiteTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/Site2SiteTests.cpp b/libminifi/test/unit/Site2SiteTests.cpp
index ff2b44a..732df70 100644
--- a/libminifi/test/unit/Site2SiteTests.cpp
+++ b/libminifi/test/unit/Site2SiteTests.cpp
@@ -38,9 +38,9 @@ TEST_CASE("TestSetPortId", "[S2S1]") {
 
   std::string uuid_str = "c56a4180-65aa-42ec-a945-5fd21dec0538";
 
-  uuid_t fakeUUID;
+  utils::Identifier fakeUUID;
 
-  uuid_parse(uuid_str.c_str(), fakeUUID);
+  fakeUUID = uuid_str;
 
   protocol.setPortId(fakeUUID);
 
@@ -55,9 +55,9 @@ TEST_CASE("TestSetPortIdUppercase", "[S2S2]") {
 
   std::string uuid_str = "C56A4180-65AA-42EC-A945-5FD21DEC0538";
 
-  uuid_t fakeUUID;
+  utils::Identifier fakeUUID;
 
-  uuid_parse(uuid_str.c_str(), fakeUUID);
+  fakeUUID = uuid_str;
 
   protocol.setPortId(fakeUUID);
 
@@ -100,9 +100,9 @@ TEST_CASE("TestSiteToSiteVerifySend", "[S2S3]") {
 
   std::string uuid_str = "C56A4180-65AA-42EC-A945-5FD21DEC0538";
 
-  uuid_t fakeUUID;
+  utils::Identifier fakeUUID;
 
-  uuid_parse(uuid_str.c_str(), fakeUUID);
+  fakeUUID = uuid_str;
 
   protocol.setPortId(fakeUUID);
 
@@ -124,7 +124,7 @@ TEST_CASE("TestSiteToSiteVerifySend", "[S2S3]") {
   collector->get_next_client_response();
   REQUIRE(collector->get_next_client_response() == "PORT_IDENTIFIER");
   collector->get_next_client_response();
-  REQUIRE(collector->get_next_client_response() == "c56a4180-65aa-42ec-a945-5fd21dec0538");
+  REQUIRE(utils::StringUtils::equalsIgnoreCase(collector->get_next_client_response(), "c56a4180-65aa-42ec-a945-5fd21dec0538"));
   collector->get_next_client_response();
   REQUIRE(collector->get_next_client_response() == "REQUEST_EXPIRATION_MILLIS");
   collector->get_next_client_response();
@@ -169,9 +169,9 @@ TEST_CASE("TestSiteToSiteVerifyNegotiationFail", "[S2S4]") {
 
   std::string uuid_str = "C56A4180-65AA-42EC-A945-5FD21DEC0538";
 
-  uuid_t fakeUUID;
+  utils::Identifier fakeUUID;
 
-  uuid_parse(uuid_str.c_str(), fakeUUID);
+  fakeUUID = uuid_str;
 
   protocol.setPortId(fakeUUID);
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/2b0a55e4/libminifi/test/unit/TailFileTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/TailFileTests.cpp b/libminifi/test/unit/TailFileTests.cpp
index 62cb0eb..379ee40 100644
--- a/libminifi/test/unit/TailFileTests.cpp
+++ b/libminifi/test/unit/TailFileTests.cpp
@@ -50,7 +50,7 @@ TEST_CASE("TailFileWithDelimiter", "[tailfiletest1]") {
       tmpfile.close();
 
   TestController testController;
-  LogTestController::getInstance().setDebug<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
   LogTestController::getInstance().setDebug<core::ProcessSession>();
   LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
 
@@ -134,9 +134,9 @@ TEST_CASE("TailFileWithDelimiter", "[tailfiletest1]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::TailFile>("tailfile");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();
@@ -203,9 +203,9 @@ TEST_CASE("TailFileWithoutDelimiter", "[tailfiletest2]") {
     std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::TailFile>("tailfile");
     std::shared_ptr<core::Processor> logAttributeProcessor = std::make_shared<org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
 
-    uuid_t processoruuid;
+    utils::Identifier processoruuid;
     REQUIRE(true == processor->getUUID(processoruuid));
-    uuid_t logAttributeuuid;
+    utils::Identifier logAttributeuuid;
     REQUIRE(true == logAttributeProcessor->getUUID(logAttributeuuid));
 
     std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>();