Skip to content

Commit ea1c447

Browse files
committed
Ensure EResourcesToSolr syncs deletions w/Redis
While testing the previous changes I realized that the EResourcesToSolr exporter was never configured to *delete* holdings from Redis--only to add them. This updates that exporter so that the `delete_records` method tracks record numbers for deleted eresources and `final_callback` removes them from Redis.
1 parent 44da781 commit ea1c447

2 files changed

Lines changed: 27 additions & 15 deletions

File tree

django/sierra/export/basic_exporters.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ def export_records(self, records):
207207
def delete_records(self, records):
208208
log_label = self.__class__.__name__
209209
index = self.index_class()
210+
deletions = []
210211
for i in records:
211212
try:
212213
index.remove_object('base.resourcerecord.{}'.format(str(i.id)),
@@ -216,25 +217,36 @@ def delete_records(self, records):
216217
logger.info(traceback.extract_tb(tb))
217218
self.log('Error', 'Record {}: {}'
218219
''.format(str(i), e), log_label)
220+
else:
221+
deletions.append(i.get_iii_recnum(True))
222+
223+
return { 'deletions': deletions }
219224

220225
def final_callback(self, vals=None, status='success'):
221226
self.log('Info', 'Committing updates to Solr and Redis...')
222227

223228
vals = vals or {}
224-
rev_handler = redisobjs.RedisObject('reverse_holdings_list', '0')
225-
reverse_holdings_list = rev_handler.get() or {}
226-
for er_rec_num, h_list in vals.get('h_lists', {}).iteritems():
227-
er_handler = redisobjs.RedisObject('eresource_holdings_list',
228-
er_rec_num)
229-
er_handler.set(h_list)
230-
231-
for h_rec_num in h_list:
232-
reverse_holdings_list[h_rec_num] = er_rec_num
233-
234-
#self.log('Info', 'Number of holdings in reverse_holdings_list: {}'
235-
# .format(len(reverse_holdings_list.keys())))
236-
237-
rev_handler.set(reverse_holdings_list)
229+
rhl_obj = redisobjs.RedisObject('reverse_holdings_list', '0')
230+
reverse_holdings = rhl_obj.get() or {}
231+
232+
# Update holdings for updated eresources
233+
for ernum, h_list in vals.get('h_lists', {}).items():
234+
redisobjs.RedisObject('eresource_holdings_list', ernum).set(h_list)
235+
for hrnum in h_list:
236+
reverse_holdings[hrnum] = ernum
237+
238+
# Delete holdings for deleted eresources
239+
deletions = vals.get('deletions', [])
240+
for ernum in deletions:
241+
ehl_obj = redisobjs.RedisObject('eresource_holdings_list', ernum)
242+
ehl_obj.conn.delete(ehl_obj.key)
243+
244+
if deletions:
245+
for hrnum, ernum in reverse_holdings.items():
246+
if ernum in deletions:
247+
del(reverse_holdings[hrnum])
248+
249+
rhl_obj.set(reverse_holdings)
238250

239251
index = self.index_class()
240252
index.commit(using=self.hs_conn)

django/sierra/export/tests/test_exporters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def test_exports_to_solr(etype_code, solr_exporter_test_params, new_exporter,
8585
del_results = {}
8686
if try_delete:
8787
del_exporter = new_exporter(etype_code, 'full_export', 'waiting')
88-
delete_records(del_exporter, record_set)
88+
delete_records(del_exporter, [r.record_metadata for r in record_set])
8989
del_results = {c: solr_search(conns[c], {'q': '*'}) for c in cores}
9090

9191
for core in cores:

0 commit comments

Comments
 (0)