FATE-Flow icon indicating copy to clipboard operation
FATE-Flow copied to clipboard

query_job_list bug

Open Lost-Temple opened this issue 1 year ago • 1 comments

System information

  • Have I written custom code (no):
  • OS Platform and Distribution (Mac 14.2.1 (23C71) ):
  • FATE Flow version (v2.1.0):
  • Python version (use command: python --version):

Describe the current behavior 当数据库表 t_job 中有记录的 f_parties 字段的值有多种格式,而flow中只考虑了一种形式引起的。 我现在表中f_parties 的值如:["JG0100001100000010", "JG0100001100000000"],flow对应的代码解析时就会出错,造成query_job_list返回为空了。 问题代码:fate_flow/python/fate_flow/controller/job.py的 224行 具体代码:

    @classmethod
    def query_job_list(cls, limit, page, job_id, description, partner, party_id, role, status, order_by, order,
                       user_name):
        # Provided to the job display page
        offset = limit * (page - 1)
        query = {'tag': ('!=', 'submit_failed')}
        if job_id:
            query["job_id"] = ('contains', job_id)
        if description:
            query["description"] = ('contains', description)
        if party_id:
            query["party_id"] = ('contains', party_id)
        # if partner:
        #     query["parties"] = ('contains', partner)
        if role:
            query["role"] = ('in_', set(role))
        if status:
            query["status"] = ('in_', set(status))
        by = []
        if order_by:
            by.append(order_by)
        if order:
            by.append(order)
        if not by:
            by = ['create_time', 'desc']
        if user_name:
            query["user_name"] = ("==", user_name)
        jobs, count = JobSaver.list_job(limit, offset, query, by)
        jobs = [job.to_human_model_dict() for job in jobs]
        lst_job = []
        for job in jobs:
            job['partners'] = set()
            for _r in job['parties']:  # job['parties']返回的数据有可能为:[{"role": "local", "party_id": ["0"]}],也有可能为["JG0100001100000000"]
                if isinstance(_r, dict):
                    job['partners'].update(_r.get("party_id"))  # 原代码中没有经过类型判断,这里是有bug的
                elif isinstance(_r, str):
                    job['partners'].update(_r)
                else:
                    continue
            job['partners'].discard(job['party_id'])
            job['partners'] = sorted(job['partners'])
            if partner and str(partner) not in job['partners']:
                continue
            lst_job.append(job)
        return count, lst_job

Describe the expected behavior

Other info / logs Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.

  • fateflow/logs/$job_id/fate_flow_schedule.log: scheduling log for a job
  • fateflow/logs/$job_id/* : all logs for a job
  • fateflow/logs/fate_flow/fate_flow_stat.log: a log of server stat
  • fateflow/logs/fate_flow/fate_flow_schedule.log: the starting scheduling log for all jobs
  • fateflow/logs/fate_flow/fate_flow_detect.log: the starting detecting log for all jobs

Contributing

  • Do you want to contribute a PR? (yes/no):
  • Briefly describe your candidate solution(if contributing):

Lost-Temple avatar Mar 29 '24 02:03 Lost-Temple

感谢您的反馈,后续版本我们会跟进这个问题并优化

zhihuiwan avatar Jul 10 '24 04:07 zhihuiwan