Commerce catalog randomly goes empty until website restart

Member since: 2009

Hello,

We've had an issue occur about 3 times now that is extremely bad. All of a sudden, without any special interaction from us (that we know of at least). Suddenly no children are returned from our commerce catalog root.

This means that on our website: https://www.piab.com/ suddenly the "Products" top-menu becomes completely blank. Unfortunately we have no idea how to recreate this issue, and it has only happened 2-3 times during the last 0.5 year. When logging in to EPiServer during this issue everything looks normal in edit mode. But in view-mode no products are there.

To resolve this we've had to restart the site.

#155304 Sep 13, 2016 16:54
  • Member since: 2009

    This just happened to us again. It's an extremely bad issue. We have no monitors set up to detect issues like this, it's something we have to notice ourselves or by users reporting to us that the website is broken. Last time it happened was  2016-09-09. Now it's 2016-09-15, not even a week passed.

    Our web editor belives that this might be related to changing stuff inside commerce manager (SortIndex). Since we did this today and last friday when the issue happened. As before a restart of the site brings the products back. We are currently running EPiServer Commerce 9.21.0 and EPiServer CMS 9.12.0.

    Here is how the website looks during the issue:

    Here is how it looks inside EPiServer Commerce during the issue (normal):

    Here's how the website looks again after a restart of everything:

    The products are back! (Don't mind the monkey, it's a personal easter egg because I'm signed in)


    This seems to be some kind of caching issue inside EPiServer. I'm guessing it's not caching as hard inside edit-mode and that might be why it's working there. Just like this issue: http://world.episerver.com/forum/developer-forum/Problems-and-bugs/Thread-Container/2016/9/commerce-variantsku-page-stops-working-in-view-mode/
    Although for that other issue specific to a particular product not even restarting the site helped. So if that also was a caching issue it must be something you're caching in the database.

    #155373 Edited, Sep 15, 2016 10:01
  • Not sure about this, but it looks a bit like the thing discussed in this post http://world.episerver.com/Modules/Forum/Pages/Thread.aspx?id=133442.

    I had simular issues where sometimes, for no appearant reason, the catalog didn't return any results anymore. It turned out to be a missing setting on our Commerce admin site. Every time the commerce admin site restarted and the frontend site was restarted at about the same time then the problem occured.

    I was able to resolve it with adding the setting 'enableModelSyncCommit="false"' to the commerce web.config as discussed in the post (below the accepted answer).  

    #155377 Sep 15, 2016 11:35
  • Member since: 2009

    Good thinking. But before I add any extra settings I spent some more time trying to reproduce the issue on our test server. Which is running EPiServer Commerce 9.22.0 instead of 9.21.0. Unfortunately I was unable to do so, no matter how many times I restarted/recycled the commerce manager. I also tried changing "Sort Order" all over the place in commerce manager but it worked perfectly. Restarting both the manager and CMS site afterwards still did not cause any issues.

    This is why I belive it's some kind of internal caching issue that requires traffic on the site in order to occur. Maybe issues only occur during multi-threaded accesses to the caching system. I could be completely wrong though, I would be very happy if the cause was something more easily reproducible.

    Unfortunately I cannot do these kind of tests on the production server but I absolutely do not belive this issue started in EPiServer Commerce 9.22.0 since the issue has happened waaay back as well, not just this frequently. Besides there have been no mentions of fixes for this in any released patch-notes.

    #155380 Sep 15, 2016 13:27
  • Member since: 2009

    Related to that other thread though (the EPiServer Commerce manager site trying to load code from the EPiServer.CMS site) we've been having this issue for about a year I think:

    (From EPiServer Commerce manager logs)

    2016-09-15 13:15:33,055 [1] ERROR EPiServer.Personalization.VisitorGroups.VisitorGroupRole: Unable load criterion of type 'EPiServer.MarketingAutomationIntegration.UI.Plugins.VisitorGroups.Criteria.Database.DatabaseCriterion, EPiServer.MarketingAutomationIntegration'
    System.IO.FileNotFoundException: Could not load file or assembly 'EPiServer.MarketingAutomationIntegration' or one of its dependencies. The system cannot find the file specified.
    File name: 'EPiServer.MarketingAutomationIntegration'
    at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
    at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
    at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
    at EPiServer.Data.Dynamic.TypeResolver.<>c__DisplayClass12_1.<ResolveType>b__0(AssemblyName assemblyName)
    at System.TypeNameParser.ResolveAssembly(String asmName, Func`2 assemblyResolver, Boolean throwOnError, StackCrawlMark& stackMark)
    at System.TypeNameParser.ConstructType(Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
    at System.TypeNameParser.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
    at System.Type.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase)
    at EPiServer.Data.Dynamic.TypeResolver.ResolveType(String typeName, Boolean throwOnError, FallbackTypeResolver fallbackResolver)
    at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
    at EPiServer.Personalization.VisitorGroups.VisitorGroupRole.CreateCriterion(VisitorGroupCriterion visitorGroupCriterion)

    WRN: Assembly binding logging is turned OFF.
    To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
    Note: There is some performance penalty associated with assembly bind failure logging.
    To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

    System.IO.FileNotFoundException: Could not load file or assembly 'EPiServer.MarketingAutomationIntegration' or one of its dependencies. The system cannot find the file specified.
    File name: 'EPiServer.MarketingAutomationIntegration'
    at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
    at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
    at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
    at EPiServer.Data.Dynamic.TypeResolver.<>c__DisplayClass12_1.<ResolveType>b__0(AssemblyName assemblyName)
    at System.TypeNameParser.ResolveAssembly(String asmName, Func`2 assemblyResolver, Boolean throwOnError, StackCrawlMark& stackMark)
    at System.TypeNameParser.ConstructType(Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
    at System.TypeNameParser.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
    at System.Type.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase)
    at EPiServer.Data.Dynamic.TypeResolver.ResolveType(String typeName, Boolean throwOnError, FallbackTypeResolver fallbackResolver)
    at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
    at EPiServer.Personalization.VisitorGroups.VisitorGroupRole.CreateCriterion(VisitorGroupCriterion visitorGroupCriterion)

    It doesn't really seem to be causing any issues though. But it is trying to load visitor group criterias that we are running on the CMS site. Adding that code to the commerce site as well is not really a good solution. I reported this during a training and was told it was a bug. It's still not solved.

    #155381 Sep 15, 2016 13:34
  • I also had a tough time reproducing the problem locally. Multiple identical restart procedures where often needed to reproduce it.

    The reason I found the problem was a change in the 'ContentTypes' table I detected when restarting the Commerce Manager. Restarting the Commerce manager resulting in fewer records in the ContentTypes table. Then when restarting our frontend website, the records came back (but with new pkID's).

    This you can easily check in your debug environment, just restart commerce manager and check the number of records before and after the restart. These should be the same.

    #155382 Sep 15, 2016 13:43
  • Member since: 2009

    Thanks a lot Rene!!

    I can now confirm that we are loosing almost all the lines in the tblContentType table when the Commerce Manager site restarts without that setting. enableModelSyncCommit="false". I'm assuming EPiServer CMS is caching this table and that the errors only start appearing after the cache is invalidated.

    All ModelTypes that inherit from NodeContent, ProductContent or VariationContent are deleted without this setting.

    I also took the liberty to install the latest EPiServer Commerce manager (9.22.0) to a blank ASP.net web project and I can confirm that this setting is STILL missing from web.config. Here is what gets installed then:

    <episerver>
    <applicationSettings httpCacheability="Public" pageValidateTemplate="false" uiShowGlobalizationUserInterface="true" uiUrl="~/EPiServer/CMS/" urlRebaseKind="ToRootRelative" enableScheduler="false"/>
    </episerver>

    Please fix this issue EPiServer.

    #155383 Edited, Sep 15, 2016 14:01
  • Member since: 2011

    Hi,

    It's as designed that Commerce Manager should not touch the ModelTypes at all, and enableModelSyncCommit="false" should be present in its web.config. 

    EDIT: I'll verify and add a bug for this. 

    Regards,

    /Q

    #155388 Edited, Sep 15, 2016 14:40
  • Member since: 2009

    Yes but the faulty configuration is being installed to blank/new Commerce manager sites. Surely that is a bug?

    #155389 Edited, Sep 15, 2016 14:41
  • Member since: 2011

    A bug was filed and a fix is under review right now :)

    /Q

    #155399 Sep 15, 2016 15:36
  • Member since: 2014

    Hi guys,

    Could you tell me please if this bug was fixed and if it was in what EPiServer version.

    I had locally quite similar issue in  EPiServer.CMS 10.5.1 / EPiServer.Commerce 10.2.3

    #179376 Jun 09, 2017 10:06
First   1 2   Last