846 cursor = LogCursor(session.cnxset[self.uri]) |
846 cursor = LogCursor(session.cnxset[self.uri]) |
847 self.dbhelper.drop_index(cursor, table, column, unique) |
847 self.dbhelper.drop_index(cursor, table, column, unique) |
848 |
848 |
849 # system source interface ################################################# |
849 # system source interface ################################################# |
850 |
850 |
|
851 def _eid_type_source(self, session, eid, sql, _retry=True): |
|
852 try: |
|
853 return self.doexec(session, sql).fetchone() |
|
854 except (self.OperationalError, self.InterfaceError): |
|
855 if session.mode == 'read' and _retry: |
|
856 self.warning("trying to reconnect (eid_type_source())") |
|
857 session.cnxset.reconnect(self) |
|
858 return self._eid_type_source(session, eid, sql, _retry=False) |
|
859 except Exception: |
|
860 assert session.cnxset, 'session has no connections set' |
|
861 self.exception('failed to query entities table for eid %s', eid) |
|
862 raise UnknownEid(eid) |
|
863 |
851 def eid_type_source(self, session, eid): |
864 def eid_type_source(self, session, eid): |
852 """return a tuple (type, source, extid) for the entity with id <eid>""" |
865 """return a tuple (type, source, extid) for the entity with id <eid>""" |
853 sql = 'SELECT type, source, extid, asource FROM entities WHERE eid=%s' % eid |
866 sql = 'SELECT type, source, extid, asource FROM entities WHERE eid=%s' % eid |
854 try: |
867 res = self._eid_type_source(session, eid, sql) |
855 res = self.doexec(session, sql).fetchone() |
|
856 except: |
|
857 assert session.cnxset, 'session has no connections set' |
|
858 raise UnknownEid(eid) |
|
859 if res is None: |
|
860 raise UnknownEid(eid) |
|
861 if res[-2] is not None: |
868 if res[-2] is not None: |
862 if not isinstance(res, list): |
869 if not isinstance(res, list): |
863 res = list(res) |
870 res = list(res) |
864 res[-2] = b64decode(res[-2]) |
871 res[-2] = b64decode(res[-2]) |
865 return res |
872 return res |
866 |
873 |
867 def eid_type_source_pre_131(self, session, eid): |
874 def eid_type_source_pre_131(self, session, eid): |
868 """return a tuple (type, source, extid) for the entity with id <eid>""" |
875 """return a tuple (type, source, extid) for the entity with id <eid>""" |
869 sql = 'SELECT type, source, extid FROM entities WHERE eid=%s' % eid |
876 sql = 'SELECT type, source, extid FROM entities WHERE eid=%s' % eid |
870 try: |
877 res = self._eid_type_source(session, eid, sql) |
871 res = self.doexec(session, sql).fetchone() |
|
872 except: |
|
873 assert session.cnxset, 'session has no connections set' |
|
874 raise UnknownEid(eid) |
|
875 if res is None: |
|
876 raise UnknownEid(eid) |
|
877 if not isinstance(res, list): |
878 if not isinstance(res, list): |
878 res = list(res) |
879 res = list(res) |
879 if res[-1] is not None: |
880 if res[-1] is not None: |
880 res[-1] = b64decode(res[-1]) |
881 res[-1] = b64decode(res[-1]) |
881 res.append(res[1]) |
882 res.append(res[1]) |