Skip to content

Commit

Permalink
Deletes lobs on delete now.
Browse files Browse the repository at this point in the history
  • Loading branch information
Travis Reeder committed Dec 22, 2010
1 parent b300c71 commit 68c81a6
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 10 deletions.
25 changes: 21 additions & 4 deletions lib/simple_record.rb
Expand Up @@ -128,8 +128,9 @@ def establish_connection(aws_access_key=nil, aws_secret_key=nil, options={})
if options[:connection_mode] == :per_thread
@@auto_close_s3 = true
# todo: should we init this only when needed?
@@s3 = Aws::S3.new(SimpleRecord.aws_access_key, SimpleRecord.aws_secret_key, {:connection_mode=>:per_thread})
end
s3_ops = {:connection_mode=>options[:connection_mode] || :default}
@@s3 = Aws::S3.new(SimpleRecord.aws_access_key, SimpleRecord.aws_secret_key, s3_ops)
end

# Call this to close the connection to SimpleDB.
Expand Down Expand Up @@ -500,9 +501,24 @@ def save_lobs(dirty=nil)
end
end
end
end

def delete_lobs
defined_attributes_local.each_pair do |k, v|
if v.type == :clob
if self.class.get_sr_config[:single_clob]
s3_bucket(false, :new_bucket=>true).delete_key(single_clob_id)
SimpleRecord.stats.s3_deletes += 1
return
else
s3_bucket.delete_key(s3_lob_id(k))
SimpleRecord.stats.s3_deletes += 1
end
end
end
end


def put_lob(k, val, options={})
begin
s3_bucket(false, options).put(k, val)
Expand Down Expand Up @@ -716,13 +732,14 @@ def self.destroy_all(options)
return i
end

def delete()
# TODO: DELETE CLOBS, etc from s3
options = {}
def delete(options={})
if self.class.is_sharded?
options[:domain] = sharded_domain
end
super(options)

# delete lobs now too
delete_lobs
end

def destroy
Expand Down
5 changes: 0 additions & 5 deletions lib/simple_record/active_sdb.rb
Expand Up @@ -972,11 +972,6 @@ def delete(options={})
connection.delete_attributes(options[:domain] || domain, id)
end

# Item ID
# def to_s
# @id
# end

# Returns true if this object hasn�t been saved yet.
def new_record?
@new_record
Expand Down
4 changes: 3 additions & 1 deletion lib/simple_record/stats.rb
@@ -1,13 +1,14 @@
module SimpleRecord
class Stats
attr_accessor :selects, :saves, :deletes, :s3_puts, :s3_gets
attr_accessor :selects, :saves, :deletes, :s3_puts, :s3_gets, :s3_deletes

def initialize
@selects = 0
@saves = 0
@deletes = 0
@s3_puts = 0
@s3_gets = 0
@s3_deletes = 0
end

def clear
Expand All @@ -16,6 +17,7 @@ def clear
self.deletes = 0
self.s3_puts = 0
self.s3_gets = 0
self.s3_deletes = 0
end
end
end
Expand Down
24 changes: 24 additions & 0 deletions test/test_lobs.rb
Expand Up @@ -53,6 +53,20 @@ def test_clobs
# shouldn't save twice if not dirty
assert SimpleRecord.stats.s3_puts == 3

mm2.delete

assert_equal 2, SimpleRecord.stats.s3_deletes

e = assert_raise(Aws::AwsError) do
sclob = SimpleRecord.s3.bucket(mm2.s3_bucket_name2).get(mm2.s3_lob_id("clob1"))
end
assert_match(/NoSuchKey/, e.message)
e = assert_raise(Aws::AwsError) do
sclob = SimpleRecord.s3.bucket(mm2.s3_bucket_name2).get(mm2.s3_lob_id("clob2"))
end
assert_match(/NoSuchKey/, e.message)


end

def test_single_clob
Expand Down Expand Up @@ -89,6 +103,16 @@ def test_single_clob

# shouldn't save twice if not dirty
assert SimpleRecord.stats.s3_puts == 1

mm2.delete

assert SimpleRecord.stats.s3_deletes == 1

e = assert_raise(Aws::AwsError) do
sclob = SimpleRecord.s3.bucket(mm2.s3_bucket_name2).get(mm2.single_clob_id)
end
assert_match(/NoSuchKey/, e.message)

end

end

0 comments on commit 68c81a6

Please sign in to comment.