flydata 0.2.25 → 0.2.26
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/flydata-core/circle.yml +3 -0
- data/flydata-core/lib/flydata-core/table_def/redshift_table_def.rb +8 -0
- data/flydata-core/spec/table_def/redshift_table_def_spec.rb +1 -0
- data/flydata.gemspec +4 -3
- data/lib/flydata/cli.rb +4 -1
- data/lib/flydata/fluent-plugins/in_mysql_binlog_flydata.rb +6 -1
- data/lib/flydata/fluent-plugins/mysql/binlog_record_handler.rb +2 -1
- data/lib/flydata/fluent-plugins/mysql/context.rb +1 -1
- data/lib/flydata/sync_file_manager.rb +8 -2
- data/spec/flydata/sync_file_manager_spec.rb +31 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9ac346de420a785776ae309674640dd0afe3ff3
|
4
|
+
data.tar.gz: b9dcd9d82316b6906517ab008cc02e1024e8851e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2c936dab2a85f0b2b575900218b03472874be5061c2dc72f89753f37ef7f166f31bfd4e4ffb1f47f367b12b1aac3367cc6d10f766a219a45831787456c512c8
|
7
|
+
data.tar.gz: 138786e380f022dd2ad70a3a96e20a88a379a36fb4ba1ed4636605d81a98c4f65ae86f4f143c87cc0ae09758c5a5a00487d2d60ff78327ceb1e8cfd58a6d8eb8
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.26
|
@@ -40,6 +40,7 @@ class RedshiftTableDef
|
|
40
40
|
|
41
41
|
begin
|
42
42
|
tabledef = ""
|
43
|
+
tabledef += create_schema_sql(schema_name) if options[:flydata_ctl_table] && !schema_name.to_s.empty?
|
43
44
|
tabledef += create_flydata_ctl_table_sql(schema_name) if options[:flydata_ctl_table]
|
44
45
|
tabledef += create_table_sql(flydata_tabledef, schema_name) unless options[:ctl_only]
|
45
46
|
tabledef += comment_sql(flydata_tabledef, schema_name) unless options[:ctl_only]
|
@@ -51,6 +52,9 @@ class RedshiftTableDef
|
|
51
52
|
end
|
52
53
|
|
53
54
|
FLYDATA_CTL_COLUMNS_TABLE = "flydata_ctl_columns"
|
55
|
+
CREATE_SCHEMA_SQL = <<EOS
|
56
|
+
CREATE SCHEMA "%s";
|
57
|
+
EOS
|
54
58
|
CREATE_FLYDATA_CTL_TABLE_SQL = <<EOS
|
55
59
|
CREATE TABLE %s(
|
56
60
|
id integer NOT NULL IDENTITY(1,1),
|
@@ -71,6 +75,10 @@ EOS
|
|
71
75
|
table_name_for_ddl(FLYDATA_CTL_COLUMNS_TABLE, schema_name)
|
72
76
|
end
|
73
77
|
|
78
|
+
def self.create_schema_sql(schema_name)
|
79
|
+
CREATE_SCHEMA_SQL % schema_name
|
80
|
+
end
|
81
|
+
|
74
82
|
def self.create_flydata_ctl_table_sql(schema_name)
|
75
83
|
# No drop table here intentionally because losing the data is fatal.
|
76
84
|
tbl = flydata_ctl_table_for_ddl(schema_name)
|
@@ -111,6 +111,7 @@ EOT
|
|
111
111
|
|
112
112
|
it 'should preappend schema name to table name' do
|
113
113
|
expect(subject).to eq( <<EOT.strip )
|
114
|
+
CREATE SCHEMA "test_schema";
|
114
115
|
CREATE TABLE "test_schema"."flydata_ctl_columns"(
|
115
116
|
id integer NOT NULL IDENTITY(1,1),
|
116
117
|
table_name varchar(128) NOT NULL,
|
data/flydata.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: flydata 0.2.
|
5
|
+
# stub: flydata 0.2.26 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "flydata"
|
9
|
-
s.version = "0.2.
|
9
|
+
s.version = "0.2.26"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Koichi Fujikawa", "Masashi Miyazaki", "Matthew Luu", "Mak Inada", "Sriram NS"]
|
14
|
-
s.date = "2014-12-
|
14
|
+
s.date = "2014-12-31"
|
15
15
|
s.description = "FlyData Agent"
|
16
16
|
s.email = "sysadmin@flydata.com"
|
17
17
|
s.executables = ["fdmysqldump", "flydata", "serverinfo"]
|
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
|
|
35
35
|
"flydata-core/.travis.yml",
|
36
36
|
"flydata-core/Gemfile",
|
37
37
|
"flydata-core/Gemfile.lock",
|
38
|
+
"flydata-core/circle.yml",
|
38
39
|
"flydata-core/lib/flydata-core.rb",
|
39
40
|
"flydata-core/lib/flydata-core/core_ext.rb",
|
40
41
|
"flydata-core/lib/flydata-core/core_ext/module.rb",
|
data/lib/flydata/cli.rb
CHANGED
@@ -29,7 +29,10 @@ module Flydata
|
|
29
29
|
cmd, sub_cmd = parse_command(first_arg)
|
30
30
|
begin
|
31
31
|
cmd_cls = "Flydata::Command::#{cmd.capitalize}".constantize
|
32
|
-
rescue
|
32
|
+
rescue NameError
|
33
|
+
# NameError is raised when the constant is not defined in its target
|
34
|
+
# file, that is, command not found.
|
35
|
+
# Other exceptions mean that some other error happended.
|
33
36
|
raise "Command not found: #{cmd}"
|
34
37
|
end
|
35
38
|
# Command class can define options for each subcommand by defining method "slop_subcommandname"
|
@@ -78,10 +78,15 @@ class MysqlBinlogFlydataInput < MysqlBinlogInput
|
|
78
78
|
mysql_url: mysql_url, database: @database, tables: @tables)
|
79
79
|
table_meta.update
|
80
80
|
|
81
|
+
table_revs = tables.inject({}) do |h, table_name|
|
82
|
+
h[table_name] = @sync_fm.table_rev(table_name)
|
83
|
+
h
|
84
|
+
end
|
85
|
+
|
81
86
|
@context = Mysql::Context.new(
|
82
87
|
database: @database, tables: @tables,
|
83
88
|
tag: @tag, sync_fm: @sync_fm, omit_events: @omit_events,
|
84
|
-
table_meta: table_meta,
|
89
|
+
table_meta: table_meta, table_revs: table_revs,
|
85
90
|
)
|
86
91
|
@record_dispatcher = Mysql::FlydataBinlogRecordDispatcher.new(@context)
|
87
92
|
@idle_event_detector = IdleEventDetector.new(@initial_idle_interval, @continuous_idle_interval, @check_interval)
|
@@ -70,13 +70,14 @@ module Mysql
|
|
70
70
|
raise "Missing table name. #{record}" if table.to_s.empty?
|
71
71
|
return unless acceptable_table?(record, table) && acceptable_event?(type, table)
|
72
72
|
|
73
|
-
table_rev = @context.
|
73
|
+
table_rev = @context.table_revs[table]
|
74
74
|
position = record['next_position'] - record['event_length']
|
75
75
|
|
76
76
|
# Add common information to each record
|
77
77
|
records.each do |r|
|
78
78
|
if opt[:increment_table_rev]
|
79
79
|
table_rev = @context.sync_fm.increment_table_rev(table, table_rev)
|
80
|
+
@context.table_revs[table] = table_rev
|
80
81
|
end
|
81
82
|
r[TYPE] = type
|
82
83
|
r[RESPECT_ORDER] = true
|
@@ -98,8 +98,14 @@ module Flydata
|
|
98
98
|
f = @table_position_files[table_name]
|
99
99
|
seq = f.read
|
100
100
|
seq = seq.to_i + 1
|
101
|
-
|
102
|
-
|
101
|
+
begin
|
102
|
+
yield(seq)
|
103
|
+
ensure
|
104
|
+
# when an error happened in yield, the sequence number should remain
|
105
|
+
# as is. For the next call to read the value correctly, the position
|
106
|
+
# must be rewound.
|
107
|
+
f.rewind
|
108
|
+
end
|
103
109
|
f.truncate(0)
|
104
110
|
f.write(seq)
|
105
111
|
f.flush
|
@@ -156,6 +156,37 @@ module Flydata
|
|
156
156
|
describe '#binlog_path' do
|
157
157
|
it { expect(default_sfm.binlog_path).to eq("#{FLYDATA_HOME}/flydata_sync_mysql.binlog.pos") }
|
158
158
|
end
|
159
|
+
|
160
|
+
describe '#increment_and_save_table_position' do
|
161
|
+
let(:test_table) { 'test_table' }
|
162
|
+
before do
|
163
|
+
table_pos_dir = SyncFileManager::TABLE_POSITIONS_DIR
|
164
|
+
FileUtils.mkdir_p table_pos_dir
|
165
|
+
table_pos_file = "#{table_pos_dir}/#{test_table}.pos"
|
166
|
+
FileUtils.rm(table_pos_file) if File.exist?(table_pos_file)
|
167
|
+
end
|
168
|
+
subject { default_sfm }
|
169
|
+
context 'when an exception happens in the block' do
|
170
|
+
let(:first_pos) { 1 }
|
171
|
+
let(:last_pos) { first_pos + 1 }
|
172
|
+
before do
|
173
|
+
subject.increment_and_save_table_position(test_table) do |seq|
|
174
|
+
expect(seq).to eq first_pos
|
175
|
+
end
|
176
|
+
begin
|
177
|
+
subject.increment_and_save_table_position(test_table) do |seq|
|
178
|
+
expect(seq).to eq last_pos
|
179
|
+
raise "error"
|
180
|
+
end
|
181
|
+
rescue
|
182
|
+
# intentionally left blank
|
183
|
+
end
|
184
|
+
end
|
185
|
+
it 'yields with the previous value' do
|
186
|
+
expect{|b| subject.increment_and_save_table_position(test_table, &b)}.to yield_with_args(last_pos)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
159
190
|
end
|
160
191
|
end
|
161
192
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flydata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Koichi Fujikawa
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2014-12-
|
15
|
+
date: 2014-12-31 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rest-client
|
@@ -438,6 +438,7 @@ files:
|
|
438
438
|
- flydata-core/.travis.yml
|
439
439
|
- flydata-core/Gemfile
|
440
440
|
- flydata-core/Gemfile.lock
|
441
|
+
- flydata-core/circle.yml
|
441
442
|
- flydata-core/lib/flydata-core.rb
|
442
443
|
- flydata-core/lib/flydata-core/core_ext.rb
|
443
444
|
- flydata-core/lib/flydata-core/core_ext/module.rb
|