bigrecord-driver 0.0.6 → 0.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.
@@ -0,0 +1,123 @@
1
+ require File.dirname(__FILE__) + '/exceptions'
2
+ require File.dirname(__FILE__) + '/column_descriptor'
3
+ require 'drb'
4
+
5
+ # The name of the java String class conflicts with ruby's String class.
6
+ module Java
7
+ java_import "java.lang.String"
8
+ java_import "java.lang.Exception"
9
+ end
10
+
11
+ class String
12
+ def to_bytes
13
+ Java::String.new(self).getBytes
14
+ end
15
+ end
16
+
17
+
18
+ module BigRecord
19
+ module Driver
20
+
21
+ class Server
22
+ java_import "java.io.IOException"
23
+
24
+ def configure(config = {})
25
+ raise NotImplementedError
26
+ end
27
+
28
+ def update(table_name, row, values, timestamp=nil)
29
+ raise NotImplementedError
30
+ end
31
+
32
+ def get(table_name, row, column, options={})
33
+ raise NotImplementedError
34
+ end
35
+
36
+ def get_columns(table_name, row, columns, options={})
37
+ raise NotImplementedError
38
+ end
39
+
40
+ def get_consecutive_rows(table_name, start_row, limit, columns, stop_row = nil)
41
+ raise NotImplementedError
42
+ end
43
+
44
+ def delete(table_name, row)
45
+ raise NotImplementedError
46
+ end
47
+
48
+ def create_table(table_name, column_descriptors)
49
+ raise NotImplementedError
50
+ end
51
+
52
+ def drop_table(table_name)
53
+ raise NotImplementedError
54
+ end
55
+
56
+ def truncate_table(table_name)
57
+ raise NotImplementedError
58
+ end
59
+
60
+ def ping
61
+ raise NotImplementedError
62
+ end
63
+
64
+ def table_exists?(table_name)
65
+ raise NotImplementedError
66
+ end
67
+
68
+ def table_names
69
+ raise NotImplementedError
70
+ end
71
+
72
+ def method_missing(method, *args)
73
+ super
74
+ rescue NoMethodError
75
+ raise NoMethodError, "undefined method `#{method}' for \"#{self}\":#{self.class}"
76
+ end
77
+
78
+ def respond_to?(method)
79
+ super
80
+ end
81
+
82
+ protected
83
+
84
+ def to_ruby_string(byte_string)
85
+ Java::String.new(byte_string).to_s
86
+ end
87
+
88
+ # Try to recover from network related exceptions. e.g. hbase has been restarted and the
89
+ # cached connections in @tables are no longer valid. Every method in this class (except connect_table)
90
+ # should have its code wrapped by a call to this method.
91
+ def safe_exec
92
+ yield
93
+ rescue IOException => e
94
+ puts "A network error occured: #{e.message}. Trying to recover..."
95
+ init_connection
96
+ begin
97
+ yield
98
+ rescue Exception, Java::Exception => e2
99
+ if e2.class == e.class
100
+ puts "Failed to recover the connection."
101
+ else
102
+ puts "Failed to recover the connection but got a different error this time: #{e2.message}."
103
+ end
104
+ puts "Stack trace:"
105
+ puts e2.backtrace.join("\n")
106
+
107
+ if e2.kind_of?(NativeException)
108
+ raise BigRecord::Driver::JavaError, e2.message
109
+ else
110
+ raise e2
111
+ end
112
+ end
113
+ puts "Connection recovered successfully..."
114
+ rescue Exception => e
115
+ puts "\n#{e.class.name}: #{e.message}"
116
+ puts e.backtrace.join("\n")
117
+ raise e
118
+ end
119
+
120
+ end
121
+
122
+ end
123
+ end
@@ -1,3 +1,5 @@
1
- module BigRecordDriver
2
- VERSION = File.read(File.join(File.dirname(__FILE__), "..", "..", "VERSION")).chomp.freeze
1
+ module BigRecord
2
+ module Driver
3
+ VERSION = File.read(File.join(File.dirname(__FILE__), "..", "..", "VERSION")).chomp.freeze
4
+ end
3
5
  end
@@ -1,9 +1,8 @@
1
- $:.unshift(File.dirname(__FILE__) + '/../lib')
2
-
1
+ require 'rubygems'
3
2
  require 'test/unit'
4
- require 'big_record_driver'
3
+ require File.dirname(__FILE__) + '/../lib/big_record_driver'
5
4
 
6
- module AbstractTestClient #< Test::Unit::TestCase
5
+ module AbstractTestClient
7
6
 
8
7
  TABLE_NAME = :animals
9
8
 
@@ -286,7 +285,7 @@ module AbstractTestClient #< Test::Unit::TestCase
286
285
  def test_ping
287
286
  db = nil
288
287
  assert_nothing_raised("Couldn't initialize the client") do
289
- db = BigRecordDriver::Client.new(:drb_port => 40005)
288
+ db = BigRecord::Driver::Client.new(:drb_port => PORT)
290
289
  end
291
290
  assert_not_nil db, "Couldn't initialize the client"
292
291
  assert db.ping, "The client was initialized but we cannot communicate with the db itself"
