Merge branch 'v1.15' into actors-reminders-more-detail

This commit is contained in:
Whit Waldo 2025-01-28 11:17:54 -06:00 committed by GitHub
commit 039350873e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 261 additions and 111 deletions

View File

@ -76,7 +76,7 @@ Dapr exposes its HTTP and gRPC APIs as a sidecar architecture, either as a conta
## Hosting environments
Dapr can be hosted in multiple environments, including:
- Self-hosted on a Windows/Linux/macOS machine for local development
- Self-hosted on a Windows/Linux/macOS machine for local development and in production
- On Kubernetes or clusters of physical or virtual machines in production
### Self-hosted local development

View File

@ -57,7 +57,7 @@ This simplifies some choices, but also carries some consideration:
## Actor communication
You can interact with Dapr to invoke the actor method by calling HTTP/gRPC endpoint.
You can interact with Dapr to invoke the actor method by calling the HTTP endpoint.
```bash
POST/GET/PUT/DELETE http://localhost:3500/v1.0/actors/<actorType>/<actorId>/<method/state/timers/reminders>

View File

@ -20,7 +20,103 @@ When you [run `dapr init` in either self-hosted mode or on Kubernetes]({{< ref i
In your code, set up and schedule jobs within your application.
{{< tabs "Go" >}}
{{< tabs ".NET" "Go" >}}
{{% codetab %}}
<!-- .NET -->
The following .NET SDK code sample schedules the job named `prod-db-backup`. The job data contains information
about the database that you'll be seeking to backup regularly. Over the course of this example, you'll:
- Define types used in the rest of the example
- Register an endpoint during application startup that handles all job trigger invocations on the service
- Register the job with Dapr
In the following example, you'll create records that you'll serialize and register alongside the job so the information
is available when the job is triggered in the future:
- The name of the backup task (`db-backup`)
- The backup task's `Metadata`, including:
- The database name (`DBName`)
- The database location (`BackupLocation`)
Create an ASP.NET Core project and add the latest version of `Dapr.Jobs` from NuGet.
> **Note:** While it's not strictly necessary
for your project to use the `Microsoft.NET.Sdk.Web` SDK to create jobs, as of the time this documentation is authored,
only the service that schedules a job receives trigger invocations for it. As those invocations expect an endpoint
that can handle the job trigger and requires the `Microsoft.NET.Sdk.Web` SDK, it's recommended that you
use an ASP.NET Core project for this purpose.
Start by defining types to persist our backup job data and apply our own JSON property name attributes to the properties
so they're consistent with other language examples.
```cs
//Define the types that we'll represent the job data with
internal sealed record BackupJobData([property: JsonPropertyName("task")] string Task, [property: JsonPropertyName("metadata")] BackupMetadata Metadata);
internal sealed record BackupMetadata([property: JsonPropertyName("DBName")]string DatabaseName, [property: JsonPropertyName("BackupLocation")] string BackupLocation);
```
Next, set up a handler as part of your application setup that will be called anytime a job is triggered on your
application. It's the responsibility of this handler to identify how jobs should be processed based on the job name provided.
This works by registering a handler with ASP.NET Core at `/job/<job-name>`, where `<job-name>` is parameterized and
passed into this handler delegate, meeting Dapr's expectation that an endpoint is available to handle triggered named jobs.
Populate your `Program.cs` file with the following:
```cs
using System.Text;
using System.Text.Json;
using Dapr.Jobs;
using Dapr.Jobs.Extensions;
using Dapr.Jobs.Models;
using Dapr.Jobs.Models.Responses;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDaprJobsClient();
var app = builder.Build();
//Registers an endpoint to receive and process triggered jobs
var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5));
app.MapDaprScheduledJobHandler((string jobName, DaprJobDetails jobDetails, ILogger logger, CancellationToken cancellationToken) => {
logger?.LogInformation("Received trigger invocation for job '{jobName}'", jobName);
switch (jobName)
{
case "prod-db-backup":
// Deserialize the job payload metadata
var jobData = JsonSerializer.Deserialize<BackupJobData>(jobDetails.Payload);
// Process the backup operation - we assume this is implemented elsewhere in your code
await BackupDatabaseAsync(jobData, cancellationToken);
break;
}
}, cancellationTokenSource.Token);
await app.RunAsync();
```
Finally, the job itself needs to be registered with Dapr so it can be triggered at a later point in time. You can do this
by injecting a `DaprJobsClient` into a class and executing as part of an inbound operation to your application, but for
this example's purposes, it'll go at the bottom of the `Program.cs` file you started above. Because you'll be using the
`DaprJobsClient` you registered with dependency injection, start by creating a scope so you can access it.
```cs
//Create a scope so we can access the registered DaprJobsClient
await using scope = app.Services.CreateAsyncScope();
var daprJobsClient = scope.ServiceProvider.GetRequiredService<DaprJobsClient>();
//Create the payload we wish to present alongside our future job triggers
var jobData = new BackupJobData("db-backup", new BackupMetadata("my-prod-db", "/backup-dir"));
//Serialize our payload to UTF-8 bytes
var serializedJobData = JsonSerializer.SerializeToUtf8Bytes(jobData);
//Schedule our backup job to run every minute, but only repeat 10 times
await daprJobsClient.ScheduleJobAsync("prod-db-backup", DaprJobSchedule.FromDuration(TimeSpan.FromMinutes(1)),
serializedJobData, repeats: 10);
```
{{% /codetab %}}
{{% codetab %}}

View File

@ -6,145 +6,199 @@ description: "List of gRPC and HTTP error codes in Dapr and their descriptions"
weight: 20
---
The following tables list the error codes returned by Dapr runtime:
The following tables list the error codes returned by Dapr runtime.
The error codes are returned in the response body of an HTTP request or in the `ErrorInfo` section of a gRPC status response, if one is present.
An effort is underway to enrich all gRPC error responses according to the [Richer Error Model]({{< ref "grpc-error-codes.md#richer-grpc-error-model" >}}). Error codes without a corresponding gRPC code indicate those errors have not yet been updated to this model.
### Actors API
| Error Code | Description |
| -------------------------------- | ------------------------------------------ |
| ERR_ACTOR_INSTANCE_MISSING | Error when an actor instance is missing. |
| ERR_ACTOR_RUNTIME_NOT_FOUND | Error the actor instance. |
| ERR_ACTOR_REMINDER_CREATE | Error creating a reminder for an actor. |
| ERR_ACTOR_REMINDER_DELETE | Error deleting a reminder for an actor. |
| ERR_ACTOR_TIMER_CREATE | Error creating a timer for an actor. |
| ERR_ACTOR_TIMER_DELETE | Error deleting a timer for an actor. |
| ERR_ACTOR_REMINDER_GET | Error getting a reminder for an actor. |
| ERR_ACTOR_INVOKE_METHOD | Error invoking a method on an actor. |
| ERR_ACTOR_STATE_DELETE | Error deleting the state for an actor. |
| ERR_ACTOR_STATE_GET | Error getting the state for an actor. |
| ERR_ACTOR_STATE_TRANSACTION_SAVE | Error storing actor state transactionally. |
| ERR_ACTOR_REMINDER_NON_HOSTED | Error setting reminder for an actor. |
| HTTP Code | gRPC Code | Description |
| ---------------------------------- | --------- | ----------------------------------------------------------------------- |
| `ERR_ACTOR_INSTANCE_MISSING` | | Missing actor instance |
| `ERR_ACTOR_INVOKE_METHOD` | | Error invoking actor method |
| `ERR_ACTOR_RUNTIME_NOT_FOUND` | | Actor runtime not found |
| `ERR_ACTOR_STATE_GET` | | Error getting actor state |
| `ERR_ACTOR_STATE_TRANSACTION_SAVE` | | Error saving actor transaction |
| `ERR_ACTOR_REMINDER_CREATE` | | Error creating actor reminder |
| `ERR_ACTOR_REMINDER_DELETE` | | Error deleting actor reminder |
| `ERR_ACTOR_REMINDER_GET` | | Error getting actor reminder |
| `ERR_ACTOR_REMINDER_NON_HOSTED` | | Reminder operation on non-hosted actor type |
| `ERR_ACTOR_TIMER_CREATE` | | Error creating actor timer |
| `ERR_ACTOR_NO_APP_CHANNEL` | | App channel not initialized |
| `ERR_ACTOR_STACK_DEPTH` | | Maximum actor call stack depth exceeded |
| `ERR_ACTOR_NO_PLACEMENT` | | Placement service not configured |
| `ERR_ACTOR_RUNTIME_CLOSED` | | Actor runtime is closed |
| `ERR_ACTOR_NAMESPACE_REQUIRED` | | Actors must have a namespace configured when running in Kubernetes mode |
| `ERR_ACTOR_NO_ADDRESS` | | No address found for actor |
### Workflows API
| Error Code | Description |
| -------------------------------- | ----------------------------------------------------------- |
| ERR_GET_WORKFLOW | Error getting workflow. |
| ERR_START_WORKFLOW | Error starting the workflow. |
| ERR_PAUSE_WORKFLOW | Error pausing the workflow. |
| ERR_RESUME_WORKFLOW | Error resuming the workflow. |
| ERR_TERMINATE_WORKFLOW | Error terminating the workflow. |
| ERR_PURGE_WORKFLOW | Error purging workflow. |
| ERR_RAISE_EVENT_WORKFLOW | Error raising an event within the workflow. |
| ERR_WORKFLOW_COMPONENT_MISSING | Error when a workflow component is missing a configuration. |
| ERR_WORKFLOW_COMPONENT_NOT_FOUND | Error when a workflow component is not found. |
| ERR_WORKFLOW_EVENT_NAME_MISSING | Error when the event name for a workflow is missing. |
| ERR_WORKFLOW_NAME_MISSING | Error when the workflow name is missing. |
| ERR_INSTANCE_ID_INVALID | Error invalid workflow instance ID provided. |
| ERR_INSTANCE_ID_NOT_FOUND | Error workflow instance ID not found. |
| ERR_INSTANCE_ID_PROVIDED_MISSING | Error workflow instance ID was provided but missing. |
| ERR_INSTANCE_ID_TOO_LONG | Error workflow instance ID exceeds allowable length. |
| HTTP Code | gRPC Code | Description |
| ---------------------------------- | --------- | --------------------------------------------------------------------------------------- |
| `ERR_GET_WORKFLOW` | | Error getting workflow |
| `ERR_START_WORKFLOW` | | Error starting workflow |
| `ERR_PAUSE_WORKFLOW` | | Error pausing workflow |
| `ERR_RESUME_WORKFLOW` | | Error resuming workflow |
| `ERR_TERMINATE_WORKFLOW` | | Error terminating workflow |
| `ERR_PURGE_WORKFLOW` | | Error purging workflow |
| `ERR_RAISE_EVENT_WORKFLOW` | | Error raising event in workflow |
| `ERR_WORKFLOW_COMPONENT_MISSING` | | Missing workflow component |
| `ERR_WORKFLOW_COMPONENT_NOT_FOUND` | | Workflow component not found |
| `ERR_WORKFLOW_EVENT_NAME_MISSING` | | Missing workflow event name |
| `ERR_WORKFLOW_NAME_MISSING` | | Workflow name not configured |
| `ERR_INSTANCE_ID_INVALID` | | Invalid workflow instance ID. (Only alphanumeric and underscore characters are allowed) |
| `ERR_INSTANCE_ID_NOT_FOUND` | | Workflow instance ID not found |
| `ERR_INSTANCE_ID_PROVIDED_MISSING` | | Missing workflow instance ID |
| `ERR_INSTANCE_ID_TOO_LONG` | | Workflow instance ID too long |
### State Management API
| Error Code | Description |
| ------------------------------------- | ------------------------------------------------------------------------- |
| ERR_STATE_STORE_NOT_FOUND | Error referencing a state store not found. |
| ERR_STATE_STORES_NOT_CONFIGURED | Error no state stores configured. |
| ERR_NOT_SUPPORTED_STATE_OPERATION | Error transaction requested on a state store with no transaction support. |
| ERR_STATE_GET | Error getting a state for state store. |
| ERR_STATE_DELETE | Error deleting a state from state store. |
| ERR_STATE_SAVE | Error saving a state in state store. |
| ERR_STATE_TRANSACTION | Error encountered during state transaction. |
| ERR_STATE_BULK_GET | Error performing bulk retrieval of state entries. |
| ERR_STATE_QUERY | Error querying the state store. |
| ERR_STATE_STORE_NOT_CONFIGURED | Error state store is not configured. |
| ERR_STATE_STORE_NOT_SUPPORTED | Error state store is not supported. |
| ERR_STATE_STORE_TOO_MANY_TRANSACTIONS | Error exceeded maximum allowable transactions. |
### State management API
| HTTP Code | gRPC Code | Description |
| --------------------------------------- | --------------------------------------- | ----------------------------------------- |
| `ERR_STATE_TRANSACTION` | | Error in state transaction |
| `ERR_STATE_SAVE` | | Error saving state |
| `ERR_STATE_GET` | | Error getting state |
| `ERR_STATE_DELETE` | | Error deleting state |
| `ERR_STATE_BULK_DELETE` | | Error deleting state in bulk |
| `ERR_STATE_BULK_GET` | | Error getting state in bulk |
| `ERR_NOT_SUPPORTED_STATE_OPERATION` | | Operation not supported in transaction |
| `ERR_STATE_QUERY` | `DAPR_STATE_QUERY_FAILED` | Error querying state |
| `ERR_STATE_STORE_NOT_FOUND` | `DAPR_STATE_NOT_FOUND` | State store not found |
| `ERR_STATE_STORE_NOT_CONFIGURED` | `DAPR_STATE_NOT_CONFIGURED` | State store not configured |
| `ERR_STATE_STORE_NOT_SUPPORTED` | `DAPR_STATE_TRANSACTIONS_NOT_SUPPORTED` | State store does not support transactions |
| `ERR_STATE_STORE_NOT_SUPPORTED` | `DAPR_STATE_QUERYING_NOT_SUPPORTED` | State store does not support querying |
| `ERR_STATE_STORE_TOO_MANY_TRANSACTIONS` | `DAPR_STATE_TOO_MANY_TRANSACTIONS` | Too many operations per transaction |
| `ERR_MALFORMED_REQUEST` | `DAPR_STATE_ILLEGAL_KEY` | Invalid key |
### Configuration API
| Error Code | Description |
| -------------------------------------- | -------------------------------------------- |
| ERR_CONFIGURATION_GET | Error retrieving configuration. |
| ERR_CONFIGURATION_STORE_NOT_CONFIGURED | Error configuration store is not configured. |
| ERR_CONFIGURATION_STORE_NOT_FOUND | Error configuration store not found. |
| ERR_CONFIGURATION_SUBSCRIBE | Error subscribing to a configuration. |
| ERR_CONFIGURATION_UNSUBSCRIBE | Error unsubscribing from a configuration. |
| HTTP Code | gRPC Code | Description |
| ---------------------------------------- | --------- | -------------------------------------- |
| `ERR_CONFIGURATION_GET` | | Error getting configuration |
| `ERR_CONFIGURATION_STORE_NOT_CONFIGURED` | | Configuration store not configured |
| `ERR_CONFIGURATION_STORE_NOT_FOUND` | | Configuration store not found |
| `ERR_CONFIGURATION_SUBSCRIBE` | | Error subscribing to configuration |
| `ERR_CONFIGURATION_UNSUBSCRIBE` | | Error unsubscribing from configuration |
### Crypto API
| Error Code | Description |
| ----------------------------------- | ------------------------------------------ |
| ERR_CRYPTO | General crypto building block error. |
| ERR_CRYPTO_KEY | Error related to a crypto key. |
| ERR_CRYPTO_PROVIDER_NOT_FOUND | Error specified crypto provider not found. |
| ERR_CRYPTO_PROVIDERS_NOT_CONFIGURED | Error no crypto providers configured. |
| HTTP Code | gRPC Code | Description |
| ------------------------------------- | --------- | ------------------------------- |
| `ERR_CRYPTO` | | Error in crypto operation |
| `ERR_CRYPTO_KEY` | | Error retrieving crypto key |
| `ERR_CRYPTO_PROVIDER_NOT_FOUND` | | Crypto provider not found |
| `ERR_CRYPTO_PROVIDERS_NOT_CONFIGURED` | | Crypto providers not configured |
### Secrets API
| Error Code | Description |
| -------------------------------- | ---------------------------------------------------- |
| ERR_SECRET_STORES_NOT_CONFIGURED | Error that no secret store is configured. |
| ERR_SECRET_STORE_NOT_FOUND | Error that specified secret store is not found. |
| ERR_SECRET_GET | Error retrieving the specified secret. |
| ERR_PERMISSION_DENIED | Error access denied due to insufficient permissions. |
| HTTP Code | gRPC Code | Description |
| ---------------------------------- | --------- | --------------------------- |
| `ERR_SECRET_GET` | | Error getting secret |
| `ERR_SECRET_STORE_NOT_FOUND` | | Secret store not found |
| `ERR_SECRET_STORES_NOT_CONFIGURED` | | Secret store not configured |
| `ERR_PERMISSION_DENIED` | | Permission denied by policy |
### Pub/Sub API
| Error Code | Description |
| --------------------------- | -------------------------------------------------------- |
| ERR_PUBSUB_NOT_FOUND | Error referencing the Pub/Sub component in Dapr runtime. |
| ERR_PUBSUB_PUBLISH_MESSAGE | Error publishing a message. |
| ERR_PUBSUB_FORBIDDEN | Error message forbidden by access controls. |
| ERR_PUBSUB_CLOUD_EVENTS_SER | Error serializing Pub/Sub event envelope. |
| ERR_PUBSUB_EMPTY | Error empty Pub/Sub. |
| ERR_PUBSUB_NOT_CONFIGURED | Error Pub/Sub component is not configured. |
| ERR_PUBSUB_REQUEST_METADATA | Error with metadata in Pub/Sub request. |
| ERR_PUBSUB_EVENTS_SER | Error serializing Pub/Sub events. |
| ERR_PUBLISH_OUTBOX | Error publishing message to the outbox. |
| ERR_TOPIC_NAME_EMPTY | Error topic name for Pub/Sub message is empty. |
### Pub/Sub and messaging errors
| HTTP Code | gRPC Code | Description |
| ----------------------------- | -------------------------------------- | -------------------------------------- |
| `ERR_PUBSUB_EMPTY` | `DAPR_PUBSUB_NAME_EMPTY` | Pubsub name is empty |
| `ERR_PUBSUB_NOT_FOUND` | `DAPR_PUBSUB_NOT_FOUND` | Pubsub not found |
| `ERR_PUBSUB_NOT_FOUND` | `DAPR_PUBSUB_TEST_NOT_FOUND` | Pubsub not found |
| `ERR_PUBSUB_NOT_CONFIGURED` | `DAPR_PUBSUB_NOT_CONFIGURED` | Pubsub not configured |
| `ERR_TOPIC_NAME_EMPTY` | `DAPR_PUBSUB_TOPIC_NAME_EMPTY` | Topic name is empty |
| `ERR_PUBSUB_FORBIDDEN` | `DAPR_PUBSUB_FORBIDDEN` | Access to topic forbidden for APP ID |
| `ERR_PUBSUB_PUBLISH_MESSAGE` | `DAPR_PUBSUB_PUBLISH_MESSAGE` | Error publishing message |
| `ERR_PUBSUB_REQUEST_METADATA` | `DAPR_PUBSUB_METADATA_DESERIALIZATION` | Error deserializing metadata |
| `ERR_PUBSUB_CLOUD_EVENTS_SER` | `DAPR_PUBSUB_CLOUD_EVENT_CREATION` | Error creating CloudEvent |
| `ERR_PUBSUB_EVENTS_SER` | `DAPR_PUBSUB_MARSHAL_ENVELOPE` | Error marshalling Cloud Event envelope |
| `ERR_PUBSUB_EVENTS_SER` | `DAPR_PUBSUB_MARSHAL_EVENTS` | Error marshalling events to bytes |
| `ERR_PUBSUB_EVENTS_SER` | `DAPR_PUBSUB_UNMARSHAL_EVENTS` | Error unmarshalling events |
| `ERR_PUBLISH_OUTBOX` | | Error publishing message to outbox |
### Conversation API
| Error Code | Description |
| ------------------------------- | ----------------------------------------------- |
| ERR_INVOKE_OUTPUT_BINDING | Error invoking an output binding. |
| ERR_DIRECT_INVOKE | Error in direct invocation. |
| ERR_CONVERSATION_INVALID_PARMS | Error invalid parameters for conversation. |
| ERR_CONVERSATION_INVOKE | Error invoking the conversation. |
| ERR_CONVERSATION_MISSING_INPUTS | Error missing required inputs for conversation. |
| ERR_CONVERSATION_NOT_FOUND | Error conversation not found. |
| HTTP Code | gRPC Code | Description |
| --------------------------------- | --------- | --------------------------------------------- |
| `ERR_CONVERSATION_INVALID_PARMS` | | Invalid parameters for conversation component |
| `ERR_CONVERSATION_INVOKE` | | Error invoking conversation |
| `ERR_CONVERSATION_MISSING_INPUTS` | | Missing inputs for conversation |
| `ERR_CONVERSATION_NOT_FOUND` | | Conversation not found |
### Service Invocation / Direct Messaging API
| HTTP Code | gRPC Code | Description |
| ------------------- | --------- | ---------------------- |
| `ERR_DIRECT_INVOKE` | | Error invoking service |
### Bindings API
| HTTP Code | gRPC Code | Description |
| --------------------------- | --------- | ----------------------------- |
| `ERR_INVOKE_OUTPUT_BINDING` | | Error invoking output binding |
### Distributed Lock API
| Error Code | Description |
| ----------------------------- | ----------------------------------- |
| ERR_TRY_LOCK | Error attempting to acquire a lock. |
| ERR_UNLOCK | Error attempting to release a lock. |
| ERR_LOCK_STORE_NOT_CONFIGURED | Error lock store is not configured. |
| ERR_LOCK_STORE_NOT_FOUND | Error lock store not found. |
| HTTP Code | gRPC Code | Description |
| ------------------------------- | --------- | ------------------------- |
| `ERR_LOCK_STORE_NOT_CONFIGURED` | | Lock store not configured |
| `ERR_LOCK_STORE_NOT_FOUND` | | Lock store not found |
| `ERR_TRY_LOCK` | | Error acquiring lock |
| `ERR_UNLOCK` | | Error releasing lock |
### Healthz
| Error Code | Description |
| ----------------------------- | --------------------------------------------------------------- |
| ERR_HEALTH_NOT_READY | Error that Dapr is not ready. |
| ERR_HEALTH_APPID_NOT_MATCH | Error the app-id does not match expected value in health check. |
| ERR_OUTBOUND_HEALTH_NOT_READY | Error outbound connection health is not ready. |
| HTTP Code | gRPC Code | Description |
| ------------------------------- | --------- | --------------------------- |
| `ERR_HEALTH_NOT_READY` | | Dapr not ready |
| `ERR_HEALTH_APPID_NOT_MATCH` | | Dapr App ID does not match |
| `ERR_OUTBOUND_HEALTH_NOT_READY` | | Dapr outbound not ready |
### Common
| Error Code | Description |
| -------------------------- | ------------------------------------------------ |
| ERR_API_UNIMPLEMENTED | Error API is not implemented. |
| ERR_APP_CHANNEL_NIL | Error application channel is nil. |
| ERR_BAD_REQUEST | Error client request is badly formed or invalid. |
| ERR_BODY_READ | Error reading body. |
| ERR_INTERNAL | Internal server error encountered. |
| ERR_MALFORMED_REQUEST | Error with a malformed request. |
| ERR_MALFORMED_REQUEST_DATA | Error request data is malformed. |
| ERR_MALFORMED_RESPONSE | Error response data is malformed. |
| HTTP Code | gRPC Code | Description |
| ---------------------------- | --------- | -------------------------- |
| `ERR_API_UNIMPLEMENTED` | | API not implemented |
| `ERR_APP_CHANNEL_NIL` | | App channel is nil |
| `ERR_BAD_REQUEST` | | Bad request |
| `ERR_BODY_READ` | | Error reading request body |
| `ERR_INTERNAL` | | Internal error |
| `ERR_MALFORMED_REQUEST` | | Malformed request |
| `ERR_MALFORMED_REQUEST_DATA` | | Malformed request data |
| `ERR_MALFORMED_RESPONSE` | | Malformed response |
### Scheduler/Jobs API
| HTTP Code | gRPC Code | Description |
| ------------------------------- | ------------------------------- | -------------------------------------- |
| `DAPR_SCHEDULER_SCHEDULE_JOB` | `DAPR_SCHEDULER_SCHEDULE_JOB` | Error scheduling job |
| `DAPR_SCHEDULER_JOB_NAME` | `DAPR_SCHEDULER_JOB_NAME` | Job name should only be set in the url |
| `DAPR_SCHEDULER_JOB_NAME_EMPTY` | `DAPR_SCHEDULER_JOB_NAME_EMPTY` | Job name is empty |
| `DAPR_SCHEDULER_GET_JOB` | `DAPR_SCHEDULER_GET_JOB` | Error getting job |
| `DAPR_SCHEDULER_LIST_JOBS` | `DAPR_SCHEDULER_LIST_JOBS` | Error listing jobs |
| `DAPR_SCHEDULER_DELETE_JOB` | `DAPR_SCHEDULER_DELETE_JOB` | Error deleting job |
| `DAPR_SCHEDULER_EMPTY` | `DAPR_SCHEDULER_EMPTY` | Required argument is empty |
| `DAPR_SCHEDULER_SCHEDULE_EMPTY` | `DAPR_SCHEDULER_SCHEDULE_EMPTY` | No schedule provided for job |
### Generic
| HTTP Code | gRPC Code | Description |
| --------- | --------- | ------------- |
| `ERROR` | `ERROR` | Generic error |
## Next steps