-
Notifications
You must be signed in to change notification settings - Fork 128
Materialized views are not triggered in test env. #137
Copy link
Copy link
Open
Description
I have very cryptic one also.
In test env, using transactional_fixtures or not, materialized views never triggered. I don't see any connections with Rails.env and Clickhouse, but in dev i have my SummingMergeTree table filling with MV described with TO statement, but in test environment i have only first, MergeTree table been filling with records, but views seems to be dead. Clickhouse logs seems legit, no errors.
class CreateEntries < ActiveRecord::Migration[7.1]
def change
create_table 'entries', id: false, null: false,
options: 'MergeTree() PARTITION BY (partner_id, toYYYYMM(created_at)) ORDER BY (wallet_id, created_at)', force: :cascade do |t|
t.uuid 'id', default: -> { 'generateUUIDv4()' }, null: false
t.uuid 'partner_id', null: false
t.uuid 'wallet_id', null: false
t.uuid 'transaction_id', null: false
t.string 'desc', limit: 128
t.column 'available', 'Int32', null: false
t.column 'hold', 'Int32', null: false
t.column 'type', 'LowCardinality(String)', null: false
t.column 'created_at', 'DateTime64', default: -> { "CAST(now(), 'DateTime64')" }, null: false
end
end
end
class AddWalletsSummingMergeTree < ActiveRecord::Migration[7.1]
def change
create_table 'summing_entries', id: false, null: false, options: 'SummingMergeTree((available, hold)) ORDER BY wallet_id', force: :cascade do |t|
t.uuid 'partner_id', null: false
t.uuid 'wallet_id', null: false
t.column 'available', 'Int32', null: false
t.column 'hold', 'Int32', null: false
t.column 'created_at', 'DateTime64', null: false
end
end
end
class AddSummingEntriesView < ActiveRecord::Migration[7.1]
def up
execute <<~SQL.squish
CREATE MATERIALIZED VIEW IF NOT EXISTS summing_entries_mv TO summing_entries AS
SELECT
partner_id,
wallet_id,
available,
hold,
created_at
FROM entries
SQL
end
def down
drop_table 'summing_entries_mv' if table_exists? 'summing_entries_mv'
end
end
This is my migrations
This is how I insert records in test
module Wallets
class Entry < ClickHouseRecord
def self.batch_insert(entries)
insert_all(entries.map(&:attributes)) # rubocop:disable Rails/SkipsModelValidations
end
end
end
RSpec.describe Wallet, clickhouse: true do
let(:wallet) { create(:wallet, hold: 100, available: 100) }
before do
Wallets::Entry.batch_insert(
[
build(:entry, wallet:, available: 0, hold: 100, type: 'hold', desc: 'Hold'),
build(:entry, wallet:, available: 100, hold: 0, type: 'deposit', desc: 'Hold')
]
)
end
.....
This is hooks configuration that i use
RSpec.configure do |config|
config.before(:each, clickhouse: true) do
RSpec.configuration.use_transactional_fixtures = false
ClickHouseRecord.establish_connection(:clickhouse)
ClickHouseRecord.connection.execute('TRUNCATE TABLE entries')
ClickHouseRecord.connection.execute('TRUNCATE TABLE summing_entries')
ClickHouseRecord.connection.execute('TRUNCATE TABLE summing_entries_mv')
end
config.after(:each, clickhouse: true) do
RSpec.configuration.use_transactional_fixtures = true
ApplicationRecord.connection.reconnect!
end
end
I also tried to set .use_transactional_fixtures = false in base rspec config
Have you seen this before?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels