purview 1.0.1 → 1.1.0
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/CHANGELOG +6 -0
- data/README.md +13 -9
- data/lib/purview/databases/base.rb +22 -5
- data/lib/purview/databases/mysql.rb +13 -1
- data/lib/purview/databases/postgresql.rb +13 -1
- data/lib/purview/exceptions/could_not_disable.rb +9 -0
- data/lib/purview/exceptions/could_not_enable.rb +9 -0
- data/lib/purview/exceptions/could_not_initialize.rb +9 -0
- data/lib/purview/exceptions/could_not_lock.rb +9 -0
- data/lib/purview/exceptions/could_not_unlock.rb +9 -0
- data/lib/purview/exceptions.rb +6 -2
- data/lib/purview/tables/base.rb +0 -4
- data/lib/purview/version.rb +1 -1
- metadata +7 -4
- data/lib/purview/exceptions/could_not_acquire_lock.rb +0 -9
- data/lib/purview/exceptions/lock_already_released.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4075095b0198b4d1a9f104e39cef70a86f678038
|
4
|
+
data.tar.gz: 8d87f15b33df6603d107edee2a5206f4579bca30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe1283a266267325800140f453efe51da2be244c150a094d5d22c40d8b2e129b9a0192fdd004e44799377ec97625aa7c5621cdf24f0f6e4f46cef58ca216361d
|
7
|
+
data.tar.gz: 5f5bd8092e10d1f3f34b39aceb15ab4b4ccf307b0e94dead6a801b1c964818069e7775d5af24251be61670307f27555ae0993fa54c3411142048326ad9fd0d1c
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -69,12 +69,6 @@ loader_opts = {
|
|
69
69
|
}
|
70
70
|
```
|
71
71
|
|
72
|
-
Configure the `starting_timestamp` (this is the min-date to pull and can vary
|
73
|
-
between `Table(s)`)
|
74
|
-
```ruby
|
75
|
-
starting_timestamp = Time.parse('2012-01-01 00:00:00Z')
|
76
|
-
```
|
77
|
-
|
78
72
|
Combine all the configuration options and instantiate the `Table`
|
79
73
|
```ruby
|
80
74
|
table_opts = {
|
@@ -82,7 +76,6 @@ table_opts = {
|
|
82
76
|
:loader => loader_opts,
|
83
77
|
:parser => parser_opts,
|
84
78
|
:puller => puller_opts,
|
85
|
-
:starting_timestamp => starting_timestamp,
|
86
79
|
}
|
87
80
|
|
88
81
|
table = Purview::Tables::Raw.new(
|
@@ -126,8 +119,19 @@ rescue Mysql2::Error
|
|
126
119
|
end
|
127
120
|
```
|
128
121
|
|
129
|
-
|
130
|
-
|
122
|
+
Initialize the `Table` (in the DB). This process sets the `max_timestamp_pulled`
|
123
|
+
value in the `table_metadata` table and is used by the candidate `Table`
|
124
|
+
selection algorithm to determine which `Table` should be synchronized next (the
|
125
|
+
least recently synchronized `Table` will be selected). This value is also used
|
126
|
+
as the high-water mark for records pulled from its source
|
127
|
+
```ruby
|
128
|
+
database.initialize_table(table, timestamp)
|
129
|
+
```
|
130
|
+
|
131
|
+
Enable the `Table` (in the DB). This process sets the `enabled_at` value in the
|
132
|
+
`table_metadata` table and is used by the candidate `Table` selection algorithm
|
133
|
+
to determine the pool of `Table(s)` available for synchronization (to remove a
|
134
|
+
`Table` from the pool simply execute `disable_table`)
|
131
135
|
```ruby
|
132
136
|
database.enable_table(table)
|
133
137
|
```
|
@@ -67,7 +67,7 @@ module Purview
|
|
67
67
|
with_new_connection do |connection|
|
68
68
|
rows_affected = \
|
69
69
|
connection.execute(disable_table_sql(table)).rows_affected
|
70
|
-
raise Purview::Exceptions::
|
70
|
+
raise Purview::Exceptions::CouldNotDisable.new(table) \
|
71
71
|
if zero?(rows_affected)
|
72
72
|
end
|
73
73
|
table_name
|
@@ -98,7 +98,20 @@ module Purview
|
|
98
98
|
with_new_connection do |connection|
|
99
99
|
rows_affected = \
|
100
100
|
connection.execute(enable_table_sql(table, timestamp)).rows_affected
|
101
|
-
raise Purview::Exceptions::
|
101
|
+
raise Purview::Exceptions::CouldNotEnable.new(table) \
|
102
|
+
if zero?(rows_affected)
|
103
|
+
end
|
104
|
+
table_name
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def initialize_table(table, starting_timestamp=Time.now.utc)
|
109
|
+
table_name = table_name(table)
|
110
|
+
with_context_logging("`initialize_table` for: #{table_name}") do
|
111
|
+
with_new_connection do |connection|
|
112
|
+
rows_affected = \
|
113
|
+
connection.execute(initialize_table_sql(table, starting_timestamp)).rows_affected
|
114
|
+
raise Purview::Exceptions::CouldNotInitialize.new(table) \
|
102
115
|
if zero?(rows_affected)
|
103
116
|
end
|
104
117
|
table_name
|
@@ -111,7 +124,7 @@ module Purview
|
|
111
124
|
with_new_connection do |connection|
|
112
125
|
rows_affected = \
|
113
126
|
connection.execute(lock_table_sql(table, timestamp)).rows_affected
|
114
|
-
raise Purview::Exceptions::
|
127
|
+
raise Purview::Exceptions::CouldNotLock.new(table) \
|
115
128
|
if zero?(rows_affected)
|
116
129
|
end
|
117
130
|
table_name
|
@@ -144,7 +157,7 @@ module Purview
|
|
144
157
|
with_new_connection do |connection|
|
145
158
|
rows_affected = \
|
146
159
|
connection.execute(unlock_table_sql(table)).rows_affected
|
147
|
-
raise Purview::Exceptions::
|
160
|
+
raise Purview::Exceptions::CouldNotUnlock.new(table) \
|
148
161
|
if zero?(rows_affected)
|
149
162
|
end
|
150
163
|
table_name
|
@@ -372,7 +385,7 @@ module Purview
|
|
372
385
|
def get_max_timestamp_pulled_for_table(connection, table)
|
373
386
|
row = connection.execute(get_max_timestamp_pulled_for_table_sql(table)).rows[0]
|
374
387
|
timestamp = row[table_metadata_max_timestamp_pulled_column_name]
|
375
|
-
timestamp ? Time.parse(timestamp) :
|
388
|
+
timestamp ? Time.parse(timestamp) : nil
|
376
389
|
end
|
377
390
|
|
378
391
|
def get_max_timestamp_pulled_for_table_sql(table)
|
@@ -386,6 +399,10 @@ module Purview
|
|
386
399
|
]
|
387
400
|
end
|
388
401
|
|
402
|
+
def initialize_table_sql(table, starting_timestamp)
|
403
|
+
raise %{All "#{Base}(s)" must override the "initialize_table_sql" method}
|
404
|
+
end
|
405
|
+
|
389
406
|
def limit(column)
|
390
407
|
return nil if limitless_types.include?(column.type)
|
391
408
|
column.limit || limit_map[column.type]
|
@@ -97,6 +97,17 @@ module Purview
|
|
97
97
|
]
|
98
98
|
end
|
99
99
|
|
100
|
+
def initialize_table_sql(table, starting_timestamp)
|
101
|
+
'UPDATE %s SET %s = %s WHERE %s = %s AND %s IS NULL' % [
|
102
|
+
table_metadata_table_name,
|
103
|
+
table_metadata_max_timestamp_pulled_column_name,
|
104
|
+
quoted(starting_timestamp),
|
105
|
+
table_metadata_table_name_column_name,
|
106
|
+
quoted(table.name),
|
107
|
+
table_metadata_max_timestamp_pulled_column_name,
|
108
|
+
]
|
109
|
+
end
|
110
|
+
|
100
111
|
def get_enabled_at_for_table_sql(table)
|
101
112
|
'SELECT %s FROM %s WHERE %s = %s' % [
|
102
113
|
table_metadata_enabled_at_column_name,
|
@@ -149,10 +160,11 @@ module Purview
|
|
149
160
|
end
|
150
161
|
|
151
162
|
def next_table_sql(timestamp)
|
152
|
-
'SELECT %s FROM %s WHERE %s IS NOT NULL AND %s IS NULL ORDER BY %s IS NULL DESC, %s LIMIT 1' % [
|
163
|
+
'SELECT %s FROM %s WHERE %s IS NOT NULL AND %s IS NOT NULL AND %s IS NULL ORDER BY %s IS NULL DESC, %s LIMIT 1' % [
|
153
164
|
table_metadata_table_name_column_name,
|
154
165
|
table_metadata_table_name,
|
155
166
|
table_metadata_enabled_at_column_name,
|
167
|
+
table_metadata_max_timestamp_pulled_column_name,
|
156
168
|
table_metadata_locked_at_column_name,
|
157
169
|
table_metadata_last_pulled_at_column_name,
|
158
170
|
table_metadata_last_pulled_at_column_name,
|
@@ -97,6 +97,17 @@ module Purview
|
|
97
97
|
]
|
98
98
|
end
|
99
99
|
|
100
|
+
def initialize_table_sql(table, starting_timestamp)
|
101
|
+
'UPDATE %s SET %s = %s WHERE %s = %s AND %s IS NULL' % [
|
102
|
+
table_metadata_table_name,
|
103
|
+
table_metadata_max_timestamp_pulled_column_name,
|
104
|
+
quoted(starting_timestamp),
|
105
|
+
table_metadata_table_name_column_name,
|
106
|
+
quoted(table.name),
|
107
|
+
table_metadata_max_timestamp_pulled_column_name,
|
108
|
+
]
|
109
|
+
end
|
110
|
+
|
100
111
|
def get_enabled_at_for_table_sql(table)
|
101
112
|
'SELECT %s FROM %s WHERE %s = %s' % [
|
102
113
|
table_metadata_enabled_at_column_name,
|
@@ -152,10 +163,11 @@ module Purview
|
|
152
163
|
end
|
153
164
|
|
154
165
|
def next_table_sql(timestamp)
|
155
|
-
'SELECT %s FROM %s WHERE %s IS NOT NULL AND %s IS NULL ORDER BY %s IS NULL DESC, %s LIMIT 1' % [
|
166
|
+
'SELECT %s FROM %s WHERE %s IS NOT NULL AND %s IS NOT NULL AND %s IS NULL ORDER BY %s IS NULL DESC, %s LIMIT 1' % [
|
156
167
|
table_metadata_table_name_column_name,
|
157
168
|
table_metadata_table_name,
|
158
169
|
table_metadata_enabled_at_column_name,
|
170
|
+
table_metadata_max_timestamp_pulled_column_name,
|
159
171
|
table_metadata_locked_at_column_name,
|
160
172
|
table_metadata_last_pulled_at_column_name,
|
161
173
|
table_metadata_last_pulled_at_column_name,
|
data/lib/purview/exceptions.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
require 'purview/exceptions/base'
|
2
2
|
require 'purview/exceptions/base_table'
|
3
3
|
|
4
|
-
require 'purview/exceptions/
|
4
|
+
require 'purview/exceptions/could_not_disable'
|
5
|
+
require 'purview/exceptions/could_not_enable'
|
6
|
+
require 'purview/exceptions/could_not_initialize'
|
7
|
+
require 'purview/exceptions/could_not_lock'
|
8
|
+
require 'purview/exceptions/could_not_unlock'
|
9
|
+
|
5
10
|
require 'purview/exceptions/database_already_assigned'
|
6
|
-
require 'purview/exceptions/lock_already_released'
|
7
11
|
require 'purview/exceptions/no_table'
|
8
12
|
require 'purview/exceptions/no_window'
|
9
13
|
require 'purview/exceptions/rows_outside_window'
|
data/lib/purview/tables/base.rb
CHANGED
data/lib/purview/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: purview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan W. Zaleski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -112,9 +112,12 @@ files:
|
|
112
112
|
- lib/purview/exceptions.rb
|
113
113
|
- lib/purview/exceptions/base.rb
|
114
114
|
- lib/purview/exceptions/base_table.rb
|
115
|
-
- lib/purview/exceptions/
|
115
|
+
- lib/purview/exceptions/could_not_disable.rb
|
116
|
+
- lib/purview/exceptions/could_not_enable.rb
|
117
|
+
- lib/purview/exceptions/could_not_initialize.rb
|
118
|
+
- lib/purview/exceptions/could_not_lock.rb
|
119
|
+
- lib/purview/exceptions/could_not_unlock.rb
|
116
120
|
- lib/purview/exceptions/database_already_assigned.rb
|
117
|
-
- lib/purview/exceptions/lock_already_released.rb
|
118
121
|
- lib/purview/exceptions/no_table.rb
|
119
122
|
- lib/purview/exceptions/no_window.rb
|
120
123
|
- lib/purview/exceptions/rows_outside_window.rb
|