Rules page returns 500 error after restore

I have…

  • [X] Checked the logs and have provided the logs if I found something suspicious there

I’m submitting a…

  • [ ] Bug report

Current behavior

Running Squidex in K8S in different environment.
Run a backup from one instance of Squidex, then run restore from the backup location to a different Squidex instance and changed to a different AppName.

All data and schemas are good but the rules screen has no data and returning a server Error notiication. The +New button is not visible either.

Expected behavior

Previous rules are there and working.

Minimal reproduction of the problem

Environment

  • GKE

Version: 4.3

Browser:

  • [X] Chrome (desktop)

Others:
Error logs:

{"logLevel":"Error","messag":"An unexpected exception has occurred.","app":{"name":"Squidex","version":"4.3.0.0","sessionId":"5fe51008-4ba2-471c-9f15-d9bf7cca4811"},"web":{"requestId":"|4568d317-4d8b83d0741ebfbd.","requestPath":"/apps/pcone-xl/rules","requestMethod":"GET","routeValues":{"area":"Api","action":"GetRules","controller":"Rules"}},"timestamp":"2020-07-08T04:54:10Z","exception":{**"type":"System.InvalidOperationException","message":"This operation is not supported for a relative URI.**","stackTrace":"   at System.Uri.get_AbsolutePath()\n   at Squidex.Infrastructure.Reflection.Internal.PropertyAccessor.PropertyWrapper\u00602.Get(Object source) in /src/src/Squidex.Infrastructure/Reflection/Internal/PropertyAccessor.cs:line 50\n   at Squidex.Infrastructure.Reflection.Equality.ObjectComparer.IsEquals(Object x, Object y) in /src/src/Squidex.Infrastructure/Reflection/Equality/ObjectComparer.cs:line 34\n   at Squidex.Infrastructure.Reflection.Equality.DefaultComparer.IsEquals(Object x, Object y) in /src/src/Squidex.Infrastructure/Reflection/Equality/DefaultComparer.cs:line 31\n   at Squidex.Infrastructure.Reflection.Equality.ObjectComparer.IsEquals(Object x, Object y) in /src/src/Squidex.Infrastructure/Reflection/Equality/ObjectComparer.cs:line 41\n   at Squidex.Infrastructure.Reflection.Equality.DefaultComparer.IsEquals(Object x, Object y) in /src/src/Squidex.Infrastructure/Reflection/Equality/DefaultComparer.cs:line 31\n   at Squidex.Infrastructure.Reflection.SimpleEquals.IsEquals[T](T x, T y) in /src/src/Squidex.Infrastructure/Reflection/SimpleEquals.cs:line 118\n   at Squidex.Domain.Apps.Core.Rules.RuleAction.DeepEquals(RuleAction action) in /src/src/Squidex.Domain.Apps.Core.Model/Rules/RuleAction.cs:line 44\n   at Squidex.Domain.Apps.Core.Rules.Rule.Update(RuleAction newAction) in /src/src/Squidex.Domain.Apps.Core.Model/Rules/Rule.cs:line 123\n   at Squidex.Domain.Apps.Entities.Rules.State.RuleState.ApplyEvent(IEvent event) in /src/src/Squidex.Domain.Apps.Entities/Rules/State/RuleState.cs:line 51\n   at Squidex.Domain.Apps.Entities.Domain**ObjectState\u00601.ApplyEvent(**IEvent event, EnvelopeHeaders headers) in /src/src/Squidex.Domain.Apps.Entities/DomainObjectState.cs:line 46\n   at Squidex.Domain.Apps.Entities.DomainObjectState\u00601.Apply(Envelope\u00601 event) in /src/src/Squidex.Domain.Apps.Entities/DomainObjectState.cs:line 60\n   at Squidex.Infrastructure.Commands.DomainObject\u00601.OnEvent(Envelope\u00601 event) in /src/src/Squidex.Infrastructure/Commands/DomainObject.cs:line 96\n   at Squidex.Infrastructure.Commands.DomainObject\u00601.ApplyEvent(Envelope\u00601 event, Boolean isLoading) in /src/src/Squidex.Infrastructure/Commands/DomainObject.cs:line 44\n   at Squidex.Infrastructure.Commands.DomainObject\u00601.\u003COnSetup\u003Eb__6_0(Envelope\u00601 x) in /src/src/Squidex.Infrastructure/Commands/DomainObject.cs:line 37\n   at Squidex.Infrastructure.States.Persistence\u00602.ReadEventsAsync() in /src/src/Squidex.Infrastructure/States/Persistence{TSnapshot,TKey}.cs:line 112\n   at Squidex.Infrastructure.States.Persistence\u00602.ReadAsync(Int64 expectedVersion) in /src/src/Squidex.Infrastructure/States/Persistence{TSnapshot,TKey}.cs:line 70\n   at Squidex.Infrastructure.Commands.DomainObject\u00601.ReadAsync() in /src/src/Squidex.Infrastructure/Commands/DomainObject.cs:line 80\n   at Squidex.Infrastructure.Commands.DomainObjectBase\u00601.EnsureLoadedAsync(Boolean silent) in /src/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs:line 70\n   at Squidex.Domain.Apps.Entities.Rules.RuleDomainObjectGrain.GetStateAsync() in /src/src/Squidex.Domain.Apps.Entities/Rules/RuleDomainObjectGrain.cs:line 27\n   at Squidex.Domain.Apps.Entities.Rules.OrleansCodeGenRuleGrainMethodInvoker.Invoke(IAddressable grain, InvokeMethodRequest request) in /src/src/Squidex.Domain.Apps.Entities/obj/Release/netcoreapp3.1/Squidex.Domain.Apps.Entities.orleans.g.cs:line 1984\n   at Orleans.Runtime.GrainMethodInvoker.Invoke()\n   at Squidex.Infrastructure.Orleans.StateFilter.Invoke(IIncomingGrainCallContext context) in /src/src/Squidex.Infrastructure/Orleans/StateFilter.cs:line 51\n   at Orleans.Runtime.GrainMethodInvoker.Invoke()\n   at Squidex.Infrastructure.Orleans.LoggingFilter.Invoke(IIncomingGrainCallContext context) in /src/src/Squidex.Infrastructure/Orleans/LoggingFilter.cs:line 46\n   at Orleans.Runtime.GrainMethodInvoker.Invoke()\n   at Squidex.Infrastructure.Orleans.LocalCacheFilter.Invoke(IIncomingGrainCallContext context) in /src/src/Squidex.Infrastructure/Orleans/LocalCacheFilter.cs:line 39\n   at Orleans.Runtime.GrainMethodInvoker.Invoke()\n   at Orleans.Runtime.GrainMethodInvoker.Invoke()\n   at OrleansDashboard.Metrics.GrainProfilerFilter.Invoke(IIncomingGrainCallContext context)\n   at Orleans.Runtime.GrainMethodInvoker.Invoke()\n   at Orleans.Runtime.InsideRuntimeClient.Invoke(IAddressable target, IInvokable invokable, Message message)\n   at Orleans.Internal.OrleansTaskExtentions.\u003CToTypedTask\u003Eg__ConvertAsync|4_0[T](Task\u00601 asyncTask)\n   at Squidex.Domain.Apps.Entities.Rules.Indexes.RulesIndex.GetRuleAsync(Guid id) in /src/src/Squidex.Domain.Apps.Entities/Rules/Indexes/RulesIndex.cs:line 54\n   at Squidex.Domain.Apps.Entities.Rules.Indexes.RulesIndex.GetRulesAsync(Guid appId) in /src/src/Squidex.Domain.Apps.Entities/Rules/Indexes/RulesIndex.cs:line 42\n   at Squidex.Domain.Apps.Entities.Rules.Queries.RuleQueryService.QueryAsync(Context context) in /src/src/Squidex.Domain.Apps.Entities/Rules/Queries/RuleQueryService.cs:line 31\n   at Squidex.Areas.Api.Controllers.Rules.RulesController.GetRules(String app) in /src/src/Squidex/Areas/Api/Controllers/Rules/RulesController.cs:line 92\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeActionMethodAsync\u003Eg__Awaited|12_0(ControllerActionInvoker invoker, ValueTask\u00601 actionResultValueTask)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeNextActionFilterAsync\u003Eg__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State\u0026 next, Scope\u0026 scope, Object\u0026 state, Boolean\u0026 isCompleted)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeInnerFilterAsync\u003Eg__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.\u003CInvokeNextExceptionFilterAsync\u003Eg__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)"}}
{"logLevel":"Information","filters":{"appId":"2ecc9052-2d46-405f-9012-e519fc465fdb","appName":"pcone-xl","userId":"5f054b826ca014000183a0f8","clientId":"squidex-frontend","costs":0},"elapsedRequestMs":371,"app":{"name":"Squidex","version":"4.3.0.0","sessionId":"5fe51008-4ba2-471c-9f15-d9bf7cca4811"},"web":{"requestId":"|4568d319-4d8b83d0741ebfbd.","requestPath":"/api/apps/pcone-xl/schemas","requestMethod":"GET"},"timestamp":"2020-07-08T04:54:10Z"}

Can you send me this backup?

Please also format your logs using code blocks

Just update that I can make it work if I just remove the rules settings from the original app, backup and restore worked fine. Then I just need to set up the rules / webhook manually, that is ok.

But there is another issue that, for backup restore, is it just re-generate each GUID, when it saw the field has a GUID value?

There is a field we manually added the guid value for integration with another app, then after the restore process, I can see the value is changed. It is just a string type field, so it shouldn’t.

Is this a bug or something?

The field is set up required and unique, maybe because of this?
if I remove the unique, will it work?

No, this is by design. The problem is that IDs are globally unique and therefore I have to create new ids, BUT it is solved with version 5