3

I'm on Sitecore 8.2 update 3 with Email Experience Manager 3.4.2 rev. 170713.

I have CM and Dedicated Email Delivery server. Both of them are used by EXM to process email campaigns. Processing a single email campaign usually takes several (maybe 10) hours.

CM server only processes a small percentage of the messages. The reason for that is that we don't want to make content authors' lives any harder when the email campaigns are processed. So the Sleep parameter of the SendEmail EXM pipeline is set on CM server to a high value.

There was an email campaign in progress when IIS app pool on CM server was recycled (automatic recycle every N minutes). My EXM campaign state was change to PAUSED. Dedicated Email Delivery server was still processing the campaign and I can see that 100% of the emails were sent. But the campaign is still in the PAUSED state. Its state was never changed to FINISHED.

The only options I was able to think of are:

  1. Set the app pool to never recycle automatically - but there are people who believe it's not good for the application health.
  2. Add a button on CM and on DED server to allow marketers to recycle app pool before they start a campaign - but I think it's really really bad and I don't want to do this.

I asked this question on https://sitecorechat.slack.com and Pete Navarra sugested to create a task that runs to check for paused dispatches and restart them. I think this could do the trick, but:

  1. I feel like it's a workaround not a fix for the problem.
  2. It assumes that there will be something which will start the CM server after the app pool is recycled.
  3. What if marketers pause a campaign on purpose? The task will start it.

Anyone can think of a better solution?

Thanks in advance.

  • 1
    by default ApplicationPool is recycled in every 1740 minutes (29 hours) and there is a Idle time out parameter in IIS set to 20 by default (I guess) so if our app pool is idle for 20 minutes the current worker process is terminated, we can set to 0 for disable in case we have any heavy application running, such as normal indexing, publishing of large amount of content. I think you first option is correct if you are setting Ideal time to 0 – Mahendra Shekhawat Jan 12 '18 at 7:33
  • Thanks @MahendraShekhawat . I know how I can disable automatic app pool recycle. However there are people who believe it's not healthy for the application never to be recycle automatically. Are you able to provide any articles saying otherwise? It's not an option for us to switch it every time marketers plan to send an email campaign – Marek Musielak Jan 12 '18 at 7:36
  • There is no article but I did the same for one of my project to publish and indexing because that was content heavy site and sitecore support suggested me to disable AppPool recycle temporary. – Gaurav Agarwal Jan 12 '18 at 8:00
  • As I mentioned in the comment above, I cannot disable it temporarily every time marketers plan to send a new campaign. It would have to be disabled all the time. – Marek Musielak Jan 12 '18 at 8:04
  • well I don't have any article but I have few link saying same thing - forums.iis.net/t/1220552.aspx weblogs.asp.net/owscott/… – Mahendra Shekhawat Jan 12 '18 at 8:13
6

EXM was not designed to support this. The (primary) CM is responsible for orchestrating the work e.g. changing the state of the message from draft -> sending -> sent. This runs as a task within Sitecore, so when your application pool recycles, it will never move the message to the sent state.

Short of disabling automatic recycling of the application pool (although I suggest you do), I think it's a sound suggestion to create a task to resume paused dispatches.

If you want to avoid starting something that may have been manually paused, you could always check the state of the message and/or the status of any dedicated email dispatch servers. Respectively Sitecore.Modules.EmailCampaign.Core.MessageStateInfo and Sitecore.Modules.EmailCampaign.Core.Services.DedicatedServers. This is not fool proof, but unfortunately there is no way to distinguish a message that has been manually paused from one that has been paused by EXM.

On a side note. You don't mention the number of contacts or other factors that have an impact on the dispatch process, but 10 hours sounds like a lot. I would recommend you to read The EXM dispatch process and performance tuning. Although it's written for 9.0.1, most of it applies to older releases as well.

  • Hi Jacob, thank you for the detailed explanation. – Marek Musielak Jan 12 '18 at 17:11
  • The dispatch and performance tuning guide is a great resource! – Pete Navarra Jan 12 '18 at 17:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.