Skip to content

Commit

Permalink
Remove unnecessary cache logic from DataSource
Browse files Browse the repository at this point in the history
  • Loading branch information
hogelog committed Nov 4, 2018
1 parent f760b3b commit 66dbb19
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 40 deletions.
2 changes: 0 additions & 2 deletions app/batches/synchronize_data_sources.rb
Expand Up @@ -8,8 +8,6 @@ def self.run
end

def self.import_data_source!(data_source)
data_source.reset_data_source_tables!

db_memo = DatabaseMemo.find_or_create_by!(name: data_source.name)
schema_memos = db_memo.schema_memos.includes(table_memos: [:column_memos, :raw_dataset]).to_a
schema_memos.each {|memo| memo.linked = false }
Expand Down
38 changes: 3 additions & 35 deletions app/models/data_source.rb
Expand Up @@ -17,10 +17,6 @@ class AbstractTable < ApplicationRecord
class ConnectionBad < IOError
end

def self.data_source_tables_cache
@data_source_tables_cache ||= {}
end

def connection_config_password
password.present? ? password : nil
end
Expand Down Expand Up @@ -82,54 +78,26 @@ def source_table_names
raise ConnectionBad.new(e)
end

def cache_key_source_table_names
"data_source_source_table_names_#{id}"
end

def cached_source_table_names
key = cache_key_source_table_names
cache = Rails.cache.read(key)
return cache if cache
value = source_table_names
Rails.cache.write(key, value)
value
end

def data_source_table(schema_name, table_name, table_names=cached_source_table_names)
def data_source_table(schema_name, table_name, table_names)
return if ignored_table_patterns.match(table_name)
schema_name, _ = table_names.find {|schema, table| schema == schema_name && table == table_name }
return nil unless schema_name
full_table_name = "#{schema_name}.#{table_name}"
self.class.data_source_tables_cache[id] ||= {}
source_table = self.class.data_source_tables_cache[id][full_table_name]
return source_table if source_table
self.class.data_source_tables_cache[id][full_table_name] = DataSourceTable.new(self, schema_name, table_name)
DataSourceTable.new(self, schema_name, table_name)
rescue ActiveRecord::ActiveRecordError, Mysql2::Error, PG::Error => e
raise ConnectionBad.new(e)
end

def data_source_tables
table_names = cached_source_table_names
table_names = source_table_names
table_names.map do |schema_name, table_name|
data_source_table(schema_name, table_name, table_names)
end
end

def reset_data_source_tables!
Rails.cache.delete(cache_key_source_table_names)
self.class.data_source_tables_cache[id] = {}
base_class_name = source_base_class_name
DynamicTable.send(:remove_const, base_class_name) if DynamicTable.const_defined?(base_class_name)
end

def ignored_table_patterns
@ignored_table_patterns ||= Regexp.union(ignored_tables.pluck(:pattern).map {|pattern| Regexp.new(pattern, true) })
end

def disconnect_data_source!
source_base_class.establish_connection.disconnect!
end

def access_logging
Rails.logger.tagged("DataSource #{name}") { yield }
end
Expand Down
6 changes: 4 additions & 2 deletions spec/models/data_source_spec.rb
Expand Up @@ -11,8 +11,10 @@

describe "#data_source_table" do
it "return data source table" do
expect(data_source.data_source_table("public", "data_sources")).to be_present
expect(data_source.data_source_table("public", "data_sources").columns.map(&:name)).to match_array(%w(
table_names = data_source.source_table_names
ds_table = data_source.data_source_table("public", "data_sources", table_names)
expect(ds_table).to be_present
expect(ds_table.columns.map(&:name)).to match_array(%w(
id name description adapter host port dbname user password encoding pool created_at updated_at
))
end
Expand Down
5 changes: 4 additions & 1 deletion spec/rails_helper.rb
Expand Up @@ -53,7 +53,10 @@
end

config.after(:each) do
DataSource.all.each {|ds| ds.reset_data_source_tables! }
DataSource.all.each do |ds|
ds.source_base_class.establish_connection.disconnect!
DataSource::DynamicTable.send(:remove_const, ds.source_base_class_name)
end
DatabaseRewinder.clean
end
end
Expand Down

0 comments on commit 66dbb19

Please sign in to comment.