在我的生产环境中,我们有一个我们认为是腐败的、可存储的散列,由Storable.pm创建。我无法在Dev中复制这种行为,这使得我很难准确诊断。
代码已经工作了很长一段时间,使其中断的更改是从散列中删除。直到最近,哈希要么保持相同的大小,要么增长。
该文件在readwrite中打开,然后store_fd将写入该文件。由于散列现在(有时)较小,它将向这个2000字节文件写入1000个字节。尾1000字节是旧的垃圾数据。在我的测试用例中,当我检索哈希时,垃圾数据会像预期的那样被忽略。
open( $sf, "+< $self->{mod_state_filename}" );
flock( $sf, LOCK_EX );
$self->{mod_state} = fd_retrieve($sf);
delete ($self->{mod_state}{"somekey"});
seek( $sf, 0, 0 );
store_fd( $self->{mod_state}, $sf );
flock( $sf, LOCK_UN )
close($sf);我的问题:
发布于 2010-12-03 00:21:56
我不知道Storable处理拖尾垃圾的能力有多好,但是肯定不会有什么坏处
truncate $sf, tell($sf);在调用store_fd之后,消除了人们对于它现在和将来是否能够处理它的所有疑问。
发布于 2010-12-03 04:18:54
抱歉我以为我更新了这个。
我问了五个搬运工,得到了这个问题的答案。
我还没有实现修复,因为我无法在测试中复制,所以我不想推进到我的生产env,我的工作是暂时更安全。
根据perl5搬运工的回答,截断绝对是个好主意。
我不知道有人有(或可能!)悬赏我的问题。
https://stackoverflow.com/questions/4262584
复制相似问题