YUKI Hiroshi
null+****@clear*****
Tue Apr 28 21:22:09 JST 2015
YUKI Hiroshi 2015-04-28 21:22:09 +0900 (Tue, 28 Apr 2015) New Revision: 3cddcab76406a54ad42ba6115810b79b99e85a2c https://github.com/droonga/droonga-engine/commit/3cddcab76406a54ad42ba6115810b79b99e85a2c Message: Generate truly unique file path for accidental buffers Modified files: lib/droonga/buffered_tcp_socket.rb Modified: lib/droonga/buffered_tcp_socket.rb (+27 -9) =================================================================== --- lib/droonga/buffered_tcp_socket.rb 2015-04-28 21:20:24 +0900 (be850cc) +++ lib/droonga/buffered_tcp_socket.rb 2015-04-28 21:22:09 +0900 (b24b4e9) @@ -34,7 +34,8 @@ module Droonga end def write(data) - chunk = Chunk.new(@data_directory, data, Time.now, 0) + chunk = Chunk.new(:directory => @data_directory, + :data => data) chunk.buffering @_write_buffer << chunk schedule_write @@ -118,20 +119,26 @@ module Droonga class << self def load(path) data_directory = path.dirname - time_stamp1, time_stamp2, revision, = path.basename.to_s.split(".", 4) + time_stamp1, time_stamp2, uniqueness, revision, = path.basename.to_s.split(".", 5) data = path.open("rb") {|file| file.read} time_stamp = Time.iso8601("#{time_stamp1}.#{time_stamp2}") revision = Integer(revision) - new(data_directory, data, time_stamp, revision) + new(:directory => data_directory, + :data => data, + :time_stamp => time_stamp, + :uniqueness => uniqueness, + :revision => revision) end end attr_reader :data, :time_stamp - def initialize(data_directory, data, time_stamp, revision) - @data_directory = data_directory - @data = data - @time_stamp = time_stamp.utc - @revision = revision + def initialize(params) + @data_directory = params[:directory] + @data = params[:data] + @time_stamp = params[:time_stamp] || Time.now + @time_stamp = @time_stamp.utc + @uniqueness = params[:uniqueness] + @revision = params[:revision] || 0 end def buffering @@ -152,8 +159,19 @@ module Droonga end private + MICRO_SECONDS_DECIMAL_PLACE = 6 + def path - @data_directory + "#{@time_stamp.iso8601(6)}.#{@revision}.#{SUFFIX}" + @path ||= create_chunk_file_path + end + + def create_chunk_file_path + basename = @time_stamp.iso8601(MICRO_SECONDS_DECIMAL_PLACE) + if @uniqueness + @data_directory + "#{basename}.#{@uniqueness}.#{@revision}#{SUFFIX}" + else + Path.unique_file_path(@data_directory, basename, "#{@revision}#{SUFFIX}") + end end end end -------------- next part -------------- HTML����������������������������...Download