ey_cloud_server 1.4.5 → 1.4.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. data/bin/binary_log_purge +10 -2
  2. data/bin/ey-snapshots +7 -1
  3. data/bin/eybackup +13 -1
  4. data/lib/ey-flex.rb +18 -7
  5. data/lib/ey-flex/big-brother.rb +2 -2
  6. data/lib/ey-flex/bucket_minder.rb +46 -160
  7. data/lib/ey-flex/ec2.rb +17 -0
  8. data/lib/ey-flex/snapshot_minder.rb +93 -171
  9. data/lib/ey_backup.rb +84 -48
  10. data/lib/ey_backup/backend.rb +34 -0
  11. data/lib/ey_backup/backup_set.rb +70 -63
  12. data/lib/ey_backup/base.rb +0 -5
  13. data/lib/ey_backup/cli.rb +26 -6
  14. data/lib/ey_backup/database.rb +48 -0
  15. data/lib/ey_backup/dumper.rb +15 -31
  16. data/lib/ey_backup/engine.rb +7 -17
  17. data/lib/ey_backup/engines/mysql_engine.rb +24 -16
  18. data/lib/ey_backup/engines/postgresql_engine.rb +26 -20
  19. data/lib/ey_backup/loader.rb +13 -33
  20. data/lib/ey_backup/processors/gpg_encryptor.rb +3 -20
  21. data/lib/ey_backup/processors/gzipper.rb +0 -29
  22. data/lib/ey_backup/processors/splitter.rb +22 -34
  23. data/lib/ey_backup/spawner.rb +7 -13
  24. data/lib/ey_cloud_server.rb +1 -1
  25. data/lib/{ey-flex → ey_cloud_server}/version.rb +1 -1
  26. data/spec/big-brother_spec.rb +12 -0
  27. data/spec/bucket_minder_spec.rb +113 -0
  28. data/spec/config-example.yml +11 -0
  29. data/spec/ey_api_spec.rb +63 -0
  30. data/spec/ey_backup/backend_spec.rb +12 -0
  31. data/spec/ey_backup/backup_spec.rb +54 -0
  32. data/spec/ey_backup/cli_spec.rb +35 -0
  33. data/spec/ey_backup/mysql_backups_spec.rb +208 -0
  34. data/spec/ey_backup/postgres_backups_spec.rb +106 -0
  35. data/spec/ey_backup/spec_helper.rb +5 -0
  36. data/spec/fakefs_hax.rb +50 -0
  37. data/spec/gpg.public +0 -0
  38. data/spec/gpg.sekrit +0 -0
  39. data/spec/helpers.rb +270 -0
  40. data/spec/snapshot_minder_spec.rb +68 -0
  41. data/spec/spec_helper.rb +31 -0
  42. metadata +286 -53
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "SnapshotMinder" do
4
+ before do
5
+ EY::SnapshotMinder.enable_mock!
6
+ end
7
+
8
+ it "works" do
9
+ config = Tempfile.new('.mysql.backups.yml')
10
+ mysql_backups= {
11
+ :aws_secret_id => "test-access-key",
12
+ :aws_secret_key => "test-secret-key"
13
+ }
14
+ config.puts(mysql_backups.to_yaml)
15
+ config.flush
16
+
17
+ EY::SnapshotMinder.run(['--config', "#{config.path}"])
18
+ end
19
+
20
+ describe "typical cron command" do
21
+ it "works" do
22
+ EY::SnapshotMinder.run(['--snapshot', '--quiet'])
23
+ EY::SnapshotMinder.backend.commands_called.should == ["request_snapshot"]
24
+ end
25
+
26
+ describe "if awsm is down 5 times in a row" do
27
+ before do
28
+ EY::SnapshotMinder.backend.raise_count = 5
29
+ end
30
+ it "retries, succeeding after 15-25 minutes" do
31
+ EY::SnapshotMinder.run(['--snapshot', '--quiet'])
32
+ EY::SnapshotMinder.backend.commands_called.should == ["request_snapshot"]
33
+ EY::SnapshotMinder.backend.total_wait_time.should be > 60*15
34
+ EY::SnapshotMinder.backend.total_wait_time.should be < 60*25
35
+ end
36
+ end
37
+
38
+ describe "if awsm is down 10 times in a row" do
39
+ before do
40
+ EY::SnapshotMinder.backend.raise_count = 10
41
+ end
42
+ it "retries, succeeding after 50-65 minutes" do
43
+ EY::SnapshotMinder.run(['--snapshot', '--quiet'])
44
+ EY::SnapshotMinder.backend.commands_called.should == ["request_snapshot"]
45
+ EY::SnapshotMinder.backend.total_wait_time.should be > 60*50
46
+ EY::SnapshotMinder.backend.total_wait_time.should be < 60*65
47
+ end
48
+ end
49
+
50
+ describe "if awsm is down 11 times in a row (too long)" do
51
+ before do
52
+ EY::SnapshotMinder.backend.raise_count = 11
53
+ end
54
+ it "fails" do
55
+ lambda{ EY::SnapshotMinder.run(['--snapshot', '--quiet']) }.should raise_error(EY::InstanceAPIClient::Connection::UnexpectedStatus)
56
+ EY::SnapshotMinder.backend.total_wait_time.should be > 60*50
57
+ end
58
+ end
59
+ end
60
+
61
+ describe "listing snapshots" do
62
+ it "works" do
63
+ EY::SnapshotMinder.run([])
64
+ EY::SnapshotMinder.backend.commands_called.should == ["list_snapshots"]
65
+ end
66
+ end
67
+
68
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + "/../lib/ey-flex"
2
+
3
+ require 'ruby-debug'
4
+ require 'fakeweb'
5
+ require 'fakefs/safe'
6
+ require 'randexp'
7
+ require 'fog'
8
+
9
+ # Made tests work with actual storage; better tests. - rpowell Fri Aug 5 17:53:17 PDT 2011
10
+ #
11
+ # Fog.mock!
12
+
13
+ require File.dirname(__FILE__) + '/fakefs_hax'
14
+ require File.dirname(__FILE__) + '/helpers'
15
+
16
+ Helpers.load_spec_config
17
+
18
+ FakeWeb.allow_net_connect = false # if it's not here, it doesn't exist
19
+ Randexp::Dictionary.words
20
+
21
+ Spec::Runner.configure do |config|
22
+ config.include(Helpers)
23
+
24
+ config.before(:each) do
25
+ run_before
26
+ end
27
+
28
+ config.after(:each) do
29
+ run_after
30
+ end
31
+ end
metadata CHANGED
@@ -1,24 +1,25 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ey_cloud_server
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease: false
4
+ hash: 51
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 4
9
- - 5
10
- version: 1.4.5
9
+ - 26
10
+ version: 1.4.26
11
11
  platform: ruby
