PEL: Guard against hostboot sending down duplicate PEL Ids

This commit is to guard against hostboot sending down PEL Id
that we already have in our repository. This caused PEL to
get orphaned in the filesystem without a corresponding valid
openbmc event log Id.
The action is to move such PELs to archive folder.

Signed-off-by: Sumit Kumar <sumit_kumar@in.ibm.com>
Change-Id: I46bb865b4b87ec0b59f362e3f79a1b5a6710a45c
diff --git a/extensions/openpower-pels/manager.cpp b/extensions/openpower-pels/manager.cpp
index 3387970..db2e2d6 100644
--- a/extensions/openpower-pels/manager.cpp
+++ b/extensions/openpower-pels/manager.cpp
@@ -127,7 +127,6 @@
 
 void Manager::addPEL(std::vector<uint8_t>& pelData, uint32_t obmcLogID)
 {
-
     auto pel = std::make_unique<openpower::pels::PEL>(pelData, obmcLogID);
     if (pel->valid())
     {
@@ -137,6 +136,22 @@
         {
             pel->assignID();
         }
+        else
+        {
+            const Repository::LogID id{Repository::LogID::Pel(pel->id())};
+            auto result = _repo.hasPEL(id);
+            if (result)
+            {
+                log<level::WARNING>(
+                    fmt::format("Duplicate HostBoot PEL Id {:#X} found; "
+                                "moving it to archive folder",
+                                pel->id())
+                        .c_str());
+
+                _repo.archivePEL(*pel);
+                return;
+            }
+        }
 
         // PELs created by others still need this field set by us.
         pel->setCommitTime();