File: murder-failure-modes.html

package info (click to toggle)
cyrus-imapd 3.10.2-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 59,108 kB
  • sloc: ansic: 284,386; perl: 137,327; javascript: 9,659; sh: 5,730; yacc: 2,565; makefile: 2,188; cpp: 2,147; lex: 662; xml: 621; awk: 303; python: 272; asm: 262
file content (196 lines) | stat: -rw-r--r-- 12,977 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Cyrus Murder Failure Modes &mdash; Cyrus IMAP 3.10.2 documentation</title>
      <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
      <link rel="stylesheet" href="../../../../_static/css/theme.css" type="text/css" />
      <link rel="stylesheet" href="../../../../_static/graphviz.css" type="text/css" />
      <link rel="stylesheet" href="../../../../_static/cyrus.css" type="text/css" />
  
        <script data-url_root="../../../../" id="documentation_options" src="../../../../_static/documentation_options.js"></script>
        <script src="../../../../_static/jquery.js"></script>
        <script src="../../../../_static/underscore.js"></script>
        <script src="../../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
        <script src="../../../../_static/doctools.js"></script>
        <script src="../../../../_static/sphinx_highlight.js"></script>
    <script src="../../../../_static/js/theme.js"></script>
    <link rel="index" title="Index" href="../../../../genindex.html" />
    <link rel="search" title="Search" href="../../../../search.html" />
    <link rel="next" title="Cyrus Murder Mail Delivery" href="murder-mail-delivery.html" />
    <link rel="prev" title="Cyrus Murder Mupdate Details" href="murder-mupdate-details.html" /> 
</head>

<body class="wy-body-for-nav"> 
  <div class="wy-grid-for-nav">
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search" >

          
          
          <a href="../../../../index.html" class="icon icon-home">
            Cyrus IMAP
          </a>
              <div class="version">
                3.10.2
              </div>
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>
        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
              <p class="caption" role="heading"><span class="caption-text">Cyrus IMAP</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../../download.html">Download</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../quickstart.html">Quickstart Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../overview.html">Overview</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../setup.html">Setup</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../../../operations.html">Operations</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../manpages/index.html">Man pages</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../../admin.html">Administrator Guide</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../../admin.html#architecture">Architecture</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="../../admin.html#management">Management</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="../locations.html">File &amp; Directory Locations</a></li>
<li class="toctree-l4"><a class="reference internal" href="../ports-sockets.html">Ports and Sockets</a></li>
<li class="toctree-l4"><a class="reference internal" href="../access-control.html">Access Control</a></li>
<li class="toctree-l4"><a class="reference internal" href="../quotas.html">Quotas</a></li>
<li class="toctree-l4"><a class="reference internal" href="../sieve.html">Cyrus Sieve</a></li>
<li class="toctree-l4"><a class="reference internal" href="../backups.html">Cyrus Backups</a></li>
<li class="toctree-l4"><a class="reference internal" href="../nntp.html">Cyrus NNTP</a></li>
<li class="toctree-l4"><a class="reference internal" href="../protlayer.html">Cyrus Prot Layer</a></li>
<li class="toctree-l4"><a class="reference internal" href="../sop.html">Standard Operating Procedures</a></li>
<li class="toctree-l4"><a class="reference internal" href="../eventsource.html">Cyrus Event Source</a></li>
<li class="toctree-l4"><a class="reference internal" href="../monitoring.html">Monitoring</a></li>
<li class="toctree-l4"><a class="reference internal" href="../config-mailboxdistribution.html">Mailbox Distribution</a></li>
<li class="toctree-l4 current"><a class="reference internal" href="murder.html">Cyrus Murder</a></li>
<li class="toctree-l4"><a class="reference internal" href="../nginx-proxy.html">HOWTO: Using an NGINX IMAP Proxy</a></li>
<li class="toctree-l4"><a class="reference internal" href="../tweaking.html">Tweaking Cyrus IMAP</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../faq.html">Frequently Asked Questions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../../developers.html">Developers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../support.html">Support/Community</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Cyrus SASL</span></p>
<ul>
<li class="toctree-l1"><a class="reference external" href="http://www.cyrusimap.org/sasl">Cyrus SASL</a></li>
</ul>

        </div>
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../../../../index.html">Cyrus IMAP</a>
      </nav>

      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="Page navigation">
  <ul class="wy-breadcrumbs">
      <li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
          <li class="breadcrumb-item"><a href="../../../../operations.html">Operations</a></li>
          <li class="breadcrumb-item"><a href="../../admin.html">Administrator Guide</a></li>
          <li class="breadcrumb-item"><a href="murder.html">Cyrus Murder</a></li>
      <li class="breadcrumb-item active">Cyrus Murder Failure Modes</li>
      <li class="wy-breadcrumbs-aside">
              <a href="https://github.com/cyrusimap/cyrus-imapd/blob/master/docsrc/imap/reference/admin/murder/murder-failure-modes.rst" class="fa fa-github"> Edit on GitHub</a>
      </li>
  </ul>
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
             
  <section id="cyrus-murder-failure-modes">
