KevinJump / uSync

Database syncing tool for Umbraco CMS
https://jumoo.co.uk/usync/
Mozilla Public License 2.0
109 stars 63 forks source link

(Possible) NuCache Error after uSync Import #40

Closed KevinJump closed 4 years ago

KevinJump commented 5 years ago

As described here : https://our.umbraco.com/forum/umbraco-8/99105-nucache-500-error-after-deploy

after a uSync import/deploy you might see:

System.IndexOutOfRangeException: Index points outside the properties array, which means the properties array is corrupt.

At this time, we are not sure if this is a uSync or Umbraco issue, this is a placeholder for our investigations.

Note: the post says 8.1.1 but it might be a pre 8.1.x release issue we are unsure if this is related to issue #18

KevinJump commented 5 years ago

Looking at eliminating the ModelsBuilder issues #18 with a recent update to batch mode, but i think this is still something unresolved.

Box-Of-Hats commented 4 years ago

I've just had this exact issue after doing a uSync (+content) import.

Umbraco: 8.1.3 uSync: 8.2.1

KevinJump commented 4 years ago

Hi any information you have (stack traces, etc, would be gladly accepted!) we are deep into Umbraco Core debugging with this, at the moment, we have an experimental bit of code that rebuilds the nucache when the import is complete

https://gist.github.com/KevinJump/6721e7964516e439dc798cc01bd78815

this might be a remedy, and might be something we put into the core , but if you want to try it and see if it helps please do.

KevinJump commented 4 years ago

For our next release we will also have #49 (make handlers less chatty) is something that might help, but only in the sense that it will reduce the number of saves that reduces the number of cache rebuilds, which is where we think the issue lies.

Box-Of-Hats commented 4 years ago

I ended up deleting a large amount of the imported content and that solved it for me. I've gone into the Umbraco Logs trying to find a stack trace but it seems that it was never logged

vaags commented 4 years ago

I get this error pretty often. I can remedy it by republishing the failing page. I'm not importing the actual content, just the ContentTypes ++

Umbraco 8.1.4 Usync 8.2.1

KevinJump commented 4 years ago

