青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數據加載中……

這是tokyo cabinet的一個BUG么

最近在研讀tokyo cabinet的代碼,但是發現一個問題。
目前在跟進的是使用hash table實現的數據庫文件,在項目的examples目錄下面有一些作者寫的demo文件演示如何使用的。我使用這里的tchdbex.c文件跟蹤代碼的運行情況,不過在里面加入了下面兩行代碼:
/* store records */
  
if(!tchdbput2(hdb, "foo""hop"||
     
!tchdbput2(hdb, "bar""step"||
     
!tchdbput2(hdb, "baz""jump")){
    ecode 
= tchdbecode(hdb);
    fprintf(stderr, 
"put error: %s\n", tchdberrmsg(ecode));
  }

+  tchdbout2(hdb, "foo");
+  tchdbput2(hdb, "foo""hop");

(代碼前面加上+號的是我加上的兩行代碼)

可以看到,我在加入了記錄(“foo”, “hop”)之后,對它進行了刪除操作,在這之后緊跟著再次插入相同的記錄。
tokyo cabinet的hash-table實現中,刪除一條記錄時會將塌存放到一個free pool類型的數組中,這里面保存了這條刪除記錄的大小和在文件中的偏移量。

問題在于,在加入記錄時,記錄的大小是32byte,刪除記錄時理所當然的也是刪除一條大小為32byte的記錄了,但是呢,緊跟著再次插入同樣的記錄時,代碼中(tchdb.c):
3417      rec.rsiz = HDBMAXHSIZ + ksiz + vsiz;
3418      if(!tchdbfbpsearch(hdb, &re
3417行算出這條新插入的記錄應該是38byte,于是走入下面的函數tchdbfbpsearch 查找能滿足這個大小的freepool,之前返回的freepool是32,于是這個查找失敗了,不得不重新分配空間來存放這個新的記錄,而不是復用已經返回的空間---盡管前后兩次插入的數據大小是一樣的。
其實,在上面的代碼中,第二次插入記錄的時候,查找可用的freepool失敗之后繼續往下走,最后真正插入到文件中的數據記錄大小還是32的。

我給作者發去郵件,咨詢這個問題,作者的回答大意是說我描述的這個現象確實存在,不過是有一定的考慮在里面的,后期會進行一些改進。我沒有完全的把這部分代碼閱讀完畢,所以也就不好多說什么了,下面附上郵件內容,做一個記錄,也為可能會發現這個問題的朋友提個醒吧。

我使用的版本是1.4.19。
chuang
 發送至 hirarin
    
顯示詳細信息 
15:10 (6 小時前)
    
Hi, hirarin,recently, I 
try to read and trace the tokyocabinet source.
when I use the examples
/tchdbex.c to trace hash-table, I find a problem.

In the file tchdbex.c, I add two lines:
  
/* store records */
  
if(!tchdbput2(hdb, "foo""hop"||
     
!tchdbput2(hdb, "bar""step"||
     
!tchdbput2(hdb, "baz""jump")){
    ecode 
= tchdbecode(hdb);
    fprintf(stderr, 
"put error: %s\n", tchdberrmsg(ecode));
  }

+  tchdbout2(hdb, "foo");
+  tchdbput2(hdb, "foo""hop");

so, you can see that after insert key 
"foo","bar" and "baz", I try to remove the record with the key "foo", and then insert record ("foo","hop") again.

But, when i use gdb to trace the program, i find that, when i first insert the record (
"foo""hop"), the record size is 32.
and then, when i remove the record (
"foo""hop"), the record size is 32, it is ok, then a free block with size 32 is inserted into the free block arrays.
But, when I insert record (
"foo""hop") once again, in the file tchdb.c:3417:
3417      rec.rsiz = HDBMAXHSIZ + ksiz + vsiz;
then the record size 
is 38
and then the next line it tries to find a free block fix to 
this size, but there is only free block with size 32, so it is falied to find a free block.

I mean that, 
if I remove the record ("foo""hop") and then try to insert it again, seems that it should use the free block with size 32.Otherwise, there will be missing retrieval of the free block.

So, 
is it a bug??

BTW: the version 
is 1.4.19
 
|
Mikio Hirabayashi
 發送至 我
    
顯示詳細信息 
16:37 (5 小時前)
    
Hi,

Thanks 
for the report.
It
's not a bug but on purpose.
The header size is not calcurated at the line, I estimate it the
maximum size 
in theory.
However, I hit on an idia thanks to you.  I
'll change the logic to
reduce the file size.

Regards.



posted on 2009-12-03 22:09 那誰 閱讀(4883) 評論(0)  編輯 收藏 引用 所屬分類: tokyo cabinet

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产在线观看| 亚洲伦理久久| 久久亚洲精品视频| 老巨人导航500精品| 久久精视频免费在线久久完整在线看 | 亚洲欧美在线免费| 亚洲欧美日韩精品在线| 亚洲欧美一区二区三区极速播放| 亚洲欧美国产毛片在线| 欧美亚洲一级| 欧美高清在线视频| 国产精品都在这里| 伊人夜夜躁av伊人久久| 亚洲人成网站在线播| 亚洲图片激情小说| 久久综合给合久久狠狠色| 亚洲国产欧美一区二区三区久久 | 亚洲一区二区三区精品在线观看| 亚洲黄色片网站| 亚洲国产老妈| 一本久久综合| 性欧美超级视频| 久久综合九色综合久99| 欧美精品亚洲二区| 国产日韩亚洲欧美精品| 亚洲国产精品尤物yw在线观看| 99re6热只有精品免费观看 | 麻豆精品网站| aⅴ色国产欧美| 久久久久久自在自线| 欧美日韩亚洲综合一区| 韩日欧美一区| 黄色成人av网站| 亚洲视频自拍偷拍| 久久成人久久爱| 欧美日韩国产免费| 狠狠色狠色综合曰曰| 宅男66日本亚洲欧美视频| 久久久人人人| 亚洲一区二区少妇| 欧美黑人在线播放| 精品成人一区| 久久精品电影| 在线视频欧美日韩精品| 欧美激情第3页| 在线看片欧美| 久久久亚洲人| 欧美一区二区三区四区在线观看| 欧美色精品天天在线观看视频| 亚洲电影自拍| 午夜综合激情| 欧美激情在线播放| 国产亚洲欧美一级| 亚洲一区日本| 亚洲精品1234| 久久久久久久久久久成人| 国产精品日日摸夜夜摸av| 一区二区精品在线| 亚洲激情第一区| 欧美.日韩.国产.一区.二区| 国产亚洲美州欧州综合国| 亚洲欧美另类国产| 亚洲四色影视在线观看| 欧美午夜视频一区二区| 亚洲午夜小视频| 亚洲欧美视频一区| 一本色道88久久加勒比精品 | 亚洲欧美日本在线| 国产精品久久久久91| 亚洲欧美激情诱惑| 亚洲免费在线观看视频| 国产欧美日韩亚洲一区二区三区| 午夜国产一区| 欧美在线视频在线播放完整版免费观看 | 久久久亚洲成人| 亚洲欧洲一级| 日韩天堂av| 国产精品久久久久久影视| 午夜一级在线看亚洲| 香蕉久久久久久久av网站| 韩国在线视频一区| 亚洲国产精品99久久久久久久久| 欧美成人一区在线| 中文国产成人精品| 亚洲欧美日韩在线高清直播| 国精品一区二区| 亚洲国产精品一区二区www在线| 欧美二区不卡| 欧美伊人久久大香线蕉综合69| 久久国内精品自在自线400部| 亚洲黄色在线看| 亚洲伊人伊色伊影伊综合网| 精品999在线播放| 99视频精品全国免费| 国产午夜精品麻豆| 最新成人av在线| 国产一区二区黄色| 亚洲老板91色精品久久| 国产一区二区三区成人欧美日韩在线观看| 久热精品在线视频| 欧美视频在线观看视频极品| 久久午夜视频| 国产精品毛片在线看| 亚洲高清在线| 国语精品中文字幕| 亚洲视频免费| 日韩视频专区| 久久躁狠狠躁夜夜爽| 亚洲欧美在线免费观看| 欧美精品18| 嫩草国产精品入口| 国产日韩在线看| 亚洲午夜视频在线观看| 亚洲精品在线二区| 久久久91精品国产一区二区三区| 亚洲一区精品在线| 欧美日韩国产色视频| 欧美激情第9页| 黄色影院成人| 国产精品美女xx| 女女同性女同一区二区三区91| 欧美视频精品一区| 亚洲高清自拍| 伊人久久大香线蕉综合热线| 亚洲一区在线播放| 亚洲视频在线二区| 欧美伦理影院| 亚洲国产精品传媒在线观看| 一区二区三区在线不卡| 性18欧美另类| 欧美一区二区三区视频在线| 欧美视频在线观看一区二区| 亚洲精选大片| 一本色道久久综合亚洲精品高清 | 欧美日韩另类一区| 亚洲欧洲日本mm| 亚洲精品在线电影| 欧美激情一区二区三区不卡| 欧美激情亚洲精品| 亚洲日韩视频| 欧美精品激情在线观看| 亚洲精品1234| 亚洲午夜视频在线观看| 国产精品久久婷婷六月丁香| 亚洲小少妇裸体bbw| 午夜一级久久| 狠狠色丁香久久婷婷综合丁香 | 国产精品成人在线| 一区二区三区视频在线观看| 亚洲主播在线播放| 国产欧美精品xxxx另类| 欧美在线视频一区二区三区| 噜噜噜久久亚洲精品国产品小说| 伊人色综合久久天天| 你懂的成人av| 夜夜嗨av色综合久久久综合网 | 亚洲二区在线观看| 欧美精品色网| 香蕉久久夜色| 亚洲大胆av| 亚洲在线成人精品| 国产视频一区二区三区在线观看| 久久精品国产99精品国产亚洲性色 | 男人的天堂亚洲| 亚洲作爱视频| 国产亚洲a∨片在线观看| 久久亚洲一区| 一区二区三区四区蜜桃| 久久色中文字幕| 亚洲深夜福利| 在线免费观看成人网| 欧美午夜剧场| 欧美aaa级| 性感少妇一区| 99视频精品在线| 嫩模写真一区二区三区三州| 亚洲男人的天堂在线aⅴ视频| 韩国欧美一区| 欧美午夜精品久久久久久人妖 | 篠田优中文在线播放第一区| 欧美 日韩 国产在线| 亚洲午夜精品久久久久久浪潮 | 欧美一级成年大片在线观看| 在线电影国产精品| 国产精品久久久久999| 免费h精品视频在线播放| 亚洲综合清纯丝袜自拍| 亚洲国产精品一区二区三区| 欧美亚洲在线观看| 99国产精品国产精品久久| 国内免费精品永久在线视频| 国产精品高潮呻吟久久| 欧美成人一品| 久久中文久久字幕| 欧美一区二区高清| 一区二区三区高清不卡| 亚洲国产欧美一区二区三区久久| 久久久久青草大香线综合精品| 亚洲视频在线免费观看| 99热这里只有成人精品国产|