@@ -308,7 +307,7 @@ module AbstractTestClient #< Test::Unit::TestCase
308
307
  end
309
308
 
310
309
  def test_invalid_column_family
311
- assert_raises BigRecordDriver::JavaError do
310
+ assert_raises BigRecord::Driver::JavaError do
312
311
  @big_db.get(TABLE_NAME, 'dog-key', 'nonexistentcolumnfamily:name')
313
312
  end
314
313
  end
@@ -1,26 +1,22 @@
1
1
  require File.dirname(__FILE__) + '/abstract_test_client'
2
2
 
3
- class TestHbaseClient < Test::Unit::TestCase #TestClient
3
+ PORT = (ARGV[0] || 40000).to_i
4
+
5
+ class TestHbaseClient < Test::Unit::TestCase
4
6
  include AbstractTestClient
5
- # Prepare the connection and the test tables.
6
- def setup
7
- unless @big_db
8
- unless BigRecordDriver::DriverManager.running?(40005)
9
- BigRecordDriver::DriverManager.restart(40005)
10
- end
11
7
 
12
- #TODO: don't use hard coded values for the config
13
- @big_db = BigRecordDriver::Client.new(:zookeeper_quorum=> 'localhost', :zookeeper_client_port => '2181',:drb_port => 40005)
14
- end
8
+ def setup
9
+ @big_db = BigRecord::Driver::Client.new({:zookeeper_quorum=> 'localhost', :zookeeper_client_port => '2181', :drb_port => PORT}) unless @big_db
15
10
 
16
11
  @big_db.drop_table(TABLE_NAME) if @big_db.table_exists?(TABLE_NAME)
17
12
 
18
- # Create the test table
19
- # unless @big_db.table_exists?(TABLE_NAME)
20
- columns_descriptors = []
21
- columns_descriptors << BigRecordDriver::ColumnDescriptor.new(:columnfamily1)
22
- columns_descriptors << BigRecordDriver::ColumnDescriptor.new(:columnfamily2)
23
- @big_db.create_table(TABLE_NAME, columns_descriptors)
24
- # end
13
+ columns_descriptors = []
14
+ columns_descriptors << BigRecord::Driver::ColumnDescriptor.new(:columnfamily1)
15
+ columns_descriptors << BigRecord::Driver::ColumnDescriptor.new(:columnfamily2)
16
+ @big_db.create_table(TABLE_NAME, columns_descriptors)
17
+ end
18
+
19
+ def teardown
20
+ @big_db.drop_table(TABLE_NAME) if @big_db.table_exists?(TABLE_NAME)
25
21
  end
26
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bigrecord-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - openplaces.org
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-04 00:00:00 -05:00
12
+ date: 2010-02-12 00:00:00 -05:00
13
13
  default_executable: hbase-driver
14
14
  dependencies: []
15
15
 
@@ -29,17 +29,15 @@ files:
29
29
  - bin/hbase-driver
30
30
  - conf/log4j.properties
31
31
  - lib/big_record_driver.rb
32
- - lib/big_record_driver/bigrecord_server.rb
33
32
  - lib/big_record_driver/client.rb
34
33
  - lib/big_record_driver/column_descriptor.rb
35
- - lib/big_record_driver/driver_manager.rb
36
34
  - lib/big_record_driver/exceptions.rb
37
35
  - lib/big_record_driver/hbase_driver/server.rb
36
+ - lib/big_record_driver/server.rb
38
37
  - lib/big_record_driver/version.rb
39
38
  - lib/bigrecord_driver.rb
40
39
  - test/abstract_test_client.rb
41
40
  - test/test_client_hbase.rb
42
- - test/test_driver_manager.rb
43
41
  - vendor/java/hbase/commons-logging-1.0.4.jar
44
42
  - vendor/java/hbase/commons-logging-api-1.0.4.jar
45
43
  - vendor/java/hbase/hadoop-0.20.1-hdfs127-core.jar
