lhm 1.0.0.rc6 → 1.0.0.rc7
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.
- data/CHANGELOG.md +6 -0
- data/bin/lhm-kill-queue +16 -10
- data/lib/lhm.rb +3 -3
- data/lib/lhm/entangler.rb +3 -3
- data/lib/lhm/sql_helper.rb +6 -2
- data/lib/lhm/version.rb +1 -1
- data/spec/unit/entangler_spec.rb +3 -3
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# 1.0.0.rc7 (January 31, 2012)
|
2
|
+
|
3
|
+
* added SqlHelper.annotation into the middle of trigger statements. this
|
4
|
+
is for the benefit of the killer script which should not kill trigger
|
5
|
+
statements.
|
6
|
+
|
1
7
|
# 1.0.0.rc6 (January 30, 2012)
|
2
8
|
|
3
9
|
* added --confirm to kill script; fixes to kill script
|
data/bin/lhm-kill-queue
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'active_record'
|
4
|
+
require 'lhm/sql_helper'
|
4
5
|
require 'optparse'
|
5
6
|
|
6
7
|
module Lhm
|
@@ -8,6 +9,9 @@ module Lhm
|
|
8
9
|
|
9
10
|
def initialize
|
10
11
|
@port = 3306
|
12
|
+
@grace = 10
|
13
|
+
@tiny = 0.1
|
14
|
+
@marker = "%#{ SqlHelper.annotation }%"
|
11
15
|
|
12
16
|
OptionParser.new do |opts|
|
13
17
|
opts.on("-h", "--hostname HOSTNAME") { |v| @hostname = v }
|
@@ -31,7 +35,7 @@ module Lhm
|
|
31
35
|
|
32
36
|
def usage
|
33
37
|
<<-desc.gsub(/^ /, '')
|
34
|
-
kills queries on the given server after detecting 'lock table
|
38
|
+
kills queries on the given server after detecting 'lock table#{ @marker }'.
|
35
39
|
usage:
|
36
40
|
lhm-kill-queue -h hostname -u username -p password -d database \\
|
37
41
|
(-m kill | -m master | -m slave) [--confirm]
|
@@ -54,24 +58,24 @@ module Lhm
|
|
54
58
|
|
55
59
|
def master
|
56
60
|
lock = trip
|
57
|
-
puts "starting to kill non lhm processes in
|
58
|
-
sleep(
|
61
|
+
puts "starting to kill non lhm processes in #{ @grace } seconds"
|
62
|
+
sleep(@grace + @tiny)
|
59
63
|
|
60
64
|
[list_non_lhm].flatten.each do |process|
|
61
65
|
kill_process(process)
|
62
|
-
sleep(
|
66
|
+
sleep(@tiny)
|
63
67
|
end
|
64
68
|
end
|
65
69
|
|
66
70
|
def slave
|
67
71
|
lock = trip
|
68
|
-
puts "starting to kill non lhm SELECT processes in
|
69
|
-
sleep(
|
72
|
+
puts "starting to kill non lhm SELECT processes in #{ @grace } seconds"
|
73
|
+
sleep(@grace + @tiny)
|
70
74
|
|
71
75
|
[list_non_lhm].flatten.each do |process|
|
72
76
|
if(select?(process))
|
73
77
|
kill_process(process)
|
74
|
-
sleep(
|
78
|
+
sleep(@tiny)
|
75
79
|
end
|
76
80
|
end
|
77
81
|
end
|
@@ -94,12 +98,14 @@ module Lhm
|
|
94
98
|
end
|
95
99
|
|
96
100
|
def list_non_lhm
|
97
|
-
select_processes
|
101
|
+
select_processes %Q(
|
102
|
+
info not like '#{ @marker }' and time > #{ @grace } and command = 'Query'
|
103
|
+
)
|
98
104
|
end
|
99
105
|
|
100
106
|
def trip
|
101
|
-
until res = select_processes("info like 'lock table
|
102
|
-
sleep
|
107
|
+
until res = select_processes("info like 'lock table#{ @marker }'").first
|
108
|
+
sleep @tiny
|
103
109
|
print '.'
|
104
110
|
end
|
105
111
|
|
data/lib/lhm.rb
CHANGED
@@ -17,7 +17,6 @@ require 'lhm/version'
|
|
17
17
|
# end
|
18
18
|
#
|
19
19
|
module Lhm
|
20
|
-
extend self
|
21
20
|
|
22
21
|
# Alters a table with the changes described in the block
|
23
22
|
#
|
@@ -28,9 +27,9 @@ module Lhm
|
|
28
27
|
# @option chunk_options [Fixnum] :throttle
|
29
28
|
# Time to wait between chunks in milliseconds (defaults to: 100)
|
30
29
|
# @yield [Migrator] Yielded Migrator object records the changes
|
31
|
-
# @return [Boolean] Returns true if the migration
|
30
|
+
# @return [Boolean] Returns true if the migration finishes
|
32
31
|
# @raise [Error] Raises Lhm::Error in case of a error and aborts the migration
|
33
|
-
def change_table(table_name, chunk_options = {}, &block)
|
32
|
+
def self.change_table(table_name, chunk_options = {}, &block)
|
34
33
|
connection = ActiveRecord::Base.connection
|
35
34
|
origin = Table.parse(table_name, connection)
|
36
35
|
invoker = Invoker.new(origin, connection)
|
@@ -40,3 +39,4 @@ module Lhm
|
|
40
39
|
true
|
41
40
|
end
|
42
41
|
end
|
42
|
+
|
data/lib/lhm/entangler.rb
CHANGED
@@ -40,7 +40,7 @@ module Lhm
|
|
40
40
|
strip %Q{
|
41
41
|
create trigger `#{ trigger(:ins) }`
|
42
42
|
after insert on `#{ @origin.name }` for each row
|
43
|
-
replace into `#{ @destination.name }` (#{ @common.joined })
|
43
|
+
replace into `#{ @destination.name }` (#{ @common.joined }) #{ SqlHelper.annotation }
|
44
44
|
values (#{ @common.typed("NEW") })
|
45
45
|
}
|
46
46
|
end
|
@@ -49,7 +49,7 @@ module Lhm
|
|
49
49
|
strip %Q{
|
50
50
|
create trigger `#{ trigger(:upd) }`
|
51
51
|
after update on `#{ @origin.name }` for each row
|
52
|
-
replace into `#{ @destination.name }` (#{ @common.joined })
|
52
|
+
replace into `#{ @destination.name }` (#{ @common.joined }) #{ SqlHelper.annotation }
|
53
53
|
values (#{ @common.typed("NEW") })
|
54
54
|
}
|
55
55
|
end
|
@@ -58,7 +58,7 @@ module Lhm
|
|
58
58
|
strip %Q{
|
59
59
|
create trigger `#{ trigger(:del) }`
|
60
60
|
after delete on `#{ @origin.name }` for each row
|
61
|
-
delete ignore from `#{ @destination.name }`
|
61
|
+
delete ignore from `#{ @destination.name }` #{ SqlHelper.annotation }
|
62
62
|
where `#{ @destination.name }`.`id` = OLD.`id`
|
63
63
|
}
|
64
64
|
end
|
data/lib/lhm/sql_helper.rb
CHANGED
@@ -5,6 +5,10 @@ module Lhm
|
|
5
5
|
module SqlHelper
|
6
6
|
extend self
|
7
7
|
|
8
|
+
def annotation
|
9
|
+
"/* large hadron migration */"
|
10
|
+
end
|
11
|
+
|
8
12
|
def idx_name(table_name, cols)
|
9
13
|
column_names = column_definition(cols).map(&:first)
|
10
14
|
"index_#{ table_name }_on_#{ column_names.join("_and_") }"
|
@@ -12,7 +16,7 @@ module Lhm
|
|
12
16
|
|
13
17
|
def idx_spec(cols)
|
14
18
|
column_definition(cols).map do |name, length|
|
15
|
-
"`#{name}`#{length}"
|
19
|
+
"`#{ name }`#{ length }"
|
16
20
|
end.join(', ')
|
17
21
|
end
|
18
22
|
|
@@ -39,7 +43,7 @@ module Lhm
|
|
39
43
|
private
|
40
44
|
|
41
45
|
def tagged(statement)
|
42
|
-
statement
|
46
|
+
"#{ statement } #{ SqlHelper.annotation }"
|
43
47
|
end
|
44
48
|
|
45
49
|
def column_definition(cols)
|
data/lib/lhm/version.rb
CHANGED
data/spec/unit/entangler_spec.rb
CHANGED
@@ -30,7 +30,7 @@ describe Lhm::Entangler do
|
|
30
30
|
ddl = %Q{
|
31
31
|
create trigger `lhmt_ins_origin`
|
32
32
|
after insert on `origin` for each row
|
33
|
-
replace into `destination` (`info`, `tags`)
|
33
|
+
replace into `destination` (`info`, `tags`) /* large hadron migration */
|
34
34
|
values (NEW.`info`, NEW.`tags`)
|
35
35
|
}
|
36
36
|
|
@@ -41,7 +41,7 @@ describe Lhm::Entangler do
|
|
41
41
|
ddl = %Q{
|
42
42
|
create trigger `lhmt_upd_origin`
|
43
43
|
after update on `origin` for each row
|
44
|
-
replace into `destination` (`info`, `tags`)
|
44
|
+
replace into `destination` (`info`, `tags`) /* large hadron migration */
|
45
45
|
values (NEW.`info`, NEW.`tags`)
|
46
46
|
}
|
47
47
|
|
@@ -52,7 +52,7 @@ describe Lhm::Entangler do
|
|
52
52
|
ddl = %Q{
|
53
53
|
create trigger `lhmt_del_origin`
|
54
54
|
after delete on `origin` for each row
|
55
|
-
delete ignore from `destination`
|
55
|
+
delete ignore from `destination` /* large hadron migration */
|
56
56
|
where `destination`.`id` = OLD.`id`
|
57
57
|
}
|
58
58
|
|