فهرست منبع

HPCC-18979 Detect incompatible index/flat file usage and report

Signed-off-by: Jake Smith <jake.smith@lexisnexisrisk.com>
Jake Smith 7 سال پیش
والد
کامیت
5deacd31d1
1فایلهای تغییر یافته به همراه23 افزوده شده و 7 حذف شده
  1. 23 7
      roxie/ccd/ccdserver.cpp

+ 23 - 7
roxie/ccd/ccdserver.cpp

@@ -1013,6 +1013,22 @@ public:
         }
     }
 
+    const IResolvedFile *resolveLFNIndex(const char *filename, bool isOpt)
+    {
+        const IResolvedFile *ret = resolveLFN(filename, isOpt);
+        if (ret && !ret->isKey())
+            throw MakeStringException(0, "Attempting to read flat file as an index: %s", filename);
+        return ret;
+    }
+
+    const IResolvedFile *resolveLFNFlat(const char *filename, bool isOpt)
+    {
+        const IResolvedFile *ret = resolveLFN(filename, isOpt);
+        if (ret && ret->isKey())
+            throw MakeStringException(0, "Attempting to read index as a flat file: %s", filename);
+        return ret;
+    }
+
     virtual void updateFactoryStatistics() const override
     {
         CRuntimeStatisticCollection mergedStats(stats.queryMapping());
@@ -21554,7 +21570,7 @@ public:
             if (variableFileName)
             {
                 OwnedRoxieString fileName(helper.getFileName());
-                varFileInfo.setown(resolveLFN(fileName, isOpt));
+                varFileInfo.setown(resolveLFNFlat(fileName, isOpt));
                 numParts = 0;
                 if (varFileInfo)
                     numParts = varFileInfo->getNumParts();
@@ -22685,7 +22701,7 @@ protected:
     void setVariableFileInfo()
     {
         OwnedRoxieString indexName(indexHelper.getFileName());
-        varFileInfo.setown(resolveLFN(indexName, isOpt));
+        varFileInfo.setown(resolveLFNIndex(indexName, isOpt));
         if (varFileInfo)
         {
             unsigned formatCrc = getFormatCrc(indexHelper.getFormatCrc());
@@ -23338,7 +23354,7 @@ class CRoxieServerSimpleIndexReadActivity : public CRoxieServerActivity, impleme
     void setVariableFileInfo()
     {
         OwnedRoxieString indexName(indexHelper.getFileName());
-        varFileInfo.setown(resolveLFN(indexName, isOpt));
+        varFileInfo.setown(resolveLFNIndex(indexName, isOpt));
         unsigned formatCrc = getFormatCrc(indexHelper.getFormatCrc());
         IOutputMetaData *projectedMeta = indexHelper.queryProjectedDiskRecordSize();
         IOutputMetaData *expectedMeta = indexHelper.queryDiskRecordSize();
@@ -24507,7 +24523,7 @@ public:
         if (variableFileName)
         {
             OwnedRoxieString fname(helper.getFileName());
-            varFileInfo.setown(resolveLFN(fname, isOpt));
+            varFileInfo.setown(resolveLFNFlat(fname, isOpt));
             if (varFileInfo)
                 map.setown(varFileInfo->getFileMap());
         }
@@ -25251,7 +25267,7 @@ public:
         else if (variableIndexFileName)
         {
             OwnedRoxieString indexFileName(helper.getIndexFileName());
-            varFileInfo.setown(resolveLFN(indexFileName, (helper.getJoinFlags() & JFindexoptional) != 0));
+            varFileInfo.setown(resolveLFNIndex(indexFileName, (helper.getJoinFlags() & JFindexoptional) != 0));
             if (varFileInfo)
             {
                 unsigned formatCrc = getFormatCrc(helper.getIndexFormatCrc());
@@ -25951,7 +25967,7 @@ public:
         {
             bool isFetchOpt = (helper.getFetchFlags() & FFdatafileoptional) != 0;
             OwnedRoxieString fname(helper.getFileName());
-            varFetchFileInfo.setown(resolveLFN(fname, isFetchOpt));
+            varFetchFileInfo.setown(resolveLFNFlat(fname, isFetchOpt));
             if (varFetchFileInfo)
             {
                 // Note - we don't need to do any translation on the disk part of full-keyed joins
@@ -26106,7 +26122,7 @@ public:
         else if (variableIndexFileName)
         {
             OwnedRoxieString indexFileName(helper.getIndexFileName());
-            varFileInfo.setown(resolveLFN(indexFileName, (helper.getJoinFlags() & JFindexoptional) != 0));
+            varFileInfo.setown(resolveLFNIndex(indexFileName, (helper.getJoinFlags() & JFindexoptional) != 0));
             if (varFileInfo)
             {
                 unsigned formatCrc = getFormatCrc(helper.getIndexFormatCrc());