mongolly 0.2.1 → 0.2.2

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.
@@ -9,4 +9,8 @@ class BSON::Timestamp
9
9
  increment <=> other.increment
10
10
  end
11
11
 
12
+ def -(other)
13
+ seconds - other.seconds
14
+ end
15
+
12
16
  end
@@ -7,6 +7,7 @@ require 'debugger'
7
7
 
8
8
  class Mongo::MongoClient
9
9
  MAX_DISABLE_BALANCER_WAIT = 60*5 # 5 Minutes
10
+ REPLICA_SNAPSHOT_THRESHOLD = 60*5 # 5 Minutes
10
11
 
11
12
  def snapshot_ebs(options={})
12
13
 
@@ -33,12 +34,12 @@ class Mongo::MongoClient
33
34
  ssh_command(options[:config_server_ssh_user], config_server, options[:mongo_start_command], options[:config_server_ssh_keypath])
34
35
  end
35
36
  else
36
- backup_instance(snapshot_ebs_target, options, true )
37
+ backup_instance(snapshot_ebs_target(REPLICA_SNAPSHOT_THRESHOLD), options, false )
37
38
  end
38
39
  end
39
40
 
40
41
  protected
41
- def snapshot_ebs_target
42
+ def snapshot_ebs_target(threshold=nil)
42
43
  host_port.join(':')
43
44
  end
44
45
 
@@ -54,6 +55,9 @@ protected
54
55
 
55
56
  raise RuntimeError.new "no suitable volumes found" unless volumes.length > 0
56
57
 
58
+ # Force lock with multiple volumes
59
+ lock = true if volumes.length > 1
60
+
57
61
  backup_block = proc do
58
62
  volumes.each do |volume|
59
63
  @mongolly_logger.debug("Snapshotting #{volume.id} with tag #{options[:backup_key]}")
@@ -2,15 +2,21 @@ require 'mongo'
2
2
 
3
3
  class Mongo::MongoReplicaSetClient
4
4
 
5
- def most_current_secondary
5
+ def most_current_secondary(threshold = 0)
6
6
  replica = self['admin'].command( replSetGetStatus: 1 )
7
- current = replica['members'].select { |m| m['state'] == 2 }.sort_by { |m| m['optime'] }.reverse.first['name']
8
- @mongolly_logger.debug("Found most current secondary #{current}")
9
- current
7
+ secondaries = replica['members'].select { |m| m['state'] == 2 }.sort_by { |m| m['name'] }
8
+ most_current = secondaries.first
9
+ secondaries[1..-1].each do |secondary|
10
+ if (secondary['optime'] - most_current['optime']) > threshold
11
+ most_current = secondary
12
+ end
13
+ end
14
+ @mongolly_logger.debug("Found most current secondary #{most_current['name']}")
15
+ most_current['name']
10
16
  end
11
17
 
12
18
  protected
13
- def snapshot_ebs_target
14
- most_current_secondary
19
+ def snapshot_ebs_target(threshold = 0)
20
+ most_current_secondary(threshold)
15
21
  end
16
22
  end
@@ -1,3 +1,3 @@
1
1
  module Mongolly
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongolly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-30 00:00:00.000000000 Z
12
+ date: 2013-05-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor