Sfoglia il codice sorgente

HPCC-24747 Provide TLK information for client use

- Provide filepart isTLK flag
- Provide indexLocal and indexPartitioned file types

Signed-off-by: Rodrigo Pastrana <rodrigo.pastrana@lexisnexisrisk.com>
Rodrigo Pastrana 4 anni fa
parent
commit
d5cf3cc655
2 ha cambiato i file con 24 aggiunte e 3 eliminazioni
  1. 5 2
      esp/scm/ws_dfu.ecm
  2. 19 1
      esp/services/ws_dfu/ws_dfuService.cpp

+ 5 - 2
esp/scm/ws_dfu.ecm

@@ -871,6 +871,7 @@ ESPStruct DFUFilePart
 {
     int PartIndex;
     ESParray<EspStruct DFUFileCopy> Copies;
+    [min_ver("1.56")] bool TopLevelKey(false);
 };
 
 ESPStruct DFUFileAccessInfo
@@ -895,6 +896,8 @@ ESPenum DFUFileType : string
     Xml("Xml"),
     Csv("Csv"),
     Json("Json"),
+    IndexLocal("IndexLocal"),
+    IndexPartitioned("IndexPartitioned"),
     Unset("Unset"), // placed here to avoid enum values shifting (if at start) and causing backward compatibility issues.
 };
 
@@ -962,8 +965,8 @@ ESPresponse [exceptions_inline, nil_remove] DFUFilePublishResponse
 //  ===========================================================================
 ESPservice [
     auth_feature("DEFERRED"),
-    version("1.55"),
-    default_client_version("1.55"),
+    version("1.56"),
+    default_client_version("1.56"),
     noforms,
     exceptions_inline("./smc_xslt/exceptions.xslt")] WsDfu
 {

+ 19 - 1
esp/services/ws_dfu/ws_dfuService.cpp

@@ -5874,6 +5874,8 @@ int CWsDfuEx::GetIndexData(IEspContext &context, bool bSchemaOnly, const char* i
 
 void CWsDfuEx::getFilePartsInfo(IEspContext &context, IFileDescriptor &fileDesc, bool forFileCreate, IEspDFUFileAccessInfo &accessInfo)
 {
+    double version = context.getClientVersion();
+
     IArrayOf<IEspDFUFilePart> dfuParts;
     IArrayOf<IEspDFUPartLocation> dfuPartLocations;
 
@@ -5884,7 +5886,9 @@ void CWsDfuEx::getFilePartsInfo(IEspContext &context, IFileDescriptor &fileDesc,
     ForEach(*pi)
     {
         IPartDescriptor& part = pi->query();
-        if (isPartTLK(&part))
+
+        bool isTLKPart = isPartTLK(&part);
+        if (version <= 1.55 && isTLKPart)
             continue;
 
         IArrayOf<IEspDFUFileCopy> fileCopies;
@@ -5919,6 +5923,10 @@ void CWsDfuEx::getFilePartsInfo(IEspContext &context, IFileDescriptor &fileDesc,
         Owned<IEspDFUFilePart> filePart = createDFUFilePart();
         filePart->setPartIndex(part.queryPartIndex() + 1);
         filePart->setCopies(fileCopies);
+
+        if (version > 1.55)
+            filePart->setTopLevelKey(isTLKPart);
+
         dfuParts.append(*filePart.getClear());
     }
 
@@ -6000,6 +6008,7 @@ SecAccessFlags translateToSecAccessFlags(CSecAccessType from)
 
 void CWsDfuEx::dFUFileAccessCommon(IEspContext &context, const CDfsLogicalFileName &lfn, SessionId clientSessionId, const char *requestId, unsigned expirySecs, bool returnTextResponse, unsigned lockTimeoutMs, IEspDFUFileAccessResponse &resp)
 {
+    double version = context.getClientVersion();
     StringBuffer fileName;
     lfn.get(fileName, false, true);
     if (0 == fileName.length())
@@ -6059,7 +6068,16 @@ void CWsDfuEx::dFUFileAccessCommon(IEspContext &context, const CDfsLogicalFileNa
         accessInfo.setFileAccessSSL(metaInfo->getPropBool("secure"));
 
         if (isFileKey(fileDesc))
+        {
             kind = CDFUFileType_Index;
+            if (version > 1.55)
+            {
+                if (isFileLocalKey(fileDesc))
+                    kind = CDFUFileType_IndexLocal;
+                else if (isFilePartitionKey(fileDesc))
+                    kind = CDFUFileType_IndexPartitioned;
+            }
+        }
         else
         {
             const char *kindStr = queryFileKind(fileDesc);