mongo_mapper_parallel 1.0.6 → 1.0.7

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 (3) hide show
  1. checksums.yaml +8 -8
  2. data/lib/mongo_mapper_parallel.rb +20 -11
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDQ3Yjk5OTg1YTYyYzQ0MWU4MjliNDlhNDUxMDAxYmVkZjY4ZDQwOQ==
4
+ YzRjYTA1ZjY1MDJlYjhlYmRmN2JjYjQ1NjYwOTM5ZDg2NDUxYmQ1YQ==
5
5
  data.tar.gz: !binary |-
6
- NDI0ZWM1MTQ2Yzk4NmZiMTM4ZTIzNzNmOGY2ZWMwYjA3OTZmNTNjZA==
6
+ NzI4MDNmNTExZmQ5NTUyZWUyOTRkZGM0ZDExMDlmNTNlNGZlNTViNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NmVjYWE5MTI5YjkwY2ZiMzRiMzdmN2I5Mjk3ZWNlNzJhNzY2ZWVjZmNmODQx
10
- OGI0ZDA5N2ZiZTM4ZWM4MWFmY2Q3N2RmNGM1ZjYwNjc0MGU1ZTc4NTJkOWM4
11
- N2JmNGMxODEwOGRiZjU2YWIyYzA2ZjY5MTM2NzQ3ZThmM2Q5ZjQ=
9
+ OTk4MDUzNzA3M2Y3MzU2NjdkNTRlODBmN2NjY2I0NDAxNjE2ZTliMGYxYjIy
10
+ MGY1Y2VlNjUwZmVjNWFhYjNhMDM4YmIzZjFiYTVjNWI2ZDJhNGM1Y2MzNDRk
11
+ YTFkNDU3MjE5Y2VlODhiNzZjNGFlM2YxOWE4MWJjYmQ3MGMxZmY=
12
12
  data.tar.gz: !binary |-
13
- NjJmMTBjNTQ1OTAyMjkzMjcxYTgwYjlhYjU2ZDljYzhkZDFjNWJjZjI5ZjQx
14
- M2MwZTFhNDllOWM4MGZlMTIzZjcxYzAyM2YyMDc2Y2QzMjI4NTE4YTkwOTAy
15
- Y2FiNzYzOGVkOWI5M2I5Mzc2ZWNiNGEyYTZhMDg0ZWExMjNjYzM=
13
+ NjFjN2U4Yzg4OWI3Y2Y5YWVhYzA0NDk0ZWUyYTU1ODllMGM0ZjA3MGFjYzZh
14
+ MmMzOTE5NjQ1N2Y0ODkxODMyM2ZhNTcxODc0YzUzZDgxYTI0ZjBhZmI1MGY1
15
+ YzQwM2YzMjQ4N2JiY2Y4OGI0ZTQxMjJhOTdlZTZiZTg1YmYwNmY=
@@ -11,6 +11,7 @@ class MongoMapperParallel
11
11
  attr_accessor :command_class
12
12
  attr_accessor :javascript
13
13
  attr_accessor :args
14
+ attr_accessor :debug
14
15
 
15
16
  class Key
16
17
  # A chunk that will be parallelized
@@ -18,6 +19,7 @@ class MongoMapperParallel
18
19
  attr_accessor :key
19
20
  attr_accessor :completed
20
21
  attr_reader :compiler
22
+ attr_accessor :debug
21
23
 
22
24
  # A chunk that will be parallelized
23
25
  #
@@ -25,12 +27,13 @@ class MongoMapperParallel
25
27
  # @option opts [String] :key the lower bound of the range of resources to retrieve
26
28
  # @option opts [String] :future_key the upper bound for the range of resources to retrieve
27
29
  # @option opts [MongoMapperParallel] :compiler the Parallel execution object that holds the keys, javascript, and arguments.
28
- #
30
+ # @option opts [Boolean] :debug whether to show messages during the process.
29
31
  def initialize(opts={})
30
32
  @key = opts[:key]
31
33
  @compiler = opts[:compiler]
32
34
  @future_key = opts[:future_key]
33
35
  @completed = false
36
+ @debug = opts[:debug].nil? true : opts[:debug]
34
37
  end
35
38
 
36
39
  # The javascript function to run on the resources