12
- authors: []
13
-
12
+ authors:
13
+ - Engine Yard
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-05 00:00:00 -07:00
19
- default_executable:
18
+ date: 2011-11-29 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
21
+ name: json
22
+ prerelease: false
22
23
  requirement: &id001 !ruby/object:Gem::Requirement
23
24
  none: false
24
25
  requirements:
@@ -29,25 +30,43 @@ dependencies:
29
30
  - 0
30
31
  version: "0"
31
32
  type: :runtime
32
- name: json
33
- prerelease: false
34
33
  version_requirements: *id001
35
34
  - !ruby/object:Gem::Dependency
35
+ name: right_http_connection
36
+ prerelease: false
36
37
  requirement: &id002 !ruby/object:Gem::Requirement
37
38
  none: false
38
39
  requirements:
39
- - - ">="
40
+ - - "="
40
41
  - !ruby/object:Gem::Version
41
- hash: 3
42
+ hash: 23
42
43
  segments:
43
- - 0
44
- version: "0"
44
+ - 1
45
+ - 2
46
+ - 4
47
+ version: 1.2.4
45
48
  type: :runtime
46
- name: right_aws
47
- prerelease: false
48
49
  version_requirements: *id002
49
50
  - !ruby/object:Gem::Dependency
51
+ name: right_aws
52
+ prerelease: false
50
53
  requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - "="
