Skip to content

Commit

Permalink
Remove ChangeSet.AnEntityHasChanged and related logic
Browse files Browse the repository at this point in the history
  • Loading branch information
lewischeng-ms committed Mar 30, 2016
1 parent 4a702fb commit 4d695e5
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 66 deletions.
9 changes: 0 additions & 9 deletions src/Microsoft.Restier.Core/Properties/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions src/Microsoft.Restier.Core/Properties/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,6 @@
<data name="ElementTypeNotMatch" xml:space="preserve">
<value>Element type not match.</value>
</data>
<data name="ErrorInVerifyingNoEntityHasChanged" xml:space="preserve">
<value>Saving the change set has terminated to prevent potential stack overflow. There have been entity changes and/or creates that have continuously spawn entity changes and/or creates.</value>
</data>
<data name="ExpanderCannotChangeExpressionType" xml:space="preserve">
<value>Expander cannot change the expression type.</value>
</data>
Expand Down
6 changes: 0 additions & 6 deletions src/Microsoft.Restier.Core/Submit/ChangeSet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,5 @@ public IList<ChangeSetEntry> Entries
return this.entries;
}
}

/// TODO GitHubIssue#37 : make the ChangeSet 'dynamic' so it gets added to as things change during the flow.
/// <summary>
/// Gets or sets a value indicating whether an Entity has been added, modified, or deleted.
/// </summary>
public bool AnEntityHasChanged { get; set; }
}
}
54 changes: 7 additions & 47 deletions src/Microsoft.Restier.Core/Submit/DefaultSubmitHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,6 @@ namespace Microsoft.Restier.Core.Submit
/// </summary>
internal static class DefaultSubmitHandler
{
/// <summary>
/// The maximum numbers of loops for the pre-persisting events save loop
/// and the post-persisting events save loops allowed before the DataService
/// stops processing to prevent potential infinite loop.
/// </summary>
private const int MaxLoop = 200;

/// <summary>
/// Asynchronously executes the submit flow.
/// </summary>
Expand Down Expand Up @@ -55,44 +48,19 @@ public static async Task<SubmitResult> SubmitAsync(
return context.Result;
}

ChangeSet eventsChangeSet = context.ChangeSet;

IEnumerable<ChangeSetEntry> currentChangeSetItems;
int outerLoopCount = 0;

do
{
outerLoopCount++;
int innerLoopCount = 0;
do
{
innerLoopCount++;
eventsChangeSet.AnEntityHasChanged = false;
currentChangeSetItems = eventsChangeSet.Entries.ToArray();

if (eventsChangeSet.AnEntityHasChanged)
{
eventsChangeSet.AnEntityHasChanged = false;
currentChangeSetItems = eventsChangeSet.Entries.ToArray();
}

await PerformValidate(context, currentChangeSetItems, cancellationToken);
var eventsChangeSet = context.ChangeSet;

await PerformPreEvent(context, currentChangeSetItems, cancellationToken);
}
while (eventsChangeSet.AnEntityHasChanged && (innerLoopCount < MaxLoop));
IEnumerable<ChangeSetEntry> currentChangeSetItems = eventsChangeSet.Entries.ToArray();

VerifyNoEntityHasChanged(eventsChangeSet);
await PerformValidate(context, currentChangeSetItems, cancellationToken);

await PerformPersist(context, currentChangeSetItems, cancellationToken);
await PerformPreEvent(context, currentChangeSetItems, cancellationToken);

eventsChangeSet.Entries.Clear();
await PerformPersist(context, currentChangeSetItems, cancellationToken);

await PerformPostEvent(context, currentChangeSetItems, cancellationToken);
}
while (eventsChangeSet.AnEntityHasChanged && (outerLoopCount < MaxLoop));
context.ChangeSet.Entries.Clear();

VerifyNoEntityHasChanged(eventsChangeSet);
await PerformPostEvent(context, currentChangeSetItems, cancellationToken);

return context.Result;
}
Expand Down Expand Up @@ -138,14 +106,6 @@ private static string GetAuthorizeFailedMessage(ChangeSetEntry entry)
}
}

private static void VerifyNoEntityHasChanged(ChangeSet changeSet)
{
if (changeSet.AnEntityHasChanged)
{
throw new InvalidOperationException(Resources.ErrorInVerifyingNoEntityHasChanged);
}
}

private static async Task PerformValidate(
SubmitContext context,
IEnumerable<ChangeSetEntry> changeSetItems,
Expand Down
1 change: 0 additions & 1 deletion test/Microsoft.Restier.TestCommon/PublicApi.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,6 @@ public class Microsoft.Restier.Core.Submit.ChangeSet {
public ChangeSet ()
public ChangeSet (System.Collections.Generic.IEnumerable`1[[Microsoft.Restier.Core.Submit.ChangeSetEntry]] entries)

bool AnEntityHasChanged { [CompilerGeneratedAttribute(),]public get; [CompilerGeneratedAttribute(),]public set; }
System.Collections.Generic.IList`1[[Microsoft.Restier.Core.Submit.ChangeSetEntry]] Entries { public get; }
}

Expand Down

0 comments on commit 4d695e5

Please sign in to comment.