|
25 | 25 | from sqlalchemy import func |
26 | 26 | from sqlalchemy.exc import ( |
27 | 27 | InvalidRequestError, |
| 28 | + NoResultFound, |
28 | 29 | OperationalError, |
29 | 30 | PendingRollbackError, |
30 | 31 | SQLAlchemyError, |
@@ -353,7 +354,6 @@ def _release_2d_hold(message: dict, _db): |
353 | 354 | "nr_classes": default_spa_parameters.nr_classes_2d, |
354 | 355 | "do_icebreaker_jobs": default_spa_parameters.do_icebreaker_jobs, |
355 | 356 | "class2d_fraction_of_classes_to_remove": default_spa_parameters.fraction_of_classes_to_remove_2d, |
356 | | - "picker_id": feedback_params.picker_ispyb_id, |
357 | 357 | "class_uuids": _2d_class_murfey_ids( |
358 | 358 | first_class2d.particles_file, message["program_id"], _db |
359 | 359 | ), |
@@ -431,7 +431,6 @@ def _release_3d_hold(message: dict, _db): |
431 | 431 | "mask_diameter": relion_params.mask_diameter or 0, |
432 | 432 | "do_initial_model": False if feedback_params.initial_model else True, |
433 | 433 | "initial_model_file": feedback_params.initial_model, |
434 | | - "picker_id": feedback_params.picker_ispyb_id, |
435 | 434 | "class_uuids": _3d_class_murfey_ids( |
436 | 435 | class3d_params.particles_file, _app_id(pj_id, _db), _db |
437 | 436 | ), |
@@ -517,7 +516,6 @@ def _release_refine_hold(message: dict, _db): |
517 | 516 | "symmetry": relion_params.symmetry, |
518 | 517 | "node_creator_queue": machine_config.node_creator_queue, |
519 | 518 | "nr_iter": default_spa_parameters.nr_iter_3d, |
520 | | - "picker_id": feedback_params.picker_ispyb_id, |
521 | 519 | "refined_class_uuid": _refine_murfey_id( |
522 | 520 | refine_dir=refine_params.refine_dir, |
523 | 521 | tag=refine_params.tag, |
@@ -589,13 +587,6 @@ def _register_incomplete_2d_batch(message: dict, _db): |
589 | 587 | feedback_params.hold_class2d = True |
590 | 588 | relion_options = dict(relion_params) |
591 | 589 | other_options = dict(feedback_params) |
592 | | - if other_options["picker_ispyb_id"] is None: |
593 | | - logger.info("No ISPyB particle picker ID yet") |
594 | | - feedback_params.hold_class2d = False |
595 | | - _db.add(feedback_params) |
596 | | - _db.commit() |
597 | | - _db.expunge(feedback_params) |
598 | | - return |
599 | 590 | _db.add(feedback_params) |
600 | 591 | _db.commit() |
601 | 592 | _db.expunge(feedback_params) |
@@ -629,7 +620,6 @@ def _register_incomplete_2d_batch(message: dict, _db): |
629 | 620 | "batch_is_complete": False, |
630 | 621 | "particle_diameter": relion_options["particle_diameter"], |
631 | 622 | "combine_star_job_number": -1, |
632 | | - "picker_id": other_options["picker_ispyb_id"], |
633 | 623 | "nr_iter": default_spa_parameters.nr_iter_2d, |
634 | 624 | "batch_size": default_spa_parameters.batch_size_2d, |
635 | 625 | "nr_classes": default_spa_parameters.nr_classes_2d, |
@@ -693,7 +683,7 @@ def _register_complete_2d_batch(message: dict, _db): |
693 | 683 | ).one() |
694 | 684 | _db.expunge(relion_params) |
695 | 685 | _db.expunge(feedback_params) |
696 | | - if feedback_params.hold_class2d or feedback_params.picker_ispyb_id is None: |
| 686 | + if feedback_params.hold_class2d: |
697 | 687 | feedback_params.rerun_class2d = True |
698 | 688 | _db.add(feedback_params) |
699 | 689 | _db.commit() |
@@ -791,7 +781,6 @@ def _register_complete_2d_batch(message: dict, _db): |
791 | 781 | "mask_diameter": relion_params.mask_diameter or 0, |
792 | 782 | "combine_star_job_number": feedback_params.star_combination_job, |
793 | 783 | "autoselect_min_score": 0, |
794 | | - "picker_id": feedback_params.picker_ispyb_id, |
795 | 784 | "class_uuids": class_uuids, |
796 | 785 | "class2d_grp_uuid": class2d_grp_uuid, |
797 | 786 | "nr_iter": default_spa_parameters.nr_iter_2d, |
@@ -866,7 +855,6 @@ def _register_complete_2d_batch(message: dict, _db): |
866 | 855 | "mask_diameter": relion_params.mask_diameter or 0, |
867 | 856 | "combine_star_job_number": feedback_params.star_combination_job, |
868 | 857 | "autoselect_min_score": feedback_params.class_selection_score or 0, |
869 | | - "picker_id": feedback_params.picker_ispyb_id, |
870 | 858 | "class_uuids": class_uuids, |
871 | 859 | "class2d_grp_uuid": class2d_grp_uuid, |
872 | 860 | "nr_iter": default_spa_parameters.nr_iter_2d, |
@@ -957,7 +945,6 @@ def _flush_class2d( |
957 | 945 | "mask_diameter": relion_params.mask_diameter or 0, |
958 | 946 | "combine_star_job_number": feedback_params.star_combination_job, |
959 | 947 | "autoselect_min_score": feedback_params.class_selection_score or 0, |
960 | | - "picker_id": feedback_params.picker_ispyb_id, |
961 | 948 | "class_uuids": _2d_class_murfey_ids( |
962 | 949 | saved_message.particles_file, _app_id(pj_id, _db), _db |
963 | 950 | ), |
@@ -1007,16 +994,6 @@ def _register_class_selection(message: dict, _db): |
1007 | 994 | ).one() |
1008 | 995 | _db.expunge(feedback_params) |
1009 | 996 |
|
1010 | | - if feedback_params.picker_ispyb_id is None: |
1011 | | - selection_stash = db.SelectionStash( |
1012 | | - pj_id=pj_id, |
1013 | | - class_selection_score=message["class_selection_score"] or 0, |
1014 | | - ) |
1015 | | - _db.add(selection_stash) |
1016 | | - _db.commit() |
1017 | | - _db.close() |
1018 | | - return |
1019 | | - |
1020 | 997 | feedback_params.class_selection_score = message.get("class_selection_score") or 0 |
1021 | 998 | feedback_params.hold_class2d = False |
1022 | 999 | _flush_class2d( |
@@ -1284,7 +1261,6 @@ def _register_3d_batch(message: dict, _db): |
1284 | 1261 | "particle_diameter": relion_options["particle_diameter"], |
1285 | 1262 | "mask_diameter": relion_options["mask_diameter"] or 0, |
1286 | 1263 | "do_initial_model": True, |
1287 | | - "picker_id": other_options["picker_ispyb_id"], |
1288 | 1264 | "class_uuids": {i + 1: m for i, m in enumerate(class_uuids)}, |
1289 | 1265 | "class3d_grp_uuid": class3d_grp_uuid, |
1290 | 1266 | "nr_iter": default_spa_parameters.nr_iter_3d, |
@@ -1325,7 +1301,6 @@ def _register_3d_batch(message: dict, _db): |
1325 | 1301 | "mask_diameter": relion_options["mask_diameter"] or 0, |
1326 | 1302 | "do_initial_model": False, |
1327 | 1303 | "initial_model_file": other_options["initial_model"], |
1328 | | - "picker_id": other_options["picker_ispyb_id"], |
1329 | 1304 | "class_uuids": _3d_class_murfey_ids( |
1330 | 1305 | class3d_params.particles_file, _app_id(pj_id, _db), _db |
1331 | 1306 | ), |
@@ -1534,7 +1509,6 @@ def _register_refinement(message: dict, _db): |
1534 | 1509 | db.ClassificationFeedbackParameters.pj_id == pj_id_params |
1535 | 1510 | ) |
1536 | 1511 | ).one() |
1537 | | - other_options = dict(feedback_params) |
1538 | 1512 |
|
1539 | 1513 | if feedback_params.hold_refine: |
1540 | 1514 | # If waiting then save the message |
@@ -1626,7 +1600,6 @@ def _register_refinement(message: dict, _db): |
1626 | 1600 | "symmetry": relion_options["symmetry"], |
1627 | 1601 | "node_creator_queue": machine_config.node_creator_queue, |
1628 | 1602 | "nr_iter": default_spa_parameters.nr_iter_3d, |
1629 | | - "picker_id": other_options["picker_ispyb_id"], |
1630 | 1603 | "refined_class_uuid": _refine_murfey_id( |
1631 | 1604 | refine_dir=refine_params.refine_dir, |
1632 | 1605 | tag=refine_params.tag, |
@@ -1761,7 +1734,6 @@ def _register_bfactors(message: dict, _db): |
1761 | 1734 | "particle_diameter": relion_options["particle_diameter"], |
1762 | 1735 | "mask_diameter": relion_options["mask_diameter"] or 0, |
1763 | 1736 | "node_creator_queue": machine_config.node_creator_queue, |
1764 | | - "picker_id": feedback_params.picker_ispyb_id, |
1765 | 1737 | "refined_grp_uuid": bfactor_params.refined_grp_uuid, |
1766 | 1738 | "refined_class_uuid": bfactor_params.refined_class_uuid, |
1767 | 1739 | "session_id": message["session_id"], |
@@ -2189,6 +2161,12 @@ def feedback_callback(header: dict, message: dict, _db=murfey_db) -> None: |
2189 | 2161 | time.sleep(1) |
2190 | 2162 | if murfey.server._transport_object: |
2191 | 2163 | murfey.server._transport_object.transport.nack(header, requeue=True) |
| 2164 | + except NoResultFound: |
| 2165 | + # Missing rows might be due to a race condition and should be requeued |
| 2166 | + logger.warning("No matching database row was found", exc_info=True) |
| 2167 | + time.sleep(1) |
| 2168 | + if murfey.server._transport_object: |
| 2169 | + murfey.server._transport_object.transport.nack(header, requeue=True) |
2192 | 2170 | except Exception: |
2193 | 2171 | logger.warning( |
2194 | 2172 | "Exception encountered in server RabbitMQ callback", exc_info=True |
|
0 commit comments