async def METHOD_NAME(
    scheduler: "DynamicSidecarsScheduler",  # type: ignore
    service_name: ServiceName,
    scheduler_data: SchedulerData,
    dynamic_sidecar_settings: DynamicSidecarSettings,
    dynamic_scheduler: DynamicServicesSchedulerSettings,
) -> None:
    app: FastAPI = scheduler.app
    if scheduler_data.dynamic_sidecar.status.current == DynamicSidecarStatus.FAILING:
        # potential use-cases:
        # 1. service failed on start -> it can be removed safely
        # 2. service must be deleted -> it can be removed safely
        # 3. service started and failed while running (either
        #   dy-sidecar, dy-proxy, or containers) -> it cannot be removed safely
        # 4. service started, and failed on closing -> it cannot be removed safely
        if scheduler_data.dynamic_sidecar.wait_for_manual_intervention_after_error:
            # use-cases: 3, 4
            # Since user data is important and must be saved, take no further
            # action and wait for manual intervention from support.
            # After manual intervention service can now be removed
            # from tracking.
            if (
                # NOTE: do not change below order, reduces pressure on the
                # docker swarm engine API.
                _trigger_every_30_seconds(
                    scheduler._observation_counter,  # pylint:disable=protected-access
                    dynamic_scheduler.DIRECTOR_V2_DYNAMIC_SCHEDULER_INTERVAL_SECONDS,
                )
                and await is_dynamic_sidecar_stack_missing(
                    scheduler_data.node_uuid, dynamic_sidecar_settings
                )
            ):
                # if both proxy and sidecar ar missing at this point it
                # is safe to assume that user manually removed them from
                # Portainer after cleaning up.
                # NOTE: saving will fail since there is no dy-sidecar,
                # and the save was taken care of by support. Disabling it.
                scheduler_data.dynamic_sidecar.service_removal_state.can_save = False
                await attempt_pod_removal_and_data_saving(app, scheduler_data)
            return
        # use-cases: 1, 2
        # Cleanup all resources related to the dynamic-sidecar.
        await attempt_pod_removal_and_data_saving(app, scheduler_data)
        return
    scheduler_data_copy: SchedulerData = deepcopy(scheduler_data)
    try:
        await _apply_observation_cycle(scheduler, scheduler_data)
        logger.debug("completed observation cycle of %s", f"{service_name=}")
    except asyncio.CancelledError:  # pylint: disable=try-except-raise
        raise  # pragma: no cover
    except Exception as e:  # pylint: disable=broad-except
        service_name = scheduler_data.service_name
        # With unhandled errors, let's generate and ID and send it to the end-user
        # so that we can trace the logs and debug the issue.
        error_code = create_error_code(e)
        logger.exception(
            "Observation of %s unexpectedly failed [%s]",
            f"{service_name=} ",
            f"{error_code}",
            extra={"error_code": error_code},
        )
        scheduler_data.dynamic_sidecar.status.update_failing_status(
            # This message must be human-friendly
            f"Upss! This service ({service_name}) unexpectedly failed",
            error_code,
        )
    finally:
        if scheduler_data_copy != scheduler_data:
            try:
                await update_scheduler_data_label(scheduler_data)
            except GenericDockerError as e:
                logger.warning("Skipped labels update, please check:\n %s", f"{e}")