tem_mr_search 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v0.2.3. Slightly more robust communication code in the RPC server/client.
2
+
1
3
  v0.2.2. Switched to smartcard API 0.4.
2
4
 
3
5
  v0.2.1. Check for cluster configuration on each query.
data/Rakefile CHANGED
@@ -3,17 +3,17 @@ gem 'echoe'
3
3
  require 'echoe'
4
4
 
5
5
  Echoe.new('tem_mr_search') do |p|
6
- p.project = 'tem' # rubyforge project
6
+ p.project = 'tem' # rubyforge project
7
7
  p.docs_host = "costan@rubyforge.org:/var/www/gforge-projects/tem/rdoc/"
8
8
 
9
9
  p.author = 'Victor Costan'
10
10
  p.email = 'victor@costan.us'
11
11
  p.summary = 'Tem Map-Reduce proof of concept: database search.'
12
12
  p.url = 'http://tem.rubyforge.org'
13
- p.dependencies = ['tem_ruby >=0.11.2', 'tem_multi_proxy >=0.2']
13
+ p.dependencies = ['tem_ruby >=0.13.0', 'tem_multi_proxy >=0.2.6']
14
14
 
15
- p.need_tar_gz = !Platform.windows?
16
- p.need_zip = !Platform.windows?
15
+ p.need_tar_gz = !Gem.win_platform?
16
+ p.need_zip = !Gem.win_platform?
17
17
  p.rdoc_pattern = /^(lib|bin|tasks|ext)|^BUILD|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
18
18
  end
19
19
 
@@ -3,7 +3,7 @@ module Tem::Mr::Search
3
3
 
4
4
  class Client
5
5
  OP = Zerg::Support::Protocols::ObjectProtocol
6
- OPAdapter = Zerg::Support::Sockets::ProtocolAdapter.adapter_module OP
6
+ OPAdapter = Zerg::Support::Sockets::ProtocolAdapter.adapter_module OP
7
7
 
8
8
  # Performs a private database search using a Map-Reduce.
9
9
  def self.search(server_addr, client_query)
@@ -38,13 +38,9 @@ class Client
38
38
  socket = Zerg::Support::SocketFactory.socket :out_addr => server_addr,
39
39
  :out_port => Server::DEFAULT_PORT
40
40
  socket.extend OPAdapter
41
- begin
42
- socket.send_object request
43
- response = socket.recv_object response
44
- rescue
45
- response = nil
46
- end
47
- socket.close rescue nil
41
+ socket.send_object request
42
+ response = socket.recv_object response
43
+ socket.close
48
44
  response
49
45
  end
50
46
  end
@@ -18,6 +18,9 @@ class Server
18
18
  @tems = []
19
19
  refresh_tems!
20
20
  @port = port || DEFAULT_PORT
21
+
22
+ @listen_socket = Zerg::Support::SocketFactory.socket :in_port => @port,
23
+ :reuse_addr => true
21
24
  end
22
25
 
23
26
  # Reinitializes the TEM cluster connections.
@@ -30,29 +33,28 @@ class Server
30
33
  end
31
34
 
32
35
  # This server's loop.
33
- def serve_loop
34
- listen_socket = Zerg::Support::SocketFactory.socket :in_port => @port
35
- listen_socket.listen
36
- shutdown_received = false
37
- until shutdown_received
36
+ def serve_loop
37
+ @listen_socket.listen
38
+ @shutdown_received = false
39
+ until @shutdown_received
38
40
  begin
39
- client_socket, client_addr = listen_socket.accept
41
+ client_socket, client_addr = @listen_socket.accept
40
42
  client_socket.extend OPAdapter
41
43
  request = client_socket.recv_object
42
44
  begin
43
45
  response = process_request request
44
46
  rescue Exception => e
45
47
  @logger.error e
46
- response = nil
48
+ response = :error
47
49
  end
48
- client_socket.send_object response if response
49
- shutdown_received = true if response == :shutdown
50
- rescue Exception => e
50
+ client_socket.send_object response
51
+ @shutdown_received = true if response == :shutdown
52
+ rescue RuntimeError => e
51
53
  @logger.error e
52
54
  end
53
55
  client_socket.close
54
56
  end
55
- listen_socket.close
57
+ @listen_socket.close
56
58
  end
57
59
 
58
60
  # Computes the response of a single request.
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{tem_mr_search}
5
- s.version = "0.2.2"
5
+ s.version = "0.2.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Victor Costan"]
9
- s.date = %q{2009-08-19}
9
+ s.date = %q{2009-11-11}
10
10
  s.default_executable = %q{tem_mr_search_server}
11
11
  s.description = %q{Tem Map-Reduce proof of concept: database search.}
12
12
  s.email = %q{victor@costan.us}
@@ -19,21 +19,21 @@ Gem::Specification.new do |s|
19
19
  s.rubyforge_project = %q{tem}
20
20
  s.rubygems_version = %q{1.3.5}
21
21
  s.summary = %q{Tem Map-Reduce proof of concept: database search.}
22
- s.test_files = ["test/test_client_server.rb", "test/test_db.rb", "test/test_map_reduce_executor.rb", "test/test_map_reduce_job.rb", "test/test_map_reduce_planner.rb", "test/test_query_builders.rb"]
22
+ s.test_files = ["test/test_query_builders.rb", "test/test_map_reduce_job.rb", "test/test_client_server.rb", "test/test_map_reduce_planner.rb", "test/test_db.rb", "test/test_map_reduce_executor.rb"]
23
23
 
