浏览代码

Merge branch 'candidate-4.2.6' into candidate-5.0.0

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 11 年之前
父节点
当前提交
dac24cb214
共有 2 个文件被更改,包括 14 次插入6 次删除
  1. 5 0
      common/workunit/pkgimpl.hpp
  2. 9 6
      roxie/ccd/ccdstate.cpp

+ 5 - 0
common/workunit/pkgimpl.hpp

@@ -101,6 +101,11 @@ protected:
         return (node) ? node->queryProp("@id") : NULL;
     }
 
+    virtual bool isCompulsory() const
+    {
+        return (node) ? node->getPropBool("@compulsory", false) : false;
+    }
+
     virtual bool getSysFieldTranslationEnabled() const {return false;}
     virtual bool getEnableFieldTranslation() const
     {

+ 9 - 6
roxie/ccd/ccdstate.cpp

@@ -519,10 +519,10 @@ protected:
     }
 
     // Use local package and its bases to resolve existing file into physical file info via all supported resolvers
-    IResolvedFile *lookupExpandedFileName(const char *fileName, bool useCache, bool cacheResult, bool writeAccess, bool alwaysCreate) const
+    IResolvedFile *lookupExpandedFileName(const char *fileName, bool useCache, bool cacheResult, bool writeAccess, bool alwaysCreate, bool checkCompulsory) const
     {
         IResolvedFile *result = lookupFile(fileName, useCache, cacheResult, writeAccess, alwaysCreate);
-        if (!result)
+        if (!result && (!checkCompulsory || !isCompulsory()))
             result = resolveLFNusingDaliOrLocal(fileName, useCache, cacheResult, writeAccess, alwaysCreate);
         return result;
     }
@@ -557,7 +557,7 @@ protected:
                     }
                     if (traceLevel > 9)
                         DBGLOG("Looking up subfile %s", subFileName.str());
-                    Owned<const IResolvedFile> subFileInfo = lookupExpandedFileName(subFileName, useCache, cacheResult, false, false);  // NOTE - overwriting a superfile does NOT require write access to subfiles
+                    Owned<const IResolvedFile> subFileInfo = lookupExpandedFileName(subFileName, useCache, cacheResult, false, false, false);  // NOTE - overwriting a superfile does NOT require write access to subfiles
                     if (subFileInfo)
                     {
                         if (!super)
@@ -623,13 +623,16 @@ public:
         if (traceLevel > 5)
             DBGLOG("lookupFileName %s", fileName.str());
 
-        const IResolvedFile *result = lookupExpandedFileName(fileName, useCache, cacheResult, false, false);
+        const IResolvedFile *result = lookupExpandedFileName(fileName, useCache, cacheResult, false, false, true);
         if (!result)
         {
+            StringBuffer compulsoryMsg;
+            if (isCompulsory())
+                    compulsoryMsg.append(" (Package is compulsory)");
             if (!opt)
-                throw MakeStringException(ROXIE_FILE_ERROR, "Could not resolve filename %s", fileName.str());
+                throw MakeStringException(ROXIE_FILE_ERROR, "Could not resolve filename %s%s", fileName.str(), compulsoryMsg.str());
             if (traceLevel > 4)
-                DBGLOG("Could not resolve OPT filename %s", fileName.str());
+                DBGLOG("Could not resolve OPT filename %s%s", fileName.str(), compulsoryMsg.str());
         }
         return result;
     }