s/exists?/symlink?/ + remove useless check + remove useless call to a function.

toying-with-ramdb
Philippe PITTOLI 2024-05-09 16:24:07 +02:00
parent d29b29bc1b
commit 2a71254533
1 changed files with 7 additions and 12 deletions

View File

@ -19,11 +19,12 @@ class DODB::Index(V) < DODB::Indexer(V)
symlink = file_path_index index_key.to_s symlink = file_path_index index_key.to_s
# FIXME: Check its not pointing to “old_value”, if any, before raising. if ::File.symlink? symlink
if ::File.exists? symlink # In case both old and new values are pointing to the same key,
# this is not considered a collision.
if old_value if old_value
old_key = key_proc.call old_value old_key = key_proc.call old_value
return if symlink == file_path_index old_key.to_s return if index_key == old_key
end end
raise IndexOverload.new "index '#{@name}' is overloaded for key '#{key}', file #{symlink} exists" raise IndexOverload.new "index '#{@name}' is overloaded for key '#{key}', file #{symlink} exists"
@ -39,11 +40,6 @@ class DODB::Index(V) < DODB::Indexer(V)
Dir.mkdir_p ::File.dirname symlink Dir.mkdir_p ::File.dirname symlink
# FIXME: Now that this is done in check!, can we remove it?
if ::File.exists? symlink
raise Exception.new "symlink already exists: #{symlink}"
end
::File.symlink get_data_symlink_index(key), symlink ::File.symlink get_data_symlink_index(key), symlink
end end
@ -96,9 +92,7 @@ class DODB::Index(V) < DODB::Indexer(V)
def get_key_on_fs(index : String) : Int32 def get_key_on_fs(index : String) : Int32
file_path = file_path_index index file_path = file_path_index index
raise MissingEntry.new(@name, index) unless ::File.symlink? file_path
raise MissingEntry.new(@name, index) unless ::File.exists? file_path
::File.readlink(file_path).sub(/^.*\//, "").to_i ::File.readlink(file_path).sub(/^.*\//, "").to_i
end end
@ -158,8 +152,9 @@ class DODB::CachedIndex(V) < DODB::Index(V)
def check!(key, value, old_value) def check!(key, value, old_value)
index_key = key_proc.call value index_key = key_proc.call value
# FIXME: Check its not pointing to “old_value”, if any, before raising.
if data[index_key]? if data[index_key]?
# In case both old and new values are pointing to the same key,
# this is not considered a collision.
if old_value if old_value
old_key = key_proc.call old_value old_key = key_proc.call old_value
return if index_key == old_key return if index_key == old_key