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 ## Hosting environments
Dapr can be hosted in multiple environments, including: 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 - On Kubernetes or clusters of physical or virtual machines in production
### Self-hosted local development ### Self-hosted local development

View File

@ -57,7 +57,7 @@ This simplifies some choices, but also carries some consideration:
## Actor communication ## 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 ```bash
POST/GET/PUT/DELETE http://localhost:3500/v1.0/actors/<actorType>/<actorId>/<method/state/timers/reminders> 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. 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 %}} {{% codetab %}}

View File

@ -6,145 +6,199 @@ description: "List of gRPC and HTTP error codes in Dapr and their descriptions"
weight: 20 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 ### Actors API
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| -------------------------------- | ------------------------------------------ | | ---------------------------------- | --------- | ----------------------------------------------------------------------- |
| ERR_ACTOR_INSTANCE_MISSING | Error when an actor instance is missing. | | `ERR_ACTOR_INSTANCE_MISSING` | | Missing actor instance |
| ERR_ACTOR_RUNTIME_NOT_FOUND | Error the actor instance. | | `ERR_ACTOR_INVOKE_METHOD` | | Error invoking actor method |
| ERR_ACTOR_REMINDER_CREATE | Error creating a reminder for an actor. | | `ERR_ACTOR_RUNTIME_NOT_FOUND` | | Actor runtime not found |
| ERR_ACTOR_REMINDER_DELETE | Error deleting a reminder for an actor. | | `ERR_ACTOR_STATE_GET` | | Error getting actor state |
| ERR_ACTOR_TIMER_CREATE | Error creating a timer for an actor. | | `ERR_ACTOR_STATE_TRANSACTION_SAVE` | | Error saving actor transaction |
| ERR_ACTOR_TIMER_DELETE | Error deleting a timer for an actor. | | `ERR_ACTOR_REMINDER_CREATE` | | Error creating actor reminder |
| ERR_ACTOR_REMINDER_GET | Error getting a reminder for an actor. | | `ERR_ACTOR_REMINDER_DELETE` | | Error deleting actor reminder |
| ERR_ACTOR_INVOKE_METHOD | Error invoking a method on an actor. | | `ERR_ACTOR_REMINDER_GET` | | Error getting actor reminder |
| ERR_ACTOR_STATE_DELETE | Error deleting the state for an actor. | | `ERR_ACTOR_REMINDER_NON_HOSTED` | | Reminder operation on non-hosted actor type |
| ERR_ACTOR_STATE_GET | Error getting the state for an actor. | | `ERR_ACTOR_TIMER_CREATE` | | Error creating actor timer |
| ERR_ACTOR_STATE_TRANSACTION_SAVE | Error storing actor state transactionally. | | `ERR_ACTOR_NO_APP_CHANNEL` | | App channel not initialized |
| ERR_ACTOR_REMINDER_NON_HOSTED | Error setting reminder for an actor. | | `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 ### Workflows API
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| -------------------------------- | ----------------------------------------------------------- | | ---------------------------------- | --------- | --------------------------------------------------------------------------------------- |
| ERR_GET_WORKFLOW | Error getting workflow. | | `ERR_GET_WORKFLOW` | | Error getting workflow |
| ERR_START_WORKFLOW | Error starting the workflow. | | `ERR_START_WORKFLOW` | | Error starting workflow |
| ERR_PAUSE_WORKFLOW | Error pausing the workflow. | | `ERR_PAUSE_WORKFLOW` | | Error pausing workflow |
| ERR_RESUME_WORKFLOW | Error resuming the workflow. | | `ERR_RESUME_WORKFLOW` | | Error resuming workflow |
| ERR_TERMINATE_WORKFLOW | Error terminating the workflow. | | `ERR_TERMINATE_WORKFLOW` | | Error terminating workflow |
| ERR_PURGE_WORKFLOW | Error purging workflow. | | `ERR_PURGE_WORKFLOW` | | Error purging workflow |
| ERR_RAISE_EVENT_WORKFLOW | Error raising an event within the workflow. | | `ERR_RAISE_EVENT_WORKFLOW` | | Error raising event in workflow |
| ERR_WORKFLOW_COMPONENT_MISSING | Error when a workflow component is missing a configuration. | | `ERR_WORKFLOW_COMPONENT_MISSING` | | Missing workflow component |
| ERR_WORKFLOW_COMPONENT_NOT_FOUND | Error when a workflow component is not found. | | `ERR_WORKFLOW_COMPONENT_NOT_FOUND` | | Workflow component not found |
| ERR_WORKFLOW_EVENT_NAME_MISSING | Error when the event name for a workflow is missing. | | `ERR_WORKFLOW_EVENT_NAME_MISSING` | | Missing workflow event name |
| ERR_WORKFLOW_NAME_MISSING | Error when the workflow name is missing. | | `ERR_WORKFLOW_NAME_MISSING` | | Workflow name not configured |
| ERR_INSTANCE_ID_INVALID | Error invalid workflow instance ID provided. | | `ERR_INSTANCE_ID_INVALID` | | Invalid workflow instance ID. (Only alphanumeric and underscore characters are allowed) |
| ERR_INSTANCE_ID_NOT_FOUND | Error workflow instance ID not found. | | `ERR_INSTANCE_ID_NOT_FOUND` | | Workflow instance ID not found |
| ERR_INSTANCE_ID_PROVIDED_MISSING | Error workflow instance ID was provided but missing. | | `ERR_INSTANCE_ID_PROVIDED_MISSING` | | Missing workflow instance ID |
| ERR_INSTANCE_ID_TOO_LONG | Error workflow instance ID exceeds allowable length. | | `ERR_INSTANCE_ID_TOO_LONG` | | Workflow instance ID too long |
### State Management API
| Error Code | Description | ### State management API
| ------------------------------------- | ------------------------------------------------------------------------- |
| ERR_STATE_STORE_NOT_FOUND | Error referencing a state store not found. | | HTTP Code | gRPC Code | Description |
| 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_TRANSACTION` | | Error in state transaction |
| ERR_STATE_GET | Error getting a state for state store. | | `ERR_STATE_SAVE` | | Error saving state |
| ERR_STATE_DELETE | Error deleting a state from state store. | | `ERR_STATE_GET` | | Error getting state |
| ERR_STATE_SAVE | Error saving a state in state store. | | `ERR_STATE_DELETE` | | Error deleting state |
| ERR_STATE_TRANSACTION | Error encountered during state transaction. | | `ERR_STATE_BULK_DELETE` | | Error deleting state in bulk |
| ERR_STATE_BULK_GET | Error performing bulk retrieval of state entries. | | `ERR_STATE_BULK_GET` | | Error getting state in bulk |
| ERR_STATE_QUERY | Error querying the state store. | | `ERR_NOT_SUPPORTED_STATE_OPERATION` | | Operation not supported in transaction |
| ERR_STATE_STORE_NOT_CONFIGURED | Error state store is not configured. | | `ERR_STATE_QUERY` | `DAPR_STATE_QUERY_FAILED` | Error querying state |
| ERR_STATE_STORE_NOT_SUPPORTED | Error state store is not supported. | | `ERR_STATE_STORE_NOT_FOUND` | `DAPR_STATE_NOT_FOUND` | State store not found |
| ERR_STATE_STORE_TOO_MANY_TRANSACTIONS | Error exceeded maximum allowable transactions. | | `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 ### Configuration API
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| -------------------------------------- | -------------------------------------------- | | ---------------------------------------- | --------- | -------------------------------------- |
| ERR_CONFIGURATION_GET | Error retrieving configuration. | | `ERR_CONFIGURATION_GET` | | Error getting configuration |
| ERR_CONFIGURATION_STORE_NOT_CONFIGURED | Error configuration store is not configured. | | `ERR_CONFIGURATION_STORE_NOT_CONFIGURED` | | Configuration store not configured |
| ERR_CONFIGURATION_STORE_NOT_FOUND | Error configuration store not found. | | `ERR_CONFIGURATION_STORE_NOT_FOUND` | | Configuration store not found |
| ERR_CONFIGURATION_SUBSCRIBE | Error subscribing to a configuration. | | `ERR_CONFIGURATION_SUBSCRIBE` | | Error subscribing to configuration |
| ERR_CONFIGURATION_UNSUBSCRIBE | Error unsubscribing from a configuration. | | `ERR_CONFIGURATION_UNSUBSCRIBE` | | Error unsubscribing from configuration |
### Crypto API ### Crypto API
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| ----------------------------------- | ------------------------------------------ | | ------------------------------------- | --------- | ------------------------------- |
| ERR_CRYPTO | General crypto building block error. | | `ERR_CRYPTO` | | Error in crypto operation |
| ERR_CRYPTO_KEY | Error related to a crypto key. | | `ERR_CRYPTO_KEY` | | Error retrieving crypto key |
| ERR_CRYPTO_PROVIDER_NOT_FOUND | Error specified crypto provider not found. | | `ERR_CRYPTO_PROVIDER_NOT_FOUND` | | Crypto provider not found |
| ERR_CRYPTO_PROVIDERS_NOT_CONFIGURED | Error no crypto providers configured. | | `ERR_CRYPTO_PROVIDERS_NOT_CONFIGURED` | | Crypto providers not configured |
### Secrets API ### Secrets API
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| -------------------------------- | ---------------------------------------------------- | | ---------------------------------- | --------- | --------------------------- |
| ERR_SECRET_STORES_NOT_CONFIGURED | Error that no secret store is configured. | | `ERR_SECRET_GET` | | Error getting secret |
| ERR_SECRET_STORE_NOT_FOUND | Error that specified secret store is not found. | | `ERR_SECRET_STORE_NOT_FOUND` | | Secret store not found |
| ERR_SECRET_GET | Error retrieving the specified secret. | | `ERR_SECRET_STORES_NOT_CONFIGURED` | | Secret store not configured |
| ERR_PERMISSION_DENIED | Error access denied due to insufficient permissions. | | `ERR_PERMISSION_DENIED` | | Permission denied by policy |
### Pub/Sub API
| Error Code | Description | ### Pub/Sub and messaging errors
| --------------------------- | -------------------------------------------------------- |
| ERR_PUBSUB_NOT_FOUND | Error referencing the Pub/Sub component in Dapr runtime. | | HTTP Code | gRPC Code | Description |
| ERR_PUBSUB_PUBLISH_MESSAGE | Error publishing a message. | | ----------------------------- | -------------------------------------- | -------------------------------------- |
| ERR_PUBSUB_FORBIDDEN | Error message forbidden by access controls. | | `ERR_PUBSUB_EMPTY` | `DAPR_PUBSUB_NAME_EMPTY` | Pubsub name is empty |
| ERR_PUBSUB_CLOUD_EVENTS_SER | Error serializing Pub/Sub event envelope. | | `ERR_PUBSUB_NOT_FOUND` | `DAPR_PUBSUB_NOT_FOUND` | Pubsub not found |
| ERR_PUBSUB_EMPTY | Error empty Pub/Sub. | | `ERR_PUBSUB_NOT_FOUND` | `DAPR_PUBSUB_TEST_NOT_FOUND` | Pubsub not found |
| ERR_PUBSUB_NOT_CONFIGURED | Error Pub/Sub component is not configured. | | `ERR_PUBSUB_NOT_CONFIGURED` | `DAPR_PUBSUB_NOT_CONFIGURED` | Pubsub not configured |
| ERR_PUBSUB_REQUEST_METADATA | Error with metadata in Pub/Sub request. | | `ERR_TOPIC_NAME_EMPTY` | `DAPR_PUBSUB_TOPIC_NAME_EMPTY` | Topic name is empty |
| ERR_PUBSUB_EVENTS_SER | Error serializing Pub/Sub events. | | `ERR_PUBSUB_FORBIDDEN` | `DAPR_PUBSUB_FORBIDDEN` | Access to topic forbidden for APP ID |
| ERR_PUBLISH_OUTBOX | Error publishing message to the outbox. | | `ERR_PUBSUB_PUBLISH_MESSAGE` | `DAPR_PUBSUB_PUBLISH_MESSAGE` | Error publishing message |
| ERR_TOPIC_NAME_EMPTY | Error topic name for Pub/Sub message is empty. | | `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 ### Conversation API
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| ------------------------------- | ----------------------------------------------- | | --------------------------------- | --------- | --------------------------------------------- |
| ERR_INVOKE_OUTPUT_BINDING | Error invoking an output binding. | | `ERR_CONVERSATION_INVALID_PARMS` | | Invalid parameters for conversation component |
| ERR_DIRECT_INVOKE | Error in direct invocation. | | `ERR_CONVERSATION_INVOKE` | | Error invoking conversation |
| ERR_CONVERSATION_INVALID_PARMS | Error invalid parameters for conversation. | | `ERR_CONVERSATION_MISSING_INPUTS` | | Missing inputs for conversation |
| ERR_CONVERSATION_INVOKE | Error invoking the conversation. | | `ERR_CONVERSATION_NOT_FOUND` | | Conversation not found |
| ERR_CONVERSATION_MISSING_INPUTS | Error missing required inputs for conversation. |
| ERR_CONVERSATION_NOT_FOUND | Error 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 ### Distributed Lock API
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| ----------------------------- | ----------------------------------- | | ------------------------------- | --------- | ------------------------- |
| ERR_TRY_LOCK | Error attempting to acquire a lock. | | `ERR_LOCK_STORE_NOT_CONFIGURED` | | Lock store not configured |
| ERR_UNLOCK | Error attempting to release a lock. | | `ERR_LOCK_STORE_NOT_FOUND` | | Lock store not found |
| ERR_LOCK_STORE_NOT_CONFIGURED | Error lock store is not configured. | | `ERR_TRY_LOCK` | | Error acquiring lock |
| ERR_LOCK_STORE_NOT_FOUND | Error lock store not found. | | `ERR_UNLOCK` | | Error releasing lock |
### Healthz ### Healthz
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| ----------------------------- | --------------------------------------------------------------- | | ------------------------------- | --------- | --------------------------- |
| ERR_HEALTH_NOT_READY | Error that Dapr is not ready. | | `ERR_HEALTH_NOT_READY` | | Dapr not ready |
| ERR_HEALTH_APPID_NOT_MATCH | Error the app-id does not match expected value in health check. | | `ERR_HEALTH_APPID_NOT_MATCH` | | Dapr App ID does not match |
| ERR_OUTBOUND_HEALTH_NOT_READY | Error outbound connection health is not ready. | | `ERR_OUTBOUND_HEALTH_NOT_READY` | | Dapr outbound not ready |
### Common ### Common
| Error Code | Description | | HTTP Code | gRPC Code | Description |
| -------------------------- | ------------------------------------------------ | | ---------------------------- | --------- | -------------------------- |
| ERR_API_UNIMPLEMENTED | Error API is not implemented. | | `ERR_API_UNIMPLEMENTED` | | API not implemented |
| ERR_APP_CHANNEL_NIL | Error application channel is nil. | | `ERR_APP_CHANNEL_NIL` | | App channel is nil |
| ERR_BAD_REQUEST | Error client request is badly formed or invalid. | | `ERR_BAD_REQUEST` | | Bad request |
| ERR_BODY_READ | Error reading body. | | `ERR_BODY_READ` | | Error reading request body |
| ERR_INTERNAL | Internal server error encountered. | | `ERR_INTERNAL` | | Internal error |
| ERR_MALFORMED_REQUEST | Error with a malformed request. | | `ERR_MALFORMED_REQUEST` | | Malformed request |
| ERR_MALFORMED_REQUEST_DATA | Error request data is malformed. | | `ERR_MALFORMED_REQUEST_DATA` | | Malformed request data |
| ERR_MALFORMED_RESPONSE | Error response data is malformed. | | `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 ## Next steps