Change Redis metadata key prefix to rs:m
This commit is contained in:
		
							parent
							
								
									88f2dceb27
								
							
						
					
					
						commit
						c2fd9bc6d0
					
				@ -87,11 +87,11 @@ module RemoteStorage
 | 
			
		||||
      lua_script = <<-EOF
 | 
			
		||||
        local user = ARGV[1]
 | 
			
		||||
        local directory = ARGV[2]
 | 
			
		||||
        local items = redis.call("smembers", "rsm:"..user..":"..directory.."/:i")
 | 
			
		||||
        local items = redis.call("smembers", "rs:m:"..user..":"..directory.."/:i")
 | 
			
		||||
        local listing = {}
 | 
			
		||||
 | 
			
		||||
        for index, name in pairs(items) do
 | 
			
		||||
          local redis_key = "rsm:"..user..":"
 | 
			
		||||
          local redis_key = "rs:m:"..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 "rsm:#{user}:#{directory}/", "e"
 | 
			
		||||
      etag = redis.hget "rs:m:#{user}:#{directory}/", "e"
 | 
			
		||||
 | 
			
		||||
      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 = "rsm:"..user..":"
 | 
			
		||||
        local redis_key = "rs:m:"..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", "rsm:"..user..":"..dir.."/", "e") then
 | 
			
		||||
          if redis.call("hget", "rs:m:"..user..":"..dir.."/", "e") 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", "rsm:"..user..":"..dir, "e") then
 | 
			
		||||
            if redis.call("hget", "rs:m:"..user..":"..dir, "e") then
 | 
			
		||||
              return true
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
@ -401,9 +401,9 @@ module RemoteStorage
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def update_metadata_object(user, directory, key, metadata)
 | 
			
		||||
      redis_key = "rsm:#{user}:#{directory}/#{key}"
 | 
			
		||||
      redis_key = "rs:m:#{user}:#{directory}/#{key}"
 | 
			
		||||
      redis.hmset(redis_key, *metadata)
 | 
			
		||||
      redis.sadd "rsm:#{user}:#{directory}/:i", key
 | 
			
		||||
      redis.sadd "rs:m:#{user}:#{directory}/:i", key
 | 
			
		||||
 | 
			
		||||
      true
 | 
			
		||||
    end
 | 
			
		||||
