![](/img/trans.png)
[英]DeviceRequest of IOUSBDevice returns 0xe000404f on OS X
[英]Why does STD.FILE.LogicalFileList() results not completely correlate with STD.FILE.GetLogicalFileAttribute(x,y)?
我執行語句:
NrmFiles := NOTHOR(STD.File.LogicalFileList());
這會生成包含在我的 HPCC 環境中的所有普通文件的數據集。 它具有記錄布局:
string lib_fileservices__fslogicalfilename := string{maxlength(255)};
record__0 := RECORD
lib_fileservices__fslogicalfilename name;
END;
FsLogicalFileInfoRecord := RECORD(record__0)
boolean superfile;
integer8 size;
integer8 rowcount;
string19 modified;
string owner{maxlength(255)};
string cluster{maxlength(255)};
END;
出於我的目的,我需要創建/修改每個文件的工作單元,因此我投影該文件,該文件生成所有普通文件的數據集和附加的 WUID:
NrmFiles := dataset('~temp::allfilelist::normal', FsLogicalFileInfoRecord, THOR);
/*--------------------------------------------------------------------------------------------------
| retrieve the workunit ID for each filenme
| The CATCH function executes the action (set the value returned to 'NOTFND') if the
| GetLogicalFileAttribute expression fails for any reason
|------------------------------------------------------------------------------------------------*/
FN_Retrieve_WUID(string pFname) := FUNCTION
RETURN CATCH(STD.File.GetLogicalFileAttribute('~'+TRIM(pFname),'workunit'), 'NOTFND');
END;
dsNormFilesWUID := PROJECT( NrmFiles
, TRANSFORM( {FsLogicalFileInfoRecord; string WUID;}
, SELF.WUID := FN_Retrieve_WUID(LEFT.name);
SELF := LEFT;
));
output(dsNormFilesWUID, ,'~temp::allfilelist::normal::wuid', compressed, overwrite, expire(30));
問題執行 GetLogicalFileAttribute 時無法找到某些文件。 這就是為什么我在語句周圍放置一個 CATCH() 並且它會返回一個“NOTFND”而不是失敗。 順便說一句,我必須在 hthor 上執行此操作,因為如果我在多節點 THOR 上執行,它將失敗並顯示“無法訪問 Dali - 這通常意味着正在從 thorslave 調用插件調用”。 並將調用包裝在 NOTHOR() 中會讓我遇到不同的失敗:“NOTHOR 表達式‘fn_retrieve_wuid’似乎訪問了父數據集——這可能會導致數據集不活動錯誤”
問題STD.File.LogicalFileList()是否從 DFU(分布式文件實用程序)檢索其信息? STD.File.GetLogicalFileAttribute(logicalfilename, attrname)是否從 DALI 檢索其信息(基於文件的元數據)?
我相信這些陳述是正確的(基於返回的數據類型)。 然而,這確實引起了人們的關注,即 DFU 和 DALI 可能會不同步。 我的意思是在同一個 BWR / 節點上,我可以獲得文件列表,並且當根據該列表中的文件名請求屬性時,可能找不到該文件名。
您的問題的答案是:這兩個函數都從 Dali 獲取所有元數據結果。
您的陳述“執行 GetLogicalFileAttribute 時未能找到某些文件。” 是這里唯一困擾我的事情。 我試着寫了一些測試代碼:
IMPORT Std;
NrmFiles := STD.File.LogicalFileList();
NrmFiles;
NewRec := {NrmFiles,STRING20 WUID};
PROJECT(NrmFiles,
TRANSFORM(NewRec,
SELF.WUID := STD.File.GetLogicalFileAttribute('~'+LEFT.name,'workunit'),
SELF := LEFT));
因為這項工作只查看 DFU 元數據,所以沒有理由在 Thor 上運行它,所以它應該始終在 hThor 上運行。 我的代碼在我的測試系統上完美運行,總能找到我擁有的所有邏輯文件,無論它們是 OUTPUT 生成的還是噴灑的。
我建議您提交 JIRA 票證 ( https://track.hpccsystems.com ) 來報告此問題。 在執行此操作之前,您還應該探索 STD.File.GetLogicalFileAttribute() 函數未獲取的確切文件,以查看是否可以檢測到原因。 范圍檢查可能會阻止訪問,但可能性不大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.