24
24
  if s.respond_to? :specification_version then
25
25
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
26
  s.specification_version = 3
27
27
 
28
28
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
29
- s.add_runtime_dependency(%q<tem_ruby>, [">= 0.11.2"])
30
- s.add_runtime_dependency(%q<tem_multi_proxy>, [">= 0.2"])
29
+ s.add_runtime_dependency(%q<tem_ruby>, [">= 0.13.0"])
30
+ s.add_runtime_dependency(%q<tem_multi_proxy>, [">= 0.2.6"])
31
31
  else
32
- s.add_dependency(%q<tem_ruby>, [">= 0.11.2"])
33
- s.add_dependency(%q<tem_multi_proxy>, [">= 0.2"])
32
+ s.add_dependency(%q<tem_ruby>, [">= 0.13.0"])
33
+ s.add_dependency(%q<tem_multi_proxy>, [">= 0.2.6"])
34
34
  end
35
35
  else
36
- s.add_dependency(%q<tem_ruby>, [">= 0.11.2"])
37
- s.add_dependency(%q<tem_multi_proxy>, [">= 0.2"])
36
+ s.add_dependency(%q<tem_ruby>, [">= 0.13.0"])
37
+ s.add_dependency(%q<tem_multi_proxy>, [">= 0.2.6"])
38
38
  end
39
39
  end
@@ -9,15 +9,25 @@ class ClientServerTest < MrTestCase
9
9
  def setup
10
10
  super
11
11
  @server_port = 29550
12
+ @thread_abort = Thread.abort_on_exception
13
+ Thread.abort_on_exception = true
14
+ end
15
+
16
+ def teardown
17
+ Thread.abort_on_exception = @thread_abort
18
+ super
12
19
  end
13
20
 
14
21
  def _test_request
15
- Thread.new do
16
- Server.new(@db_path, @empty_cluster_file, @server_port).serve_loop
22
+ server = Server.new(@db_path, @empty_cluster_file, @server_port)
23
+ server_thread = Thread.new do
24
+ server.serve_loop
17
25
  end
18
- sleep 0.1
26
+ Kernel.sleep 0.1 # Wait for the server to start.
19
27
  yield "localhost:#{@server_port}"
20
28
  Client.shutdown_server "localhost:#{@server_port}"
29
+ server_thread.join
30
+ Kernel.sleep 0.1 # Wait for the server to cleanup after itself.
21
31
  end
22
32
 
23
33
  def test_fetch_item
@@ -28,7 +38,6 @@ class ClientServerTest < MrTestCase
28
38
  end
29
39
 
30
40
  def test_dump_database
31
- @server_port = 29557
32
41
  _test_request do |server_addr|
33
42
  items = Client.dump_database server_addr
34
43
  assert_equal @db.length, items.length, 'Wrong number of items'
@@ -39,7 +48,6 @@ class ClientServerTest < MrTestCase
39
48
  end
40
49
 
41
50
  def test_query
42
- @server_port = 29551
43
51
  flexmock(Server).should_receive(:tems_from_cluster_file).
44
52
  with(@empty_cluster_file).and_return do |file|
45
53
  Tem.auto_conf
@@ -6,14 +6,17 @@ class MapReduceExecutorTest < MrTestCase
6
6
  def setup
7
7
  super
8
8
  Tem.auto_conf
9
- $tem.activate
10
- $tem.emit
9
+ $tem.emit if $tem.activate
10
+ @thread_abort = Thread.abort_on_exception
11
+ Thread.abort_on_exception = true
11
12
  end
12
13
 
13
14
  def teardown
15
+ Thread.abort_on_exception = @thread_abort
14
16
  $tem.disconnect
17
+ super
15
18
  end
16
-
19
+
17
20
  def _test_executor(tems, root_tem)
18
21
  executor = MRExecutor.new @client_query, @db, tems, root_tem
19
22
  packed_output = executor.execute
@@ -33,7 +36,7 @@ class MapReduceExecutorTest < MrTestCase
33
36
  tems = Tem::Mr::Search::Server.tems_from_cluster_file @cluster_file
34
37
  assert_equal 8, tems.length, 'Incorrect cluster setup'
35
38
 
36
- tems.each { |tem| tem.activate; tem.emit }
39
+ tems.each { |tem| tem.emit if tem.activate }
37
40
 
38
41
  _test_executor tems, 0
39
42
  end
data/testdata/cluster.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  ---
2
- - darkbulb2.local
3
- - lightbulb2.local
2
+ - darkbulb2.csail.mit.edu
3
+ - lightbulb2.csail.mit.edu
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tem_mr_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Costan
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-19 00:00:00 -04:00
12
+ date: 2009-11-11 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.11.2
23
+ version: 0.13.0
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: tem_multi_proxy
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: "0.2"
33
+ version: 0.2.6
34
34
  version:
35
35
  description: "Tem Map-Reduce proof of concept: database search."
36
36
  email: victor@costan.us
@@ -120,9 +120,9 @@ signing_key:
120
120
  specification_version: 3
121
121
  summary: "Tem Map-Reduce proof of concept: database search."
122
122
  test_files:
123
+ - test/test_query_builders.rb
124
+ - test/test_map_reduce_job.rb
123
125
  - test/test_client_server.rb
126
+ - test/test_map_reduce_planner.rb
124
127
  - test/test_db.rb
125
128
  - test/test_map_reduce_executor.rb
126
- - test/test_map_reduce_job.rb
127
- - test/test_map_reduce_planner.rb
128
- - test/test_query_builders.rb