@@ -54,13 +57,17 @@ class MongoMapperParallel
54
57
  def compile
55
58
  search_opts = {:name => {:$gte => @key}}
56
59
  if @future_key then search_opts[:name][:$lte] = @future_key end
57
- command_class.database.command({
58
- :"$eval" => javascript,
59
- :args => [@key, @future_key, args],
60
- :nolock => true
61
- })
60
+ begin
61
+ command_class.database.command({
62
+ :"$eval" => javascript,
63
+ :args => [@key, @future_key, args],
64
+ :nolock => true
65
+ })
66
+ rescue Mongo::ConnectionFailure
67
+ raise Mongo::ConnectionFailure.new "Connection disconnected at position #{@position}"
68
+ end
62
69
  @completed = true
63
- puts "Completed chunk".green
70
+ puts "Completed chunk (#{@position})".green if @debug
64
71
  end
65
72
  end
66
73
 
@@ -71,7 +78,7 @@ class MongoMapperParallel
71
78
  def get_split_keys
72
79
  @split_keys, splits = [], @command_class.database.command({splitVector: "#{@command_class.database.name}.#{@command_class.collection.name}", keyPattern: {@split.to_sym => 1}, maxChunkSizeBytes: @splitSize })["splitKeys"]
73
80
  splits.each_with_index do |split_key,k|
74
- @split_keys << MongoMapperParallel::Key.new(:compiler => self, :key => split_key[@split.to_s], :future_key => (splits[k+1] ? splits[k+1][@split.to_s] : nil))
81
+ @split_keys << MongoMapperParallel::Key.new(:position => k, :compiler => self, :key => split_key[@split.to_s], :future_key => (splits[k+1] ? splits[k+1][@split.to_s] : nil),:debug => @debug)
75
82
  end
76
83
  if @split_keys.length == 0 and @command_class.count > 0 then get_extreme_split_keys end
77
84
  end
@@ -81,7 +88,7 @@ class MongoMapperParallel
81
88
  # @return [Array<MongoMapperParallel::Key>] the list of the keys that will be used for parallel operation
82
89
  def get_extreme_split_keys
83
90
  split_key = @command_class.where().order(@split.to_sym).fields(@split.to_sym).first.send(@split.to_sym)
84
- @split_keys << MongoMapperParallel::Key.new(:compiler => self, :key => split_key, :future_key => nil)
91
+ @split_keys << MongoMapperParallel::Key.new(:position => 0, :compiler => self, :key => split_key, :future_key => nil, :debug => @debug)
85
92
  end
86
93
 
87
94
  # Instantiates the parallel operation object with the right class, javascript function, and field
@@ -92,6 +99,7 @@ class MongoMapperParallel
92
99
  # @option opts [Array, Hash] :args the arguments to pass to the Javascript function
93
100
  # @option opts [String, Symbol] :split the field to split the computation on -- typically an indexed unique property of the resources in the collection.
94
101
  # @option opts [Fixnum] :maxChunkSizeBytes the size of the chunks to parallelize. Defaults to `32*1024*1024 = 33554432`.
102
+ # @option opts [Boolean] :debug whether to show messages during the process.
95
103
  # @return [MongoMapperParallel]
96
104
  #
97
105
  def initialize(opts={})
@@ -100,6 +108,7 @@ class MongoMapperParallel
100
108
  @args = opts[:args]
101
109
  @split = opts[:split] # name, title, etc...
102
110
  @splitSize = opts[:maxChunkSizeBytes] || 32*1024*1024
111
+ @debug = opts[:debug].nil? true : opts[:debug]
103
112
  get_split_keys()
104
113
  self
105
114
  end
@@ -110,9 +119,9 @@ class MongoMapperParallel
110
119
  total = @split_keys.length
111
120
  Parallel.each_with_index(@split_keys) do |section,k|
112
121
  if !section.completed then section.compile end
113
- JRProgressBar.show(k,total)
122
+ JRProgressBar.show(k,total) if @debug
114
123
  end
115
- puts "Success".green
124
+ puts "Success".green if @debug
116
125
  end
117
126
 
118
127
  # In case of stalled progress you can skip ahead by a percentage and mark the keys as `completed`.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_mapper_parallel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Raiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-06 00:00:00.000000000 Z
11
+ date: 2013-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongo_mapper