Переглянути джерело

Merge pull request #15939 from wangkx/h27377

HPCC-27377 Add min & max skew fields to WsDfu.DFUQuery

Reviewed-By: Jake Smith <jake.smith@lexisnexis.com>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 3 роки тому
батько
коміт
3348095fcd

+ 2 - 2
dali/base/dadfs.cpp

@@ -8989,7 +8989,7 @@ const char* DFUQFilterFieldNames[] = { "", "@description", "@directory", "@group
     "@partmask", "@OrigName", "Attr", "Attr/@job", "Attr/@owner", "Attr/@recordCount", "Attr/@recordSize", "Attr/@size",
     "Attr/@compressedsize", "Attr/@workunit", "Cluster", "Cluster/@defaultBaseDir", "Cluster/@defaultReplDir", "Cluster/@mapFlags",
     "Cluster/@name", "Part", "Part/@name", "Part/@num", "Part/@size", "SuperOwner", "SuperOwner/@name",
-    "SubFile", "SubFile/@name", "SubFile/@num", "Attr/@kind", "Attr/@accessed" };
+    "SubFile", "SubFile/@name", "SubFile/@num", "Attr/@kind", "Attr/@accessed", "Attr/@maxSkew", "Attr/@minSkew" };
 
 extern da_decl const char* getDFUQFilterFieldName(DFUQFilterField feild)
 {
@@ -13013,7 +13013,7 @@ IDFProtectedIterator *CDistributedFileDirectory::lookupProtectedFiles(const char
 const char* DFUQResultFieldNames[] = { "@name", "@description", "@group", "@kind", "@modified", "@job", "@owner",
     "@DFUSFrecordCount", "@recordCount", "@recordSize", "@DFUSFsize", "@size", "@workunit", "@DFUSFcluster", "@numsubfiles",
     "@accessed", "@numparts", "@compressedSize", "@directory", "@partmask", "@superowners", "@persistent", "@protect", "@compressed",
-    "@cost", "@numDiskReads", "@numDiskWrites", "@atRestCost", "@accessCost" };
+    "@cost", "@numDiskReads", "@numDiskWrites", "@atRestCost", "@accessCost", "@maxSkew", "@minSkew", "@maxSkewPart", "@minSkewPart" };
 
 extern da_decl const char* getDFUQResultFieldName(DFUQResultField feild)
 {

+ 8 - 2
dali/base/dadfs.hpp

@@ -248,7 +248,9 @@ enum DFUQFilterField
     DFUQFFsubfilenum = 31,
     DFUQFFkind = 32,
     DFUQFFaccessed = 33,
-    DFUQFFterm = 34,
+    DFUQFFattrmaxskew = 34,
+    DFUQFFattrminskew = 35,
+    DFUQFFterm = 36,
     DFUQFFreverse = 256,
     DFUQFFnocase = 512,
     DFUQFFnumeric = 1024,
@@ -286,7 +288,11 @@ enum DFUQResultField
     DFUQRFnumDiskWrites = 26,
     DFUQRFatRestCost = 27,
     DFUQRFaccessCost = 28,
-    DFUQRFterm = 29,
+    DFUQRFmaxSkew = 29,
+    DFUQRFminSkew = 30,
+    DFUQRFmaxSkewPart = 31,
+    DFUQRFminSkewPart = 32,
+    DFUQRFterm = 33,
     DFUQRFreverse = 256,
     DFUQRFnocase = 512,
     DFUQRFnumeric = 1024,

+ 6 - 2
esp/scm/ws_dfu.ecm

@@ -249,6 +249,10 @@ ESPrequest [nil_remove] DFUQueryRequest
     [min_ver("1.30")] bool IncludeSuperOwner;
     [min_ver("1.55")] string StartAccessedTime;
     [min_ver("1.55")] string EndAccessedTime;
+    [min_ver("1.63")] int64 MaxSkewFrom;
+    [min_ver("1.63")] int64 MaxSkewTo;
+    [min_ver("1.63")] int64 MinSkewFrom;
+    [min_ver("1.63")] int64 MinSkewTo;
 };
 
 ESPresponse
@@ -970,8 +974,8 @@ ESPresponse [exceptions_inline, nil_remove] DFUFilePublishResponse
 //  ===========================================================================
 ESPservice [
     auth_feature("DEFERRED"),
-    version("1.62"),
-    default_client_version("1.62"),
+    version("1.63"),
+    default_client_version("1.63"),
     noforms,
     exceptions_inline("./smc_xslt/exceptions.xslt")] WsDfu
 {

+ 4 - 0
esp/scm/ws_dfu_common.ecm

@@ -55,4 +55,8 @@ ESPStruct DFULogicalFile
     [min_ver("1.61"), max_ver("1.61")] double Cost;
     [min_ver("1.62")] double AtRestCost;
     [min_ver("1.62")] double AccessCost;
+    [min_ver("1.63"), nil_remove] int64 MinSkew;
+    [min_ver("1.63"), nil_remove] int64 MaxSkew;
+    [min_ver("1.63"), nil_remove] int64 MinSkewPart;
+    [min_ver("1.63"), nil_remove] int64 MaxSkewPart;
 };

+ 7 - 0
esp/services/ws_dfu/ws_dfuHelpers.cpp

@@ -193,6 +193,13 @@ bool WsDFUHelpers::addToLogicalFileList(IPropertyTree& file, const char* nodeGro
                 lFile->setAccessCost(file.getPropReal(getDFUQResultFieldName(DFUQRFaccessCost)));
             }
         }
