Skip to content

Commit af9391d

Browse files
authored
Merge pull request #22056 from mvdbeek/fix_22035_fix_preferred_object_store_discovered_outputs
[25.1] Fix ``preferred_object_store_id`` not respected for discovered outputs with extended metadata
2 parents db64be2 + 2856476 commit af9391d

5 files changed

Lines changed: 48 additions & 1 deletion

File tree

lib/galaxy/job_execution/output_collect.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@
5656
)
5757

5858
if TYPE_CHECKING:
59-
from galaxy.model import LibraryFolder
59+
from galaxy.model import (
60+
Job,
61+
LibraryFolder,
62+
)
6063
from galaxy.model.store import (
6164
BaseDirectoryImportModelStore,
6265
DirectoryModelExportStore,
@@ -256,6 +259,7 @@ def __init__(
256259
working_directory: str,
257260
final_job_state: "JobState",
258261
max_discovered_files: Optional[int],
262+
job: Optional["Job"] = None,
259263
):
260264
# TODO: use a metadata source provider... (pop from inputs and add parameter)
261265
super().__init__(object_store, export_store, working_directory)
@@ -265,6 +269,11 @@ def __init__(
265269
self.final_job_state = final_job_state
266270
self.max_discovered_files = float("inf") if max_discovered_files is None else max_discovered_files
267271
self.discovered_file_count = 0
272+
self._job = job
273+
274+
@property
275+
def job(self):
276+
return self._job
268277

269278
@property
270279
def change_datatype_actions(self):

lib/galaxy/metadata/set_metadata.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ def set_meta(new_dataset_instance, file_dict):
318318
tool_job_working_directory / "working",
319319
final_job_state=final_job_state,
320320
max_discovered_files=max_discovered_files,
321+
job=job,
321322
)
322323

323324
if extended_metadata_collection:

lib/galaxy/model/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2173,6 +2173,9 @@ def _serialize(self, id_encoder, serialization_options):
21732173
job_attrs["create_time"] = self.create_time.isoformat()
21742174
job_attrs["update_time"] = self.update_time.isoformat()
21752175
job_attrs["job_messages"] = self.job_messages
2176+
job_attrs["object_store_id"] = self.object_store_id
2177+
if self.object_store_id_overrides:
2178+
job_attrs["object_store_id_overrides"] = self.object_store_id_overrides
21762179

21772180
# Get the job's parameters
21782181
param_dict = self.raw_param_dict()

lib/galaxy/model/store/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,6 +1661,8 @@ def _set_job_attributes(
16611661
"job_stdout",
16621662
"job_stderr",
16631663
"galaxy_version",
1664+
"object_store_id",
1665+
"object_store_id_overrides",
16641666
)
16651667
for attribute in ATTRIBUTES:
16661668
value = job_attrs.get(attribute)

test/integration/objectstore/test_selection_with_user_preferred_object_store.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,3 +494,35 @@ def _latest_dataset(self):
494494
select(Dataset).order_by(Dataset.table.c.id.desc()).limit(1)
495495
).first()
496496
return latest_dataset
497+
498+
499+
class TestObjectStoreSelectionWithExtendedMetadataIntegration(
500+
TestObjectStoreSelectionWithPreferredObjectStoresIntegration
501+
):
502+
@classmethod
503+
def handle_galaxy_config_kwds(cls, config):
504+
super().handle_galaxy_config_kwds(config)
505+
config["metadata_strategy"] = "extended"
506+
config["retry_metadata_internally"] = False
507+
508+
def test_objectstore_selection_dynamic_output_tools(self):
509+
with self.dataset_populator.test_history() as history_id:
510+
self._set_user_preferred_object_store_id("static")
511+
response = self.dataset_populator.run_tool(
512+
"collection_creates_dynamic_list_of_pairs",
513+
{"foo": "bar"},
514+
history_id,
515+
)
516+
self.dataset_populator.wait_for_job(response["jobs"][0]["id"], assert_ok=True)
517+
output_collections = response["output_collections"]
518+
assert len(output_collections) == 1
519+
hdca = self.dataset_populator.get_history_collection_details(
520+
history_id, content_id=output_collections[0]["id"]
521+
)
522+
# Check all leaf datasets in the collection use the preferred store
523+
for outer_element in hdca["elements"]:
524+
for inner_element in outer_element["object"]["elements"]:
525+
dataset = inner_element["object"]
526+
storage_dict = self._storage_info(dataset)
527+
assert_storage_name_is(storage_dict, "Static Storage")
528+
self._reset_user_preferred_object_store_id()

0 commit comments

Comments
 (0)