Shorten Redis metadata keys

Use rsm:<username>:<dir>:i instead of
rs_meta:<username>:<dir>:items
This commit is contained in:
Garret Alfert 2016-03-02 14:43:28 +01:00
parent 067f4a1553
commit 650da91a1d
3 changed files with 37 additions and 37 deletions

View File

@ -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"

View File

@ -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"],

View File

@ -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