57
+ - !ruby/object:Gem::Version
58
+ hash: 15
59
+ segments:
60
+ - 2
61
+ - 0
62
+ - 0
63
+ version: 2.0.0
64
+ type: :runtime
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: open4
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
51
70
  none: false
52
71
  requirements:
53
72
  - - "="
@@ -59,11 +78,11 @@ dependencies:
59
78
  - 6
60
79
  version: 0.9.6
61
80
  type: :runtime
62
- name: open4
63
- prerelease: false
64
- version_requirements: *id003
81
+ version_requirements: *id004
65
82
  - !ruby/object:Gem::Dependency
66
- requirement: &id004 !ruby/object:Gem::Requirement
83
+ name: aws-s3
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
67
86
  none: false
68
87
  requirements:
69
88
  - - ">="
@@ -73,11 +92,27 @@ dependencies:
73
92
  - 0
74
93
  version: "0"
75
94
  type: :runtime
76
- name: aws-s3
95
+ version_requirements: *id005
96
+ - !ruby/object:Gem::Dependency
97
+ name: fog
77
98
  prerelease: false
78
- version_requirements: *id004
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - "="
103
+ - !ruby/object:Gem::Version
104
+ hash: 7
105
+ segments:
106
+ - 0
107
+ - 7
108
+ - 2
109
+ version: 0.7.2
110
+ type: :runtime
111
+ version_requirements: *id006
79
112
  - !ruby/object:Gem::Dependency
80
- requirement: &id005 !ruby/object:Gem::Requirement
113
+ name: rest-client
114
+ prerelease: false
115
+ requirement: &id007 !ruby/object:Gem::Requirement
81
116
  none: false
82
117
  requirements:
83
118
  - - ">="
@@ -87,11 +122,25 @@ dependencies:
87
122
  - 0
88
123
  version: "0"
89
124
  type: :runtime
90
- name: rest-client
125
+ version_requirements: *id007
126
+ - !ruby/object:Gem::Dependency
127
+ name: mysql
91
128
  prerelease: false
92
- version_requirements: *id005
129
+ requirement: &id008 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ hash: 3
135
+ segments:
136
+ - 0
137
+ version: "0"
138
+ type: :runtime
139
+ version_requirements: *id008
93
140
  - !ruby/object:Gem::Dependency
94
- requirement: &id006 !ruby/object:Gem::Requirement
141
+ name: ey_enzyme
142
+ prerelease: false
143
+ requirement: &id009 !ruby/object:Gem::Requirement
95
144
  none: false
96
145
  requirements:
97
146
  - - ">="
@@ -101,18 +150,169 @@ dependencies:
101
150
  - 0
102
151
  version: "0"
103
152
  type: :runtime
104
- name: mysql
153
+ version_requirements: *id009
154
+ - !ruby/object:Gem::Dependency
155
+ name: ey_instance_api_client
105
156
  prerelease: false
