浏览代码

Merge pull request #4878 from wangkx/h8972

HPCC-10093 Read compressed file size from DFU attributes

Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 11 年之前
父节点
当前提交
fb0a16702d
共有 3 个文件被更改,包括 31 次插入19 次删除
  1. 7 3
      esp/scm/ws_dfu.ecm
  2. 23 15
      esp/services/ws_dfu/ws_dfuService.cpp
  3. 1 1
      esp/services/ws_dfu/ws_dfuService.hpp

+ 7 - 3
esp/scm/ws_dfu.ecm

@@ -45,7 +45,7 @@ ESPStruct DFULogicalFile
     string LongSize;
     string LongRecordCount;
     bool   isSuperfile;
-    bool   isZipfile;
+    [depr_ver("1.22")] bool   isZipfile;
     bool   isDirectory(false);
     bool   Replicate(false);
     [min_ver("1.01")] int64 IntSize;
@@ -53,6 +53,8 @@ ESPStruct DFULogicalFile
     [min_ver("1.02")] bool FromRoxieCluster;
     [min_ver("1.03")] bool BrowseData;
     [min_ver("1.14")] bool IsKeyFile;
+    [min_ver("1.22")] bool IsCompressed;
+    [min_ver("1.22")] int64 CompressedFileSize;
 };
 
 ESPStruct DFUPart
@@ -95,7 +97,7 @@ ESPStruct DFUFileDetail
 
     string Modified;
     string Ecl;
-    bool ZipFile(false);
+    [depr_ver("1.22")] bool ZipFile(false);
     ESPstruct DFUFileStat Stat;
     ESParray<ESPstruct DFUPart> DFUFileParts;
     bool isSuperfile(false);
@@ -106,6 +108,8 @@ ESPStruct DFUFileDetail
     [min_ver("1.07")] ESParray<string, ECLGraph> Graphs;
     [min_ver("1.09")] string UserPermission;
     [min_ver("1.21")] string ContentType;
+    [min_ver("1.22")] int64 CompressedFileSize;
+    [min_ver("1.22")] bool IsCompressed(false);
 };
 
 ESPStruct DFUSpaceItem
@@ -627,7 +631,7 @@ ESPresponse [exceptions_inline, nil_remove, http_encode(0)] DFUSearchDataRespons
 
 //  ===========================================================================
 ESPservice [
-    version("1.21"), default_client_version("1.21"),
+    version("1.22"), default_client_version("1.22"),
     noforms, 
     exceptions_inline("./smc_xslt/exceptions.xslt")] WsDfu
 {

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

@@ -1669,7 +1669,14 @@ void CWsDfuEx::doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, co
 
     if(df->isCompressed())
     {
-        FileDetails.setZipFile(true);
+        if (version < 1.22)
+            FileDetails.setZipFile(true);
+        else
+        {
+            FileDetails.setIsCompressed(true);
+            if (df->queryAttributes().hasProp("@compressedSize"))
+                FileDetails.setCompressedFileSize(df->queryAttributes().getPropInt64("@compressedSize"));
+        }
     }
 
     comma c2(recordSize);
@@ -1941,9 +1948,9 @@ void CWsDfuEx::doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, co
 }
 
 
