class Dockly::S3Writer
Constants
- MAX_BUFFER_SIZE
Attributes
buffer[R]
closed[R]
connection[R]
parts[R]
s3_bucket[R]
s3_object[R]
Public Class Methods
new(connection, s3_bucket, s3_object)
click to toggle source
# File lib/dockly/s3_writer.rb, line 13 def initialize(connection, s3_bucket, s3_object) @connection = connection @s3_bucket = s3_bucket @s3_object = s3_object @parts = [] @closed = false @buffer = StringIO.new end
Public Instance Methods
abort_unless_closed()
click to toggle source
# File lib/dockly/s3_writer.rb, line 69 def abort_unless_closed abort_upload unless @closed @closed = true end
abort_upload()
click to toggle source
# File lib/dockly/s3_writer.rb, line 61 def abort_upload connection.abort_multipart_upload( bucket: s3_bucket, key: s3_object, upload_id: upload_id ) end
close()
click to toggle source
# File lib/dockly/s3_writer.rb, line 42 def close return if @closed upload_buffer unless buffer.size.zero? connection.complete_multipart_upload( bucket: s3_bucket, key: s3_object, upload_id: upload_id, multipart_upload: { parts: @parts.each_with_index.map do |part, idx| { etag: part, part_number: idx.succ } end } ) @closed = true end
multipart_upload()
click to toggle source
# File lib/dockly/s3_writer.rb, line 74 def multipart_upload @multipart_upload ||= connection.create_multipart_upload( bucket: s3_bucket, key: s3_object, acl: 'bucket-owner-full-control', ) end
upload_buffer()
click to toggle source
# File lib/dockly/s3_writer.rb, line 22 def upload_buffer num = @parts.length.succ debug "Writing chunk ##{num} to s3://#{s3_bucket}/#{s3_object} with upload id: #{upload_id}" res = connection.upload_part( bucket: s3_bucket, key: s3_object, upload_id: upload_id, part_number:num, body: buffer.tap(&:rewind) ) @parts << res.etag @buffer = StringIO.new end
write(chunk)
click to toggle source
# File lib/dockly/s3_writer.rb, line 36 def write(chunk) @buffer.write(chunk) upload_buffer if buffer.size > MAX_BUFFER_SIZE chunk.length end