在我的生产环境中,我们拥有了我们认为的一个 由Storable.pm创建的腐败可存储哈希值。我无法复制Dev中的行为,这使得很难准确诊断。
代码已经工作了很长时间,并且已经发生了变化 break正在从哈希中删除。哈希直到最近 保持相同的规模或增长。
在readwrite中打开文件,然后store_fd写入该文件。 由于散列现在(有时)较小,因此它会写入1000bytes 这个2000byte的文件。尾部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);
我的问题:
答案 0 :(得分:1)
我不知道Storable
处理垃圾尾随的情况有多好,但肯定添加不会有什么害处
truncate $sf, tell($sf);
在致电store_fd
之后,消除了对现在和将来是否可以处理它的疑问。
答案 1 :(得分:0)
抱歉,我以为我更新了这个。
我问perl5搬运工,并得到了问题的答案。
我没有实现修复,因为我无法在测试中复制,所以不想推送到我的生产环境,我的解决方案目前更安全。
基于perl5-porters的答案,截断绝对是一个好主意。
我不知道有人(或可能!)对我的问题表示赞赏。