106
- version_requirements: *id006
157
+ requirement: &id010 !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - "="
161
+ - !ruby/object:Gem::Version
162
+ hash: 25
163
+ segments:
164
+ - 0
165
+ - 1
166
+ - 1
167
+ version: 0.1.1
168
+ type: :runtime
169
+ version_requirements: *id010
170
+ - !ruby/object:Gem::Dependency
171
+ name: rspec
172
+ prerelease: false
173
+ requirement: &id011 !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ~>
177
+ - !ruby/object:Gem::Version
178
+ hash: 13
179
+ segments:
180
+ - 1
181
+ - 1
182
+ version: "1.1"
183
+ type: :development
184
+ version_requirements: *id011
185
+ - !ruby/object:Gem::Dependency
186
+ name: randexp
187
+ prerelease: false
188
+ requirement: &id012 !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ hash: 3
194
+ segments:
195
+ - 0
196
+ version: "0"
197
+ type: :development
198
+ version_requirements: *id012
199
+ - !ruby/object:Gem::Dependency
200
+ name: cucumber
201
+ prerelease: false
202
+ requirement: &id013 !ruby/object:Gem::Requirement
203
+ none: false
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ hash: 3
208
+ segments:
209
+ - 0
210
+ version: "0"
211
+ type: :development
212
+ version_requirements: *id013
213
+ - !ruby/object:Gem::Dependency
214
+ name: rcov
215
+ prerelease: false
216
+ requirement: &id014 !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - "="
220
+ - !ruby/object:Gem::Version
221
+ hash: -1842207251
222
+ segments:
223
+ - 0
224
+ - 8
225
+ - 6
226
+ - ninjas
227
+ version: 0.8.6.ninjas
228
+ type: :development
229
+ version_requirements: *id014
230
+ - !ruby/object:Gem::Dependency
231
+ name: fakeweb
232
+ prerelease: false
233
+ requirement: &id015 !ruby/object:Gem::Requirement
234
+ none: false
235
+ requirements:
236
+ - - "="
237
+ - !ruby/object:Gem::Version
238
+ hash: -1842207315
239
+ segments:
240
+ - 1
241
+ - 2
242
+ - 6
243
+ - ninjas
244
+ version: 1.2.6.ninjas
245
+ type: :development
246
+ version_requirements: *id015
247
+ - !ruby/object:Gem::Dependency
248
+ name: fakefs
249
+ prerelease: false
250
+ requirement: &id016 !ruby/object:Gem::Requirement
251
+ none: false
252
+ requirements:
253
+ - - "="
254
+ - !ruby/object:Gem::Version
255
+ hash: -1842207311
256
+ segments:
257
+ - 0
258
+ - 0
259
+ - 1
260
+ - ninjas
261
+ version: 0.0.1.ninjas
262
+ type: :development
263
+ version_requirements: *id016
264
+ - !ruby/object:Gem::Dependency
265
+ name: dbi
266
+ prerelease: false
267
+ requirement: &id017 !ruby/object:Gem::Requirement
268
+ none: false
269
+ requirements:
270
+ - - ">="
271
+ - !ruby/object:Gem::Version
272
+ hash: 3
273
+ segments:
274
+ - 0
275
+ version: "0"
276
+ type: :development
277
+ version_requirements: *id017
278
+ - !ruby/object:Gem::Dependency
279
+ name: dbd-mysql
280
+ prerelease: false
281
+ requirement: &id018 !ruby/object:Gem::Requirement
282
+ none: false
283
+ requirements:
284
+ - - ">="
285
+ - !ruby/object:Gem::Version
286
+ hash: 3
287
+ segments:
288
+ - 0
289
+ version: "0"
290
+ type: :development
291
+ version_requirements: *id018
292
+ - !ruby/object:Gem::Dependency
293
+ name: ruby-debug
294
+ prerelease: false
295
+ requirement: &id019 !ruby/object:Gem::Requirement
296
+ none: false
297
+ requirements:
298
+ - - ">="
299
+ - !ruby/object:Gem::Version
300
+ hash: 3
301
+ segments:
302
+ - 0
303
+ version: "0"
304
+ type: :development
305
+ version_requirements: *id019
107
306
  description: Server side components for Engine Yard's cloud
108
307
  email:
308
+ - gems@engineyard.com
109
309
  executables:
110
- - eybackup
111
- - ey-snapshots
112
- - ey-agent
113
- - mysql_start
114
310
  - binary_log_purge
115
311
  - clear_binlogs_from_slave
312
+ - ey-agent
313
+ - ey-snapshots
314
+ - eybackup
315
+ - mysql_start
116
316
  extensions: []
117
317
 
118
318
  extra_rdoc_files: []
@@ -120,34 +320,52 @@ extra_rdoc_files: []
120
320
  files:
121
321
  - lib/ey-flex/big-brother.rb
122
322
  - lib/ey-flex/bucket_minder.rb
123
- - lib/ey-flex/version.rb
124
- - lib/ey-flex/snapshot_minder.rb
323
+ - lib/ey-flex/ec2.rb
125
324
  - lib/ey-flex/ey-api.rb
126
- - lib/ey_backup.rb
127
- - lib/ey_cloud_server/mysql_start.rb
128
- - lib/ey_cloud_server.rb
325
+ - lib/ey-flex/snapshot_minder.rb
129
326
  - lib/ey-flex.rb
