def test_assume_alias(self): pillow = TestElasticPillow() doc_id = uuid.uuid4().hex doc = {'_id': doc_id, 'doc_type': 'CommCareCase', 'type': 'mother'} _send_doc_to_pillow(pillow, doc_id, doc) self.assertEqual(1, get_doc_count(self.es, self.index)) assume_alias_for_pillow(pillow) es_doc = self.es.get_source(pillow.es_alias, doc_id) for prop in doc: self.assertEqual(doc[prop], es_doc[prop])
def handle(self, *args, **options): if len(args) != 0: raise CommandError("This command doesn't expect arguments!") show_info = options['show_info'] list_pillows = options['list_pillows'] flip_all = options['flip_all'] flip_single = options['pillow_class'] code_red = options['code_red'] es = get_es() pillows = get_all_pillow_instances() aliased_pillows = filter(lambda x: isinstance(x, AliasedElasticPillow), pillows) if code_red: if raw_input('\n'.join([ 'CODE RED!!!', 'Really delete ALL the elastic indices and pillow checkpoints?', 'The following pillows will be affected:', '\n'.join([type(p).__name__ for p in aliased_pillows]), 'This is a PERMANENT action. (Type "code red" to continue):', '', ])).lower() == 'code red': for pillow in aliased_pillows: pillow.get_es_new().indices.delete(pillow.es_index) print 'deleted elastic index: {}'.format(pillow.es_index) checkpoint_id = pillow.checkpoint.checkpoint_id if pillow.couch_db.doc_exist(checkpoint_id): pillow.couch_db.delete_doc(checkpoint_id) print 'deleted checkpoint: {}'.format(checkpoint_id) else: print 'Safety first!' return if show_info: get_pillow_states(aliased_pillows).dump_info() if list_pillows: print aliased_pillows if flip_all: for pillow in aliased_pillows: assume_alias_for_pillow(pillow) print simplejson.dumps(es.get('_aliases'), indent=4) if flip_single is not None: pillow_class_name = flip_single pillow_to_use = filter(lambda x: x.__class__.__name__ == pillow_class_name, aliased_pillows) if len(pillow_to_use) != 1: print "Unknown pillow (option --pillow <name>) class string, the options are: \n\t%s" % ', '.join( [x.__class__.__name__ for x in aliased_pillows]) sys.exit() target_pillow = pillow_to_use[0] assume_alias_for_pillow(target_pillow) print es.get('_aliases')
def test_assume_alias_deletes_old_aliases(self): # create a different index and set the alias for it pillow = TestElasticPillow() new_index = 'test-index-with-duplicate-alias' if not self.es.indices.exists(new_index): self.es.indices.create(index=new_index) self.es.indices.put_alias(new_index, pillow.es_alias) # make sure it's there in the other index aliases = self.es.indices.get_aliases() self.assertEqual([pillow.es_alias], aliases[new_index]['aliases'].keys()) # assume alias and make sure it's removed (and added to the right index) assume_alias_for_pillow(pillow) aliases = self.es.indices.get_aliases() self.assertEqual(0, len(aliases[new_index]['aliases'])) self.assertEqual([pillow.es_alias], aliases[self.index]['aliases'].keys())