Shorten Redis metadata keys
Use rsm:<username>:<dir>:i instead of rs_meta:<username>:<dir>:items
This commit is contained in:
parent
067f4a1553
commit
650da91a1d
@ -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"
|
||||
|
@ -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"],
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user