Browse Source

HPCC-22670 Do not force super copy for super index with <=1 subfile

Also return the number of subfiles in DFUQuery. ECLWatch may use the
number to enable/disable the 'Retain Superfile Structure' checkbox.

Signed-off-by: wangkx <kevin.wang@lexisnexis.com>
wangkx 5 years ago
parent
commit
90151a1601

+ 1 - 1
dali/dfu/dfurun.cpp

@@ -1230,7 +1230,7 @@ public:
                     srcName.set(tmp);
                     srcFdesc.setown(srcFile->getFileDescriptor());
                     iskey = isFileKey(srcFile);
-                    if ((cmd==DFUcmd_copy) && (srcFile->querySuperFile() != nullptr) && iskey)
+                    if ((cmd==DFUcmd_copy) && (srcFile->querySuperFile() != nullptr) && (srcFile->querySuperFile()->numSubFiles() > 1) && iskey)
                         throwError1(DFTERR_InvalidSuperindexCopy, srcName.str());
 
                     oldRoxiePrefix.set(srcFile->queryAttributes().queryProp("@roxiePrefix"));

+ 3 - 2
esp/scm/ws_dfu.ecm

@@ -114,6 +114,7 @@ ESPStruct DFULogicalFile
     [min_ver("1.30")] bool Persistent(false);
     [min_ver("1.34")] bool IsProtected(false);
     [min_ver("1.41")] string KeyType;
+    [min_ver("1.52")] int NumOfSubfiles;
 };
 
 ESPStruct DFUPart
@@ -973,8 +974,8 @@ ESPresponse [exceptions_inline, nil_remove] DFUFilePublishResponse
 //  ===========================================================================
 ESPservice [
     auth_feature("DEFERRED"),
-    version("1.51"),
-    default_client_version("1.51"),
+    version("1.52"),
+    default_client_version("1.52"),
     noforms,
     exceptions_inline("./smc_xslt/exceptions.xslt")] WsDfu
 {

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

@@ -3595,7 +3595,14 @@ bool CWsDfuEx::addToLogicalFileList(IPropertyTree& file, const char* nodeGroup,
 
         int numSubFiles = file.hasProp(getDFUQResultFieldName(DFUQRFnumsubfiles));
         if(numSubFiles)
+        {
             lFile->setIsSuperfile(true);
+            if (version >= 1.52)
+            {
+                numSubFiles = file.getPropInt(getDFUQResultFieldName(DFUQRFnumsubfiles));
+                lFile->setNumOfSubfiles(numSubFiles);
+            }
+        }
         else
         {
             lFile->setIsSuperfile(false);

+ 1 - 1
esp/services/ws_fs/ws_fsService.cpp

@@ -2523,7 +2523,7 @@ bool CFileSprayEx::onCopy(IEspContext &context, IEspCopy &req, IEspCopyResponse
             if (!file->querySuperFile())
                 supercopy = false;
         }
-        else if (file->querySuperFile() && isFileKey(file))
+        else if (file->querySuperFile() && (file->querySuperFile()->numSubFiles() > 1) && isFileKey(file))
             supercopy = true;
 
         Owned<IDFUWorkUnitFactory> factory = getDFUWorkUnitFactory();