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