@@ -1,119 +0,0 @@
1
- require File.dirname(__FILE__) + '/exceptions'
2
- require File.dirname(__FILE__) + '/column_descriptor'
3
- require 'drb'
4
- # The name of the java String class conflicts with ruby's String class.
5
- module Java
6
- include_class "java.lang.String"
7
- include_class "java.lang.Exception"
8
-
9
- end
10
-
11
- class String
12
- def to_bytes
13
- Java::String.new(self).getBytes
14
- end
15
- end
16
-
17
-
18
- module BigRecordDriver
19
-
20
- class BigRecordServer
21
- include_class "java.io.IOException"
22
-
23
- def configure(config = {})
24
- raise NotImplementedError
25
- end
26
-
27
- def update(table_name, row, values, timestamp=nil)
28
- raise NotImplementedError
29
- end
30
-
31
- def get(table_name, row, column, options={})
32
- raise NotImplementedError
33
- end
34
-
35
- def get_columns(table_name, row, columns, options={})
36
- raise NotImplementedError
37
- end
38
-
39
- def get_consecutive_rows(table_name, start_row, limit, columns, stop_row = nil)
40
- raise NotImplementedError
41
- end
42
-
43
- def delete(table_name, row)
44
- raise NotImplementedError
45
- end
46
-
47
- def create_table(table_name, column_descriptors)
48
- raise NotImplementedError
49
- end
50
-
51
- def drop_table(table_name)
52
- raise NotImplementedError
53
- end
54
-
55
- def truncate_table(table_name)
56
- raise NotImplementedError
57
- end
58
-
59
- def ping
60
- raise NotImplementedError
61
- end
62
-
63
- def table_exists?(table_name)
64
- raise NotImplementedError
65
- end
66
-
67
- def table_names
68
- raise NotImplementedError
69
- end
70
-
71
- def method_missing(method, *args)
72
- super
73
- rescue NoMethodError
74
- raise NoMethodError, "undefined method `#{method}' for \"#{self}\":#{self.class}"
75
- end
76
-
77
- def respond_to?(method)
78
- super
79
- end
80
-
81
- protected
82
-
83
- def to_ruby_string(cell)
84
- Java::String.new(cell.getValue).to_s
85
- end
86
- # Try to recover from network related exceptions. e.g. hbase has been restarted and the
87
- # cached connections in @tables are no longer valid. Every method in this class (except connect_table)
88
- # should have its code wrapped by a call to this method.
89
- def safe_exec
90
- yield
91
- rescue IOException => e
92
- puts "A network error occured: #{e.message}. Trying to recover..."
93
- init_connection
94
- begin
95
- yield
96
- rescue Exception, Java::Exception => e2
97
- if e2.class == e.class
98
- puts "Failed to recover the connection."
99
- else
100
- puts "Failed to recover the connection but got a different error this time: #{e2.message}."
101
- end
102
- puts "Stack trace:"
103
- puts e2.backtrace.join("\n")
104
-
105
- if e2.kind_of?(NativeException)
106
- raise BigRecordDriver::JavaError, e2.message
107
- else
108
- raise e2
109
- end
110
- end
111
- puts "Connection recovered successfully..."
112
- rescue Exception => e
113
- puts "\n#{e.class.name}: #{e.message}"
114
- puts e.backtrace.join("\n")
115
- raise e
116
- end
117
- end
118
-
119
- end
@@ -1,34 +0,0 @@
1
- module BigRecordDriver
2
-
3
- class DriverManager
4
- class << self
5
-
6
- def set_cmd(db = 'hbase')
7
- @@CMD = File.dirname(__FILE__) + "/../../bin/#{db}-driver"
8
- end
9
- DriverManager.set_cmd
10
- def start(port = 40005)
11
- `ruby #{@@CMD} start -p #{port.to_s}`
12
- end
13
-
14
- def restart(port = 40005)
15
- `ruby #{@@CMD} restart -p #{port.to_s}`
16
- end
17
-
18
- def stop(port = 40005)
19
- `ruby #{@@CMD} stop -p #{port.to_s}`
20
- end
21
-
22
- def running?(port = 40005)
23
- status = `ruby #{@@CMD} status -p #{port.to_s}`
24
- status == "Running.\n"
25
- end
26
-
27
- def silent_start(port = 40005)
28
- start(port) unless running?(port)
29
- end
30
- end
31
-
32
- end
33
-
34
- end
@@ -1,46 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__) + '/../lib')
2
-
3
- require 'test/unit'
4
- require 'big_record_driver'
5
-
6
- class TestDriverManager < Test::Unit::TestCase
7
-
8
- # everything is in a sequence and therefore there's only 1 test
9
- def test_all
10
- port = 40000
11
-
12
- # stop the driver if it's already running
13
- assert_nothing_raised do
14
- BigRecordDriver::DriverManager.stop(port) if BigRecordDriver::DriverManager.running?(port)
15
- end
16
- assert !BigRecordDriver::DriverManager.running?(port), "The driver is already running and it couldn't be stopped"
17
-
18
- # start the real tests
19
- assert_nothing_raised do
20
- BigRecordDriver::DriverManager.start(port)
21
- end
22
- assert BigRecordDriver::DriverManager.running?(port), "The driver couldn't be started"
23
-
24
- assert_nothing_raised do
25
- BigRecordDriver::DriverManager.restart(port)
26
- end
27
- assert BigRecordDriver::DriverManager.running?(port), "The driver couldn't be restarted"
28
-
29
- assert_nothing_raised("The driver should be able to do a silent start when it's already running") do
30
- BigRecordDriver::DriverManager.silent_start(port)
31
- end
32
- assert BigRecordDriver::DriverManager.running?(port), "The driver stopped during a silent start instead of staying alive"
33
-
34
- assert_nothing_raised do
35
- BigRecordDriver::DriverManager.stop(port)
36
- end
37
- assert !BigRecordDriver::DriverManager.running?(port), "The driver couldn't be stopped"
38
-
39
- assert_nothing_raised("The driver should be able to do a silent start when it's not running") do
40
- BigRecordDriver::DriverManager.silent_start(port)
41
- end
42
- assert BigRecordDriver::DriverManager.running?(port), "The driver couldn't be started silently"
43
-
44
- end
45
-
46
- end