Stephen Bailey
04/08/2022, 8:20 PMalert_policies
allow us to use tags to configure which slack channels a job alert gets sent to?
https://docs.dagster.cloud/guides/alerts#slack-alert-policiesCharlie Bini
04/08/2022, 10:29 PMdagster.core.errors.DagsterInvariantViolationError: No jobs, pipelines, graphs, asset collections, or repositories found
for my docker code location. I have a repository.py
file in the package folder with a @repository
decorated function. Am I forgetting to do something else?Stephen Bailey
04/11/2022, 2:28 PMDockerUser*C*odeLauncher
not DockerUsercodeLauncher
.
2. im trying to understand the advantage here to running things locally? i am trying to solve the problem of being able to simulate sensors, schedules, etc, but it looks like this workflow is just going to simulate code execution. is that right?Stephen Bailey
04/11/2022, 2:29 PMdocker-compose
file to stand up a full local version of the dagster daemon + dagit, and i would love to not have to do that, but it doesn't look like this quite solves that problem.Charlie Bini
04/12/2022, 10:05 PMdagster-cloud workspace sync -w xyz.yaml
support variable substitution in the YAML file?Stephen Bailey
04/13/2022, 1:54 PMalert_policies:
- name: "slack-alert-policy"
description: "An alert policy to send a Slack notification to sales on job failure or success."
tags: []
event_types:
- "JOB_SUCCESS"
- "JOB_FAILURE"
notification_service:
slack:
slack_workspace_name: "hooli"
slack_channel_name: "sales-notifications"
Nicholas
04/15/2022, 5:16 PMCharlie Bini
04/18/2022, 7:53 PMcontainer_context
seems to disappear after you add it to the code location yaml. Can confirm it's working, but if I go to modify the YAML, it's no longer thereCharlie Bini
04/18/2022, 8:22 PMPrratek Ramchandani
04/19/2022, 1:40 AMEvan Arnold
04/22/2022, 6:44 PMevent_types
?Charlie Bini
04/27/2022, 3:23 PMdagsterCloudAgent.resources
on the helm chart, right? how exactly do I edit that and persist that setting across updates?Charlie Bini
04/28/2022, 7:23 PMError: Invariant failed. Description: Value at path root:alert_policies[0]:event_types[0] not in enum type AlertPolicyEventType got RUN_FAILURE, Value at path root:alert_policies[0]:event_types[1] not in enum type AlertPolicyEventType got STEP_FAILURE, Value at path root:alert_policies[0]:event_types[2] not in enum type AlertPolicyEventType got ALERT_FAILURE
looking HERE, it seems the only JOB_FAILURE
and JOB_SUCCESS
are the only valid event types, but I can't find any docs or code explaining what those are. Would it be possible to open this up to other event types (e.g. STEP_FAILURE
) or does that have to be done at the job level?Charlie Bini
04/29/2022, 7:05 PMresources
key: if I define it in the locations yaml, will that affect the code location pod or only the job pods that it launches?Evan Arnold
05/05/2022, 2:41 PMops
because the storage is ephemeral.Will Curatolo
05/12/2022, 3:52 PMTravis McKinney
05/12/2022, 5:05 PMStephen Bailey
05/22/2022, 8:00 PMrunCoordinator.maxConcurrentRuns
on Dagster Cloud? I see the Helm chart value in the standalone chart but don't see anything matching in the Dagster Cloud one. I'm looking to double or triple the default instance-level concurrency (deployed on EKS).Stephen Bailey
05/23/2022, 1:00 PMYevhen Samoilenko
05/30/2022, 2:04 PMYevhen Samoilenko
05/31/2022, 2:23 PMException: Timed out waiting for server user_code_52fa4f:4000. Most recent connection error: dagster.core.errors.DagsterUserCodeUnreachableError: Could not reach user code server Stack Trace: File "/dagster-cloud/dagster_cloud/workspace/user_code_launcher/user_code_launcher.py", line 687, in _wait_for_server server_id = sync_get_server_id(client) File "/dagster/dagster/api/get_server_id.py", line 15, in sync_get_server_id result = check.inst(api_client.get_server_id(), (str, SerializableErrorInfo)) File "/dagster/dagster/grpc/client.py", line 152, in get_server_id res = self._query("GetServerId", api_pb2.Empty, timeout=timeout) File "/dagster/dagster/grpc/client.py", line 115, in _query raise DagsterUserCodeUnreachableError("Could not reach user code server") from e The above exception was caused by the following exception: grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with: status = StatusCode.UNAVAILABLE details = "DNS resolution failed for user_code_52fa4f:4000: C-ares status is not ARES_SUCCESS qtype=A name=user_code_52fa4f is_balancer=0: Could not contact DNS servers" debug_error_string = "{"created":"@1654005039.486441814","description":"DNS resolution failed for user_code_52fa4f:4000: C-ares status is not ARES_SUCCESS qtype=A name=user_code_52fa4f is_balancer=0: Could not contact DNS servers","file":"src/core/lib/transport/error_utils.cc","file_line":165,"grpc_status":14}" > Stack Trace: File "/dagster/dagster/grpc/client.py", line 112, in _query response = getattr(stub, method)(request_type(**kwargs), timeout=timeout) File "/usr/local/lib/python3.8/site-packages/grpc/_channel.py", line 946, in __call__ return _end_unary_response_blocking(state, call, False, None) File "/usr/local/lib/python3.8/site-packages/grpc/_channel.py", line 849, in _end_unary_response_blocking raise _InactiveRpcError(state)
File "/dagster-cloud/dagster_cloud/workspace/user_code_launcher/user_code_launcher.py", line 548, in _reconcile
new_updated_endpoint = self._create_new_server_endpoint(
File "/dagster-cloud/dagster_cloud/workspace/docker/__init__.py", line 197, in _create_new_server_endpoint
return self._launch(
File "/dagster-cloud/dagster_cloud/workspace/docker/__init__.py", line 286, in _launch
server_id = self._wait_for_server(
File "/dagster-cloud/dagster_cloud/workspace/user_code_launcher/user_code_launcher.py", line 693, in _wait_for_server
raise Exception(
How can I debug the process and find out the reason it occurs?Zach
05/31/2022, 2:46 PMZach
05/31/2022, 3:44 PMdagster_cloud.storage.errors.GraphQLStorageError: Error in GraphQL response: [{'message': 'Internal Server Error (Trace ID: 2565201103886791611)', 'locations': [{'line': 15, 'column': 13}], 'path': ['eventLogs', 'getLogsForRun']}]
File "/usr/local/lib/python3.9/site-packages/dagster/core/execution/plan/execute_plan.py", line 230, in dagster_event_sequence_for_step
for step_event in check.generator(step_events):
File "/usr/local/lib/python3.9/site-packages/etxdagster/dnax/dnax_step_launcher.py", line 466, in launch_step
step_run_ref = self._step_context_to_step_run_ref(
File "/usr/local/lib/python3.9/site-packages/etxdagster/dnax/dnax_step_launcher.py", line 557, in _step_context_to_step_run_ref
return step_context_to_step_run_ref(
File "/usr/local/lib/python3.9/site-packages/dagster/core/execution/plan/external_step.py", line 191, in step_context_to_step_run_ref
upstream_output_events, run_group = _upstream_events_and_runs(step_context)
File "/usr/local/lib/python3.9/site-packages/dagster/core/execution/plan/external_step.py", line 117, in _upstream_events_and_runs
step_output_records = step_context.instance.all_logs(
File "/usr/local/lib/python3.9/site-packages/dagster/utils/__init__.py", line 615, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/dagster/core/instance/__init__.py", line 1289, in all_logs
return self._event_storage.get_logs_for_run(run_id, of_type=of_type)
File "/usr/local/lib/python3.9/site-packages/dagster_cloud/storage/event_logs/storage.py", line 257, in get_logs_for_run
res = self._execute_query(
File "/usr/local/lib/python3.9/site-packages/dagster_cloud/storage/event_logs/storage.py", line 237, in _execute_query
res = self._graphql_client.execute(query, variable_values=variables)
File "/usr/local/lib/python3.9/site-packages/dagster_cloud/storage/client.py", line 63, in execute
return self._execute_retry(query, variable_values)
File "/usr/local/lib/python3.9/site-packages/dagster_cloud/storage/client.py", line 117, in _execute_retry
raise GraphQLStorageError(f"Error in GraphQL response: {str(result['errors'])}")
Stephen Bailey
05/31/2022, 4:13 PMSeth Kimmel
06/01/2022, 5:10 PMgeoHeil
06/03/2022, 6:05 PMPrratek Ramchandani
06/03/2022, 9:17 PMZach
06/03/2022, 11:08 PMdagster-cloud workspace snapshot ...
, then construct the URL), but the only way I was able to piece that together was to dive into the code for the github action. The provided github action is great, but if you don't use github actions it's not quite as helpful.Zach
06/03/2022, 11:12 PMgeoHeil
06/04/2022, 6:12 AMrun_launcher:
module: dagster_docker
class: DockerRunLauncher
config:
env_vars:
- DAGSTER_POSTGRES_USER
- DAGSTER_POSTGRES_PASSWORD
- DAGSTER_POSTGRES_DB
- DAGSTER_POSTGRES_HOSTNAME
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
Environment variables can be passed directly over to the container.
NOTICE: I do NOT have to set key=value paris but rather pass them through.In dagster cloud:
user_code_launcher:
module: dagster_cloud.workspace.docker
class: DockerUserCodeLauncher
config:
env_vars:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- SLACK_DAGSTER_ETL_BOT_TOKEN
I try the following and observe multiple problems:
1. the env vars are not passed and none:
# PROD resources:
"s3_bucket": ResourceDefinition.hardcoded_resource("my_bucket"),
"s3": s3_resource.configured(
{"endpoint_url": "<http://minio1:9000>", "region_name": "eu-central-1"}
),
# when trying to use it:
@io_manager(required_resource_keys={"s3_bucket", "s3"})
def s3_partitioned_csv_io_manager(init_context):
bucket_resource = init_context.resources.s3_bucket
s3 = init_context.resources.s3
creds = s3._request_signer._credentials
AWS_ACCESS_KEY_ID_resource = creds.access_key
AWS_SECRET_ACCESS_KEY_resource = creds.secret_key
fails with:
'NoneType' object has no attribute 'access_key'
2. the slack notification bot (which should send a message in case of failed pipelines) is never triggered. Also, I cannot find the logs which I usually see for dagster-daemon in OSS which might explain why it failed.
3. In OSS I can subselect assets from a job. This does not work in cloud:
# for a dummy asset of:
import pandas as pd
from dagster import asset
@asset(
io_manager_key="dummy_io",
compute_kind="python_ingestion",
)
def flow_dummy_raw_asset() -> pd.DataFrame:
return pd.DataFrame({"bar": [2, 3, 4, 10]})
@asset(
io_manager_key="dummy_io",
compute_kind="python_cleaning",
)
def flow_dummy_normalized_asset(flow_dummy_raw_asset: pd.DataFrame) -> pd.DataFrame:
flow_dummy_raw_asset["n"] = 1
return flow_dummy_raw_asset
# error message when subselecting the first
# a similar error message shows up when selecting the other side vice-versa
dagster._check.CheckError: Invariant failed. Description: flow_dummy has no solid named flow_dummy_normalized_asset.
File "/opt/conda/lib/python3.9/site-packages/dagster/grpc/impl.py", line 92, in core_execute_run
yield from execute_run_iterator(
File "/opt/conda/lib/python3.9/site-packages/dagster/core/execution/api.py", line 911, in __iter__
yield from self.execution_context_manager.prepare_context()
File "/opt/conda/lib/python3.9/site-packages/dagster/utils/__init__.py", line 470, in generate_setup_events
obj = next(self.generator)
File "/opt/conda/lib/python3.9/site-packages/dagster/core/execution/context_creation_pipeline.py", line 322, in orchestration_context_event_generator
context_creation_data = create_context_creation_data(
File "/opt/conda/lib/python3.9/site-packages/dagster/core/execution/context_creation_pipeline.py", line 140, in create_context_creation_data
resource_keys_to_init=get_required_resource_keys_to_init(
File "/opt/conda/lib/python3.9/site-packages/dagster/core/execution/resources_init.py", line 342, in get_required_resource_keys_to_init
hook_defs = pipeline_def.get_all_hooks_for_handle(step.solid_handle)
File "/opt/conda/lib/python3.9/site-packages/dagster/core/definitions/pipeline_definition.py", line 564, in get_all_hooks_for_handle
solid = self._graph_def.solid_named(name)
File "/opt/conda/lib/python3.9/site-packages/dagster/core/definitions/graph_definition.py", line 297, in solid_named
check.invariant(
File "/opt/conda/lib/python3.9/site-packages/dagster/_check/__init__.py", line 1433, in invariant
raise CheckError(f"Invariant failed. Description: {desc}")
(1) can be fixed by manually passing KEY=value
variables. This is inconvenient/iconsistent but doable. Do you think you could support the pass-through mode in the future?
(2) slack notifications work then. However, it is still inclear for me where to find the dagster daemon logs
(3) I have no explanation here and really woould love to get this to workgeoHeil
06/04/2022, 6:12 AMrun_launcher:
module: dagster_docker
class: DockerRunLauncher
config:
env_vars:
- DAGSTER_POSTGRES_USER
- DAGSTER_POSTGRES_PASSWORD
- DAGSTER_POSTGRES_DB
- DAGSTER_POSTGRES_HOSTNAME
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
Environment variables can be passed directly over to the container.
NOTICE: I do NOT have to set key=value paris but rather pass them through.In dagster cloud:
user_code_launcher:
module: dagster_cloud.workspace.docker
class: DockerUserCodeLauncher
config:
env_vars:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- SLACK_DAGSTER_ETL_BOT_TOKEN
I try the following and observe multiple problems:
1. the env vars are not passed and none:
# PROD resources:
"s3_bucket": ResourceDefinition.hardcoded_resource("my_bucket"),
"s3": s3_resource.configured(
{"endpoint_url": "<http://minio1:9000>", "region_name": "eu-central-1"}
),
# when trying to use it:
@io_manager(required_resource_keys={"s3_bucket", "s3"})
def s3_partitioned_csv_io_manager(init_context):
bucket_resource = init_context.resources.s3_bucket
s3 = init_context.resources.s3
creds = s3._request_signer._credentials
AWS_ACCESS_KEY_ID_resource = creds.access_key
AWS_SECRET_ACCESS_KEY_resource = creds.secret_key
fails with:
'NoneType' object has no attribute 'access_key'
2. the slack notification bot (which should send a message in case of failed pipelines) is never triggered. Also, I cannot find the logs which I usually see for dagster-daemon in OSS which might explain why it failed.
3. In OSS I can subselect assets from a job. This does not work in cloud:
# for a dummy asset of:
import pandas as pd
from dagster import asset
@asset(
io_manager_key="dummy_io",
compute_kind="python_ingestion",
)
def flow_dummy_raw_asset() -> pd.DataFrame:
return pd.DataFrame({"bar": [2, 3, 4, 10]})
@asset(
io_manager_key="dummy_io",
compute_kind="python_cleaning",
)
def flow_dummy_normalized_asset(flow_dummy_raw_asset: pd.DataFrame) -> pd.DataFrame:
flow_dummy_raw_asset["n"] = 1
return flow_dummy_raw_asset
# error message when subselecting the first
# a similar error message shows up when selecting the other side vice-versa
dagster._check.CheckError: Invariant failed. Description: flow_dummy has no solid named flow_dummy_normalized_asset.
File "/opt/conda/lib/python3.9/site-packages/dagster/grpc/impl.py", line 92, in core_execute_run
yield from execute_run_iterator(
File "/opt/conda/lib/python3.9/site-packages/dagster/core/execution/api.py", line 911, in __iter__
yield from self.execution_context_manager.prepare_context()
File "/opt/conda/lib/python3.9/site-packages/dagster/utils/__init__.py", line 470, in generate_setup_events
obj = next(self.generator)
File "/opt/conda/lib/python3.9/site-packages/dagster/core/execution/context_creation_pipeline.py", line 322, in orchestration_context_event_generator
context_creation_data = create_context_creation_data(
File "/opt/conda/lib/python3.9/site-packages/dagster/core/execution/context_creation_pipeline.py", line 140, in create_context_creation_data
resource_keys_to_init=get_required_resource_keys_to_init(
File "/opt/conda/lib/python3.9/site-packages/dagster/core/execution/resources_init.py", line 342, in get_required_resource_keys_to_init
hook_defs = pipeline_def.get_all_hooks_for_handle(step.solid_handle)
File "/opt/conda/lib/python3.9/site-packages/dagster/core/definitions/pipeline_definition.py", line 564, in get_all_hooks_for_handle
solid = self._graph_def.solid_named(name)
File "/opt/conda/lib/python3.9/site-packages/dagster/core/definitions/graph_definition.py", line 297, in solid_named
check.invariant(
File "/opt/conda/lib/python3.9/site-packages/dagster/_check/__init__.py", line 1433, in invariant
raise CheckError(f"Invariant failed. Description: {desc}")
(1) can be fixed by manually passing KEY=value
variables. This is inconvenient/iconsistent but doable. Do you think you could support the pass-through mode in the future?
(2) slack notifications work then. However, it is still inclear for me where to find the dagster daemon logs
(3) I have no explanation here and really woould love to get this to workdaniel
06/04/2022, 12:15 PMgeoHeil
06/04/2022, 12:40 PMdaniel
06/04/2022, 6:30 PMgeoHeil
06/05/2022, 6:34 PMdaniel
06/07/2022, 4:50 PMgeoHeil
06/07/2022, 4:55 PMdaniel
06/07/2022, 5:01 PMgeoHeil
06/07/2022, 5:05 PMdaniel
06/07/2022, 5:05 PMgeoHeil
06/07/2022, 5:06 PM