We are heavily testing cache rebuilding (#51) to see if it remedies this, but equally, I am really struggling to replicate, so any info, etc...

KevinJump commented 4 years ago

Hi,

We have just released version 8.2.2 of uSync which has a couple of things that might help mitigate this https://github.com/KevinJump/uSync8/releases/tag/8.2.2

The main one is the Cache rebuilding (which can be turned on or off in the config) - hopefully this will mitigate any corruptions,

While the other updates hopefully reduce the chatter on updates to reduce the actual risk of it happening in the first place.

KevinJump commented 4 years ago

uSync releases are like buses at the moment (usb ports and free wifi!)

but we have made some extra changes in uSync 8.2.3 around how content is imported during a startup import, it might be worth seeing if this resolves the issues you have been having with this error.

Box-Of-Hats commented 4 years ago

Cheers Kevin, I'll update our version of uSync before we do our next migration and let you know if there's any issues

vaags commented 4 years ago

I'm starting to think this is a bug inside Umbraco Core. I got the error several times in development just now. I've turned off usync import in development, so the error is presumably not caused by usync.

I'm not sure how to reproduce unfortunately, but it seemingly happened after moving content from one tree to another. The moved content triggered the error upon view.

As before, the error is fixed by re-publishing the failing pages.

Umbraco 8.1.5 Usync 8.2.3

Excerpt from log:

{"@t":"2019-10-14T13:15:08.5651164Z","@mt":"An unhandled exception occurred","@l":"Error","@x":"System.IndexOutOfRangeException: Index points outside the properties array, which means the properties array is corrupt.\r\n at Umbraco.Web.PublishedCache.NuCache.PublishedContent.GetProperty(String alias) in d:\a\1\s\src\Umbraco.Web\PublishedCache\NuCache\PublishedContent.cs:line 317\r\n at Umbraco.Core.Models.PublishedContent.PublishedContentWrapped.GetProperty(String alias) in d:\a\1\s\src\Umbraco.Core\Models\PublishedContent\PublishedContentWrapped.cs:line 134\r\n at Umbraco.Web.PublishedContentExtensions.Value[T](IPublishedContent content, String alias, String culture, String segment, Fallback fallback, T defaultValue) in d:\a\1\s\src\Umbraco.Web\PublishedContentExtensions.cs:line 151\r\n at Umbraco.Web.PublishedModels.HaveSubPageSortSettings.GetSubpageSortOrder(IHaveSubPageSortSettings that) in C:\Users\Thomas\Documents\Dev\Web\App_Data\Models\HaveSubPageSortSettings.generated.cs:line 66\r\n at Umbraco.Web.PublishedModels.ListPage.get_SubpageSortOrder() in C:\Users\Thomas\Documents\Dev\Web\App_Data\Models\ListPage.generated.cs:line 165\r\n at ASP._Page_Views_ListPage_cshtml.Execute() in C:\Users\Thomas\Documents\Dev\Web\Views\ListPage.cshtml:line 18\r\n at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()\r\n at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()\r\n at System.Web.WebPages.StartPage.RunPage()\r\n at System.Web.WebPages.StartPage.ExecutePageHierarchy()\r\n at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)\r\n at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)\r\n at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)\r\n at Umbraco.Web.Mvc.ProfilingView.Render(ViewContext viewContext, TextWriter writer) in d:\a\1\s\src\Umbraco.Web\Mvc\ProfilingView.cs:line 25\r\n at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)\r\n at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)\r\n at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)\r\n at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)\r\n at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)\r\n at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)\r\n at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList1 filters, ActionResult actionResult)\r\n at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_6.<BeginInvokeAction>b__4()\r\n at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.CallEndDelegate(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.End()\r\n at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Controller.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.End()\r\n at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Controller.<>c.<BeginExecute>b__151_2(IAsyncResult asyncResult, Controller controller)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase1.End()\r\n at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)\r\n at System.Web.Mvc.MvcHandler.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult)\r\n at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()\r\n at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)\r\n at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)\r\n at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()\r\n at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)\r\n at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)","SourceContext":"Umbraco.Web.UmbracoApplicationBase","ProcessId":20036,"ProcessName":"iisexpress","ThreadId":48,"AppDomainId":6,"AppDomainAppId":"LMW3SVC2ROOT","MachineName":"LAPTOP-BXNXHXLU","Log4NetLevel":"ERROR","HttpSessionId":"aisoodyy5ymrvygyhmalrwg0","HttpRequestNumber":3,"HttpRequestId":"83bc28c9-4f39-4897-bb98-b495033c6f2e"}

KevinJump commented 4 years ago

yeah, I think there is an issue with internal cache rebuilds either tripping over themselves or getting corrupt based on event updates.

uSync now has a 'rebuild the cache' event at the end of an import to see if this does something, but it's hard to tell.

there are a couple of fixes in Umbraco 8.2.0 around nucache so fingers crossed

https://github.com/umbraco/Umbraco-CMS/issues/5362 & https://github.com/umbraco/Umbraco-CMS/pull/6347

vaags commented 4 years ago

I haven't updated to v8.2 yet, but those fixes seem to be about performance and PureLive-mode? I use AppData-mode, not PureLive, so not sure if it will fix anything for me.

Anyways, this issue should probably be added to the umbraco repo, and not here?

KevinJump commented 4 years ago

Some of the work on the nucache has been around how the tree is republished after a node has been updated. (which has some regression in 8.2) e.g https://github.com/umbraco/Umbraco-CMS/pull/6734 - I think this might have an impact (although the issue in 8.2 might cause you other problems :( )

gosudev commented 4 years ago

Hi, I had this error after usync import - I started by re-publishing all the nodes affected by recent changes and it helped. Fortunately, there were few content nodes and this temporary workaround worked.

Umbraco 8.1.5 uSync8.Core 8.0.0

Best regards

"Message": "An error has occurred.", "ExceptionMessage": "Index points outside the properties array, which means the properties array is corrupt.", "ExceptionType": "System.IndexOutOfRangeException", "StackTrace": " at Umbraco.Web.PublishedCache.NuCache.PublishedContent.GetProperty(String alias) in d:\a\1\s\src\Umbraco.Web\PublishedCache\NuCache PublishedContent.cs:line 317\r\n at Umbraco.Core.Models.PublishedContent.PublishedContentWrapped.GetProperty(String alias) in d:\a\1\s\src\Umbraco.Core\Models\PublishedContent PublishedContentWrapped.cs:line 134\r\n at Umbraco.Core.Models.PublishedContent.PublishedContentWrapped.GetProperty(String alias) in d:\a\1\s\src\Umbraco.Core\Models\PublishedContent PublishedContentWrapped.cs:line 134\r\n at Umbraco.Web.PublishedContentExtensions.Value[T](IPublishedContent content, String alias, String culture, String segment, Fallback fallback, T defaultValue) in d:\a\1\s\src\Umbraco.Web PublishedContentExtensions.cs:line 151\r\n at Umbraco.Web.PublishedModels.ReleaseNote.get_FeaturedImage() in D:\a\1\s\WebsiteApi.Umbraco.Core\ContentModels

KevinJump commented 4 years ago

really intrested to see if anyone gets these issues on Umbraco 8.2+

KevinJump commented 4 years ago

Closing as we haven't seen any issues with since Umbraco 8.3