Skip to content

Dag processor error #67028

@mortazakiani

Description

@mortazakiani

Under which category would you file this issue?

Helm chart

Apache Airflow version

airflow3.1.7

What happened and how to reproduce it?

i use git sync and my dag name in gitlab contain space character the dag proccessor will restart

What you think should happen instead?

the space character of dag proccesor

Operating System

rocky 9.6

Deployment

Official Apache Airflow Helm Chart

Apache Airflow Provider(s)

No response

Versions of Apache Airflow Providers

3.1.7

Official Helm Chart version

1.19.0

Kubernetes Version

1.35.0

Helm Chart configuration

airflowConfigAnnotations: {}
airflowHome: /opt/airflow
airflowPodAnnotations: {}
airflowVersion: 3.1.7
allowJobLaunching: false
allowPodLaunching: true
apiSecretKeySecretName: airflow-api-secret
apiServer:
affinity: {}
allowPodLogReading: true
annotations: {}
enabled: true
env: []
extraContainers: []
extraInitContainers: []
extraVolumeMounts: []
extraVolumes: []
hpa:
behavior:
scaleDown:
stabilizationWindowSeconds: 300
scaleUp:
stabilizationWindowSeconds: 0
enabled: true
maxReplicaCount: 5
metrics:
- resource:
name: memory
target:
averageUtilization: 80
type: Utilization
type: Resource
minReplicaCount: 1
labels: {}
livenessProbe:
failureThreshold: 5
initialDelaySeconds: 15
periodSeconds: 10
scheme: HTTP
timeoutSeconds: 5
nodeSelector:
airflow-role: core
podAnnotations: {}
podDisruptionBudget:
enabled: false
readinessProbe:
failureThreshold: 5
initialDelaySeconds: 15
periodSeconds: 10
scheme: HTTP
timeoutSeconds: 5
replicas: 1
resources:
limits:
cpu: "2"
memory: 4Gi
requests:
cpu: "1"
memory: 2Gi
securityContexts:
container: {}
pod: {}
service:
annotations: {}
ports:
- name: api-server
port: '{{ .Values.ports.apiServer }}'
type: ClusterIP
serviceAccount:
annotations: {}
automountServiceAccountToken: true
create: true
startupProbe:
failureThreshold: 6
initialDelaySeconds: 0
periodSeconds: 10
scheme: HTTP
timeoutSeconds: 20
tolerations: []
waitForMigrations:
enabled: true
cleanup:
affinity: {}
args:

  • bash
  • -c
  • exec airflow kubernetes cleanup-pods --namespace={{ .Release.Namespace }}
    enabled: false
    labels: {}
    nodeSelector:
    airflow-role: core
    podAnnotations: {}
    resources:
    limits:
    cpu: "2"
    memory: 4Gi
    requests:
    cpu: "1"
    memory: 2Gi
    schedule: '*/15 * * * *'
    securityContexts:
    container: {}
    pod: {}
    serviceAccount:
    annotations: {}
    automountServiceAccountToken: true
    create: true
    tolerations: []
    config:
    api:
    auth_jwt_leeway: "30"
    base_url: https://edl-dm.mtnirancell.ir
    core:
    auth_manager: airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager
    colored_console_log: "False"
    dags_folder: '{{ include "airflow_dags" . }}'
    executor: '{{ .Values.executor }}'
    load_examples: "False"
    max_active_tasks_per_dag: 16
    parallelism: 32
    remote_logging: "False"
    database:
    sql_alchemy_max_overflow: "30"
    sql_alchemy_pool_pre_ping: "True"
    sql_alchemy_pool_recycle: "1800"
    sql_alchemy_pool_size: "10"
    fab:
    enable_proxy_fix: "True"
    kubernetes:
    kube_client_request_args: '{"_request_timeout": 60}'
    multi_namespace_mode: "False"
    namespace: '{{ .Release.Namespace }}'
    pod_template_file: '{{ include "airflow_pod_template_file" . }}/pod_template_file.yaml'
    worker_container_repository: */apache/airflow-custom
    worker_container_tag: latest
    kubernetes_executor:
    delete_worker_pods: "True"
    delete_worker_pods_on_failure: "False"
    multi_namespace_mode: "False"
    namespace: '{{ .Release.Namespace }}'
    pod_template_file: '{{ include "airflow_pod_template_file" . }}/pod_template_file.yaml'
    worker_container_repository: */apache/airflow-custom
    worker_container_tag: latest
    worker_pods_creation_batch_size: 8
    logging:
    colored_console_log: "False"
    remote_logging: "False"
    metrics:
    statsd_host: '{{ printf "%s-statsd" (include "airflow.fullname" .) }}'
    statsd_on: '{{ ternary "True" "False" .Values.statsd.enabled }}'
    statsd_port: 9125
    statsd_prefix: airflow
    scheduler:
    dag_dir_list_interval: "20"
    min_file_process_interval: "5"
    parsing_processes: "4"
    processor_poll_interval: "1"
    run_duration: "41460"
    scheduler_health_check_threshold: "30"
    scheduler_heartbeat_sec: "10"
    scheduler_max_threads: "4"
    standalone_dag_processor: '{{ ternary "True" "False" (or (semverCompare ">=3.0.0"
    .Values.airflowVersion) (.Values.dagProcessor.enabled | default false)) }}'
    statsd_host: '{{ printf "%s-statsd" (include "airflow.fullname" .) }}'
    statsd_on: '{{ ternary "True" "False" .Values.statsd.enabled }}'
    statsd_port: 9125
    statsd_prefix: airflow
    webserver:
    enable_proxy_fix: "True"
    createUserJob:
    affinity: {}
    applyCustomEnv: true
    defaultUser:
    email: admin@example.com
    firstName: admin
    lastName: user
    password: *
    role: Admin
    username: admin
    enabled: true
    extraContainers: []
    extraInitContainers: []
    extraVolumeMounts: []
    extraVolumes: []
    nodeSelector:
    airflow-role: core
    resources:
    limits:
    cpu: 1800m
    memory: 2Gi
    requests:
    cpu: 800m
    memory: 1512Mi
    securityContexts:
    container: {}
    pod: {}
    serviceAccount:
    annotations: {}
    automountServiceAccountToken: true
    create: true
    tolerations: []
    ttlSecondsAfterFinished: 300
    useHelmHooks: true
    dagProcessor:
    affinity: {}
    annotations: {}
    dagBundleConfigList:
  • classpath: airflow.dag_processing.bundles.local.LocalDagBundle
    kwargs: {}
    name: dags
    enabled: true
    env: []
    extraContainers: []
    extraInitContainers: []
    extraVolumeMounts: []
    extraVolumes: []
    labels: {}
    livenessProbe:
    failureThreshold: 5
    initialDelaySeconds: 10
    periodSeconds: 60
    timeoutSeconds: 20
    logGroomerSidecar:
    enabled: true
    frequencyMinutes: 15
    retentionDays: 15
    nodeSelector:
    airflow-role: core
    podAnnotations: {}
    replicas: 2
    resources:
    limits:
    cpu: "4"
    memory: 4Gi
    requests:
    cpu: "2"
    memory: 2Gi
    safeToEvict: true
    securityContexts:
    container: {}
    pod: {}
    serviceAccount:
    annotations: {}
    automountServiceAccountToken: true
    create: true
    terminationGracePeriodSeconds: 60
    tolerations: []
    waitForMigrations:
    enabled: true
    dags:
    gitSync:
    branch: dev
    containerName: git-sync
    credentialsSecret: airflow-git-credentials
    enabled: true
    period: 30s
    ref: HEAD
    repo: */airflow.git
    resources:
    limits:
    cpu: "2"
    memory: 4G
    requests:
    cpu: 100m
    memory: 128Mi
    rev: HEAD
    securityContexts:
    container: {}
    subPath: ""
    uid: 65533
    persistence:
    accessMode: ReadWriteMany
    enabled: true
    size: 20Gi
    storageClassName: longhorn
    data:
    metadataSecretName: ""
    databaseCleanup:
    affinity: {}
    applyCustomEnv: true
    enabled: true
    failedJobsHistoryLimit: 1
    nodeSelector:
    airflow-role: core
    resources:
    limits:
    cpu: 1800m
    memory: 2Gi
    requests:
    cpu: 200m
    memory: 512Mi
    retentionDays: 90
    schedule: 0 0 * * 0
    serviceAccount:
    annotations: {}
    automountServiceAccountToken: true
    create: true
    skipArchive: false
    successfulJobsHistoryLimit: 1
    tolerations: []
    verbose: true
    defaultAirflowRepository: */apache/airflow-custom
    defaultAirflowTag: latest
    elasticsearch:
    enabled: false
    enableBuiltInSecretEnvVars:
    AIRFLOW__API__SECRET_KEY: true
    AIRFLOW__API_AUTH__JWT_SECRET: true
    AIRFLOW__CELERY__BROKER_URL: false
    AIRFLOW__CELERY__CELERY_RESULT_BACKEND: false
    AIRFLOW__CELERY__RESULT_BACKEND: false
    AIRFLOW__CORE__FERNET_KEY: true
    AIRFLOW__CORE__SQL_ALCHEMY_CONN: true
    AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: true
    AIRFLOW__ELASTICSEARCH__ELASTICSEARCH_HOST: false
    AIRFLOW__ELASTICSEARCH__HOST: false
    AIRFLOW__OPENSEARCH__HOST: false
    AIRFLOW__WEBSERVER__SECRET_KEY: true
    AIRFLOW_CONN_AIRFLOW_DB: true
    env:
  • name: PYTHONPATH
    value: /opt/airflow/dags/repo:/opt/airflow/dags/repo/dags:opt/airflow/dags/repo/plugins
  • name: SPARK_HOME
    value: /opt/spark
  • name: JAVA_HOME
    value: /opt/java/openjdk
    executor: KubernetesExecutor
    extraEnv: null
    extraEnvFrom: null
    fernetKeySecretName: airflow-fernet-secret
    flower:
    enabled: false
    fullnameOverride: airflow
    gid: 0
    images:
    airflow:
    pullPolicy: Always
    repository: */apache/airflow-custom
    tag: latest
    gitSync:
    pullPolicy: IfNotPresent
    repository: */k8s/git-sync/git-sync
    tag: v4.4.2
    migrationsWaitTimeout: 60
    pgbouncer:
    pullPolicy: IfNotPresent
    repository: */apache/airflow
    tag: airflow-pgbouncer-2025.03.05-1.23.1
    pgbouncerExporter:
    pullPolicy: IfNotPresent
    repository: */apache/airflow
    tag: airflow-pgbouncer-exporter-2025.03.05-0.18.0
    pod_template:
    pullPolicy: Always
    repository: */apache/airflow-custom
    tag: latest
    statsd:
    pullPolicy: IfNotPresent
    repository: */quay/prometheus/statsd-exporter
    tag: v0.28.0
    useDefaultImageForMigration: false
    ingress:
    apiServer:
    annotations:
    cert-manager.io/issuer: airflow-selfsigned-issuer
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    enabled: true
    hosts:
    • name: *
      tls:
      enabled: true
      secretName: airflow-general-tls-secret
      ingressClassName: nginx
      path: /
      pathType: Prefix
      flower:
      enabled: false
      web:
      enabled: false
      jwtSecretName: airflow-api-secret
      kerberos:
      enabled: false
      labels: {}
      logs:
      persistence:
      enabled: true
      size: 20Gi
      storageClassName: longhorn
      migrateDatabaseJob:
      affinity: {}
      applyCustomEnv: true
      enabled: true
      extraInitContainers: []
      extraVolumeMounts: []
      extraVolumes: []
      nodeSelector:
      airflow-role: core
      resources:
      limits:
      cpu: "2"
      memory: 4Gi
      requests:
      cpu: 500m
      memory: 2Gi
      securityContexts:
      container: {}
      pod: {}
      serviceAccount:
      annotations: {}
      automountServiceAccountToken: true
      create: true
      tolerations: []
      ttlSecondsAfterFinished: 300
      useHelmHooks: true
      multiNamespaceMode: false
      nameOverride: ""
      networkPolicies:
      enabled: false
      opensearch:
      enabled: false
      pgbouncer:
      enabled: false
      podTemplate: |
      apiVersion: v1
      kind: Pod
      metadata:
      name: airflow-task-pod
      spec:
      nodeSelector:
      airflow-role: exec
      tolerations:
      • key: "dedicated"
        operator: "Equal"
        value: "data"
        effect: "NoSchedule"
        restartPolicy: Never
        imagePullSecrets:
      • name: harbor-pull-secret
        initContainers:
      • name: git-sync
        image: */git-sync/git-sync:v4.4.2
        envFrom:
        • secretRef:
          name: airflow-git-credentials
          env:
        • name: GIT_SYNC_REPO
          value:*
        • name: GIT_SYNC_BRANCH
          value: dev
        • name: GIT_SYNC_REV
          value: HEAD
        • name: GIT_SYNC_DEPTH
          value: "1"
        • name: GIT_SYNC_ROOT
          value: /git
        • name: GIT_SYNC_DEST
          value: repo
        • name: GIT_SYNC_ONE_TIME
          value: "true"
          volumeMounts:
        • name: dags
          mountPath: /git
          containers:
      • name: base
        image: placeholder
        imagePullPolicy: Always
        env:
        • name: AIRFLOW__CORE__EXECUTION_API_SERVER_URL
          value: http://airflow-api-server:8080/execution/
        • name: AIRFLOW__DAG_PROCESSOR__DAG_BUNDLE_CONFIG_LIST
          value: '[{"classpath":"airflow.dag_processing.bundles.local.LocalDagBundle","kwargs":{},"name":"dags"}]'
        • name: PYTHONPATH
          value: "/opt/airflow/dags/repo:/opt/airflow/dags/repo/dags:/opt/airflow/dags/repo/plugins"
        • name: SPARK_HOME
          value: /opt/spark
        • name: JAVA_HOME
          value: /opt/java/openjdk
          volumeMounts:
        • name: logs
          mountPath: /opt/airflow/logs
        • name: dags
          mountPath: /opt/airflow/dags
          subPath: repo
          volumes:
      • name: logs
        persistentVolumeClaim:
        claimName: airflow-logs
      • name: dags
        emptyDir: {}
        ports:
        airflowUI: 8080
        apiServer: 8080
        flowerUI: 5555
        pgbouncer: 6543
        pgbouncerScrape: 9127
        redisDB: 6379
        statsdIngest: 9125
        statsdScrape: 9102
        triggererLogs: 8794
        workerLogs: 8793
        postgresql:
        enabled: true
        image:
        registry: *
        repository: */bitnami/postgresql
        persistence:
        enabled: true
        size: 20Gi
        storageClass: longhorn
        rbac:
        create: true
        createSCCRoleBinding: false
        redis:
        enabled: false
        revisionHistoryLimit: 3
        scheduler:
        affinity: {}
        annotations: {}
        enabled: true
        extraContainers: []
        extraInitContainers: []
        extraVolumeMounts: []
        extraVolumes: []
        labels: {}
        livenessProbe:
        failureThreshold: 5
        initialDelaySeconds: 10
        periodSeconds: 60
        timeoutSeconds: 20
        logGroomerSidecar:
        enabled: true
        frequencyMinutes: 15
        retentionDays: 15
        nodeSelector:
        airflow-role: core
        podAnnotations: {}
        replicas: 2
        resources:
        limits:
        cpu: "4"
        memory: 4Gi
        requests:
        cpu: "2"
        memory: 2Gi
        safeToEvict: true
        securityContexts:
        container: {}
        pod: {}
        serviceAccount:
        annotations: {}
        automountServiceAccountToken: true
        create: true
        startupProbe:
        failureThreshold: 6
        initialDelaySeconds: 0
        periodSeconds: 10
        timeoutSeconds: 20
        terminationGracePeriodSeconds: 60
        tolerations: []
        waitForMigrations:
        enabled: true
        securityContexts:
        containers:
        allowPrivilegeEscalation: false
        pod:
        fsGroup: 0
        runAsGroup: 0
        runAsUser: 50000
        statsd:
        enabled: true
        triggerer:
        enabled: true
        uid: 50000
        useStandardNaming: true
        webserver:
        enabled: false
        webserverSecretKeySecretName: airflow-api-secret

Docker Image customizations

No response

Anything else?

the log of dag processor 2026-05-16T07:36:50.294405Z [error ] Invalid stat name: dag_processing.last_run.seconds_ago.test_of sprak_opertaor. [airflow.metrics.validators] loc=validators.py:125
Traceback (most recent call last):
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/metrics/validators.py", line 122, in wrapper
stat = handler_stat_name_func(stat)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/airflow/.local/lib/python3.12/site-packages/airflow/metrics/validators.py", line 210, in stat_name_default_handler
raise InvalidStatsNameException(
airflow.exceptions.InvalidStatsNameException: The stat name (dag_processing.last_run.seconds_ago.test_of sprak_opertaor) has to be composed of ASCII alphabets, numbers, or the underscore, dot, or dash characters.

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions