def assign_new_id(cls, xform): from corehq.sql_db.util import new_id_in_same_dbalias if xform.is_saved(): # avoid moving to a separate sharded db xform.form_id = new_id_in_same_dbalias(xform.form_id) else: xform.form_id = six.text_type(uuid.uuid4()) return xform
def test_same_dbalias_util(self): from corehq.sql_db.util import get_db_alias_for_partitioned_doc, new_id_in_same_dbalias for i in range(10): # test multiple times to test a wider probability f1_id = str(uuid4()) old_db_alias = get_db_alias_for_partitioned_doc(f1_id) f2_id = new_id_in_same_dbalias(f1_id) new_db_alias = get_db_alias_for_partitioned_doc(f2_id) self.assertEqual(new_db_alias, old_db_alias)
def test_same_dbalias_util(self): from corehq.sql_db.util import get_db_alias_for_partitioned_doc, new_id_in_same_dbalias for i in range(10): # test multiple times to test a wider probability f1_id = six.text_type(uuid4()) old_db_alias = get_db_alias_for_partitioned_doc(f1_id) f2_id = new_id_in_same_dbalias(f1_id) new_db_alias = get_db_alias_for_partitioned_doc(f2_id) self.assertEqual(new_db_alias, old_db_alias)
def test_reparent(self): metadb = self.db.metadb self.db.put(BytesIO(b"content"), meta=new_meta(parent_id="no-change")) metas = [] for name in "abc": meta = new_meta(parent_id="old", name=name) metas.append(self.db.put(BytesIO(b"content"), meta=meta)) a, b, c = metas new_parent = new_id_in_same_dbalias("old") metadb.reparent("old", new_parent) self.assertEqual(metadb.get_for_parent("old"), []) self.assertEqual( [m.id for m in metadb.get_for_parent(new_parent)], [m.id for m in metas], ) self.assertEqual(len(metadb.get_for_parent("no-change")), 1)
def undo_form_edits(form_tuples, logger): cases_to_rebuild = defaultdict(set) ledgers_to_rebuild = defaultdict(set) operation_date = datetime.utcnow() for live_form, deprecated_form in form_tuples: # undo corehq.form_processor.parsers.form.apply_deprecation case_cache = CaseDbCacheSQL(live_form.domain, load_src="undo_form_edits") live_case_updates = get_case_updates(live_form) deprecated_case_updates = get_case_updates(deprecated_form) case_cache.populate( set(cu.id for cu in live_case_updates) | set(cu.id for cu in deprecated_case_updates)) deprecated_form.form_id = new_id_in_same_dbalias( deprecated_form.form_id) deprecated_form.state = XFormInstanceSQL.NORMAL deprecated_form.orig_id = None deprecated_form.edited_on = None live_form.deprecated_form_id = None live_form.received_on = live_form.edited_on live_form.edited_on = None affected_cases, affected_ledgers = update_case_transactions_for_form( case_cache, live_case_updates, deprecated_case_updates, live_form, deprecated_form) for form in (live_form, deprecated_form): form.track_create( XFormOperationSQL(user_id='system', operation=XFormOperationSQL.UUID_DATA_FIX, date=operation_date)) FormAccessorSQL.update_form(form) logger.log('Form edit undone: {}, {}({})'.format( live_form.form_id, deprecated_form.form_id, deprecated_form.original_form_id)) cases_to_rebuild[live_form.domain].update(affected_cases) ledgers_to_rebuild[live_form.domain].update(affected_ledgers) logger.log('Cases to rebuild: {}'.format(','.join(affected_cases))) logger.log('Ledgers to rebuild: {}'.format(','.join( [l.as_id() for l in affected_ledgers]))) return cases_to_rebuild, ledgers_to_rebuild
def undo_form_edits(form_tuples, logger): cases_to_rebuild = defaultdict(set) ledgers_to_rebuild = defaultdict(set) operation_date = datetime.utcnow() for live_form, deprecated_form in form_tuples: # undo corehq.form_processor.parsers.form.apply_deprecation case_cache = CaseDbCacheSQL(live_form.domain) live_case_updates = get_case_updates(live_form) deprecated_case_updates = get_case_updates(deprecated_form) case_cache.populate( set(cu.id for cu in live_case_updates) | set(cu.id for cu in deprecated_case_updates) ) deprecated_form.form_id = new_id_in_same_dbalias(deprecated_form.form_id) deprecated_form.state = XFormInstanceSQL.NORMAL deprecated_form.orig_id = None deprecated_form.edited_on = None live_form.deprecated_form_id = None live_form.received_on = live_form.edited_on live_form.edited_on = None affected_cases, affected_ledgers = update_case_transactions_for_form( case_cache, live_case_updates, deprecated_case_updates, live_form, deprecated_form ) for form in (live_form, deprecated_form): form.track_create(XFormOperationSQL( user_id='system', operation=XFormOperationSQL.UUID_DATA_FIX, date=operation_date) ) FormAccessorSQL.update_form(form) logger.log('Form edit undone: {}, {}({})'.format( live_form.form_id, deprecated_form.form_id, deprecated_form.original_form_id )) cases_to_rebuild[live_form.domain].update(affected_cases) ledgers_to_rebuild[live_form.domain].update(affected_ledgers) logger.log('Cases to rebuild: {}'.format(','.join(affected_cases))) logger.log('Ledgers to rebuild: {}'.format(','.join([l.as_id() for l in affected_ledgers]))) return cases_to_rebuild, ledgers_to_rebuild
def undo_form_edits(forms): cases_to_rebuild = defaultdict(set) operation_date = datetime.utcnow() for form in forms: # undo corehq.form_processor.parsers.form.apply_deprecation if form.is_deprecated: form.form_id = new_id_in_same_dbalias(form.form_id) form.state = XFormInstanceSQL.NORMAL form.orig_id = None form.edited_on = None form.date = operation_date else: form.deprecated_form_id = None form.received_on = form.edited_on form.edited_on = None form.track_create( XFormOperationSQL(user_id='system', operation=XFormOperationSQL.UUID_DATA_FIX)) cases_to_rebuild[form.domain].update(get_case_ids_from_form(form)) form.save() return cases_to_rebuild
def assign_new_id(cls, xform): from corehq.sql_db.util import new_id_in_same_dbalias # avoid moving to a separate sharded db xform.form_id = new_id_in_same_dbalias(xform.form_id) return xform
def get_new_id(parent_id): if parent_id not in deprecated_ids: deprecated_ids[parent_id] = new_id_in_same_dbalias(parent_id) return deprecated_ids[parent_id]