Class: FakeDynamo::Storage
- Inherits:
-
Object
- Object
- FakeDynamo::Storage
- Defined in:
- lib/fake_dynamo/storage.rb
Class Attribute Summary collapse
-
.db_path ⇒ Object
Returns the value of attribute db_path.
Instance Attribute Summary collapse
-
#compacted ⇒ Object
Returns the value of attribute compacted.
-
#loaded ⇒ Object
Returns the value of attribute loaded.
Class Method Summary collapse
Instance Method Summary collapse
- #compact! ⇒ Object
- #compact_if_necessary ⇒ Object
- #compact_threshold ⇒ Object
- #db ⇒ Object
- #db_aof ⇒ Object
- #db_path ⇒ Object
- #delete_db ⇒ Object
- #init_db ⇒ Object
-
#initialize ⇒ Storage
constructor
A new instance of Storage.
- #load_aof ⇒ Object
- #persist(operation, data) ⇒ Object
- #reset ⇒ Object
- #shutdown ⇒ Object
- #write_command?(command) ⇒ Boolean
- #write_commands ⇒ Object
Constructor Details
#initialize ⇒ Storage
Returns a new instance of Storage.
17 18 19 |
# File 'lib/fake_dynamo/storage.rb', line 17 def initialize init_db end |
Class Attribute Details
.db_path ⇒ Object
Returns the value of attribute db_path.
10 11 12 |
# File 'lib/fake_dynamo/storage.rb', line 10 def db_path @db_path end |
Instance Attribute Details
#compacted ⇒ Object
Returns the value of attribute compacted.
7 8 9 |
# File 'lib/fake_dynamo/storage.rb', line 7 def compacted @compacted end |
#loaded ⇒ Object
Returns the value of attribute loaded.
7 8 9 |
# File 'lib/fake_dynamo/storage.rb', line 7 def loaded @loaded end |
Class Method Details
.instance ⇒ Object
12 13 14 |
# File 'lib/fake_dynamo/storage.rb', line 12 def instance @storage ||= Storage.new end |
Instance Method Details
#compact! ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/fake_dynamo/storage.rb', line 100 def compact! return if @compacted @aof = Tempfile.new('compact') puts "Compacting db ..." db.tables.each do |_, table| persist('CreateTable', table.create_table_data) table.items.each do |_, item| persist('PutItem', table.put_item_data(item)) end end @aof.close FileUtils.mv(@aof.path, db_path) @aof = nil @compacted = true end |
#compact_if_necessary ⇒ Object
93 94 95 96 97 98 |
# File 'lib/fake_dynamo/storage.rb', line 93 def compact_if_necessary return unless File.exists? db_path if File.stat(db_path).size > compact_threshold compact! end end |
#compact_threshold ⇒ Object
89 90 91 |
# File 'lib/fake_dynamo/storage.rb', line 89 def compact_threshold 100 * 1024 * 1024 # 100mb end |
#db ⇒ Object
51 52 53 |
# File 'lib/fake_dynamo/storage.rb', line 51 def db DB.instance end |
#db_aof ⇒ Object
55 56 57 |
# File 'lib/fake_dynamo/storage.rb', line 55 def db_aof @aof ||= File.new(db_path, 'a') end |
#db_path ⇒ Object
29 30 31 |
# File 'lib/fake_dynamo/storage.rb', line 29 def db_path self.class.db_path end |
#delete_db ⇒ Object
39 40 41 42 |
# File 'lib/fake_dynamo/storage.rb', line 39 def delete_db return unless File.exists? db_path FileUtils.rm(db_path) end |
#init_db ⇒ Object
33 34 35 36 37 |
# File 'lib/fake_dynamo/storage.rb', line 33 def init_db return if File.exists? db_path FileUtils.mkdir_p(File.dirname(db_path)) FileUtils.touch(db_path) end |
#load_aof ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/fake_dynamo/storage.rb', line 73 def load_aof return if @loaded file = File.new(db_path, 'r') puts "Loading fake_dynamo data ..." loop do operation = file.readline.chomp size = Integer(file.readline.chomp) data = file.read(size) db.process(operation, JSON.parse(data)) end rescue EOFError file.close compact_if_necessary @loaded = true end |
#persist(operation, data) ⇒ Object
64 65 66 67 68 69 70 71 |
# File 'lib/fake_dynamo/storage.rb', line 64 def persist(operation, data) return unless write_command?(operation) db_aof.puts(operation) data = data.to_json db_aof.puts(data.bytesize + "\n".bytesize) db_aof.puts(data) db_aof.flush end |
#reset ⇒ Object
44 45 46 47 48 49 |
# File 'lib/fake_dynamo/storage.rb', line 44 def reset puts "resetting database ..." @aof.close if @aof @aof = nil delete_db end |
#shutdown ⇒ Object
59 60 61 62 |
# File 'lib/fake_dynamo/storage.rb', line 59 def shutdown puts "shutting down fake_dynamo ..." @aof.close if @aof end |
#write_command?(command) ⇒ Boolean
25 26 27 |
# File 'lib/fake_dynamo/storage.rb', line 25 def write_command?(command) write_commands.include?(command) end |
#write_commands ⇒ Object
21 22 23 |
# File 'lib/fake_dynamo/storage.rb', line 21 def write_commands %w[CreateTable DeleteItem DeleteTable PutItem UpdateItem UpdateTable BatchWriteItem] end |