手摸手學(xué)ModelArts】偶遇OBS“驚天”大Bug!

      網(wǎng)友投稿 1112 2025-04-01

      偶遇OBS"驚天"大Bug

      ↑開局一張圖,故事全靠編。

      緣起

      做開發(fā)的尤其是前端,你永遠(yuǎn)不知道用戶會怎么使用你的產(chǎn)品,比如頁面上一個輸入框,你永遠(yuǎn)不知道用戶會輸入什么。這次能遇到OBS的這個Bug,也是我無意間做了不當(dāng)?shù)摹拜斎搿?,?dǎo)致上傳到OBS的文件無法正常顯示,也無法正常操作(如:刪除)。先來看看問題究竟是啥,請看下圖:1. 無法顯示正常的文件信息;2. 點擊刪除無法正常刪除文件,是怎么刪都不能刪的!; 3. 其他操作也不正常,如分享復(fù)制出來的鏈接訪問是NoSuchKeyThe specified key does not exist等等。導(dǎo)致問題出現(xiàn)的原因,大概就是工單解決方案中提到的:上傳的對象帶了特殊字符,OBS 服務(wù)后臺不能正常的轉(zhuǎn)義。

      復(fù)現(xiàn)

      我究竟是做了什么操作才導(dǎo)致OBS無法正常轉(zhuǎn)義呢?為了復(fù)現(xiàn)這個問題,我找到了上一次實踐的錯誤代碼,罪魁禍?zhǔn)拙褪撬耍?/p>

      cd?~cd?workmkdir?mytestcd?mytestwget?http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gztar?-zxvf?./train-images-idx3-ubyte.gz

      通過一波Terminal操作,我下載了一個train-images-idx3-ubyte.gz文件,并錯誤地執(zhí)行了tar -zxvf ./train-images-idx3-ubyte.gz,這里其實已經(jīng)是“罪惡的源頭”了,我們通過執(zhí)行l(wèi)s,可以看到如下文件:

      sh-$ls'<'????????''$'4'??''$'446'??''$'65'??''$'3725557''9'???train-images-idx3-ubyte.gz''$'5'??''$'1'??''$'456'??''$'\f'????????'m'$'\v

      sh-$ls'<'????????''$'\224'??''$'\374\374\356'??''$'\376\035'??''$'\313\367\372\375\375\375\257''9'???train-images-idx3-ubyte.gz''$'\315'??''$'\341'??''$'\374\375\216'??''$'\f'????????'m'$'\v\002'

      2'

      其實這里已經(jīng)是問題的所在了,因為解壓不當(dāng)導(dǎo)致了一些特殊字符的文件名的生成,當(dāng)然,如果不上傳這些文件到OBS,是不會偶遇文章開頭的問題。為了復(fù)現(xiàn),我們通過Moxing將文件上傳到OBS上,代碼如下:

      import?os? import?moxing?as?mox?? mox.file.copy_parallel('./mytest',?'obs://mindspore-labs/mytest')print('Upload?done!')

      上傳之后,回到OBS,發(fā)現(xiàn)我們剛解壓出來的文件已經(jīng)存在, 而且如“幽靈”一般存在,它們沒有名字,無法刪除,就算分享出來也無法正常訪問,這里姑且稱它們?yōu)椤坝白游募薄?/p>

      求解

      遇到這樣的Bug,我還是很興奮的,作為Copy攻城獅,我平時很少獨立思考,這次卻破天荒地費(fèi)了的腦力想想了--還是提工單吧!本來提了工單可能就萬事無憂了,不過對于未知事物的好奇,我也開始一步步探索。

      網(wǎng)頁操作

      首先,從結(jié)果來論證,直接面向用戶的前端頁面最能直接展現(xiàn)問題。我分別查看了正常情況和“影子文件”的network,發(fā)現(xiàn)了有意思額情況,正常的返回在XML中Contents下包含key、size等返回信息,也就是我們能看到的文件名、文件大小、修改時間之類的,而“影子文件”返回的數(shù)據(jù)Contents下沒有任何信息,所以我們看不到文件相關(guān)的信息,也無法正常操作文件。

      通Moxing列舉

      其次,通過Moxing列舉正常能讀取的文件和“影子文件”,也發(fā)現(xiàn)了些貓膩,正常文件列表是可以被讀取到的,而嘗試讀取“影子文件”目錄就會報錯。

      執(zhí)行代碼:

      import?moxing?as?mox?? #?列舉正常文件mox.file.list_directory('obs://mindspore-labs/experiment_1/MNIST/',?recursive=True)#?列舉影子文件mox.file.list_directory('obs://mindspore-labs/mytest/',?recursive=True)

      通過以上兩步嘗試,也預(yù)示我們無法通過OBS網(wǎng)頁端和Moxing來刪除“影子文件”,根據(jù)大佬給出的指導(dǎo),應(yīng)該使用obsutil[3]或者SDK[4]去刪除文件對象。值得注意的是,這兩種方法都需要獲取訪問密鑰即AK/SK(Access Key ID/Secret Access Key),獲取AK/SK的細(xì)節(jié)這里就不贅述了。

      obsutil體驗

      不得不提下這款用于訪問管理OBS的命令行工具,它具有四大優(yōu)勢:

      簡單、易用;

      無需安裝,輕便小巧,即下即用;

      同時支持Windows/Linux/macOS三大平臺;

      配置多元化,性能卓越。

      我是windows系統(tǒng),下載之后運(yùn)行obsutil.exe,執(zhí)行config -i=ak -k=sk -e=endpoint進(jìn)行初始化配置,ak就是訪問密鑰的AK,sk是訪問密鑰的SK,endpoint對應(yīng)桶所在的終端節(jié)點如:obs.cn-north-4.myhuaweicloud.com就是華北-北京4,endpoint可訪問地區(qū)和終端節(jié)點[5]查看。

      【手摸手學(xué)ModelArts】偶遇OBS“驚天”大Bug!

      我嘗試列出“影子文件”,結(jié)果還是拋了異常Error: Status [0], error code [], error message [XML syntax error on line 1: illegal character code U+000C], request id [000001735BD0E90D440F97BC745F201C],如果要知道究竟發(fā)生了什么,可以工單并向華為云工程師大佬提供這個request id,其實通過報錯信息我們也能察覺到是有非法字符導(dǎo)致的。

      然后我滿懷信心的敲下了rm obs://mindspore-labs/mytest -r -f,以為這樣就能刪除掉,結(jié)果:

      [________________________________________________________]??%?tps:0.00?0/0?52ms Warn:?No?task?to?run List?objects?in?the?bucket?[mindspore-labs]?to?delete?failed,?status?[0],?error?code?[],?error?message?[XML?syntax?error?on?line?1:?illegal?character?code?U+000C],?request?id?[000001735BD70EBE44149CE8B9E179C9]

      是的,刪除失敗!!!去網(wǎng)頁端查看,文件依舊如磐石般巋然不動!

      OBS SDK體驗

      既然前面三種方法都沒能刪除頑固的“影子文件”,那試試僅有的一絲希望--OBS SDK。由于我是JavaScript技術(shù)棧,盡管工單那頭的大佬極力推薦Java SDK,我還是毅然決然地選擇了Node.js SDK。趕緊下載官方文檔提供的Demo代碼[6],開始我認(rèn)為的最后一根破除稻草:

      安裝依賴:

      npm?install?esdk-obs-nodejs

      找到examples\delete-objects-sample.js開干,替換access_key_id的值為訪問密鑰的AK,secret_access_key的值為訪問密鑰的SK,server的值為桶所在的終端節(jié)點如:"https://obs.cn-north-4.myhuaweicloud.com";其實和**obsutil**的配置大同小異.

      我們先通過listObjects列舉一下“影子文件”:

      var?obs?=?new?ObsClient({ ????access_key_id:?'您的訪問訪問AK', ????secret_access_key:?'您的訪問密鑰CK', ????server?:?'桶所在的終端節(jié)點'});var?bucketName?=?'mindspore-labs';?//?桶名obs.listObjects({ ????Bucket:?bucketName, ????Prefix:?'mytest/'?//?前綴,列舉mytest下文件}).then((result)?=>?{ ????if(result.CommonMsg.Status?'?+?result.InterfaceResult.Contents[j]['Key']); ????????????console.log('\tETag-->'?+?result.InterfaceResult.Contents[j]['ETag']); ????????} ????????console.log('\n'); ????}});

      得到的結(jié)果出乎我的意料,不僅是影子文件,其他正常的文件也能正常列出,這足以說明Copy攻城獅功力到位了,也是能夠解決問題的:

      $?node?examples/delete-objects-sample.js List?all?objects?in?folder?src0/ ????????Key-->mytest/ ????????ETag-->"d41d8cd98f00b204e9800998ecf8427e" ????????Key-->mytest/ ????????ETag-->"d41d8 ????????ETag-->"d41d8cd98f00b204e9800998ecf8427e" ????????Key-->mytest/< ????????ETag-->"d41d8cd98f00b204e9800998ecf8427e" ????????Key-->mytest/md98f00b204e9800998ecf8427e" ????????Key-->mytest/t ????????ETag-->"d41d8cd98f00b204e9800998ecf8427e" ????????Key-->mytest/train-images-idx3-ubyte.gz

      影子文件神秘的面紗已經(jīng)揭開,因為OBS后臺無法解析特殊符號如小于號,導(dǎo)致解析進(jìn)程中斷了,亦或是文件路徑名不能有特殊字符。既然問題到這,已經(jīng)非常透徹了,接下來應(yīng)該是破局的時候了。

      破局

      既然最終找到了問題的根本,嘗試解決吧,依舊使用我們的SDK來處理,只需在上面列舉中調(diào)用deleteObject:

      obs.listObjects({ ????Bucket:?bucketName, ????Prefix:?'mytest/'}).then((result)?=>?{ ????if(result.CommonMsg.Status?'?+?result.InterfaceResult.Contents[j]['Key']); ????????????console.log('\tETag-->'?+?result.InterfaceResult.Contents[j]['ETag']); ????????????obs.deleteObject({ ????????????????Bucket:?bucketName, ????????????????Key:?result.InterfaceResult.Contents[j]['Key'] ????????????},?(err,?result)?=>?{ ????????????????if(err){ ???????????????????????console.error('Error-->'?+?err); ????????????????}else{ ???????????????????????console.log('Status-->'?+?result.CommonMsg.Status); ???????????????????????console.log('CommonMsg-->'?+?JSON.stringify(result.CommonMsg)); ????????????????} ????????????}); ????????} ????????console.log('\n'); ????}});

      盡管這是最愚笨的方式,但我已經(jīng)達(dá)到了我的預(yù)期,無法刪除的“影子文件”終于可以通通刪除了,感覺世界終于清靜了!

      溫馨提示:以上方法會清除目錄下的所有文件,如有要保留特定的文件請通過編寫代碼實現(xiàn)

      最后在OBS網(wǎng)頁端再確認(rèn)一下,終于完成了!

      加入組織

      MDG 是 ModelArts Developer Groups 的縮寫。是由 ModelArts 開發(fā)者發(fā)起的開放、創(chuàng)新、多元的開發(fā)者社區(qū)組織。致力于幫助開發(fā)者學(xué)習(xí)提升、互動交流、挖掘機(jī)會,推動 AI、互聯(lián)網(wǎng)等產(chǎn)業(yè)生態(tài)的建立和發(fā)展。MDG 是面向人工智能、AI 技術(shù)、開源項目及 ModelArts 平臺技術(shù)感興趣的公益性開發(fā)者社區(qū),相關(guān)開發(fā)者、軟件工程師、創(chuàng)業(yè)者、運(yùn)營人、產(chǎn)品人、大學(xué)生、老師等都可以參加到 MDG 社區(qū)。

      MDG 秉承開放、創(chuàng)新、多元的社區(qū)文化,完全由各地志愿者自發(fā)組織和建立。目前,我們已在北京、上海、杭州、重慶建立了社區(qū)組織。自 2019 年12月起陸續(xù)開展了多次線上、線下活動。許多小伙伴正是參與了華為云 ModelArts 的相關(guān)活動后,申請加入MDG志愿者組織,從而更深入地了解ModelArts平臺。

      新晉華為云云享專家Copy攻城獅,我是胡琦,近期有幸參與【2020華為云AI實戰(zhàn)營】,學(xué)習(xí)ModelArts并加入【MDG社區(qū)】,期待在這里與你相遇!

      參考鏈接

      [1]?https://bbs.huaweicloud.com/forum/thread-65345-1-1.html

      [2]?http://2020.huaweicloud.ai

      [3]?https://support.huaweicloud.com/utiltg-obs/obs_11_0001.html

      [4]?https://support.huaweicloud.com/sdkreference-obs/obs_02_0001.html

      [5]?https://developer.huaweicloud.com/endpoint?OBS

      [6]?https://obssdk.obs.cn-north-1.myhuaweicloud.com/current/nodejs/nodejs.zip

      OBS ModelArts

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:怎么退出word最小化窗口
      下一篇:表格隨文字調(diào)整(怎么設(shè)置表格隨文字變化)
      相關(guān)文章
      亚洲午夜无码久久久久| 亚洲日韩在线中文字幕第一页| 久久乐国产精品亚洲综合| 色窝窝亚洲av网| 亚洲爆乳成av人在线视菜奈实| 亚洲午夜电影在线观看高清| 久久国产亚洲高清观看| 亚洲第一精品在线视频| 亚洲AV日韩AV永久无码免下载| 久热综合在线亚洲精品| 亚洲AV无一区二区三区久久| 亚洲v高清理论电影| 亚洲AV无码一区东京热久久| 久久亚洲精品国产精品黑人| 亚洲国产综合91精品麻豆| 亚洲一本综合久久| 久久久无码精品亚洲日韩京东传媒 | 国产aⅴ无码专区亚洲av麻豆 | 亚洲国产免费综合| 国产成人精品久久亚洲| 狠狠亚洲狠狠欧洲2019| 久久亚洲国产精品一区二区| 亚洲电影中文字幕| 亚洲日本国产精华液| 亚洲国产最大av| 亚洲AV无码一区二区乱子仑 | 亚洲午夜精品久久久久久浪潮 | 国产AV无码专区亚洲AV毛网站| 亚洲av中文无码乱人伦在线播放| 久久久久亚洲精品影视| 99人中文字幕亚洲区| 亚洲一区二区三区无码国产| 亚洲一卡2卡3卡4卡乱码 在线| 亚洲欧美日韩中文高清www777| 苍井空亚洲精品AA片在线播放| 国产成人精品亚洲精品| 亚洲高清国产AV拍精品青青草原 | 91亚洲国产成人久久精品网站| 亚洲一级高清在线中文字幕| 亚洲色无码国产精品网站可下载 | 亚洲高清免费在线观看|