<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> 
        <base href="https://hibernate.atlassian.net"> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0" bgcolor="#f5f5f5"> 
            <!-- header here --> 
            <tbody>
                <tr> 
                    <td id="header-pattern-container" style="padding: 0; border-collapse: collapse; padding: 10px 20px"> 
                        <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                            <tbody>
                                <tr> 
                                    <td id="header-avatar-image-container" valign="top" style="padding: 0; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px" width="32"> <img id="header-avatar-image" class="image_fix" src="https://avatar-cdn.atlassian.com/2a8bdd4ffd282b7185c74b52ab452617?s=48&amp;d=https%3A%2F%2Fsecure.gravatar.com%2Favatar%2F2a8bdd4ffd282b7185c74b52ab452617%3Fd%3Dmm%26s%3D48%26noRedirect%3Dtrue" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top"> </td> 
                                    <td id="header-text-container" valign="middle" style="padding: 0; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="yrodiere" style="color:#6c797f;; color: #3b73af; text-decoration: none" id="email_yrodiere" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A58fa1ced-171a-4c00-97e8-5d70d442cc4b"> Yoann Rodière </a> <strong>created</strong> an issue </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="email-content-container" style="padding: 0; border-collapse: collapse; padding: 0 20px"> 
                        <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; border-spacing: 0; border-collapse: separate"> 
                            <tbody>
                                <tr> 
                                    <!-- there needs to be content in the cell for it to render in some clients --> 
                                    <td class="email-content-rounded-top mobile-expand" style="padding: 0; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 15px; background-color: #ffffff; border-left: 1px solid #cccccc; border-top: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly" height="10" bgcolor="#ffffff">&nbsp;</td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> 
                                        <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                            <tbody>
                                                <tr> 
                                                    <td class="page-title-pattern-first-line " style="padding: 0; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; padding-top: 10px"> <a href="https://hibernate.atlassian.net/browse/HSEARCH?atlOrigin=eyJpIjoiZjRlMzQxYThjZmI5NDUyMGI1NmEwYzc0MjQ4MzBmMTYiLCJwIjoiaiJ9" style="color: #3b73af; text-decoration: none">Hibernate Search</a> / <a href="https://hibernate.atlassian.net/browse/HSEARCH-3499?atlOrigin=eyJpIjoiZjRlMzQxYThjZmI5NDUyMGI1NmEwYzc0MjQ4MzBmMTYiLCJwIjoiaiJ9" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-avatar-ef713fec-8517-41fc-ba2d-41de19af6766" height="16" width="16" border="0" align="absmiddle" alt="New Feature" style="vertical-align: text-bottom"></a> <a href="https://hibernate.atlassian.net/browse/HSEARCH-3499?atlOrigin=eyJpIjoiZjRlMzQxYThjZmI5NDUyMGI1NmEwYzc0MjQ4MzBmMTYiLCJwIjoiaiJ9" style="color: #3b73af; text-decoration: none">HSEARCH-3499</a> </td> 
                                                </tr> 
                                                <tr> 
                                                    <td style="vertical-align: top;; padding: 0; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HSEARCH-3499?atlOrigin=eyJpIjoiZjRlMzQxYThjZmI5NDUyMGI1NmEwYzc0MjQ4MzBmMTYiLCJwIjoiaiJ9" style="color: #3b73af; text-decoration: none">Near-zero-downtime mass indexing</a> </span> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand  wrapper-special-margin" style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff; padding-top: 10px; padding-bottom: 5px" bgcolor="#ffffff"> 
                                        <table class="keyvalue-table" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                            <tbody>
                                                <tr> 
                                                    <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Issue Type:</th> 
                                                    <td class="has-icon" style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <img src="cid:jira-generated-image-avatar-ef713fec-8517-41fc-ba2d-41de19af6766" height="16" width="16" border="0" align="absmiddle" alt="New Feature" style="vertical-align: text-bottom"> New Feature </td> 
                                                </tr> 
                                                <tr> 
                                                    <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Assignee:</th> 
                                                    <td style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> Unassigned </td> 
                                                </tr> 
                                                <tr> 
                                                    <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Components:</th> 
                                                    <td style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> backend-elasticsearch, backend-lucene, engine, mapper-orm </td> 
                                                </tr> 
                                                <tr> 
                                                    <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Created:</th> 
                                                    <td style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> 25/Feb/2019 02:58 AM </td> 
                                                </tr> 
                                                <tr> 
                                                    <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Fix Versions:</th> 
                                                    <td style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> 6.0.0.Beta-backlog </td> 
                                                </tr> 
                                                <tr> 
                                                    <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Priority:</th> 
                                                    <td class="has-icon" style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <img src="cid:jira-generated-image-static-major-7498e274-5b38-4faa-a8f7-1238a68f0d7f" height="16" width="16" border="0" align="absmiddle" alt="Major" style="vertical-align: text-bottom"> Major </td> 
                                                </tr> 
                                                <tr> 
                                                    <th style="color: #707070; font: normal 14px/20px Arial, sans-serif; text-align: left; vertical-align: top; padding: 2px 0">Reporter:</th> 
                                                    <td style="padding: 0; border-collapse: collapse; font: normal 14px/20px Arial, sans-serif; padding: 2px 0 2px 5px; vertical-align: top"> <a class="user-hover" rel="yrodiere" style="color:#6c797f;; color: #3b73af; text-decoration: none" id="email_yrodiere" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3A58fa1ced-171a-4c00-97e8-5d70d442cc4b"> Yoann Rodière </a> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand  issue-description-container" style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff; padding-top: 5px; padding-bottom: 10px" bgcolor="#ffffff"> 
                                        <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                            <tbody>
                                                <tr> 
                                                    <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0; border-collapse: collapse; padding: 0 0 10px"> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0; margin-top: 0">Splitting part of the discussion from HSEARCH-2861: even knowing this does not address zero-downtime application updates completely, a near-zero-downtime mass indexing could address at least some use cases, so it's worth considering independently from <span class="jira-issue-macro" data-jira-key="HSEARCH-2861"> <a href="https://hibernate.atlassian.net/browse/HSEARCH-2861" class="jira-issue-macro-key issue-link" title="Zero-downtime/hot updates for the Elasticsearch backend" style="color: #3b73af; text-decoration: none"> <img class="icon" src="https://hibernate.atlassian.net/secure/viewavatar?size=xsmall&amp;avatarId=12150&amp;avatarType=issuetype"> HSEARCH-2861 </a> <span class="aui-lozenge aui-lozenge-subtle aui-lozenge-complete jira-macro-single-issue-export-pdf" style="background: #cccccc; border: 1px solid #cccccc; border-radius: 3px; color: #333333; display: inline-block; font-size: 11px; font-weight: bold; line-height: 99%; margin: 0; padding: 2px 5px; text-align: center; text-decoration: none; text-transform: uppercase; background-color: #ffffff; border-color: #cccccc; color: #333333" bgcolor="#ffffff">Open</span> </span> .</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">Currently, when we run the mass indexer, we generally need to execute a purge before reindexing: we just drop all the content from the index, and start over from an empty index.</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">This means that search queries will return very incomplete results during the mass indexing: at first they won't return anything, then they will return more and more result as mass indexing progresses towards 100%.</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">Another strategy exists, though: when we start reindexing, we could create a new (empty) version of the index, alongside the existing one. Then we would redirect all writes to that new index, both the mass indexing and other writes. When mass indexing is over, we would just redirect reads to the new index, then remove the old one.</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">The main advantage is that, in lots of cases, search queries would still return usable results during mass indexing. The results would still not be perfect, since they would be out of date, but still, depending on the situation they could be significantly better.</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">The main disadvantage is that we would require about two times the storage space for the index, for the duration of mass indexing.</p> <h3 style="margin: 10px 0 0; font-size: 16px; line-height: 1.563; margin: 30px 0 0"><a name="Usecases" style="color: #3b73af; text-decoration: none"></a>Use cases</h3> <h4 style="margin: 10px 0 0; font-size: 14px; line-height: 1.500; margin: 20px 0 0; margin-top: 10px"><a name="Periodicreindexing" style="color: #3b73af; text-decoration: none"></a>Periodic reindexing</h4> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">The main, most appropriate use case would be periodic reindexing. When some entity changes affect way too many documents, you may decide to instruct Hibernate Search to ignore such changes, leaving the index in a partially outdated state. Then you will periodically reindex in order to </p> <h4 style="margin: 10px 0 0; font-size: 14px; line-height: 1.500; margin: 20px 0 0"><a name="Hotapplicationupdates" style="color: #3b73af; text-decoration: none"></a>Hot application updates</h4> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">Another use case would be "hot" application updates. If a new version of an application has to be deployed, and that new version uses a slightly different Hibernate Search mapping, there's a good chance that data has to be reindexed (to add new fields, update existing fields that are now stored differently, ...).</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">There is, however, a big downside to this solution for this use case: if the index structure changed in an incompatible way (fields were removed or had their type changed) between the old and new mapping, some search queries could fail with an exception. For example if a field was a text field in the old index, but new search queries expect it to be numeric: some predicates may fail, projections definitely won't work well, ...</p> <h3 style="margin: 10px 0 0; font-size: 16px; line-height: 1.563; margin: 30px 0 0"><a name="Implementation" style="color: #3b73af; text-decoration: none"></a>Implementation</h3> <h4 style="margin: 10px 0 0; font-size: 14px; line-height: 1.500; margin: 20px 0 0; margin-top: 10px"><a name="Elasticsearch" style="color: #3b73af; text-decoration: none"></a>Elasticsearch</h4> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">For this to work, the index needs to be using aliases.<br> Things get a bit complex if the name of the index configured in Hibernate Search points directly to the index (not to an alias),<br> because there doesn't seem to be an atomic operation for "rename index A to B and create an alias A pointing to B".<br> So, maybe we should make sure that Hibernate Search always uses aliases when creating indexes automatically?</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">Before mass indexing, for each index affected by mass indexing:</p> 
                                                        <ol> 
                                                            <li>Retrieve the name of the index pointed to by the alias <tt>myindex</tt>. Let's assume the actual name is <tt>myindex-0</tt>. If <tt>myindex</tt> is not an alias, fail.</li> 
                                                            <li>Generate a name for the new index. For example we could use the name of the index in Hibernate Search with an incrementing suffix (myindex-0, myindex-1, ...). We would pick the suffix that follows the one used in the name of the old index, in this case <tt>-1</tt>, naming the new index <tt>myindex-1</tt>.</li> 
                                                            <li>Create the new index and its mapping.</li> 
                                                            <li>Change the internal state of the index manager so that subsequent writes go to <tt>myindex-1</tt> (not reads, just writes). Note that we need some try/finally block to roll back this change if mass indexing fails: the index will end up out of date, but at least it will be usable.</li> 
                                                        </ol> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">After massindexing, for each index affected by mass indexing:</p> 
                                                        <ol> 
                                                            <li>Change the alias <tt>myindex</tt> to point to <tt>myindex-1</tt>.</li> 
                                                            <li>Remove <tt>myindex-0</tt>.</li> 
                                                            <li>Change the internal state of the index manager so that subsequent writes go to <tt>myindex</tt>.</li> 
                                                        </ol> <h4 style="margin: 10px 0 0; font-size: 14px; line-height: 1.500; margin: 20px 0 0"><a name="EmbeddeLucene" style="color: #3b73af; text-decoration: none"></a>Embedde Lucene</h4> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">Before mass indexing, for each index affected by mass indexing:</p> 
                                                        <ol> 
                                                            <li>Create the new index on disk; for example use the same name as the old index, with a <tt>_new</tt> suffix.</li> 
                                                            <li>Change the internal state of the index manager so that subsequent writes go to the new index (not reads, just writes). Note that we need some try/finally block to roll back this change if mass indexing fails: the index will end up out of date, but at least it will be usable.</li> 
                                                        </ol> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">After massindexing, for each index affected by mass indexing:</p> 
                                                        <ol> 
                                                            <li>Acquire a lock on the index to be sure that no read/writes are currently in progress.</li> 
                                                            <li>Remove the old index.</li> 
                                                            <li>Move the new index to the exact place where the old index was; for example remove the <tt>_new</tt> suffix.</li> 
                                                            <li>Change the internal state of the index manager so that subsequent writes go to the appropriate index.</li> 
                                                            <li>Release the lock on the index</li> 
                                                        </ol> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">Depending on the Lucene Directory, we might be able to avoid the lock, but that should be investigated.</p> <h3 style="margin: 10px 0 0; font-size: 16px; line-height: 1.563; margin: 30px 0 0"><a name="Variations" style="color: #3b73af; text-decoration: none"></a>Variations</h3> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">We could do everything as described above, except that instead of being redirected to the new index, non-massindexer writes are <b>duplicated</b> to the new index. That way, search queries could continue to get up-to-date results.</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">Of course, we would put extra pressure on the backend (twice the writes, <b>on top of</b> the mass indexing), so this is not appropriate for all situations.</p> <p style="margin-top:0;margin-bottom:10px;; margin: 10px 0 0">Note this may not work very well in the case of a mapping change: we would write into the old index documents that are meant for the new index.<br> Worse, in that case we could corrupt the whole index (by inserting fields that did not make sense in the old schema) and make an application rollback much harder, because the index would have to be rebuilt.</p> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <tr> 
                                    <td class="email-content-main mobile-expand " style="padding: 0; border-collapse: collapse; border-left: 1px solid #cccccc; border-right: 1px solid #cccccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #ffffff" bgcolor="#ffffff"> <script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "EmailMessage",
  "description": "View Issue",
  "potentialAction": {
    "@type": "ViewAction",
        "target": "https://hibernate.atlassian.net/browse/HSEARCH-3499?inbox=true&",
    "name": "View Issue"
      },
  "publisher": {
    "@type": "Organization",
    "name": "Atlassian",
    "url": "https://www.atlassian.com"
  }
}
</script> 
                                        <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="actions-pattern-container" valign="middle" style="padding: 0; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                                        <table align="left" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                                            <tbody>
                                                                <tr> 
                                                                    <td class="actions-pattern-action-icon-container" style="padding: 0; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HSEARCH-3499#add-comment?atlOrigin=eyJpIjoiZjRlMzQxYThjZmI5NDUyMGI1NmEwYzc0MjQ4MzBmMTYiLCJwIjoiaiJ9" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-0f2c820d-61ef-4a70-9177-e659368dfd46" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle"> </a> </td> 
                                                                    <td class="actions-pattern-action-text-container" style="padding: 0; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://hibernate.atlassian.net/browse/HSEARCH-3499#add-comment?atlOrigin=eyJpIjoiZjRlMzQxYThjZmI5NDUyMGI1NmEwYzc0MjQ4MzBmMTYiLCJwIjoiaiJ9" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> </td> 
                                                                </tr> 
                                                            </tbody>
                                                        </table> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                                <!-- there needs to be content in the cell for it to render in some clients --> 
                                <tr> 
                                    <td class="email-content-rounded-bottom mobile-expand" style="padding: 0; border-collapse: collapse; color: #ffffff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #ffffff; border-top: 0; border-left: 1px solid #cccccc; border-bottom: 1px solid #cccccc; border-right: 1px solid #cccccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly" height="5" bgcolor="#ffffff">&nbsp;</td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
                <tr> 
                    <td id="footer-pattern" style="padding: 0; border-collapse: collapse; padding: 12px 20px"> 
                        <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                            <tbody>
                                <tr> 
                                    <td id="footer-pattern-mobile-separated-links" class="mobile-resize-text" width="100%" colspan="2" style="padding: 0; border-collapse: collapse; color: #999999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> Get Jira notifications on your phone! Download the Jira Cloud app for <a href="https://play.google.com/store/apps/details?id=com.atlassian.android.jira.core&referrer=utm_source%3DNotificationLink%26utm_medium%3DEmail" style="color: #3b73af; text-decoration: none">Android</a> or <a href="https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailNotificationLink&mt=8" style="color: #3b73af; text-decoration: none">iOS</a> 
                                        <hr> </td> 
                                </tr> 
                                <tr> 
                                    <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0; border-collapse: collapse; color: #999999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px"> This message was sent by Atlassian Jira <span id="footer-build-information">(v1001.0.0-SNAPSHOT#100098-<span title="39981cd387164b89e6281a35f9ae6c257939070d" data-commit-id="39981cd387164b89e6281a35f9ae6c257939070d}">sha1:39981cd</span>)</span> </td> 
                                    <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                        <table style="border-collapse: collapse; mso-table-lspace: 0; mso-table-rspace: 0"> 
                                            <tbody>
                                                <tr> 
                                                    <td id="footer-pattern-logo-desktop-padding" style="padding: 0; border-collapse: collapse; padding-top: 3px; opacity: 0.150"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-149779f3-b70e-40b6-8c4e-8d84a74441d4" alt="Atlassian logo" title="Atlassian logo" width="192" height="24" class="image_fix"> </td> 
                                                </tr> 
                                            </tbody>
                                        </table> </td> 
                                </tr> 
                            </tbody>
                        </table> </td> 
                </tr> 
            </tbody>
        </table>   
    
<img border="0" width="1" height="1" alt="" src="http://atlassian.et.e.sparkpost.com/q/DRhz3xSx2_WfEpWPWrWBig~~/AAAAAQA~/RgReVP27PlcLYXRsYXNzaWFudXNCCgAAO8pzXLLR-spSIGhpYmVybmF0ZS1pc3N1ZXNAbGlzdHMuamJvc3Mub3JnWAQAAAAE">
</body>
</html>