revise entity backend properties and implement entity backend queries#957
Conversation
| MaxConcurrentTaskEntityWorkItems = this.settings.MaxConcurrentTaskEntityWorkItems, | ||
| SupportsImplicitEntityDeletion = false, // not supported by this backend | ||
| MaximumSignalDelayTime = TimeSpan.FromDays(6), | ||
| UseSeparateQueueForEntityWorkItems = this.settings.UseSeparateQueueForEntityWorkItems, |
There was a problem hiding this comment.
What is this "use separate queue" feature?
There was a problem hiding this comment.
This means the backend maintains two separate queues for orchestration work items and entity work items. Among other things, this makes it possible to specify separate concurrency limits for the two.
davidmrdavid
left a comment
There was a problem hiding this comment.
A few questions from a quick pass
| => new EntityTrackingStoreQueries( | ||
| this.messageManager, | ||
| (this.trackingStore as AzureTableTrackingStore) | ||
| ?? throw new NotSupportedException("entity queries not supported for custom tracking stores"), |
There was a problem hiding this comment.
nit:
| ?? throw new NotSupportedException("entity queries not supported for custom tracking stores"), | |
| ?? throw new NotSupportedException("entity queries are not supported for custom tracking stores"), |
Also, why separate tracking stores not supported?
There was a problem hiding this comment.
I thought I needed to access some internal methods of AzureTableTrackingStore. However, now that I look at it again, that seems not actually necessary. Will change it so all tracking stores are supported.
| if (this.settings.UseSeparateQueueForEntityWorkItems) | ||
| { | ||
| throw new InvalidOperationException("backend was configured for separate orchestration/entity processing, must use specialized methods to get work items"); | ||
| } |
There was a problem hiding this comment.
This error message is not particularly customer actionable as far as I can tell. What can the customer do to deal with this error?
There was a problem hiding this comment.
If the customer sees this we messed up. So the message is really for us. I can modify the text to make this clearer.
| namespace DurableTask.Core.Entities | ||
| { | ||
| using System; | ||
| using System.Threading; |
There was a problem hiding this comment.
do we really need this here?
There was a problem hiding this comment.
It seems needed by one of the references in the XML comments.
| /// <returns>An object containing properties of the entity backend, or null if the backend does not natively support entities.</returns> | ||
| EntityBackendProperties? EntityBackendProperties { get; } |
There was a problem hiding this comment.
Is this about supporting entities in general, or entity queries in particular?
There was a problem hiding this comment.
It's about direct support for Durable.Task.Core entities in the backend. Relevant mostly for allowing separate dispatch. For out-of-proc v2 SDKs, this is a requirement for supporting entities. For the old SDKs, they can continue to work without this support (but we may allow them to take advantage).
There was a problem hiding this comment.
I have updated the comment to explain a bit more.
| while ( // continue query right away if the page is completely empty, but never in excess of 100ms | ||
| continuationToken != null | ||
| && entityResult.Count == 0 | ||
| && stopwatch.ElapsedMilliseconds <= 100); |
There was a problem hiding this comment.
have we always had this 100ms limit?
There was a problem hiding this comment.
yes, this was already there (but it was in the DF extension since that's where we implemented this query).
| /// <summary> | ||
| /// Metadata about an entity, as returned by queries. | ||
| /// </summary> | ||
| public struct EntityMetadata |
There was a problem hiding this comment.
Recommend moving all these out of a nested class. I only use public nested class types very sparingly.
There was a problem hiding this comment.
I prefer the nesting since it is much easier to keep everything that belongs together in one place.
|
Do you know why tests are failing? Is that going to be addressed afterwards? |
|
I am going to take a look at the failing tests after I merge this (because it is difficult to maintain different branches for all the PRs in my local build). |
* Bring entity logic into DurableTask.Core (first milestone) (#887) * implementaton of entity mechanics, compatible with existing DF SDK, but without a user-facing entity SDK for DTFx * address PR feedback. * fix usings and namespaces * address PR feedback * address PR feedback (remove NameObjectManager), fix breaking change in TaskHubWorker, fix some comments * address PR feedback (fix CustomExceptionsTest, remove public property) * add #nullable enable to most new classes * address PR feedback * try to fix compiler errors * add a configuration setting that disables separate dispatch by default * address PR feedback * address PR feedback * fix semantic merge conflict. * Revise entity state and status format and access (#955) * update scheduler state and entity status format and helpers * fix mess-up caused by merge conflict * Revise entity message format and external access (#956) * revise how event messages are represented and used * fix merge anomaly. * make current critical section id publicly visible (#958) * remove orchestration tags from entity action (#952) * Rename OperationBatchRequest and OperationBatchResponse (#953) * rename OperationBatch to EntityBatch * fix accidentally commited change from another PR * Revise how entity batches are executed and handle failures (#954) * revise task entity definition * commit change that had been accidentally committed to a different PR. * Apply suggestions from code review Co-authored-by: David Justo <david.justo.1996@gmail.com> * Apply suggestions from code review Co-authored-by: Jacob Viau <javia@microsoft.com> --------- Co-authored-by: David Justo <david.justo.1996@gmail.com> Co-authored-by: Jacob Viau <javia@microsoft.com> * revise operation result encoding and add more comments. (#965) * revise entity backend properties and implement entity backend queries (#957) * revise entity backend properties and implement entity backend queries. * Minor revisions to querries and properties, and improved comments. * fix validation of which LockNext methods are being called. * improve comments * fix useage of IEntityOrchestrationService. * revise how to exclude entity results from queries. * address PR feedback * Update versions for ADO feed (#973) * Add no-warn for NU5104 (#974) * revise propagation path for entity parameters (#971) * fix propagation path for entity parameters that need to reach the orchestration executor. * address PR feedback. * Revise entity queries (#981) * rename includeDeletedEntities to includeStatelessEntities and add comment explaining the meaning * add backlogQueueSize and lockedBy to entity metadata * fix bugs in tracking store implementation (#979) * add scheduled start time parameter to the start-new-orchestration operation action. (#980) * Revise serialization of entitymessages (#972) * revise how entity messages are serialized when sent by orchestrators. * address PR feedback (use RawInput) * Rename includeStateless to includeTransient in entity queries (#985) * rename includeStateless to includeTransient * rename variable also * Rev to entities-preview.2 (#986) * fix null reference exception when running on older backends (#989) * Prepare for public preview (#994) --------- Co-authored-by: David Justo <david.justo.1996@gmail.com> Co-authored-by: Jacob Viau <javia@microsoft.com>
This PR does
IEntityOrchestrationService.AzureStorageOrchestrationService.