diff -r daa71eaf11e8 -r 23df4a120c96 server/repository.py --- a/server/repository.py Thu Mar 04 17:51:19 2010 +0100 +++ b/server/repository.py Thu Mar 04 18:06:03 2010 +0100 @@ -71,27 +71,6 @@ pass -class FTIndexEntityOp(hook.LateOperation): - """operation to delay entity full text indexation to commit - - since fti indexing may trigger discovery of other entities, it should be - triggered on precommit, not commit, and this should be done after other - precommit operation which may add relations to the entity - """ - - def precommit_event(self): - session = self.session - entity = self.entity - if entity.eid in session.transaction_data.get('pendingeids', ()): - return # entity added and deleted in the same transaction - session.repo.system_source.fti_unindex_entity(session, entity.eid) - for container in entity.fti_containers(): - session.repo.index_entity(session, container) - - def commit_event(self): - pass - - def del_existing_rel_if_needed(session, eidfrom, rtype, eidto): """delete existing relation when adding a new one if card is 1 or ? @@ -133,6 +112,7 @@ if rset: safe_delete_relation(session, rschema, *rset[0]) + def safe_delete_relation(session, rschema, subject, object): if not rschema.has_perm(session, 'delete', fromeid=subject, toeid=object): raise Unauthorized() @@ -164,8 +144,6 @@ self.vreg.schema = self.schema # until actual schema is loaded... # querier helper, need to be created after sources initialization self.querier = querier.QuerierHelper(self, self.schema) - # should we reindex in changes? - self.do_fti = not config['delay-full-text-indexation'] # sources self.sources = [] self.sources_by_uri = {} @@ -778,7 +756,6 @@ # data sources handling ################################################### # * correspondance between eid and (type, source) # * correspondance between eid and local id (i.e. specific to a given source) - # * searchable text indexes def type_and_source_from_eid(self, eid, session=None): """return a tuple (type, source, extid) for the entity with id """ @@ -905,14 +882,9 @@ and index the entity with the full text index """ # begin by inserting eid/type/source/extid into the entities table - self.system_source.add_info(session, entity, source, extid) - if complete: - entity.complete(entity.e_schema.indexable_attributes()) new = session.transaction_data.setdefault('neweids', set()) new.add(entity.eid) - # now we can update the full text index - if self.do_fti: - FTIndexEntityOp(session, entity=entity) + self.system_source.add_info(session, entity, source, extid, complete) CleanupEidTypeCacheOp(session) def delete_info(self, session, eid): @@ -962,15 +934,6 @@ # he can delete all its relations without security checking session.unsafe_execute(rql, {'x': eid}, 'x', build_descr=False) - def index_entity(self, session, entity): - """full text index a modified entity""" - alreadydone = session.transaction_data.setdefault('indexedeids', set()) - if entity.eid in alreadydone: - self.debug('skipping reindexation of %s, already done', entity.eid) - return - alreadydone.add(entity.eid) - self.system_source.fti_index_entity(session, entity) - def locate_relation_source(self, session, subject, rtype, object): subjsource = self.source_from_eid(subject, session) objsource = self.source_from_eid(object, session) @@ -1106,14 +1069,10 @@ if not only_inline_rels: self.hm.call_hooks('before_update_entity', session, entity=entity) source.update_entity(session, entity) - if not only_inline_rels: - if need_fti_update and self.do_fti: - # reindex the entity only if this query is updating at least - # one indexable attribute - FTIndexEntityOp(session, entity=entity) - if source.should_call_hooks: + self.system_source.update_info(session, entity, need_fti_update) + if source.should_call_hooks: + if not only_inline_rels: self.hm.call_hooks('after_update_entity', session, entity=entity) - if source.should_call_hooks: for attr, value, prevvalue in relations: # if the relation is already cached, update existant cache relcache = entity.relation_cached(attr, 'subject')