diff --git a/qiskit_experiments/database_service/db_experiment_data.py b/qiskit_experiments/database_service/db_experiment_data.py index 92b3f4eb7c..5b302798cb 100644 --- a/qiskit_experiments/database_service/db_experiment_data.py +++ b/qiskit_experiments/database_service/db_experiment_data.py @@ -343,16 +343,21 @@ def _add_single_data(self, data: Dict[str, any]) -> None: def _retrieve_data(self): """Retrieve job data if missing experiment data.""" # Get job results if missing experiment data. - if (not self._data) and self._provider: + if (not self._data) and self._backend: with self._jobs.lock: - for jid in self._jobs: - if self._jobs[jid] is None: + for jid, job in self._jobs.items(): + if job is None: try: - self._jobs[jid] = self._provider.retrieve_job(jid) + job = self._backend.retrieve_job(jid) + self._jobs[jid] = job except Exception: # pylint: disable=broad-except - pass - if self._jobs[jid] is not None: - self._add_result_data(self._jobs[jid].result()) + LOG.warning( + "Unable to retrive data from job %s on backend %s", + jid, + self._backend, + ) + if job is not None: + self._add_result_data(job.result()) def data(self, index: Optional[Union[int, slice, str]] = None) -> Union[Dict, List[Dict]]: """Return the experiment data at the specified index. diff --git a/qiskit_experiments/database_service/utils.py b/qiskit_experiments/database_service/utils.py index 0e72287507..c377cdcff9 100644 --- a/qiskit_experiments/database_service/utils.py +++ b/qiskit_experiments/database_service/utils.py @@ -178,6 +178,10 @@ def _init_container(self, init_values): """Initialize the container.""" pass + def __iter__(self): + with self._lock: + return iter(self._container) + def __getitem__(self, key): with self._lock: return self._container[key] diff --git a/releasenotes/notes/fix-retrieve-data-c93c8406ff4f2e7e.yaml b/releasenotes/notes/fix-retrieve-data-c93c8406ff4f2e7e.yaml new file mode 100644 index 0000000000..e144e391b1 --- /dev/null +++ b/releasenotes/notes/fix-retrieve-data-c93c8406ff4f2e7e.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixed bug in :class:`~qiskit_experiments.framework.ExperimentData` where + trying to load saved job data from a backend using + ``ExperimentData(backend=backend, job_ids=job_ids)`` resulted in an error.