@ -418,10 +418,10 @@ module RemoteStorage
 | 
			
		||||
          etag = etag_for(get_response.body)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        key = "rsm:#{user}:#{dir}/"
 | 
			
		||||
        key = "rs:m:#{user}:#{dir}/"
 | 
			
		||||
        metadata = {e: etag, m: timestamp}
 | 
			
		||||
        redis.hmset(key, *metadata)
 | 
			
		||||
        redis.sadd "rsm:#{user}:#{parent_directory_for(dir)}:i", "#{top_directory(dir)}/"
 | 
			
		||||
        redis.sadd "rs:m:#{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 = "rsm:#{user}:#{directory}/#{key}"
 | 
			
		||||
      redis_key = "rs:m:#{user}:#{directory}/#{key}"
 | 
			
		||||
      redis.del(redis_key)
 | 
			
		||||
      redis.srem "rsm:#{user}:#{directory}/:i", key
 | 
			
		||||
      redis.srem "rs:m:#{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 "rsm:#{user}:#{directory}/"
 | 
			
		||||
          redis.srem "rsm:#{user}:#{parent_directory_for(dir)}:i", "#{dir}/"
 | 
			
		||||
          redis.del "rs:m:#{user}:#{directory}/"
 | 
			
		||||
          redis.srem "rs:m:#{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 = {e: etag, m: timestamp}
 | 
			
		||||
          redis.hmset("rsm:#{user}:#{dir}/", *metadata)
 | 
			
		||||
          redis.hmset("rs:m:#{user}:#{dir}/", *metadata)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def dir_empty?(user, dir)
 | 
			
		||||
      if directory_backend(user).match(/new/)
 | 
			
		||||
        redis.smembers("rsm:#{user}:#{dir}/:i").empty?
 | 
			
		||||
        redis.smembers("rs:m:#{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 = "rsm:#{username}:#{parent_directory_for(dir)}:i"
 | 
			
		||||
    key = "rs:m:#{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 = "rsm:#{username}:#{dir.gsub(/^\//, "")}#{item}"
 | 
			
		||||
    key = "rs:m:#{username}:#{dir.gsub(/^\//, "")}#{item}"
 | 
			
		||||
    metadata = {
 | 
			
		||||
      e: data["ETag"],
 | 
			
		||||
      m: timestamp_for(data["Last-Modified"])
 | 
			
		||||
@ -102,7 +102,7 @@ class Migrator
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def save_document_data(dir, item, data)
 | 
			
		||||
    key = "rsm:#{username}:#{dir.gsub(/^\//, "")}#{item}"
 | 
			
		||||
    key = "rs:m:#{username}:#{dir.gsub(/^\//, "")}#{item}"
 | 
			
		||||
    metadata = {
 | 
			
		||||
      e: data["ETag"],
 | 
			
		||||
      s: data["Content-Length"],
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ describe "App" do
 | 
			
		||||
          put "/phil/food/aguacate", "si"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        metadata = redis.hgetall "rsm:phil:food/aguacate"
 | 
			
		||||
        metadata = redis.hgetall "rs:m:phil:food/aguacate"
 | 
			
		||||
        metadata["s"].must_equal "2"
 | 
			
		||||
        metadata["t"].must_equal "text/plain; charset=utf-8"
 | 
			
		||||
        metadata["e"].must_equal "bla"
 | 
			
		||||
@ -50,20 +50,20 @@ describe "App" do
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        metadata = redis.hgetall "rsm:phil:/"
 | 
			
		||||
        metadata = redis.hgetall "rs:m:phil:/"
 | 
			
		||||
        metadata["e"].must_equal "rootetag"
 | 
			
		||||
        metadata["m"].length.must_equal 13
 | 
			
		||||
 | 
			
		||||
        metadata = redis.hgetall "rsm:phil:food/"
 | 
			
		||||
        metadata = redis.hgetall "rs:m:phil:food/"
 | 
			
		||||
        metadata["e"].must_equal "bla"
 | 
			
		||||
        metadata["m"].length.must_equal 13
 | 
			
		||||
 | 
			
		||||
        food_items = redis.smembers "rsm:phil:food/:i"
 | 
			
		||||
        food_items = redis.smembers "rs:m:phil:food/:i"
 | 
			
		||||
        food_items.each do |food_item|
 | 
			
		||||
          ["camaron", "aguacate"].must_include food_item
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        root_items = redis.smembers "rsm:phil:/:i"
 | 
			
		||||
        root_items = redis.smembers "rs:m:phil:/:i"
 | 
			
		||||
        root_items.must_equal ["food/"]
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -81,7 +81,7 @@ describe "App" do
 | 
			
		||||
 | 
			
		||||
          last_response.status.must_equal 200
 | 
			
		||||
 | 
			
		||||
          metadata = redis.hgetall "rsm:phil:food/aguacate"
 | 
			
		||||
          metadata = redis.hgetall "rs:m:phil:food/aguacate"
 | 
			
		||||
          metadata["s"].must_equal "2"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,7 @@ describe "App" do
 | 
			
		||||
 | 
			
		||||
          last_response.status.must_equal 409
 | 
			
		||||
 | 
			
		||||
          metadata = redis.hgetall "rsm:phil:food"
 | 
			
		||||
          metadata = redis.hgetall "rs:m:phil:food"
 | 
			
		||||
          metadata.must_be_empty
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
@ -107,7 +107,7 @@ describe "App" do
 | 
			
		||||
 | 
			
		||||
          last_response.status.must_equal 409
 | 
			
		||||
 | 
			
		||||
          metadata = redis.hgetall "rsm:phil:food/aguacate/empanado"
 | 
			
		||||
          metadata = redis.hgetall "rs:m: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 "rsm:phil:food/aguacate"
 | 
			
		||||
            metadata = redis.hgetall "rs:m: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 "rsm:phil:food/aguacate"
 | 
			
		||||
            metadata = redis.hgetall "rs:m:phil:food/aguacate"
 | 
			
		||||
            metadata.must_be_empty
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
@ -178,12 +178,12 @@ describe "App" do
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        metadata = redis.hgetall "rsm:phil:food/aguacate"
 | 
			
		||||
        metadata = redis.hgetall "rs:m:phil:food/aguacate"
 | 
			
		||||
        metadata.must_be_empty
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it "deletes the directory objects metadata in redis" do
 | 
			
		||||
        old_metadata = redis.hgetall "rsm:phil:food/"
 | 
			
		||||
        old_metadata = redis.hgetall "rs:m: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 "rsm:phil:food/"
 | 
			
		||||
        metadata = redis.hgetall "rs:m:phil:food/"
 | 
			
		||||
        metadata["e"].must_equal "newetag"
 | 
			
		||||
        metadata["m"].length.must_equal 13
 | 
			
		||||
        metadata["m"].wont_equal old_metadata["m"]
 | 
			
		||||
 | 
			
		||||
        food_items = redis.smembers "rsm:phil:food/:i"
 | 
			
		||||
        food_items = redis.smembers "rs:m:phil:food/:i"
 | 
			
		||||
        food_items.must_equal ["camaron"]
 | 
			
		||||
 | 
			
		||||
        root_items = redis.smembers "rsm:phil:/:i"
 | 
			
		||||
        root_items = redis.smembers "rs:m:phil:/:i"
 | 
			
		||||
        root_items.must_equal ["food/"]
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -223,13 +223,13 @@ describe "App" do
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        metadata = redis.hgetall "rsm:phil:food/"
 | 
			
		||||
        metadata = redis.hgetall "rs:m:phil:food/"
 | 
			
		||||
        metadata.must_be_empty
 | 
			
		||||
 | 
			
		||||
        food_items = redis.smembers "rsm:phil:food/:i"
 | 
			
		||||
        food_items = redis.smembers "rs:m:phil:food/:i"
 | 
			
		||||
        food_items.must_be_empty
 | 
			
		||||
 | 
			
		||||
        root_items = redis.smembers "rsm:phil:/:i"
 | 
			
		||||
        root_items = redis.smembers "rs:m:phil:/:i"
 | 
			
		||||
        root_items.must_be_empty
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user