def update_job_progress(self, job_id, progress, total_progress):
        """
        Update the job given by job_id's progress info.
        :type total_progress: int
        :type progress: int
        :type job_id: str
        :param job_id: The id of the job to update
        :param progress: The current progress achieved by the job
        :param total_progress: The total progress achievable by the job.
        :return: the job_id
        """

        session = self.sessionmaker()
        job, orm_job = self._update_job_state(
            job_id, state=State.RUNNING, session=session)

        # Note (aron): looks like SQLAlchemy doesn't automatically
        # save any pickletype fields even if we re-set (orm_job.obj = job) that
        # field. My hunch is that it's tracking the id of the object,
        # and if that doesn't change, then SQLAlchemy doesn't repickle the object
        # and save to the DB.
        # Our hack here is to just copy the job object, and then set thespecific
        # field we want to edit, in this case the job.state. That forces
        # SQLAlchemy to re-pickle the object, thus setting it to the correct state.

        job = copy(job)

        job.progress = progress
        job.total_progress = total_progress
        orm_job.obj = job

        session.add(orm_job)
        session.commit()
        session.close()
        return job_id
Update the job given by job_id's progress info.
        :type total_progress: int
        :type progress: int
        :type job_id: str
        :param job_id: The id of the job to update
        :param progress: The current progress achieved by the job
        :param total_progress: The total progress achievable by the job.
        :return: the job_id