-void CWsDfuEx::getLogicalFileAndDirectory(IUserDescriptor* udesc, const char *dirname, IArrayOf<IEspDFULogicalFile>& LogicalFiles, int& numFiles, int& numDirs)
+void CWsDfuEx::getLogicalFileAndDirectory(IEspContext &context, IUserDescriptor* udesc, const char *dirname, IArrayOf<IEspDFULogicalFile>& LogicalFiles, int& numFiles, int& numDirs)
 {
-    DBGLOG("CWsDfuEx::getLogicalFileAndDirectory\n");
+    double version = context.getClientVersion();
 
     StringArray roxieClusterNames;
     IArrayOf<IEspTpCluster> roxieclusters;
@@ -2034,13 +2041,13 @@ void CWsDfuEx::getLogicalFileAndDirectory(IUserDescriptor* udesc, const char *di
 
                     __int64 recordSize=attr.getPropInt64("@recordSize",0), size=attr.getPropInt64("@size",-1);
         
-                    if(!isCompressed(attr))
-                    {
-                        File->setIsZipfile(false);
-                    }
+                    if (version < 1.22)
+                        File->setIsZipfile(isCompressed(attr));
                     else
                     {
-                        File->setIsZipfile(true);
+                        File->setIsCompressed(isCompressed(attr));
+                        if (attr.hasProp("@compressedSize"))
+                            File->setCompressedFileSize(attr.getPropInt64("@compressedSize"));
                     }
 
                     StringBuffer buf;
@@ -2104,7 +2111,7 @@ bool CWsDfuEx::onDFUFileView(IEspContext &context, IEspDFUFileViewRequest &req,
         int numDirs = 0;
         int numFiles = 0;
         IArrayOf<IEspDFULogicalFile> logicalFiles;
-        getLogicalFileAndDirectory(userdesc.get(), req.getScope(), logicalFiles, numFiles, numDirs);
+        getLogicalFileAndDirectory(context, userdesc.get(), req.getScope(), logicalFiles, numFiles, numDirs);
 
         if (numFiles > 0)
             resp.setNumFiles(numFiles);
@@ -2415,7 +2422,7 @@ bool CWsDfuEx::doLogicalFileSearch(IEspContext &context, IUserDescriptor* udesc,
     {
         int numDirs = 0;
         int numFiles = 0;
-        getLogicalFileAndDirectory(udesc, req.getLogicalName(), LogicalFiles, numFiles, numDirs);
+        getLogicalFileAndDirectory(context, udesc, req.getLogicalName(), LogicalFiles, numFiles, numDirs);
     }
     else
     {
@@ -2788,14 +2795,15 @@ bool CWsDfuEx::doLogicalFileSearch(IEspContext &context, IUserDescriptor* udesc,
                 }
                 File->setIsSuperfile(bSuperfile);
 
-                if(!isCompressed(attr))
-                {
-                    File->setIsZipfile(false);
-                }
+                if (version < 1.22)
+                    File->setIsZipfile(isCompressed(attr));
                 else
                 {
-                    File->setIsZipfile(true);
+                    File->setIsCompressed(isCompressed(attr));
+                    if (attr.hasProp("@compressedSize"))
+                        File->setCompressedFileSize(attr.getPropInt64("@compressedSize"));
                 }
+
                 //File->setBrowseData(bKeyFile); //Bug: 39750 - All files should be viewable through ViewKeyFile function
                 if (numSubFiles > 1) //Bug 41379 - ViewKeyFile Cannot handle superfile with multiple subfiles
                     File->setBrowseData(false); 

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

@@ -88,7 +88,7 @@ public:
     virtual bool onSuperfileAction(IEspContext &context, IEspSuperfileActionRequest &req, IEspSuperfileActionResponse &resp);
 
 private:
-    void getLogicalFileAndDirectory(IUserDescriptor* udesc, const char *dirname, IArrayOf<IEspDFULogicalFile>& LogicalFiles, int& numFiles, int& numDirs);
+    void getLogicalFileAndDirectory(IEspContext &context, IUserDescriptor* udesc, const char *dirname, IArrayOf<IEspDFULogicalFile>& LogicalFiles, int& numFiles, int& numDirs);
     bool doLogicalFileSearch(IEspContext &context, IUserDescriptor* udesc, IEspDFUQueryRequest & req, IEspDFUQueryResponse & resp);
     //bool doLogicalFileSearch(IUserDescriptor* udesc, IEspDFUQueryRequest & req, IEspDFUQueryResponse & resp);
     void doGetFileDetails(IEspContext &context, IUserDescriptor* udesc, const char *name,const char *cluster,