130
- - lib/ey_backup/processors/splitter.rb
131
- - lib/ey_backup/processors/gzipper.rb
132
- - lib/ey_backup/processors/gpg_encryptor.rb
133
- - lib/ey_backup/engines/postgresql_engine.rb
134
- - lib/ey_backup/engines/mysql_engine.rb
327
+ - lib/ey_backup/backend.rb
135
328
  - lib/ey_backup/backup_set.rb
136
- - lib/ey_backup/loader.rb
137
- - lib/ey_backup/engine.rb
138
- - lib/ey_backup/logger.rb
329
+ - lib/ey_backup/base.rb
139
330
  - lib/ey_backup/cli.rb
331
+ - lib/ey_backup/database.rb
140
332
  - lib/ey_backup/dumper.rb
333
+ - lib/ey_backup/engine.rb
334
+ - lib/ey_backup/engines/mysql_engine.rb
335
+ - lib/ey_backup/engines/postgresql_engine.rb
336
+ - lib/ey_backup/loader.rb
337
+ - lib/ey_backup/logger.rb
338
+ - lib/ey_backup/processors/gpg_encryptor.rb
339
+ - lib/ey_backup/processors/gzipper.rb
340
+ - lib/ey_backup/processors/splitter.rb
141
341
  - lib/ey_backup/spawner.rb
142
- - lib/ey_backup/base.rb
143
- - bin/clear_binlogs_from_slave
342
+ - lib/ey_backup.rb
343
+ - lib/ey_cloud_server/mysql_start.rb
344
+ - lib/ey_cloud_server/version.rb
345
+ - lib/ey_cloud_server.rb
346
+ - spec/big-brother_spec.rb
347
+ - spec/bucket_minder_spec.rb
348
+ - spec/config-example.yml
349
+ - spec/ey_api_spec.rb
350
+ - spec/ey_backup/backend_spec.rb
351
+ - spec/ey_backup/backup_spec.rb
352
+ - spec/ey_backup/cli_spec.rb
353
+ - spec/ey_backup/mysql_backups_spec.rb
354
+ - spec/ey_backup/postgres_backups_spec.rb
355
+ - spec/ey_backup/spec_helper.rb
356
+ - spec/fakefs_hax.rb
357
+ - spec/gpg.public
358
+ - spec/gpg.sekrit
359
+ - spec/helpers.rb
360
+ - spec/snapshot_minder_spec.rb
361
+ - spec/spec_helper.rb
144
362
  - bin/binary_log_purge
363
+ - bin/clear_binlogs_from_slave
145
364
  - bin/ey-agent
146
- - bin/mysql_start
147
365
  - bin/ey-snapshots
148
366
  - bin/eybackup
149
- has_rdoc: true
150
- homepage:
367
+ - bin/mysql_start
368
+ homepage: http://github.com/engineyard/ey_cloud_server
151
369
  licenses: []
152
370
 
153
371
  post_install_message:
@@ -176,9 +394,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
394
  requirements: []
177
395
 
178
396
  rubyforge_project:
179
- rubygems_version: 1.3.7
397
+ rubygems_version: 1.8.6
180
398
  signing_key:
181
399
  specification_version: 3
182
400
  summary: Server side components for Engine Yard's cloud
183
- test_files: []
184
-
401
+ test_files:
402
+ - spec/big-brother_spec.rb
403
+ - spec/bucket_minder_spec.rb
404
+ - spec/config-example.yml
405
+ - spec/ey_api_spec.rb
406
+ - spec/ey_backup/backend_spec.rb
407
+ - spec/ey_backup/backup_spec.rb
408
+ - spec/ey_backup/cli_spec.rb
409
+ - spec/ey_backup/mysql_backups_spec.rb
410
+ - spec/ey_backup/postgres_backups_spec.rb
411
+ - spec/ey_backup/spec_helper.rb
412
+ - spec/fakefs_hax.rb
413
+ - spec/gpg.public
414
+ - spec/gpg.sekrit
415
+ - spec/helpers.rb
416
+ - spec/snapshot_minder_spec.rb
417
+ - spec/spec_helper.rb