You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The child resources that requires separate call to perform CUD on it i.e. they cannot be created, updated or deleted by doing a PUT/POST on parent resource.
Current base classes:
Today the types ExternalChildResourceImpl and ExternalChildResourcesImpl are used to enable create, update and delete operations of external child resources as part of parent resource create or update flow.
By allowing user to specify operations on multiple children in a single statement, ExternalChildResourcesImpl can parallize these operations.
The definitions flow of children looks more natural to the user, to an extend from user we can hide the fact that these are external child resources.
inline external child resources:
So far the external child resources we encountered are present in the parent payload, i.e. no seperate call is required to fetch them. ExternalChildResourcesImpl is implemented based on this assumption.
e.g. [VirtualMachine, Extensions], [TrafficManagerProfile, endpoints], [Batch, Applications]
non-inline external child resources:
Recently we came across some models (e.g. parent: DnsZone, child:RecordSets) where external child resources are not present in the parent payload and requires a seprate call to fetch them.
e.g. [DnsZone, RecordSets]
Why current ExternalChildResourcesImpl not suitable for non-inline external child resources
Though the current ExternalChildResourcesImpl can be used for new models, using it requires a seperate list call to be made which is an overhead if the child resources are paged.
Solution:
To enable us to handle these two types of models (inline vs non-inline) we are splitting ExternalChildResourcesImpl into two
These two types derive from ExternalChildResourceCollectionImpl which is responsible for performing operations on children in parallel, throwing aggreate exception if one or more operations fails.
See the implementation of these types in the PR: #1262
The text was updated successfully, but these errors were encountered:
External child resources:
The child resources that requires separate call to perform CUD on it i.e. they cannot be created, updated or deleted by doing a PUT/POST on parent resource.
Current base classes:
Today the types
ExternalChildResourceImpl
andExternalChildResourcesImpl
are used to enable create, update and delete operations of external child resources as part of parent resource create or update flow.i.e. these types enables following flows:
The main advantages of this pattern are:
ExternalChildResourcesImpl
can parallize these operations.inline external child resources:
So far the external child resources we encountered are present in the parent payload, i.e. no seperate call is required to fetch them.
ExternalChildResourcesImpl
is implemented based on this assumption.e.g. [VirtualMachine, Extensions], [TrafficManagerProfile, endpoints], [Batch, Applications]
non-inline external child resources:
Recently we came across some models (e.g. parent: DnsZone, child:RecordSets) where external child resources are not present in the parent payload and requires a seprate call to fetch them.
e.g. [DnsZone, RecordSets]
Why current ExternalChildResourcesImpl not suitable for non-inline external child resources
Though the current
ExternalChildResourcesImpl
can be used for new models, using it requires a seperate list call to be made which is an overhead if the child resources arepaged
.Solution:
To enable us to handle these two types of models (inline vs non-inline) we are splitting
ExternalChildResourcesImpl
into twoExternalChildResourcesCachedImpl - targets inline case, i.e. children is a collection property of parent
ExternalChildResourcesNonCachedImpl - target non-inline case, i.e. no property in parent that hold child collection
These two types derive from ExternalChildResourceCollectionImpl which is responsible for performing operations on children in parallel, throwing aggreate exception if one or more operations fails.
See the implementation of these types in the PR: #1262
The text was updated successfully, but these errors were encountered: