From 43cddb1293fce8999f54452138698cefc29eb99a Mon Sep 17 00:00:00 2001 From: prha <1040172+prha@users.noreply.github.com> Date: Tue, 21 Jan 2025 12:51:26 -0800 Subject: [PATCH] thread pool information to graphql layer (#26802) ## Summary & Motivation Adds a pools graphql field for ops and assets ## How I Tested These Changes BK --- .../ui-core/src/graphql/schema.graphql | 5 + .../packages/ui-core/src/graphql/types.ts | 10 + .../dagster_graphql/schema/asset_graph.py | 4 + .../dagster_graphql/schema/solids.py | 12 + .../__snapshots__/test_all_snapshot_ids.ambr | 934 ++++++++++++------ .../graphql/__snapshots__/test_assets.ambr | 52 + .../graphql/__snapshots__/test_solids.ambr | 80 ++ .../dagster_graphql_tests/graphql/repo.py | 35 + .../graphql/test_assets.py | 25 + 9 files changed, 840 insertions(+), 317 deletions(-) diff --git a/js_modules/dagster-ui/packages/ui-core/src/graphql/schema.graphql b/js_modules/dagster-ui/packages/ui-core/src/graphql/schema.graphql index 93e9387cfe4bc..17eb08bdcaa32 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/graphql/schema.graphql +++ b/js_modules/dagster-ui/packages/ui-core/src/graphql/schema.graphql @@ -670,6 +670,7 @@ type AssetNode { partitionDefinition: PartitionDefinition partitionKeys: [String!]! partitionKeysByDimension(startIdx: Int, endIdx: Int): [DimensionPartitionKeys!]! + pools: [String!]! repository: Repository! requiredResources: [ResourceRequirement!]! staleStatus(partition: String): StaleStatus @@ -3104,6 +3105,7 @@ type CompositeSolidDefinition implements ISolidDefinition & SolidContainer { inputDefinitions: [InputDefinition!]! outputDefinitions: [OutputDefinition!]! assetNodes: [AssetNode!]! + pools: [String!]! id: ID! solids: [Solid!]! solidHandle(handleID: String!): SolidHandle @@ -3139,6 +3141,7 @@ interface ISolidDefinition { inputDefinitions: [InputDefinition!]! outputDefinitions: [OutputDefinition!]! assetNodes: [AssetNode!]! + pools: [String!]! } type Output { @@ -3189,8 +3192,10 @@ type SolidDefinition implements ISolidDefinition { inputDefinitions: [InputDefinition!]! outputDefinitions: [OutputDefinition!]! assetNodes: [AssetNode!]! + pools: [String!]! configField: ConfigTypeField requiredResources: [ResourceRequirement!]! + pool: String } type SolidHandle { diff --git a/js_modules/dagster-ui/packages/ui-core/src/graphql/types.ts b/js_modules/dagster-ui/packages/ui-core/src/graphql/types.ts index 7992979ebfbb6..3834fb8da919b 100644 --- a/js_modules/dagster-ui/packages/ui-core/src/graphql/types.ts +++ b/js_modules/dagster-ui/packages/ui-core/src/graphql/types.ts @@ -482,6 +482,7 @@ export type AssetNode = { partitionKeys: Array; partitionKeysByDimension: Array; partitionStats: Maybe; + pools: Array; repository: Repository; requiredResources: Array; staleCauses: Array; @@ -824,6 +825,7 @@ export type CompositeSolidDefinition = ISolidDefinition & name: Scalars['String']['output']; outputDefinitions: Array; outputMappings: Array; + pools: Array; solidHandle: Maybe; solidHandles: Array; solids: Array; @@ -1839,6 +1841,7 @@ export type ISolidDefinition = { metadata: Array; name: Scalars['String']['output']; outputDefinitions: Array; + pools: Array; }; export type Input = { @@ -5200,6 +5203,8 @@ export type SolidDefinition = ISolidDefinition & { metadata: Array; name: Scalars['String']['output']; outputDefinitions: Array; + pool: Maybe; + pools: Array; requiredResources: Array; }; @@ -6734,6 +6739,7 @@ export const buildAssetNode = ( : relationshipsToOmit.has('PartitionStats') ? ({} as PartitionStats) : buildPartitionStats({}, relationshipsToOmit), + pools: overrides && overrides.hasOwnProperty('pools') ? overrides.pools! : [], repository: overrides && overrides.hasOwnProperty('repository') ? overrides.repository! @@ -7314,6 +7320,7 @@ export const buildCompositeSolidDefinition = ( : [], outputMappings: overrides && overrides.hasOwnProperty('outputMappings') ? overrides.outputMappings! : [], + pools: overrides && overrides.hasOwnProperty('pools') ? overrides.pools! : [], solidHandle: overrides && overrides.hasOwnProperty('solidHandle') ? overrides.solidHandle! @@ -8834,6 +8841,7 @@ export const buildISolidDefinition = ( overrides && overrides.hasOwnProperty('outputDefinitions') ? overrides.outputDefinitions! : [], + pools: overrides && overrides.hasOwnProperty('pools') ? overrides.pools! : [], }; }; @@ -14487,6 +14495,8 @@ export const buildSolidDefinition = ( overrides && overrides.hasOwnProperty('outputDefinitions') ? overrides.outputDefinitions! : [], + pool: overrides && overrides.hasOwnProperty('pool') ? overrides.pool! : 'voluptates', + pools: overrides && overrides.hasOwnProperty('pools') ? overrides.pools! : [], requiredResources: overrides && overrides.hasOwnProperty('requiredResources') ? overrides.requiredResources! diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/asset_graph.py b/python_modules/dagster-graphql/dagster_graphql/schema/asset_graph.py index cfc4ce3211052..c86c7107abffb 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/asset_graph.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/asset_graph.py @@ -287,6 +287,7 @@ class GrapheneAssetNode(graphene.ObjectType): startIdx=graphene.Int(), endIdx=graphene.Int(), ) + pools = non_null_list(graphene.String) repository = graphene.NonNull(lambda: external.GrapheneRepository) required_resources = non_null_list(GrapheneResourceRequirement) staleStatus = graphene.Field(GrapheneAssetStaleStatus, partition=graphene.String()) @@ -1215,6 +1216,9 @@ def resolve_partitionDefinition( return GraphenePartitionDefinition(partitions_snap) return None + def resolve_pools(self, _graphene_info: ResolveInfo) -> Sequence[str]: + return sorted([pool for pool in self._asset_node_snap.pools or set()]) + def resolve_repository(self, graphene_info: ResolveInfo) -> "GrapheneRepository": return external.GrapheneRepository(self._repository_handle) diff --git a/python_modules/dagster-graphql/dagster_graphql/schema/solids.py b/python_modules/dagster-graphql/dagster_graphql/schema/solids.py index 55ce65b0d5717..faa67b6d6a636 100644 --- a/python_modules/dagster-graphql/dagster_graphql/schema/solids.py +++ b/python_modules/dagster-graphql/dagster_graphql/schema/solids.py @@ -374,6 +374,7 @@ class GrapheneISolidDefinition(graphene.Interface): input_definitions = non_null_list(GrapheneInputDefinition) output_definitions = non_null_list(GrapheneOutputDefinition) assetNodes = non_null_list("dagster_graphql.schema.asset_graph.GrapheneAssetNode") + pools = non_null_list(graphene.String) class Meta: name = "ISolidDefinition" @@ -454,10 +455,18 @@ def resolve_assetNodes(self, graphene_info: ResolveInfo) -> Sequence["GrapheneAs for remote_node in remote_nodes ] + def resolve_pools(self, _graphene_info) -> Sequence[str]: + if isinstance(self._solid_def_snap, OpDefSnap): + return [self._solid_def_snap.pool] if self._solid_def_snap.pool else [] + if isinstance(self._solid_def_snap, GraphDefSnap): + return list(self._solid_def_snap.pools) + return [] + class GrapheneSolidDefinition(graphene.ObjectType, ISolidDefinitionMixin): config_field = graphene.Field(GrapheneConfigTypeField) required_resources = non_null_list(GrapheneResourceRequirement) + pool = graphene.String() class Meta: interfaces = (GrapheneISolidDefinition,) @@ -491,6 +500,9 @@ def resolve_required_resources( GrapheneResourceRequirement(key) for key in self._solid_def_snap.required_resource_keys ] + def resolve_pool(self, _graphene_info: ResolveInfo) -> Optional[str]: + return self._solid_def_snap.pool + class GrapheneSolidStepStatsUnavailableError(graphene.ObjectType): class Meta: diff --git a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_all_snapshot_ids.ambr b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_all_snapshot_ids.ambr index 91323bcee7ec0..1d5439d6dcaf2 100644 --- a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_all_snapshot_ids.ambr +++ b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_all_snapshot_ids.ambr @@ -489,7 +489,364 @@ "scalar_kind": null, "type_param_keys": null }, - "Shape.2923e2efed8c6ae4999833e86ce030061009998f": { + "Shape.2db9cd385a1c02ba97b38cd51002d65fef8593f2": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{\"config\": {\"retries\": {\"enabled\": {}}}}", + "description": "Configure how steps are executed within a run.", + "is_required": false, + "name": "execution", + "type_key": "Shape.09d73f0755bf4752d3f121837669c8660dcf451e" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": "Configure how loggers emit messages within a run.", + "is_required": false, + "name": "loggers", + "type_key": "Shape.e895d95ee6d0eff1b884c76f44a2ab7089f0c49b" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{\"asset_1\": {}, \"asset_1_my_check\": {}, \"asset_2\": {}, \"asset_3\": {}, \"asset_one\": {}, \"asset_two\": {}, \"asset_with_automation_condition\": {}, \"asset_with_compute_storage_kinds\": {\"config\": {}}, \"asset_with_custom_automation_condition\": {}, \"asset_yields_observation\": {}, \"bar\": {}, \"baz\": {}, \"check_in_op_asset\": {}, \"concurrency_asset\": {}, \"concurrency_graph_asset\": {\"ops\": {\"concurrency_op_1\": {}, \"concurrency_op_2\": {}}}, \"concurrency_multi_asset\": {\"config\": {}}, \"downstream_asset\": {}, \"downstream_dynamic_partitioned_asset\": {}, \"downstream_static_partitioned_asset\": {}, \"downstream_time_partitioned_asset\": {}, \"downstream_weekly_partitioned_asset\": {}, \"dynamic_in_multipartitions_fail\": {}, \"dynamic_in_multipartitions_success\": {}, \"executable_asset\": {}, \"fail_partition_materialization\": {}, \"first_asset\": {}, \"foo\": {}, \"foo_bar\": {}, \"fresh_diamond_bottom\": {}, \"fresh_diamond_left\": {}, \"fresh_diamond_right\": {}, \"fresh_diamond_top\": {}, \"grouped_asset_1\": {}, \"grouped_asset_2\": {}, \"grouped_asset_4\": {}, \"hanging_asset\": {}, \"hanging_graph\": {\"ops\": {\"hanging_op\": {}, \"my_op\": {}, \"never_runs_op\": {}}}, \"hanging_partition_asset\": {}, \"integers_asset\": {}, \"middle_static_partitioned_asset_1\": {}, \"middle_static_partitioned_asset_2\": {}, \"multi_asset_with_kinds\": {\"config\": {}}, \"multi_run_backfill_policy_asset\": {}, \"multipartitions_1\": {}, \"multipartitions_2\": {}, \"multipartitions_fail\": {}, \"never_runs_asset\": {}, \"no_multipartitions_1\": {}, \"not_included_asset\": {}, \"output_then_hang_asset\": {}, \"single_run_backfill_policy_asset\": {}, \"subsettable_checked_multi_asset\": {\"config\": {}}, \"typed_asset\": {}, \"typed_multi_asset\": {\"config\": {}}, \"unconnected\": {}, \"ungrouped_asset_3\": {}, \"ungrouped_asset_5\": {}, \"unpartitioned_upstream_of_partitioned\": {}, \"untyped_asset\": {}, \"upstream_daily_partitioned_asset\": {}, \"upstream_dynamic_partitioned_asset\": {}, \"upstream_static_partitioned_asset\": {}, \"upstream_time_partitioned_asset\": {}, \"yield_partition_materialization\": {}}", + "description": "Configure runtime parameters for ops or assets.", + "is_required": false, + "name": "ops", + "type_key": "Shape.c71ef76e3de43bf6c3f361fbe08a4075e718a568" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": "Configure how shared resources are implemented within a run.", + "is_required": true, + "name": "resources", + "type_key": "Shape.7493b137e48f8d4b013bce61e92617ff1bc51f7f" + } + ], + "given_name": null, + "key": "Shape.2db9cd385a1c02ba97b38cd51002d65fef8593f2", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.31ebade63b77a8095e9f78414e75445567b90463": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "concurrency_op_1", + "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "concurrency_op_2", + "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" + } + ], + "given_name": null, + "key": "Shape.31ebade63b77a8095e9f78414e75445567b90463", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.35d3e42b53e66506c5867f04644849cd03763bc6": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{\"hanging_op\": {}, \"my_op\": {}, \"never_runs_op\": {}}", + "description": null, + "is_required": false, + "name": "ops", + "type_key": "Shape.811a60b4c43530c3d6100304f377dbd2d3045291" + } + ], + "given_name": null, + "key": "Shape.35d3e42b53e66506c5867f04644849cd03763bc6", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.44f24ac55059da1634e84af6c1bf7e0ed332251c": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": "[DEPRECATED]", + "is_required": false, + "name": "marker_to_close", + "type_key": "String" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{\"enabled\": {}}", + "description": "Whether retries are enabled or not. By default, retries are enabled.", + "is_required": false, + "name": "retries", + "type_key": "Selector.1bfb167aea90780aa679597800c71bd8c65ed0b2" + } + ], + "given_name": null, + "key": "Shape.44f24ac55059da1634e84af6c1bf7e0ed332251c", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.44f2a71367507edd1b8e64f739222c4312b3691b": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "config", + "type_key": "Shape.18b2faaf1efd505374f7f25fcb61ed59bd5be851" + } + ], + "given_name": null, + "key": "Shape.44f2a71367507edd1b8e64f739222c4312b3691b", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.4b53b73df342381d0d05c5f36183dc99cb9676e2": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": null, + "is_required": true, + "name": "path", + "type_key": "String" + } + ], + "given_name": null, + "key": "Shape.4b53b73df342381d0d05c5f36183dc99cb9676e2", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.62edccaf30696e25335ae92685bdc41e204e30e6": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "config", + "type_key": "Shape.da39a3ee5e6b4b0d3255bfef95601890afd80709" + } + ], + "given_name": null, + "key": "Shape.62edccaf30696e25335ae92685bdc41e204e30e6", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.743e47901855cb245064dd633e217bfcb49a11a7": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": null, + "is_required": false, + "name": "config", + "type_key": "Any" + } + ], + "given_name": null, + "key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.7493b137e48f8d4b013bce61e92617ff1bc51f7f": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "dummy_io_manager", + "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": null, + "is_required": true, + "name": "hanging_asset_resource", + "type_key": "Shape.b13a6c5637084590cc1538f9522324bfeb4b46b3" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{\"config\": {}}", + "description": "Built-in filesystem IO manager that stores and retrieves values using pickling.", + "is_required": false, + "name": "io_manager", + "type_key": "Shape.44f2a71367507edd1b8e64f739222c4312b3691b" + } + ], + "given_name": null, + "key": "Shape.7493b137e48f8d4b013bce61e92617ff1bc51f7f", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.811a60b4c43530c3d6100304f377dbd2d3045291": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "hanging_op", + "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "my_op", + "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "never_runs_op", + "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" + } + ], + "given_name": null, + "key": "Shape.811a60b4c43530c3d6100304f377dbd2d3045291", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.9a3a315bff2146cca750edbec49c6b4b4d0ce58e": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": null, + "is_required": true, + "name": "file", + "type_key": "String" + } + ], + "given_name": null, + "key": "Shape.9a3a315bff2146cca750edbec49c6b4b4d0ce58e", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.b13a6c5637084590cc1538f9522324bfeb4b46b3": { + "__class__": "ConfigTypeSnap", + "description": null, + "enum_values": null, + "fields": [ + { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": null, + "is_required": true, + "name": "config", + "type_key": "Shape.9a3a315bff2146cca750edbec49c6b4b4d0ce58e" + } + ], + "given_name": null, + "key": "Shape.b13a6c5637084590cc1538f9522324bfeb4b46b3", + "kind": { + "__enum__": "ConfigTypeKind.STRICT_SHAPE" + }, + "scalar_kind": null, + "type_param_keys": null + }, + "Shape.c71ef76e3de43bf6c3f361fbe08a4075e718a568": { "__class__": "ConfigTypeSnap", "description": null, "enum_values": null, @@ -611,6 +968,33 @@ "name": "check_in_op_asset", "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "concurrency_asset", + "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{\"ops\": {\"concurrency_op_1\": {}, \"concurrency_op_2\": {}}}", + "description": null, + "is_required": false, + "name": "concurrency_graph_asset", + "type_key": "Shape.fd8c16292fa02a225e66a5c404ad8b4f5b0924e5" + }, + { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{\"config\": {}}", + "description": null, + "is_required": false, + "name": "concurrency_multi_asset", + "type_key": "Shape.62edccaf30696e25335ae92685bdc41e204e30e6" + }, { "__class__": "ConfigFieldSnap", "default_provided": true, @@ -1045,37 +1429,27 @@ } ], "given_name": null, - "key": "Shape.2923e2efed8c6ae4999833e86ce030061009998f", + "key": "Shape.c71ef76e3de43bf6c3f361fbe08a4075e718a568", "kind": { "__enum__": "ConfigTypeKind.STRICT_SHAPE" }, "scalar_kind": null, "type_param_keys": null }, - "Shape.35d3e42b53e66506c5867f04644849cd03763bc6": { + "Shape.da39a3ee5e6b4b0d3255bfef95601890afd80709": { "__class__": "ConfigTypeSnap", "description": null, "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{\"hanging_op\": {}, \"my_op\": {}, \"never_runs_op\": {}}", - "description": null, - "is_required": false, - "name": "ops", - "type_key": "Shape.811a60b4c43530c3d6100304f377dbd2d3045291" - } - ], + "fields": [], "given_name": null, - "key": "Shape.35d3e42b53e66506c5867f04644849cd03763bc6", + "key": "Shape.da39a3ee5e6b4b0d3255bfef95601890afd80709", "kind": { "__enum__": "ConfigTypeKind.STRICT_SHAPE" }, "scalar_kind": null, "type_param_keys": null }, - "Shape.44f24ac55059da1634e84af6c1bf7e0ed332251c": { + "Shape.e895d95ee6d0eff1b884c76f44a2ab7089f0c49b": { "__class__": "ConfigTypeSnap", "description": null, "enum_values": null, @@ -1084,76 +1458,21 @@ "__class__": "ConfigFieldSnap", "default_provided": false, "default_value_as_json_str": null, - "description": "[DEPRECATED]", - "is_required": false, - "name": "marker_to_close", - "type_key": "String" - }, - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{\"enabled\": {}}", - "description": "Whether retries are enabled or not. By default, retries are enabled.", - "is_required": false, - "name": "retries", - "type_key": "Selector.1bfb167aea90780aa679597800c71bd8c65ed0b2" - } - ], - "given_name": null, - "key": "Shape.44f24ac55059da1634e84af6c1bf7e0ed332251c", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.44f2a71367507edd1b8e64f739222c4312b3691b": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{}", "description": null, "is_required": false, - "name": "config", - "type_key": "Shape.18b2faaf1efd505374f7f25fcb61ed59bd5be851" - } - ], - "given_name": null, - "key": "Shape.44f2a71367507edd1b8e64f739222c4312b3691b", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.4b53b73df342381d0d05c5f36183dc99cb9676e2": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": false, - "default_value_as_json_str": null, - "description": null, - "is_required": true, - "name": "path", - "type_key": "String" + "name": "console", + "type_key": "Shape.0fe8353d6b542accfad9becbdbaeb92f649ebb9a" } ], "given_name": null, - "key": "Shape.4b53b73df342381d0d05c5f36183dc99cb9676e2", + "key": "Shape.e895d95ee6d0eff1b884c76f44a2ab7089f0c49b", "kind": { "__enum__": "ConfigTypeKind.STRICT_SHAPE" }, "scalar_kind": null, "type_param_keys": null }, - "Shape.62edccaf30696e25335ae92685bdc41e204e30e6": { + "Shape.fd8c16292fa02a225e66a5c404ad8b4f5b0924e5": { "__class__": "ConfigTypeSnap", "description": null, "enum_values": null, @@ -1161,252 +1480,15 @@ { "__class__": "ConfigFieldSnap", "default_provided": true, - "default_value_as_json_str": "{}", + "default_value_as_json_str": "{\"concurrency_op_1\": {}, \"concurrency_op_2\": {}}", "description": null, "is_required": false, - "name": "config", - "type_key": "Shape.da39a3ee5e6b4b0d3255bfef95601890afd80709" - } - ], - "given_name": null, - "key": "Shape.62edccaf30696e25335ae92685bdc41e204e30e6", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.6c71186a8f3069ee444291a42734fb8144db65fe": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{\"config\": {\"retries\": {\"enabled\": {}}}}", - "description": "Configure how steps are executed within a run.", - "is_required": false, - "name": "execution", - "type_key": "Shape.09d73f0755bf4752d3f121837669c8660dcf451e" - }, - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{}", - "description": "Configure how loggers emit messages within a run.", - "is_required": false, - "name": "loggers", - "type_key": "Shape.e895d95ee6d0eff1b884c76f44a2ab7089f0c49b" - }, - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{\"asset_1\": {}, \"asset_1_my_check\": {}, \"asset_2\": {}, \"asset_3\": {}, \"asset_one\": {}, \"asset_two\": {}, \"asset_with_automation_condition\": {}, \"asset_with_compute_storage_kinds\": {\"config\": {}}, \"asset_with_custom_automation_condition\": {}, \"asset_yields_observation\": {}, \"bar\": {}, \"baz\": {}, \"check_in_op_asset\": {}, \"downstream_asset\": {}, \"downstream_dynamic_partitioned_asset\": {}, \"downstream_static_partitioned_asset\": {}, \"downstream_time_partitioned_asset\": {}, \"downstream_weekly_partitioned_asset\": {}, \"dynamic_in_multipartitions_fail\": {}, \"dynamic_in_multipartitions_success\": {}, \"executable_asset\": {}, \"fail_partition_materialization\": {}, \"first_asset\": {}, \"foo\": {}, \"foo_bar\": {}, \"fresh_diamond_bottom\": {}, \"fresh_diamond_left\": {}, \"fresh_diamond_right\": {}, \"fresh_diamond_top\": {}, \"grouped_asset_1\": {}, \"grouped_asset_2\": {}, \"grouped_asset_4\": {}, \"hanging_asset\": {}, \"hanging_graph\": {\"ops\": {\"hanging_op\": {}, \"my_op\": {}, \"never_runs_op\": {}}}, \"hanging_partition_asset\": {}, \"integers_asset\": {}, \"middle_static_partitioned_asset_1\": {}, \"middle_static_partitioned_asset_2\": {}, \"multi_asset_with_kinds\": {\"config\": {}}, \"multi_run_backfill_policy_asset\": {}, \"multipartitions_1\": {}, \"multipartitions_2\": {}, \"multipartitions_fail\": {}, \"never_runs_asset\": {}, \"no_multipartitions_1\": {}, \"not_included_asset\": {}, \"output_then_hang_asset\": {}, \"single_run_backfill_policy_asset\": {}, \"subsettable_checked_multi_asset\": {\"config\": {}}, \"typed_asset\": {}, \"typed_multi_asset\": {\"config\": {}}, \"unconnected\": {}, \"ungrouped_asset_3\": {}, \"ungrouped_asset_5\": {}, \"unpartitioned_upstream_of_partitioned\": {}, \"untyped_asset\": {}, \"upstream_daily_partitioned_asset\": {}, \"upstream_dynamic_partitioned_asset\": {}, \"upstream_static_partitioned_asset\": {}, \"upstream_time_partitioned_asset\": {}, \"yield_partition_materialization\": {}}", - "description": "Configure runtime parameters for ops or assets.", - "is_required": false, "name": "ops", - "type_key": "Shape.2923e2efed8c6ae4999833e86ce030061009998f" - }, - { - "__class__": "ConfigFieldSnap", - "default_provided": false, - "default_value_as_json_str": null, - "description": "Configure how shared resources are implemented within a run.", - "is_required": true, - "name": "resources", - "type_key": "Shape.7493b137e48f8d4b013bce61e92617ff1bc51f7f" - } - ], - "given_name": null, - "key": "Shape.6c71186a8f3069ee444291a42734fb8144db65fe", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.743e47901855cb245064dd633e217bfcb49a11a7": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": false, - "default_value_as_json_str": null, - "description": null, - "is_required": false, - "name": "config", - "type_key": "Any" - } - ], - "given_name": null, - "key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.7493b137e48f8d4b013bce61e92617ff1bc51f7f": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{}", - "description": null, - "is_required": false, - "name": "dummy_io_manager", - "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" - }, - { - "__class__": "ConfigFieldSnap", - "default_provided": false, - "default_value_as_json_str": null, - "description": null, - "is_required": true, - "name": "hanging_asset_resource", - "type_key": "Shape.b13a6c5637084590cc1538f9522324bfeb4b46b3" - }, - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{\"config\": {}}", - "description": "Built-in filesystem IO manager that stores and retrieves values using pickling.", - "is_required": false, - "name": "io_manager", - "type_key": "Shape.44f2a71367507edd1b8e64f739222c4312b3691b" - } - ], - "given_name": null, - "key": "Shape.7493b137e48f8d4b013bce61e92617ff1bc51f7f", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.811a60b4c43530c3d6100304f377dbd2d3045291": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{}", - "description": null, - "is_required": false, - "name": "hanging_op", - "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" - }, - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{}", - "description": null, - "is_required": false, - "name": "my_op", - "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" - }, - { - "__class__": "ConfigFieldSnap", - "default_provided": true, - "default_value_as_json_str": "{}", - "description": null, - "is_required": false, - "name": "never_runs_op", - "type_key": "Shape.743e47901855cb245064dd633e217bfcb49a11a7" - } - ], - "given_name": null, - "key": "Shape.811a60b4c43530c3d6100304f377dbd2d3045291", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.9a3a315bff2146cca750edbec49c6b4b4d0ce58e": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": false, - "default_value_as_json_str": null, - "description": null, - "is_required": true, - "name": "file", - "type_key": "String" - } - ], - "given_name": null, - "key": "Shape.9a3a315bff2146cca750edbec49c6b4b4d0ce58e", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.b13a6c5637084590cc1538f9522324bfeb4b46b3": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": false, - "default_value_as_json_str": null, - "description": null, - "is_required": true, - "name": "config", - "type_key": "Shape.9a3a315bff2146cca750edbec49c6b4b4d0ce58e" - } - ], - "given_name": null, - "key": "Shape.b13a6c5637084590cc1538f9522324bfeb4b46b3", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.da39a3ee5e6b4b0d3255bfef95601890afd80709": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [], - "given_name": null, - "key": "Shape.da39a3ee5e6b4b0d3255bfef95601890afd80709", - "kind": { - "__enum__": "ConfigTypeKind.STRICT_SHAPE" - }, - "scalar_kind": null, - "type_param_keys": null - }, - "Shape.e895d95ee6d0eff1b884c76f44a2ab7089f0c49b": { - "__class__": "ConfigTypeSnap", - "description": null, - "enum_values": null, - "fields": [ - { - "__class__": "ConfigFieldSnap", - "default_provided": false, - "default_value_as_json_str": null, - "description": null, - "is_required": false, - "name": "console", - "type_key": "Shape.0fe8353d6b542accfad9becbdbaeb92f649ebb9a" + "type_key": "Shape.31ebade63b77a8095e9f78414e75445567b90463" } ], "given_name": null, - "key": "Shape.e895d95ee6d0eff1b884c76f44a2ab7089f0c49b", + "key": "Shape.fd8c16292fa02a225e66a5c404ad8b4f5b0924e5", "kind": { "__enum__": "ConfigTypeKind.STRICT_SHAPE" }, @@ -1726,6 +1808,30 @@ "solid_name": "check_in_op_asset", "tags": {} }, + { + "__class__": "SolidInvocationSnap", + "input_dep_snaps": [], + "is_dynamic_mapped": false, + "solid_def_name": "concurrency_asset", + "solid_name": "concurrency_asset", + "tags": {} + }, + { + "__class__": "SolidInvocationSnap", + "input_dep_snaps": [], + "is_dynamic_mapped": false, + "solid_def_name": "concurrency_graph_asset", + "solid_name": "concurrency_graph_asset", + "tags": {} + }, + { + "__class__": "SolidInvocationSnap", + "input_dep_snaps": [], + "is_dynamic_mapped": false, + "solid_def_name": "concurrency_multi_asset", + "solid_name": "concurrency_multi_asset", + "tags": {} + }, { "__class__": "SolidInvocationSnap", "input_dep_snaps": [ @@ -2484,13 +2590,80 @@ "name": "io_manager" } ], - "root_config_key": "Shape.6c71186a8f3069ee444291a42734fb8144db65fe" + "root_config_key": "Shape.2db9cd385a1c02ba97b38cd51002d65fef8593f2" } ], "name": "__ASSET_JOB", "solid_definitions_snapshot": { "__class__": "SolidDefinitionsSnapshot", "composite_solid_def_snaps": [ + { + "__class__": "CompositeSolidDefSnap", + "config_field_snap": null, + "dep_structure_snapshot": { + "__class__": "DependencyStructureSnapshot", + "solid_invocation_snaps": [ + { + "__class__": "SolidInvocationSnap", + "input_dep_snaps": [], + "is_dynamic_mapped": false, + "solid_def_name": "concurrency_op_1", + "solid_name": "concurrency_op_1", + "tags": {} + }, + { + "__class__": "SolidInvocationSnap", + "input_dep_snaps": [ + { + "__class__": "InputDependencySnap", + "input_name": "input_1", + "is_dynamic_collect": false, + "upstream_output_snaps": [ + { + "__class__": "OutputHandleSnap", + "output_name": "result", + "solid_name": "concurrency_op_1" + } + ] + } + ], + "is_dynamic_mapped": false, + "solid_def_name": "concurrency_op_2", + "solid_name": "concurrency_op_2", + "tags": {} + } + ] + }, + "description": null, + "input_def_snaps": [], + "input_mapping_snaps": [], + "name": "concurrency_graph_asset", + "output_def_snaps": [ + { + "__class__": "OutputDefSnap", + "dagster_type_key": "Any", + "description": null, + "is_dynamic": false, + "is_required": true, + "name": "result" + } + ], + "output_mapping_snaps": [ + { + "__class__": "OutputMappingSnap", + "external_output_name": "result", + "mapped_output_name": "result", + "mapped_solid_name": "concurrency_op_2" + } + ], + "pools": { + "__set__": [ + "bar", + "baz" + ] + }, + "tags": {} + }, { "__class__": "CompositeSolidDefSnap", "config_field_snap": null, @@ -3001,6 +3174,133 @@ "required_resource_keys": [], "tags": {} }, + { + "__class__": "SolidDefSnap", + "config_field_snap": { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": null, + "is_required": false, + "name": "config", + "type_key": "Any" + }, + "description": null, + "input_def_snaps": [], + "name": "concurrency_asset", + "output_def_snaps": [ + { + "__class__": "OutputDefSnap", + "dagster_type_key": "Any", + "description": null, + "is_dynamic": false, + "is_required": true, + "name": "result" + } + ], + "pool": "foo", + "required_resource_keys": [], + "tags": {} + }, + { + "__class__": "SolidDefSnap", + "config_field_snap": { + "__class__": "ConfigFieldSnap", + "default_provided": true, + "default_value_as_json_str": "{}", + "description": null, + "is_required": false, + "name": "config", + "type_key": "Shape.da39a3ee5e6b4b0d3255bfef95601890afd80709" + }, + "description": null, + "input_def_snaps": [], + "name": "concurrency_multi_asset", + "output_def_snaps": [ + { + "__class__": "OutputDefSnap", + "dagster_type_key": "Nothing", + "description": null, + "is_dynamic": false, + "is_required": true, + "name": "concurrency_multi_asset_1" + }, + { + "__class__": "OutputDefSnap", + "dagster_type_key": "Nothing", + "description": null, + "is_dynamic": false, + "is_required": true, + "name": "concurrency_multi_asset_2" + } + ], + "pool": "buzz", + "required_resource_keys": [], + "tags": {} + }, + { + "__class__": "SolidDefSnap", + "config_field_snap": { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": null, + "is_required": false, + "name": "config", + "type_key": "Any" + }, + "description": null, + "input_def_snaps": [], + "name": "concurrency_op_1", + "output_def_snaps": [ + { + "__class__": "OutputDefSnap", + "dagster_type_key": "Any", + "description": null, + "is_dynamic": false, + "is_required": true, + "name": "result" + } + ], + "pool": "bar", + "required_resource_keys": [], + "tags": {} + }, + { + "__class__": "SolidDefSnap", + "config_field_snap": { + "__class__": "ConfigFieldSnap", + "default_provided": false, + "default_value_as_json_str": null, + "description": null, + "is_required": false, + "name": "config", + "type_key": "Any" + }, + "description": null, + "input_def_snaps": [ + { + "__class__": "InputDefSnap", + "dagster_type_key": "Any", + "description": null, + "name": "input_1" + } + ], + "name": "concurrency_op_2", + "output_def_snaps": [ + { + "__class__": "OutputDefSnap", + "dagster_type_key": "Any", + "description": null, + "is_dynamic": false, + "is_required": true, + "name": "result" + } + ], + "pool": "baz", + "required_resource_keys": [], + "tags": {} + }, { "__class__": "SolidDefSnap", "config_field_snap": { @@ -35183,7 +35483,7 @@ 'b336066bf8dc411b162f9869dd08da0b18057896' # --- # name: test_all_snapshot_ids[1] - 'fb54440831226acbda6ad87d0d7599c4f3424168' + 'c7f8f1782b2c5c851dd0113ecbf095973a837b0c' # --- # name: test_all_snapshot_ids[20] ''' diff --git a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_assets.ambr b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_assets.ambr index e4613783e7ada..49ae424ea0387 100644 --- a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_assets.ambr +++ b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_assets.ambr @@ -117,6 +117,38 @@ ]), }), }), + dict({ + 'id': 'test_location.test_repo.["concurrency_asset"]', + 'key': dict({ + 'path': list([ + 'concurrency_asset', + ]), + }), + }), + dict({ + 'id': 'test_location.test_repo.["concurrency_graph_asset"]', + 'key': dict({ + 'path': list([ + 'concurrency_graph_asset', + ]), + }), + }), + dict({ + 'id': 'test_location.test_repo.["concurrency_multi_asset_1"]', + 'key': dict({ + 'path': list([ + 'concurrency_multi_asset_1', + ]), + }), + }), + dict({ + 'id': 'test_location.test_repo.["concurrency_multi_asset_2"]', + 'key': dict({ + 'path': list([ + 'concurrency_multi_asset_2', + ]), + }), + }), dict({ 'id': 'test_location.test_repo.["diamond_source"]', 'key': dict({ @@ -649,6 +681,26 @@ 'freshnessPolicy': None, 'id': 'test_location.test_repo.["check_in_op_asset"]', }), + dict({ + 'freshnessInfo': None, + 'freshnessPolicy': None, + 'id': 'test_location.test_repo.["concurrency_asset"]', + }), + dict({ + 'freshnessInfo': None, + 'freshnessPolicy': None, + 'id': 'test_location.test_repo.["concurrency_graph_asset"]', + }), + dict({ + 'freshnessInfo': None, + 'freshnessPolicy': None, + 'id': 'test_location.test_repo.["concurrency_multi_asset_1"]', + }), + dict({ + 'freshnessInfo': None, + 'freshnessPolicy': None, + 'id': 'test_location.test_repo.["concurrency_multi_asset_2"]', + }), dict({ 'freshnessInfo': None, 'freshnessPolicy': None, diff --git a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_solids.ambr b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_solids.ambr index 7f1eb36ec5e46..17752af1c770a 100644 --- a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_solids.ambr +++ b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/__snapshots__/test_solids.ambr @@ -483,6 +483,86 @@ }), ]), }), + dict({ + '__typename': 'UsedSolid', + 'definition': dict({ + 'name': 'concurrency_asset', + }), + 'invocations': list([ + dict({ + 'pipeline': dict({ + 'name': '__ASSET_JOB', + }), + 'solidHandle': dict({ + 'handleID': 'concurrency_asset', + }), + }), + ]), + }), + dict({ + '__typename': 'UsedSolid', + 'definition': dict({ + 'name': 'concurrency_graph_asset', + }), + 'invocations': list([ + dict({ + 'pipeline': dict({ + 'name': '__ASSET_JOB', + }), + 'solidHandle': dict({ + 'handleID': 'concurrency_graph_asset', + }), + }), + ]), + }), + dict({ + '__typename': 'UsedSolid', + 'definition': dict({ + 'name': 'concurrency_multi_asset', + }), + 'invocations': list([ + dict({ + 'pipeline': dict({ + 'name': '__ASSET_JOB', + }), + 'solidHandle': dict({ + 'handleID': 'concurrency_multi_asset', + }), + }), + ]), + }), + dict({ + '__typename': 'UsedSolid', + 'definition': dict({ + 'name': 'concurrency_op_1', + }), + 'invocations': list([ + dict({ + 'pipeline': dict({ + 'name': '__ASSET_JOB', + }), + 'solidHandle': dict({ + 'handleID': 'concurrency_graph_asset.concurrency_op_1', + }), + }), + ]), + }), + dict({ + '__typename': 'UsedSolid', + 'definition': dict({ + 'name': 'concurrency_op_2', + }), + 'invocations': list([ + dict({ + 'pipeline': dict({ + 'name': '__ASSET_JOB', + }), + 'solidHandle': dict({ + 'handleID': 'concurrency_graph_asset.concurrency_op_2', + }), + }), + ]), + }), dict({ '__typename': 'UsedSolid', 'definition': dict({ diff --git a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/repo.py b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/repo.py index 194e573fd8a43..3d5151d9e82c5 100644 --- a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/repo.py +++ b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/repo.py @@ -70,6 +70,7 @@ daily_partitioned_config, define_asset_job, graph, + graph_asset, job, logger, multi_asset, @@ -1998,6 +1999,37 @@ def subsettable_checked_multi_asset(context: OpExecutionContext): ) +@asset(pool="foo") +def concurrency_asset(): + pass + + +@op(pool="bar") +def concurrency_op_1(): + pass + + +@op(pool="baz") +def concurrency_op_2(input_1): + return input_1 + + +@graph_asset +def concurrency_graph_asset(): + return concurrency_op_2(concurrency_op_1()) + + +@multi_asset( + specs=[ + AssetSpec("concurrency_multi_asset_1"), + AssetSpec("concurrency_multi_asset_2"), + ], + pool="buzz", +) +def concurrency_multi_asset(): + pass + + # These are defined separately because the dict repo does not handle unresolved asset jobs def define_asset_jobs() -> Sequence[UnresolvedAssetJobDefinition]: return [ @@ -2147,6 +2179,9 @@ def define_assets(): asset_with_compute_storage_kinds, asset_with_automation_condition, asset_with_custom_automation_condition, + concurrency_asset, + concurrency_graph_asset, + concurrency_multi_asset, ] diff --git a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/test_assets.py b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/test_assets.py index 58932ebed91fc..288acbc42d16e 100644 --- a/python_modules/dagster-graphql/dagster_graphql_tests/graphql/test_assets.py +++ b/python_modules/dagster-graphql/dagster_graphql_tests/graphql/test_assets.py @@ -842,6 +842,17 @@ } """ +GET_ASSET_CONCURRENCY_GROUP = """ + query AssetNodeQuery($assetKey: AssetKeyInput!) { + assetNodeOrError(assetKey: $assetKey) { + ...on AssetNode { + id + pools + } + } + } +""" + def _create_run( graphql_context: WorkspaceRequestContext, @@ -3573,3 +3584,17 @@ def test_2d_subset_backcompat(): assert len(ranges[1]["secondaryDim"]["materializedPartitions"]) == 2 assert set(ranges[1]["secondaryDim"]["materializedPartitions"]) == {"a", "c"} assert set(ranges[1]["secondaryDim"]["unmaterializedPartitions"]) == {"b", "d"} + + +def test_concurrency_assets(graphql_context: WorkspaceRequestContext): + def _graphql_pool(asset_key): + result = execute_dagster_graphql( + graphql_context, + GET_ASSET_CONCURRENCY_GROUP, + variables={"assetKey": {"path": asset_key.path}}, + ) + return set(result.data["assetNodeOrError"]["pools"]) + + assert _graphql_pool(AssetKey(["concurrency_asset"])) == {"foo"} + assert _graphql_pool(AssetKey(["concurrency_graph_asset"])) == {"bar", "baz"} + assert _graphql_pool(AssetKey(["concurrency_multi_asset_1"])) == {"buzz"}