浏览代码

Merge pull request #5340 from richardkchapman/roxie-write-again

HPCC-10776 Spurious "Cannot write file" errors from Roxie

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 11 年之前
父节点
当前提交
af7c24b691
共有 1 个文件被更改,包括 6 次插入6 次删除
  1. 6 6
      roxie/ccd/ccdstate.cpp

+ 6 - 6
roxie/ccd/ccdstate.cpp

@@ -307,7 +307,7 @@ protected:
                 DBGLOG("resolveLFNusingDaliOrLocal %s - cache hit", fileName);
             return result;
         }
-        if (!checkCachedDaliMiss(fileName))
+        if (alwaysCreate || !checkCachedDaliMiss(fileName))
         {
             Owned<IRoxieDaliHelper> daliHelper = connectToDali();
             if (daliHelper)
@@ -334,9 +334,9 @@ protected:
             if (!result)
             {
                 StringBuffer useName;
+                bool wasDFS = false;
                 if (strstr(fileName,"::"))
                 {
-                    bool wasDFS;
                     makeSinglePhysicalPartName(fileName, useName, true, wasDFS);
                 }
                 else
@@ -344,7 +344,7 @@ protected:
                 bool exists = checkFileExists(useName);
                 if (exists || alwaysCreate)
                 {
-                    Owned <IResolvedFileCreator> creator = createResolvedFile(fileName, useName, false);
+                    Owned <IResolvedFileCreator> creator = createResolvedFile(fileName, wasDFS ? NULL : useName.str(), false);
                     if (exists)
                         creator->addSubFile(useName);
                     result = creator.getClear();
@@ -498,14 +498,14 @@ public:
                 resolved->remove();
             }
             if (resolved->queryPhysicalName())
-                fileName.clear().append(resolved->queryPhysicalName());
+                fileName.clear().append(resolved->queryPhysicalName());  // if it turned out to be a local file
             resolved.clear();
         }
         else
             throw MakeStringException(ROXIE_FILE_ERROR, "Cannot write %s", fileName.str());
-        // filename by now is a local filename
+        // filename by now may be a local filename, or a dali one
         Owned<IRoxieDaliHelper> daliHelper = connectToDali();
-        Owned<ILocalOrDistributedFile> ldFile = createLocalOrDistributedFile(fileName, NULL, true, false, true);
+        Owned<ILocalOrDistributedFile> ldFile = createLocalOrDistributedFile(fileName, NULL, false, false, true);
         if (!ldFile)
             throw MakeStringException(ROXIE_FILE_ERROR, "Cannot write %s", fileName.str());
         return createRoxieWriteHandler(daliHelper, ldFile.getClear(), clusters);