'Wraps the .runInteraction() method on the underlying db_pool.'

@defer.inlineCallbacks
def runWithConnection(self, func, *args, **kwargs):

    current_context = LoggingContext.current_context()
    start_time = (time.time() * 1000)
    def inner_func(conn, *args, **kwargs):
        with LoggingContext('runWithConnection') as context:
            sql_scheduling_timer.inc_by(((time.time() * 1000) - start_time))
            if self.database_engine.is_connection_closed(conn):
                logger.debug('Reconnecting    closed    database    connection')
                conn.reconnect()
            current_context.copy_to(context)
            return func(conn, *args, **kwargs)
    with PreserveLoggingContext():
        result = (yield self._db_pool.runWithConnection(inner_func, *args, **kwargs))
    defer.returnValue(result)
