diff options
author | Eric Wong <normalperson@yhbt.net> | 2010-12-10 19:49:12 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-12-10 19:49:12 -0800 |
commit | 5d6dc5c742f827350490d8f33c4c89b203ae7460 (patch) | |
tree | 9fc79f0ead7a407f7a7c636a92ed372870e5565a /lib/metropolis/multi_hash | |
parent | 8791d27f34d618bc7979b56da7e068b79a79b229 (diff) | |
download | metropolis-5d6dc5c742f827350490d8f33c4c89b203ae7460.tar.gz |
String#hash is not stable across processes :<
We need to implement our own hash functions for splitting databases across multiple files. This was totally fucking up Rainbows!
Diffstat (limited to 'lib/metropolis/multi_hash')
-rw-r--r-- | lib/metropolis/multi_hash/digest.rb | 23 | ||||
-rw-r--r-- | lib/metropolis/multi_hash/to_i.rb | 12 |
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/metropolis/multi_hash/digest.rb b/lib/metropolis/multi_hash/digest.rb new file mode 100644 index 0000000..974d7ac --- /dev/null +++ b/lib/metropolis/multi_hash/digest.rb @@ -0,0 +1,23 @@ +# -*- encoding: binary -*- +require 'digest' +module Metropolis::MultiHash::Digest + def digest_sha1(key) + ::Digest::SHA1.digest(key)[0,4].unpack("N")[0] + end + + def digest_md5(key) + ::Digest::MD5.digest(key)[0,4].unpack("N")[0] + end + + def digest_sha256(key) + ::Digest::SHA256.digest(key)[0,4].unpack("N")[0] + end + + def digest_sha384(key) + ::Digest::SHA384.digest(key)[0,4].unpack("N")[0] + end + + def digest_sha512(key) + ::Digest::SHA512.digest(key)[0,4].unpack("N")[0] + end +end diff --git a/lib/metropolis/multi_hash/to_i.rb b/lib/metropolis/multi_hash/to_i.rb new file mode 100644 index 0000000..69b2819 --- /dev/null +++ b/lib/metropolis/multi_hash/to_i.rb @@ -0,0 +1,12 @@ +# -*- encoding: binary -*- +# simple "hashing" method which converts keys to integers, +# this may be useful for databases that only store numeric keys +module Metropolis::MultiHash::ToI + def to_i(key) + key.to_i + end + + def to_i_16(key) + key.to_i(16) + end +end |