Explorar o código

Merge pull request #9973 from afishbeck/controlPMParts

HPCC-17573 Roxie control:querypackageinfo should return list of part ids

Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman %!s(int64=8) %!d(string=hai) anos
pai
achega
36130a229e
Modificáronse 3 ficheiros con 25 adicións e 1 borrados
  1. 1 0
      common/workunit/package.h
  2. 9 0
      common/workunit/pkgimpl.hpp
  3. 15 1
      roxie/ccd/ccdstate.cpp

+ 1 - 0
common/workunit/package.h

@@ -54,6 +54,7 @@ interface IHpccPackageMap : extends IInterface
     virtual bool isActive() const = 0;
     virtual bool validate(StringArray &queriesToVerify, StringArray &warn, StringArray &err, StringArray &unmatchedQueries, StringArray &unusedPackages, StringArray &unmatchedFiles) const = 0;
     virtual void gatherFileMappingForQuery(const char *queryname, IPropertyTree *fileInfo) const = 0;
+    virtual const StringArray &getPartIds() const = 0;
 };
 
 interface IHpccPackageSet : extends IInterface

+ 9 - 0
common/workunit/pkgimpl.hpp

@@ -315,6 +315,7 @@ public:
     bool active;
     bool compulsory;
     StringArray wildMatches, wildIds;
+    StringArray parts;
 public:
     IMPLEMENT_IINTERFACE;
     CPackageMapOf(const char *_packageId, const char *_querySet, bool _active)
@@ -389,10 +390,18 @@ public:
     }
     void loadPart(IPropertyTree &part)
     {
+        const char *id = part.queryProp("@id");
+        if (id && *id)
+            parts.append(id);
         Owned<IPropertyTreeIterator> partPackages = part.getElements("Package");
         ForEach(*partPackages)
             loadPackage(partPackages->query());
     }
+    const StringArray &getPartIds() const override
+    {
+        return parts;
+    }
+
     void load(IPropertyTree *xml)
     {
         if (!xml)

+ 15 - 1
roxie/ccd/ccdstate.cpp

@@ -813,6 +813,10 @@ public:
     {
         return BASE::isActive();
     }
+    virtual const StringArray &getPartIds() const
+    {
+        return BASE::getPartIds();
+    }
     virtual bool validate(StringArray &queryids, StringArray &wrn, StringArray &err, StringArray &unmatchedQueries, StringArray &unusedPackages, StringArray &unmatchedFiles) const
     {
         return BASE::validate(queryids, wrn, err, unmatchedQueries, unusedPackages, unmatchedFiles);
@@ -1321,7 +1325,17 @@ public:
 
     void getInfo(StringBuffer &reply, const IRoxieContextLogger &logctx) const
     {
-        reply.appendf(" <PackageSet id=\"%s\" querySet=\"%s\"/>\n", queryPackageId(), querySet.get());
+        reply.appendf(" <PackageSet id=\"%s\" querySet=\"%s\"", queryPackageId(), querySet.get());
+        if (!packages || !packages->getPartIds().ordinality())
+        {
+            reply.append("/>\n");
+            return;
+        }
+        reply.append(">\n");
+        const StringArray &parts = packages->getPartIds();
+        ForEachItemIn(i, parts)
+            reply.appendf("  <Part id='%s'/>\n", parts.item(i));
+        reply.append(" </PackageSet>\n");
     }
 
     bool resetStats(const char *queryId, const IRoxieContextLogger &logctx)