+        if ((version >= 1.63) && (file.hasProp(getDFUQResultFieldName(DFUQRFmaxSkew))))
+        {
+            lFile->setMaxSkew(file.getPropInt64(getDFUQResultFieldName(DFUQRFmaxSkew)));
+            lFile->setMinSkew(file.getPropInt64(getDFUQResultFieldName(DFUQRFminSkew)));
+            lFile->setMaxSkewPart(file.getPropInt64(getDFUQResultFieldName(DFUQRFmaxSkewPart)));
+            lFile->setMinSkewPart(file.getPropInt64(getDFUQResultFieldName(DFUQRFminSkewPart)));
+        }
 
         logicalFiles.append(*lFile.getClear());
     }

+ 23 - 13
esp/services/ws_dfu/ws_dfuService.cpp

@@ -3617,24 +3617,30 @@ void CWsDfuEx::setDFUQueryFilters(IEspDFUQueryRequest& req, StringBuffer& filter
     if (!req.getIncludeSuperOwner_isNull() && req.getIncludeSuperOwner())
         filterBuf.append(DFUQFTincludeFileAttr).append(DFUQFilterSeparator).append(DFUQSFAOincludeSuperOwner).append(DFUQFilterSeparator);
 
-    __int64 sizeFrom = req.getFileSizeFrom();
-    __int64 sizeTo = req.getFileSizeTo();
-    if ((sizeFrom > 0) || (sizeTo > 0))
-    {
-        StringBuffer buf;
-        if (sizeFrom > 0)
-            buf.append(sizeFrom);
-        buf.append(DFUQFilterSeparator);
-        if (sizeTo > 0)
-            buf.append(sizeTo);
-        filterBuf.append(DFUQFTinteger64Range).append(DFUQFilterSeparator).append(getDFUQFilterFieldName(DFUQFFattrsize));
-        filterBuf.append(DFUQFilterSeparator).append(buf.str()).append(DFUQFilterSeparator);
-    }
+    setInt64RangeFilter(req.getFileSizeFrom(), req.getFileSizeTo(), DFUQFFattrsize, filterBuf);
+    setInt64RangeFilter(req.getMaxSkewFrom(), req.getMaxSkewTo(), DFUQFFattrmaxskew, filterBuf);
+    setInt64RangeFilter(req.getMinSkewFrom(), req.getMinSkewTo(), DFUQFFattrminskew, filterBuf);
 
     setTimeRangeFilter(req.getStartDate(), req.getEndDate(), DFUQFFtimemodified, filterBuf);
     setTimeRangeFilter(req.getStartAccessedTime(), req.getEndAccessedTime(), DFUQFFaccessed, filterBuf);
 }
 
+void CWsDfuEx::setInt64RangeFilter(__int64 from, __int64 to, DFUQFilterField filterID, StringBuffer &filterBuf)
+{
+    if ((from == 0) && (to == 0))
+        return;
+
+    filterBuf.append(DFUQFTinteger64Range).append(DFUQFilterSeparator);
+    filterBuf.append(getDFUQFilterFieldName(filterID)).append(DFUQFilterSeparator);
+    StringBuffer buf;
+    if (from > 0)
+        filterBuf.append(from);
+    filterBuf.append(DFUQFilterSeparator);
+    if (to > 0)
+        filterBuf.append(to);
+    filterBuf.append(DFUQFilterSeparator);
+}
+
 void CWsDfuEx::setTimeRangeFilter(const char *from, const char *to, DFUQFilterField filterID, StringBuffer &filterBuf)
 {
     if (isEmptyString(from) && isEmptyString(to))
@@ -3691,6 +3697,10 @@ void CWsDfuEx::setDFUQuerySortOrder(IEspDFUQueryRequest& req, StringBuffer& sort
         sortOrder[0] = DFUQRFkind;
     else if (strieq(sortByPtr, "Cost"))
         sortOrder[0] = (DFUQResultField) (DFUQRFcost | DFUQRFfloat);
+    else if (strieq(sortByPtr, "MaxSkew"))
+        sortOrder[0] = (DFUQResultField) (DFUQRFmaxSkew | DFUQRFnumeric);
+    else if (strieq(sortByPtr, "MinSkew"))
+        sortOrder[0] = (DFUQResultField) (DFUQRFminSkew | DFUQRFnumeric);
     else
         sortOrder[0] = DFUQRFname;
 

+ 1 - 0
esp/services/ws_dfu/ws_dfuService.hpp

@@ -257,6 +257,7 @@ private:
     void exportRecordDefinitionBinaryType(const char *recordDefinition, MemoryBuffer &layoutBin);
     void appendTimeString(const char *in, StringBuffer &out);
     void setTimeRangeFilter(const char *from, const char *to, DFUQFilterField filterID, StringBuffer &filterBuf);
+    void setInt64RangeFilter(__int64 from, __int64 to, DFUQFilterField filterID, StringBuffer &filterBuf);
 
     bool attachServiceToDali() override
     {