Skip to content

Commit 263c2a4

Browse files
committed
feat: optimise head matrix refresh when adding or deleting tags
Only delete and update the lines with a matching consumer and consumer version tag name
1 parent 52d587e commit 263c2a4

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

lib/pact_broker/matrix/head_row.rb

+20
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,26 @@ module Matrix
66
# Rows with a nil consumer_tag_name are the overall latest
77
class HeadRow < Row
88
set_dataset(:materialized_head_matrix)
9+
10+
dataset_module do
11+
include PactBroker::Repositories::Helpers
12+
include PactBroker::Logging
13+
14+
def refresh ids
15+
return super unless ids[:tag_name]
16+
17+
logger.debug("Refreshing #{model.table_name} for #{ids}")
18+
db = model.db
19+
table_name = model.table_name
20+
criteria = { consumer_id: ids[:pacticipant_id], consumer_version_tag_name: ids[:tag_name] }
21+
db.transaction do
22+
db[table_name].where(criteria).delete
23+
# Not sure if the distinct is necessary. Think I put it in as an attempt to fix the duplicate rows in the index but it didn't work.
24+
new_rows = db[source_view_name].where(criteria).distinct
25+
db[table_name].insert(new_rows)
26+
end
27+
end
28+
end
929
end
1030
end
1131
end

lib/pact_broker/matrix/repository.rb

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def find_ids_for_pacticipant_names params
6060
criteria[:pacticipant_id] = pacticipant.id if pacticipant
6161
end
6262

63+
criteria[:tag_name] = params[:tag_name] if params[:tag_name].is_a?(String) # Could be a sym from resource parameters in api.rb
6364
criteria
6465
end
6566

lib/pact_broker/matrix/row.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ def refresh ids
3232
db[table_name].insert(new_rows)
3333
end
3434
elsif ids.any?
35+
accepted_columns = [:consumer_id, :consumer_name, :provider_id, :provider_name]
36+
criteria = ids.reject{ |k, v| !accepted_columns.include?(k) }
3537
db.transaction do
36-
db[table_name].where(ids).delete
37-
db[table_name].insert(db[source_view_name].where(ids).distinct)
38+
db[table_name].where(criteria).delete
39+
db[table_name].insert(db[source_view_name].where(criteria).distinct)
3840
end
3941
end
4042
end

0 commit comments

Comments
 (0)