<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 42,comments - 83,trackbacks - 0
            前兩天同事問我一個問題,說是客戶那邊使用Tivoli分析weblogic server日志的時候,每當server重啟,Tivoli就出錯,說是FileId is changed。當時就懷疑可能跟server log的iNodeNumber有關。因為沒怎么仔細看過weblogic server logging的代碼,也不是很確認。跟同事說,讓客戶通過 ls -i 確認一下對應的iNodeNumber。客戶反饋說:iNodeNumber沒有發生變化,崩潰,文件名沒變, iNodeNumber沒變,Tivoli說的FileId到底是什么? FileSystem里還有其他標識文件的東西?我有點開始懷疑這個客戶了,嘿嘿。 索性,自己做個測試吧。

            首先看了看weblogic的代碼,log rotation的時候,只是調用了File.renameTo(),  如下:
            weblogic.loggin.FileStreamHandler.rotateLog()
            logFile.renameTo(rotatedFile)

            見鬼了, rename完了iNodeNumber還有不變的道理?看看JDK代碼再說,
            
     File.renameTo()
    1     public boolean renameTo(File dest) {
    2                 SecurityManager security = System.getSecurityManager();
    3                 if (security != null) {
    4                     security.checkWrite(path);
    5                     security.checkWrite(dest.path);
    6                 }
    7                 return fs.rename(this, dest);
    8     }

            這家伙,還是依賴于FileSystem的,再一看,FileSystem是個抽象類,rename的具體實現肯定跟具體的subclass有關了,只能看看Win32FileSystem吧,

    Win32FileSystem.java
     1     public boolean rename(File f1, File f2) {
     2         // Keep canonicalization caches in sync after file deletion
     3         // and renaming operations. Could be more clever than this
     4         // (i.e., only remove/update affected entries) but probably
     5         // not worth it since these entries expire after 30 seconds
     6         // anyway.
     7         cache.clear();
     8         prefixCache.clear();
     9         return rename0(f1, f2);
    10     }
    11     private native boolean rename0(File f1, File f2);

           好了,現在看到了,rename0()是個native 操作,跟共享庫(.dll or .so)又扯上關系了。得, 沒有本地庫代碼,也看不到什么實現了(不過個人感覺,本地實現調用應該是系統函數rename:  int rename(const char *old, const char *new)),只能自己做實現了。寫了個小測試程序, 如下:
     
     1 package com.bea.cs.test.file;
     2 
     3 import java.io.File;
     4 
     5 public class FileTest {
     6     
     7     private File src = new File("test");
     8     
     9     public static void main(String args[])
    10     {
    11         FileTest test = new FileTest();
    12         test.run();
    13     }
    14     
    15     public void run()
    16     {
    17         rename("test1");
    18     }
    19     
    20     private boolean rename(String name)
    21     {
    22         boolean ret = false;
    23         File dest = new File(name);
    24         ret = src.renameTo(dest);
    25         /*
    26          * as src is renamed to dest, dest should hold the iNodeNumber of src
    27          */
    28         src = new File("test");
    29         try
    30         {
    31             /*
    32              * As has been renamed to dest, src should not exist again
    33              * so we should create a new src file, or it will disappear when
    34              * test exits. As a new file, src shuold get a new iNodeNumber
    35              * that different from it's original value
    36              */
    37             if(!src.exists())
    38                 src.createNewFile();
    39         }catch(Exception e)
    40         {
    41             e.printStackTrace();
    42         }
    43         return ret;
    44     }
    45 }

    測試的結果如下:
    Test Reustlslsol6% ls -il
    total 8
       6033508 drwxr-xr-x   3 fjin     staff       4096 Sep 26 23:48 com
       6033514 -rw-r--r--   1 fjin     staff          0 Sep 26 23:56 test
    slsol6% java com.bea.cs.test.file.FileTest
    slsol6% ls -il
    total 8
       6033508 drwxr-xr-x   3 fjin     staff       4096 Sep 26 23:48 com
       6033506 -rw-r--r--   1 fjin     staff          0 Sep 27 01:03 test
       6033514 -rw-r--r--   1 fjin     staff          0 Sep 26 23:56 test1


             現在我這能懷疑客戶了, Tivoli報錯應該是正常的(Work as design),不過比較納悶的是:Tivoli為什么要引用FileId,而不是FileName? 開始想改改weblogic的代碼,調用類似于copy的操作,而不是rename。結果沒有看到File提供類似的API,而且如果這樣做的話,清空原先file內容也是個問題,于是作罷。
            
    posted on 2008-09-27 14:05 走走停停又三年 閱讀(2183) 評論(0)  編輯  收藏 所屬分類: Weblogic
    主站蜘蛛池模板: 国产精品免费看久久久香蕉| 性xxxx黑人与亚洲| 黄色a三级三级三级免费看| 国产高清在线精品免费软件| 亚洲熟妇久久精品| 在线观看成人免费视频| 亚洲国产精品无码久久| 曰皮全部过程视频免费国产30分钟| 色老板亚洲视频免在线观 | 免费一区二区无码东京热| 国产亚洲精品a在线观看 | 一个人看的www视频免费在线观看| 四虎免费久久影院| eeuss影院www天堂免费| 亚洲国产精品va在线播放| 99久久免费看国产精品| 亚洲午夜精品国产电影在线观看| 国产一卡2卡3卡4卡无卡免费视频| 亚洲啪AV永久无码精品放毛片| 免费观看的a级毛片的网站| 曰批免费视频播放免费 | 亚洲视频在线观看地址| 久久久久免费看黄A片APP| 国产亚洲精品成人久久网站| 国产AV无码专区亚洲AWWW| 性无码免费一区二区三区在线| 亚洲mv国产精品mv日本mv| 老司机永久免费网站在线观看| 日日摸夜夜添夜夜免费视频| 久久精品国产亚洲沈樵| 免费可以在线看A∨网站| 理论片在线观看免费| 亚洲首页在线观看| 国产精品无码一二区免费| 一个人免费视频观看在线www| 亚洲成人一级电影| 亚洲AV中文无码乱人伦| 人人揉揉香蕉大免费不卡| 亚洲欧美熟妇综合久久久久| 亚洲日韩aⅴ在线视频| 大学生美女毛片免费视频|