<h1>Cyrus Murder Failure Modes<a class="headerlink" href="#cyrus-murder-failure-modes" title="Permalink to this heading"></a></h1>
<p>This page is for documenting what happens when a part of the Cyrus Murder fails, how to recover from failures, and commons DOs and DON'Ts of Murder operation.</p>
<section id="what-happens-when-the-murder-mupdate-master-is-unavailable">
<h2>What happens when the Murder mupdate master is unavailable?<a class="headerlink" href="#what-happens-when-the-murder-mupdate-master-is-unavailable" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>Incoming IMAP connections to frontends are still allowed, as are most mailbox operations (see below for exceptions).</p></li>
<li><p>Mail delivery via the frontends is deferred (lmtpproxyd cannot locate mailbox).</p></li>
<li><p>Deleting a mailbox (or folder) works, presumably because this operation cannot create future conflicts in the mailbox list. However, the frontends will still think the mailbox (or folder) exists because they only get updates from the mupdate master.</p></li>
<li><p>Creating a mailbox (or folder) fails with an error message like &quot;can not connect to mupdate server for reservation on 'user.foo.test'&quot;.</p></li>
</ol>
</section>
<section id="what-happens-when-the-murder-mupdate-master-is-available-again">
<h2>What happens when the Murder mupdate master is available again?<a class="headerlink" href="#what-happens-when-the-murder-mupdate-master-is-available-again" title="Permalink to this heading"></a></h2>
<p>Frontends will automatically reconnect to the mupdate master after 20 seconds (see <strong>mupdate_retry_delay</strong> in <a class="reference internal" href="../../manpages/configs/imapd.conf.html#std-cyrusman-imapd.conf-5">imapd.conf(5)</a>) and synchronize.</p>
<p>Backends will NOT automatically sync any changes to the mupdate master. If any mailbox changes occurred on a backend (a distinct possibility if IMAP clients were still connected), you will need to manually synchronize the mailbox list from the backend to the mupdate master. As the cyrus user, run <code class="docutils literal notranslate"><span class="pre">ctl_mboxlist</span> <span class="pre">-mw</span></code> on each backend to see the list of changes that would be made. If the list looks correct, then run <code class="docutils literal notranslate"><span class="pre">ctl_mboxlist</span> <span class="pre">-m</span></code> to actually push those changes to the mupdate master.</p>
</section>
<section id="what-if-my-mupdate-master-blows-up-and-i-have-to-recover-it">
<h2>What if my mupdate master blows up and I have to recover it?<a class="headerlink" href="#what-if-my-mupdate-master-blows-up-and-i-have-to-recover-it" title="Permalink to this heading"></a></h2>
<p>It is either easy, or hard depending on your setup.</p>
<section id="easy-recovery">
<h3>Easy recovery<a class="headerlink" href="#easy-recovery" title="Permalink to this heading"></a></h3>
<p>You can restore the murder master mailbox list from your text backup (created with <code class="docutils literal notranslate"><span class="pre">ctl_mboxlist</span> <span class="pre">-d</span></code>)</p>
<p>Don't have a backup? Well it is still easy if you have a frontend. The mailboxes.db on your frontend and your murdermaster are in the same format.</p>
<ol class="arabic simple">
<li><p>Stop Cyrus on a frontend</p></li>
<li><p>Stop Cyrus on your murder master</p></li>
<li><p>Copy mailboxes.db from frontend to murder master</p></li>
<li><p>Start everything backup</p></li>
<li><p>Use ctl_mboxlist -m on each backend to update the murder master with any missing changes.</p></li>
</ol>
<p>If you are using skiplist for your mailboxes.db then you can just copy the file.</p>
</section>
<section id="hard-recovery">
<h3>Hard recovery<a class="headerlink" href="#hard-recovery" title="Permalink to this heading"></a></h3>
<p>It's not currently possible to recover the master's mailboxes.db with a dump from <code class="docutils literal notranslate"><span class="pre">ctl_mboxlist</span> <span class="pre">-d</span></code>. The mailboxes.db recovered on the master with <code class="docutils literal notranslate"><span class="pre">ctl_mboxlist</span> <span class="pre">-u</span></code> won't have the &quot;remote&quot; flag set.</p>
<ol class="arabic simple">
<li><p>Stop Cyrus on your frontends.</p></li>
<li><p>Delete the mailboxes.db on the frontends and the mupdate master.</p></li>
<li><p>Use <code class="docutils literal notranslate"><span class="pre">ctl_mboxlist</span> <span class="pre">-m</span></code> on each backend to populate the mailboxes.db on the mupdate master.</p></li>
<li><p>Start Cyrus on the frontends.</p></li>
</ol>
</section>
</section>
</section>


           </div>
          </div>
          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
        <a href="murder-mupdate-details.html" class="btn btn-neutral float-left" title="Cyrus Murder Mupdate Details" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
        <a href="murder-mail-delivery.html" class="btn btn-neutral float-right" title="Cyrus Murder Mail Delivery" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>&#169; Copyright 1993–2025, The Cyrus Team.</p>
  </div>

  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
    provided by <a href="https://readthedocs.org">Read the Docs</a>.
   

</footer>
        </div>
      </div>
    </section>
  </div>
  <script>
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script>
 



</body>
</html>