Przeglądaj źródła

Merge pull request #6483 from richardkchapman/hthor-logical-filename

HPCC-10142 Support queryLogicalFilename on hthor

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 10 lat temu
rodzic
commit
d064f43c33
2 zmienionych plików z 30 dodań i 2 usunięć
  1. 26 1
      ecl/hthor/hthor.cpp
  2. 4 1
      ecl/hthor/hthor.ipp

+ 26 - 1
ecl/hthor/hthor.cpp

@@ -7796,11 +7796,13 @@ void CHThorDiskReadBaseActivity::resolve()
         StringBuffer mangledFilename;
         mangleLocalTempFilename(mangledFilename, mangledHelperFileName.str());
         tempFileName.set(agent.queryTemporaryFile(mangledFilename.str()));
+        logicalFileName.set(tempFileName);
         gatherInfo(NULL);
     }
     else
     {
         ldFile.setown(agent.resolveLFN(mangledHelperFileName.str(), "Read", 0 != (helper.getFlags() & TDRoptional)));
+        logicalFileName.set(mangledHelperFileName.str());
         if (ldFile)
         {
             Owned<IFileDescriptor> fdesc;
@@ -7811,6 +7813,23 @@ void CHThorDiskReadBaseActivity::resolve()
             {
                 persistent = dFile->queryAttributes().getPropBool("@persistent");
                 dfsParts.setown(dFile->getIterator());
+                if (helper.getFlags() & TDRfilenamecallback)
+                {
+                    IDistributedSuperFile *super = dFile->querySuperFile();
+                    if (super)
+                    {
+                        unsigned numsubs = super->numSubFiles(true);
+                        unsigned s=0;
+                        for (; s<numsubs; s++)
+                        {
+                            IDistributedFile &subfile = super->querySubFile(s, true);
+                            subfileLogicalFilenames.append(subfile.queryLogicalName());
+                        }
+                        assertex(fdesc);
+                        superfile.set(fdesc->querySuperFileDescriptor());
+                        assertex(superfile);
+                    }
+                }
                 if((helper.getFlags() & (TDXtemporary | TDXjobtemp)) == 0)
                     agent.logFileAccess(dFile, "HThor", "READ");
                 if(!agent.queryWorkUnit()->getDebugValueBool("skipFileFormatCrcCheck", false) && !(helper.getFlags() & TDRnocrccheck))
@@ -7941,11 +7960,17 @@ bool CHThorDiskReadBaseActivity::openNext()
               (!dfsParts&&(partNum<ldFile->numParts())))
         {
             IDistributedFilePart * curPart = dfsParts?&dfsParts->query():NULL;
-
             unsigned numCopies = curPart?curPart->numCopies():ldFile->numPartCopies(partNum);
             //MORE: Order of copies should be optimized at this point....
             StringBuffer file, filelist;
             closepart();
+            if (dfsParts && superfile && curPart)
+            {
+                unsigned subfile;
+                unsigned lnum;
+                if (superfile->mapSubPart(partNum, subfile, lnum))
+                    logicalFileName.set(subfileLogicalFilenames.item(subfile));
+            }
             for (unsigned copy=0; copy < numCopies; copy++)
             {
                 RemoteFilename rfilename;

+ 4 - 1
ecl/hthor/hthor.ipp

@@ -2161,6 +2161,9 @@ protected:
     unsigned __int64 localOffset;
     unsigned __int64 offsetOfPart;
     StringBuffer mangledHelperFileName;
+    StringAttr logicalFileName;
+    StringArray subfileLogicalFilenames;
+    Owned<ISuperFileDescriptor> superfile;
 
     void close();
     virtual void open();
@@ -2196,7 +2199,7 @@ public:
 //interface IFilePositionProvider
     virtual unsigned __int64 getFilePosition(const void * row);
     virtual unsigned __int64 getLocalFilePosition(const void * row);
-    virtual const char * queryLogicalFilename(const void * row) { return "MORE!"; }
+    virtual const char * queryLogicalFilename(const void * row) { return logicalFileName.get(); }
 };
 
 class CHThorBinaryDiskReadBase : public CHThorDiskReadBaseActivity, implements IIndexReadContext