Browse Source

HPCC-11748 Fix WsDFU.DFUQuery not return compressed file size

The existing WsDFU.DFUQuery does not return compressed size. That
is caused by reading a wrong property tree of a logical file. It
is fixed now. The code of WsDFU.DFUFile is changed to return
prefix, nodegroup, and NumParts, which are the same as
WsDFU.DFUQuery.

Signed-off-by: wangkx <kevin.wang@lexisnexis.com>
wangkx 11 years ago
parent
commit
d03d7ffc54
2 changed files with 22 additions and 6 deletions
  1. 5 1
      esp/scm/ws_dfu.ecm
  2. 17 5
      esp/services/ws_dfu/ws_dfuService.cpp

+ 5 - 1
esp/scm/ws_dfu.ecm

@@ -84,6 +84,9 @@ ESPStruct DFUFileDetail
 {
     string Name;
     string Filename;
+    [min_ver("1.28")] string Prefix;
+    [min_ver("1.28")] string NodeGroup;
+    [min_ver("1.28")] int NumParts;
     string Description;
     string Dir;
     string PathMask;
@@ -119,6 +122,7 @@ ESPStruct DFUFileDetail
     [min_ver("1.21")] string ContentType;
     [min_ver("1.22")] int64 CompressedFileSize;
     [min_ver("1.22")] bool IsCompressed(false);
+    [min_ver("1.28")] bool BrowseData(true);
 };
 
 ESPStruct DFUSpaceItem
@@ -650,7 +654,7 @@ ESPresponse [exceptions_inline, nil_remove, http_encode(0)] DFUSearchDataRespons
 
 //  ===========================================================================
 ESPservice [
-    version("1.27"), default_client_version("1.27"),
+    version("1.28"), default_client_version("1.28"),
     noforms, 
     exceptions_inline("./smc_xslt/exceptions.xslt")] WsDfu
 {

+ 17 - 5
esp/services/ws_dfu/ws_dfuService.cpp

@@ -1733,7 +1733,7 @@ void CWsDfuEx::getFilePartsOnClusters(IEspContext &context, const char* clusterR
     }
 }
 
-void CWsDfuEx::doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, const char *name, const char *cluster, 
+void CWsDfuEx::doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, const char *name, const char *cluster,
     const char *description,IEspDFUFileDetail& FileDetails)
 {
     DBGLOG("CWsDfuEx::doGetFileDetails\n");
@@ -1757,7 +1757,15 @@ void CWsDfuEx::doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, co
     FileDetails.setFilename(fname ? fname+1 : lname);
     FileDetails.setDir(df->queryDefaultDir());
     FileDetails.setPathMask(df->queryPartMask());
-
+    if (version >= 1.28)
+    {
+        StringBuffer buf;
+        FileDetails.setPrefix(getPrefixFromLogicalName(lname, buf));
+        if (cluster && *cluster)
+            FileDetails.setNodeGroup(cluster);
+        else if (clusters.length() == 1)
+            FileDetails.setNodeGroup(clusters.item(0));
+    }
     StringBuffer strDesc = df->queryAttributes().queryProp("@description");
     if (description)
     {
@@ -1819,10 +1827,13 @@ void CWsDfuEx::doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, co
             farray.append(subfileName.str());
         }
 
-        if(farray.length() > 0)
+        unsigned numSubFiles = farray.length();
+        if(numSubFiles > 0)
         {
             FileDetails.setSubfiles(farray);
         }
+        if ((version >= 1.28) && (numSubFiles > 1))
+            FileDetails.setBrowseData(false); //ViewKeyFile Cannot handle superfile with multiple subfiles
 
         FileDetails.setIsSuperfile(true);
         return;
@@ -1830,6 +1841,8 @@ void CWsDfuEx::doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, co
     //#14280
 
     FileDetails.setWuid(df->queryAttributes().queryProp("@workunit"));
+    if (version >= 1.28)
+        FileDetails.setNumParts(df->numParts());
 
     //#17430
     {
@@ -3230,8 +3243,7 @@ bool CWsDfuEx::addToLogicalFileList(IPropertyTree& file, const char* nodeGroup,
             }
         }
         bool isFileCompressed = false;
-        IPropertyTree* attr = file.queryBranch("Attr");
-        if (isKeyFile || (attr && isCompressed(*attr)))
+        if (isKeyFile || isCompressed(file))
         {
             isFileCompressed = true;
             if ((version >= 1.22) && file.hasProp(getDFUQResultFieldName(DFUQRFcompressedsize)))