Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Bartosz Ladziński 20 posts 154 karma points
    Aug 17, 2017 @ 08:28
    Bartosz Ladziński
    0

    Cache instructions are not read by the CD instances

    I'm running Umbraco 7.6.11 on Azure with flexible load balancing setup described here: https://our.umbraco.org/documentation/getting-started/setup/server-setup/load-balancing/flexible and recently started defining the master/slave servers explicitly as defined here: https://our.umbraco.org/documentation/getting-started/setup/server-setup/load-balancing/flexible-advanced

    The problem is, after I publish something in the CMS, none of the CD nodes pick up those changes and update their cache. I can see instruction being added to umbracoCacheInstruction table, however, it seems none of the nodes attempt to read it. I've turned on debug logging, the roles of the nodes are self-assigned correctly, but there was no attempt by any service that would indicate that it's trying to read the cache instructions.

    Anything I should take care of to make this work?

  • Al Burns 49 posts 149 karma points
    Sep 24, 2018 @ 07:31
    Al Burns
    0

    Hi. I am experiencing the same issue with published content not being picked up on the web servers with a new site, not on Azure though.

    Did you manage to resolve this or anyone know how to resolve this?

    Thanks.

  • Bartosz Ladziński 20 posts 154 karma points
    Sep 24, 2018 @ 12:17
    Bartosz Ladziński
    0

    Hey,

    Probably should have added post mortem to this thread. My issue was connected to the 'customization' done to our Content Delivery. Most of the Umbraco modules were removed to prevent accessing Umbraco using the CD node. In turn, this actually prevented some of the internal Umbraco functions from working.

    In the end, I have implemented the cache refreshing on my own. I consume the AfterUpdateDocumentCache and AfterClearDocumentCache events on the CM node and fire off my own custom event on the Azure Service Bus that is then consumed on the CD node, where I refresh the Umbraco cache using Reflection. The code below:

    var messenger = ServerMessengerResolver.Current.Messenger as DatabaseServerMessenger;
    if (messenger == null)
    {
        logger.Error("Could not sync Umbraco cache, DatabaseServerMessenger could not be found");
        return;
    }
    
    var messengerType = typeof(DatabaseServerMessenger);
    var syncMethod = messengerType.GetMethod("Sync", BindingFlags.NonPublic | BindingFlags.Instance);
    if (syncMethod == null)
    {
        logger.Error("Could not sync Umbraco cache, Sync() method of DatabaseServerMessenger could not be found");
        return;
    
    }
    syncMethod.Invoke(messenger, new object[] { });
    

    It's not an ideal solution (a bit too hacky), but it does work in the end.

Please Sign in or register to post replies

Write your reply to:

Draft