Example #1
0
    def _do_recover(self, **kwargs):
        db_conn = self._create_db_conn()
        db_cursor = db_conn.cursor()

        # replay outstanding request if there are any
        statement = "SELECT req_id, request, req_time FROM flr_request WHERE site = '%s'" % self._site
        db_cursor.execute(statement)
        requests = db_cursor.fetchall()
        request_sender = FLRRequestSender()
        request_sender.set_message_callback(self._on_response_from_flrd)
        request_sender.set_request_done_callback(self._on_done)
        for req in requests:
            # the last app component status for this request
            statement = (
                "SELECT app_component, status, message FROM flr_app_status a, (SELECT site, appname, max(msg_time) msg_time FROM flr_app_status GROUP BY site, appname) b WHERE a.appname = 'flrd' AND a.appname = b.appname AND a.site = '%s' AND a.site = b.site AND a.req_id = %d and a.msg_time = b.msg_time"
                % (self._site, req[0])
            )
            db_cursor.execute(statement)
            last_app_status = db_cursor.fetchall()
            if last_app_status:
                self._do_recover_for(last_app_status[0][0], last_app_status[0][1], req, request_sender)
            else:
                self._do_recover_for("", 0, req, request_sender)

        db_cursor.close()
        db_conn.close()