Skip to content

Commit 39431e0

Browse files
committed
fix(reindex): support replica settings (#205)
1 parent e398152 commit 39431e0

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

algoliasearch_django/models.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,20 @@ def reindex_all(self, batch_size=1000):
394394
"""
395395
try:
396396
if self.settings:
397-
self.__tmp_index.set_settings(self.settings)
397+
replicas = self.settings.get('replicas', None)
398+
slaves = self.settings.get('slaves', None)
399+
400+
should_keep_replicas = replicas is not None
401+
should_keep_slaves = slaves is not None
402+
403+
if should_keep_replicas:
404+
self.settings['replicas'] = []
405+
logger.debug("REMOVE REPLICAS FROM SETTINGS")
406+
if should_keep_slaves:
407+
self.settings['slaves'] = []
408+
logger.debug("REMOVE SLAVES FROM SETTINGS")
409+
410+
self.__tmp_index.wait_task(self.__tmp_index.set_settings(self.settings)['taskID'])
398411
logger.debug('APPLY SETTINGS ON %s_tmp', self.index_name)
399412
self.__tmp_index.clear_index()
400413
logger.debug('CLEAR INDEX %s_tmp', self.index_name)
@@ -428,6 +441,16 @@ def reindex_all(self, batch_size=1000):
428441
self.__index.index_name)
429442
logger.info('MOVE INDEX %s_tmp TO %s', self.index_name,
430443
self.index_name)
444+
445+
if self.settings:
446+
if should_keep_replicas:
447+
self.settings['replicas'] = replicas
448+
logger.debug("RESTORE REPLICAS")
449+
if should_keep_slaves:
450+
self.settings['slaves'] = slaves
451+
logger.debug("RESTORE SLAVES")
452+
if should_keep_replicas or should_keep_slaves:
453+
self.__index.set_settings(self.settings)
431454
return counts
432455
except AlgoliaException as e:
433456
if DEBUG:

tests/test_index.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,18 @@ def test_index_name_settings(self):
5959
except AttributeError:
6060
self.assertRegexpMatches(index.index_name, regex)
6161

62+
def test_reindex_with_replicas(self):
63+
class WebsiteIndex(AlgoliaIndex):
64+
settings = {
65+
'replicas': [
66+
'django_contact_name_asc',
67+
'django_contact_name_desc'
68+
]
69+
}
70+
71+
index = WebsiteIndex(Website, self.client, settings.ALGOLIA)
72+
index.reindex_all()
73+
6274
def test_custom_objectID(self):
6375
class UserIndex(AlgoliaIndex):
6476
custom_objectID = 'username'

0 commit comments

Comments
 (0)