Skip to content

Commit 7b72f6c

Browse files
committed
batch proxy document index adds into slices of 100 (DLC-1151)
1 parent 6b22c40 commit 7b72f6c

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

lib/dcv/solr/document_adapter/active_fedora.rb

+8-5
Original file line numberDiff line numberDiff line change
@@ -198,16 +198,19 @@ def proxies
198198
end
199199
end
200200

201-
def index_proxies(params = {softCommit: true})
201+
def index_proxies(params = {softCommit: true}, conn = ::ActiveFedora::SolrService.instance.conn)
202202
if has_struct_metadata?
203-
conn = ::ActiveFedora::SolrService.instance.conn
204203
# delete by query proxyIn_ssi: internal_uri
205204
conn.delete_by_query("proxyIn_ssi:#{RSolr.solr_escape(obj.internal_uri())}")
206205

207206
# reindex proxies
208-
proxy_docs = proxies.collect {|p| p.to_solr}
209-
conn.add(proxy_docs, params: params)
210-
proxy_docs
207+
indexed_docs = []
208+
proxies.each_slice(100) do |slice|
209+
proxy_docs = slice.map(&:to_solr)
210+
conn.add(proxy_docs, params: params)
211+
indexed_docs.concat proxy_docs
212+
end
213+
indexed_docs
211214
else
212215
[]
213216
end

spec/unit/dcv/solr/document_adapter/active_fedora/collection_spec.rb

+15-1
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,24 @@
6969
end
7070
end
7171
describe '#proxies' do
72-
it "produces proxy objects that respod to :to_solr from structMetadata" do
72+
it "produces proxy objects that respond to :to_solr from structMetadata" do
7373
expect(adapter.proxies.length).to be 7
7474
expect(adapter.proxies.first).to respond_to(:to_solr)
7575
end
7676
end
77+
describe '#index_proxies' do
78+
let(:conn) { instance_double(RSolr::Client) }
79+
before do
80+
allow(conn).to receive(:add)
81+
end
82+
it "indexes proxy documents corresponding to structMetadata" do
83+
expect(conn).to receive(:delete_by_query)
84+
index_proxies = adapter.index_proxies({}, conn)
85+
expect(index_proxies.length).to be 7
86+
index_proxies.each do |proxy|
87+
expect(proxy.keys).to include("id", "label_ssi", "proxyFor_ssi", "proxyIn_ssi", "type_ssim")
88+
end
89+
end
90+
end
7791
end
7892
end

0 commit comments

Comments
 (0)