diff --git a/lib/remote_storage/swift.rb b/lib/remote_storage/swift.rb index 1be255c..75526a5 100644 --- a/lib/remote_storage/swift.rb +++ b/lib/remote_storage/swift.rb @@ -87,11 +87,11 @@ module RemoteStorage lua_script = <<-EOF local user = ARGV[1] local directory = ARGV[2] - local items = redis.call("smembers", "rs_meta:"..user..":"..directory.."/:items") + local items = redis.call("smembers", "rsm:"..user..":"..directory.."/:i") local listing = {} for index, name in pairs(items) do - local redis_key = "rs_meta:"..user..":" + local redis_key = "rsm:"..user..":" if directory == "" then redis_key = redis_key..name else @@ -121,7 +121,7 @@ module RemoteStorage end def get_directory_listing_from_redis(user, directory) - etag = redis.hget "rs_meta:#{user}:#{directory}/", "etag" + etag = redis.hget "rsm:#{user}:#{directory}/", "etag" none_match = (server.env["HTTP_IF_NONE_MATCH"] || "").split(",").map(&:strip) server.halt 304 if none_match.include? etag @@ -313,7 +313,7 @@ module RemoteStorage end -- check for existing directory with the same name as the document - local redis_key = "rs_meta:"..user..":" + local redis_key = "rsm:"..user..":" if directory == "" then redis_key = redis_key..key.."/" else @@ -324,12 +324,12 @@ module RemoteStorage end for index, dir in pairs(parent_directories) do - if redis.call("hget", "rs_meta:"..user..":"..dir.."/", "etag") then + if redis.call("hget", "rsm:"..user..":"..dir.."/", "etag") then -- the directory already exists, no need to do further checks return false else -- check for existing document with same name as directory - if redis.call("hget", "rs_meta:"..user..":"..dir, "etag") then + if redis.call("hget", "rsm:"..user..":"..dir, "etag") then return true end end @@ -401,9 +401,9 @@ module RemoteStorage end def update_metadata_object(user, directory, key, metadata) - redis_key = "rs_meta:#{user}:#{directory}/#{key}" + redis_key = "rsm:#{user}:#{directory}/#{key}" redis.hmset(redis_key, *metadata) - redis.sadd "rs_meta:#{user}:#{directory}/:items", key + redis.sadd "rsm:#{user}:#{directory}/:i", key true end @@ -418,10 +418,10 @@ module RemoteStorage etag = etag_for(get_response.body) end - key = "rs_meta:#{user}:#{dir}/" + key = "rsm:#{user}:#{dir}/" metadata = {etag: etag, modified: timestamp} redis.hmset(key, *metadata) - redis.sadd "rs_meta:#{user}:#{parent_directory_for(dir)}:items", "#{top_directory(dir)}/" + redis.sadd "rsm:#{user}:#{parent_directory_for(dir)}:i", "#{top_directory(dir)}/" end true @@ -436,9 +436,9 @@ module RemoteStorage end def delete_metadata_objects(user, directory, key) - redis_key = "rs_meta:#{user}:#{directory}/#{key}" + redis_key = "rsm:#{user}:#{directory}/#{key}" redis.del(redis_key) - redis.srem "rs_meta:#{user}:#{directory}/:items", key + redis.srem "rsm:#{user}:#{directory}/:i", key end def delete_dir_objects(user, directory) @@ -449,8 +449,8 @@ module RemoteStorage unless dir == "" do_delete_request("#{url_for_directory(user, dir)}/") end - redis.del "rs_meta:#{user}:#{directory}/" - redis.srem "rs_meta:#{user}:#{parent_directory_for(dir)}:items", "#{dir}/" + redis.del "rsm:#{user}:#{directory}/" + redis.srem "rsm:#{user}:#{parent_directory_for(dir)}:i", "#{dir}/" else unless dir == "" res = do_put_request("#{url_for_directory(user, dir)}/", timestamp.to_s, "text/plain") @@ -460,14 +460,14 @@ module RemoteStorage etag = etag_for(get_response.body) end metadata = {etag: etag, modified: timestamp} - redis.hmset("rs_meta:#{user}:#{dir}/", *metadata) + redis.hmset("rsm:#{user}:#{dir}/", *metadata) end end end def dir_empty?(user, dir) if directory_backend(user).match(/new/) - redis.smembers("rs_meta:#{user}:#{dir}/:items").empty? + redis.smembers("rsm:#{user}:#{dir}/:i").empty? else do_get_request("#{container_url_for(user)}/?format=plain&limit=1&path=#{escape(dir)}/") do |res| return res.headers[:content_length] == "0" diff --git a/migrate_metadata_to_redis.rb b/migrate_metadata_to_redis.rb index 952aea4..d1211c8 100755 --- a/migrate_metadata_to_redis.rb +++ b/migrate_metadata_to_redis.rb @@ -85,13 +85,13 @@ class Migrator end def add_item_to_parent_dir(dir, item) - key = "rs_meta:#{username}:#{parent_directory_for(dir)}:items" + key = "rsm:#{username}:#{parent_directory_for(dir)}:i" logger.debug "Adding item #{item} to #{key}" redis.sadd(key, item) unless dry_run end def save_directory_data(dir, item, data, timestamp) - key = "rs_meta:#{username}:#{dir.gsub(/^\//, "")}#{item}" + key = "rsm:#{username}:#{dir.gsub(/^\//, "")}#{item}" metadata = { etag: data["ETag"], modified: timestamp_for(data["Last-Modified"]) @@ -102,7 +102,7 @@ class Migrator end def save_document_data(dir, item, data) - key = "rs_meta:#{username}:#{dir.gsub(/^\//, "")}#{item}" + key = "rsm:#{username}:#{dir.gsub(/^\//, "")}#{item}" metadata = { etag: data["ETag"], size: data["Content-Length"], diff --git a/spec/swift/app_spec.rb b/spec/swift/app_spec.rb index b42a95a..831c089 100644 --- a/spec/swift/app_spec.rb +++ b/spec/swift/app_spec.rb @@ -31,7 +31,7 @@ describe "App" do put "/phil/food/aguacate", "si" end - metadata = redis.hgetall "rs_meta:phil:food/aguacate" + metadata = redis.hgetall "rsm:phil:food/aguacate" metadata["size"].must_equal "2" metadata["type"].must_equal "text/plain; charset=utf-8" metadata["etag"].must_equal "bla" @@ -50,20 +50,20 @@ describe "App" do end end - metadata = redis.hgetall "rs_meta:phil:/" + metadata = redis.hgetall "rsm:phil:/" metadata["etag"].must_equal "rootetag" metadata["modified"].length.must_equal 13 - metadata = redis.hgetall "rs_meta:phil:food/" + metadata = redis.hgetall "rsm:phil:food/" metadata["etag"].must_equal "bla" metadata["modified"].length.must_equal 13 - food_items = redis.smembers "rs_meta:phil:food/:items" + food_items = redis.smembers "rsm:phil:food/:i" food_items.each do |food_item| ["camaron", "aguacate"].must_include food_item end - root_items = redis.smembers "rs_meta:phil:/:items" + root_items = redis.smembers "rsm:phil:/:i" root_items.must_equal ["food/"] end @@ -81,7 +81,7 @@ describe "App" do last_response.status.must_equal 200 - metadata = redis.hgetall "rs_meta:phil:food/aguacate" + metadata = redis.hgetall "rsm:phil:food/aguacate" metadata["size"].must_equal "2" end @@ -94,7 +94,7 @@ describe "App" do last_response.status.must_equal 409 - metadata = redis.hgetall "rs_meta:phil:food" + metadata = redis.hgetall "rsm:phil:food" metadata.must_be_empty end @@ -107,7 +107,7 @@ describe "App" do last_response.status.must_equal 409 - metadata = redis.hgetall "rs_meta:phil:food/aguacate/empanado" + metadata = redis.hgetall "rsm:phil:food/aguacate/empanado" metadata.must_be_empty end end @@ -123,7 +123,7 @@ describe "App" do last_response.status.must_equal 503 - metadata = redis.hgetall "rs_meta:phil:food/aguacate" + metadata = redis.hgetall "rsm:phil:food/aguacate" metadata.must_be_empty end end @@ -138,7 +138,7 @@ describe "App" do last_response.status.must_equal 503 - metadata = redis.hgetall "rs_meta:phil:food/aguacate" + metadata = redis.hgetall "rsm:phil:food/aguacate" metadata.must_be_empty end end @@ -178,12 +178,12 @@ describe "App" do end end - metadata = redis.hgetall "rs_meta:phil:food/aguacate" + metadata = redis.hgetall "rsm:phil:food/aguacate" metadata.must_be_empty end it "deletes the directory objects metadata in redis" do - old_metadata = redis.hgetall "rs_meta:phil:food/" + old_metadata = redis.hgetall "rsm:phil:food/" put_stub = OpenStruct.new(headers: {etag: "newetag"}) get_stub = OpenStruct.new(body: "rootbody") @@ -197,15 +197,15 @@ describe "App" do end end - metadata = redis.hgetall "rs_meta:phil:food/" + metadata = redis.hgetall "rsm:phil:food/" metadata["etag"].must_equal "newetag" metadata["modified"].length.must_equal 13 metadata["modified"].wont_equal old_metadata["modified"] - food_items = redis.smembers "rs_meta:phil:food/:items" + food_items = redis.smembers "rsm:phil:food/:i" food_items.must_equal ["camaron"] - root_items = redis.smembers "rs_meta:phil:/:items" + root_items = redis.smembers "rsm:phil:/:i" root_items.must_equal ["food/"] end @@ -223,13 +223,13 @@ describe "App" do end end - metadata = redis.hgetall "rs_meta:phil:food/" + metadata = redis.hgetall "rsm:phil:food/" metadata.must_be_empty - food_items = redis.smembers "rs_meta:phil:food/:items" + food_items = redis.smembers "rsm:phil:food/:i" food_items.must_be_empty - root_items = redis.smembers "rs_meta:phil:/:items" + root_items = redis.smembers "rsm:phil:/:i" root_items.must_be_empty end end