incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bertrand Delacretaz (Confluence)" <conflue...@apache.org>
Subject [CONF] Apache Sling > Health Checks Executor Design
Date Tue, 31 Dec 2013 10:03:00 GMT
<html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <base href="https://cwiki.apache.org/confluence" />
        <style type="text/css">
    body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif;
}
    body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
    small { font-size: 11px; }

    body { width:100% !important; -webkit-font-smoothing: antialiased; }

    body,
    #email-wrapper { background-color: #f0f0f0; }
    #email-wrapper-inner { padding: 20px; text-align: center; }
    #email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour;
padding:20px; text-align:left; }
    #email-wrapper-inner > table { width: 100%; }
    #email-wrapper-inner.thin > table { margin: 0 auto; width: 50%; }
    #email-footer { padding: 0 16px 32px 16px; margin: 0; }

    .email-indent { margin: 8px 0 16px 0; }
    .email-comment { margin: 0 0 0 56px; }
    .email-comment.removed { background-color: #ffe7e7; border: 1px solid #df9898; padding:
0 8px;}

    #email-title-avatar { text-align: left; vertical-align: top; width: 48px; padding-right:
8px; }
    #email-title-flavor { margin: 0; padding: 0 0 4px 0; }
    #email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0;
padding: 0; }
    #email-title .icon { border: 0; padding: 0 5px 0 0; text-align: left; vertical-align:
middle; }

    #email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding:
0; }
    #email-actions td { padding-top: 8px; }
    #email-actions .left { max-width: 45%; text-align: left; }
    #email-actions .right { text-align: right; }
    .email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px
0; padding: 8px 0; }
    .email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0
0; }

    .email-metadata { color: #505050; }

    a { color: #326ca6; text-decoration: none; }
    a:hover { color: #336ca6; text-decoration: underline; }
    a:active {color: #326ca6; }

    a.email-footer-link { color: #505050; font-size: 11px; }

    .email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
    .email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
    .email-list-divider { color: #505050; padding: 0 0.35em; }
    .email-operation-icon { padding-right: 5px; }

    .avatar { -ms-interpolation-mode: bicubic; border-radius: 3px;}
    .avatar-link { margin: 2px; }

    .tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
    .tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px
4px 0; }

    .aui-message {  margin: 1em 0; padding: 8px; }
    .aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
    .aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
    .aui-message.error,
    .aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000;
}

    .call-to-action-table { margin: 10px 1px 1px 1px;}
    .call-to-cancel-container, .call-to-action-container { padding: 5px 20px; }
    .call-to-cancel-container { border: 1px solid #aaa; background-color: #eee; border-radius:
3px; }
    .call-to-cancel-container a.call-to-cancel-button { background-color: #eee; font-size:
14px; line-height: 1; padding: 0; margin: 0; color: #666; font-family: sans-serif;}
    .call-to-action-container { border: 1px solid #486582;  background-color: #3068A2; border-radius:
3px; padding: 4px 10px; }
    .call-to-action-container a.call-to-action-button { background-color: #3068A2; font-size:
14px; line-height: 1; padding: 0; margin: 0; color: #fff; font-weight: bold; font-family:
sans-serif; }

    /** The span around the inline task checkbox image */
    .diff-inline-task-overlay {
        display: inline-block;
        text-align: center;
        height: 1.5em;
        padding: 5px 0px 1px 5px;
        margin-right: 5px;
        /** Unfortunately, the negative margin-left is stripped out in gmail */
        margin-left: -5px;
    }

            @media handheld, only screen and (max-device-width: 480px) {
        div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
        small, small a { -webkit-text-size-adjust: 90%; }

        td[id=email-wrapper-inner] { padding: 2px !important; }
        td[id=email-content-inner] { padding: 8px !important; }
        td[id="email-wrapper-inner"][class="thin"] > table { text-align: left !important;
width: 100% !important; }
        td[id=email-footer] { padding: 8px 12px !important; }
        div[class=email-indent] { margin: 8px 0px !important; }
        div[class=email-comment] { margin: 0 !important; }

        p[id=email-title-flavor] a { display: block; } /* puts the username and the action
on separate lines */
        p[id=email-permalink] { padding: 4px 0 0 0 !important; }

        table[id=email-actions] td { padding-top: 0 !important; }
        table[id=email-actions] td.right { text-align: right !important; }
        table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important;
word-wrap: normal !important; }
        span[class=email-list-divider] { display: none; }
    }



        </style>
    </head>
    <body style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px;
width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
        <table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0"
style="background-color: #f0f0f0">
            <tbody>
                <tr valign="middle">
                    <td id="email-wrapper-inner" style="font-size: 13px; padding: 20px;
text-align: center">
                        <table id="email-content" cellspacing="0" cellpadding="0" border="0"
style="font-family: Arial, FreeSans, Helvetica, sans-serif; width: 100%">
                            <tbody>
                                <tr valign="top">
                                    <td id="email-content-inner" align="left" style="font-family:
Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px
solid #bbb; padding: 20px; text-align: left">
                                        <table id="email-title" cellpadding="0" cellspacing="0"
border="0" width="100%">
                                            <tbody>
                                                <tr>
                                                    <td id="email-title-avatar" rowspan="2"
style="font-size: 13px; text-align: left; vertical-align: top; width: 48px; padding-right:
8px"> <img class="avatar" src="cid:avatar_b8e223e37a296a90591de293add69444" border="0"
height="48" width="48" style="-ms-interpolation-mode: bicubic; border-radius: 3px" /> </td>
                                                    <td valign="top" style="font-size:
13px">
                                                        <div id="email-title-flavor" class="email-metadata"
style="margin: 0; padding: 0 0 4px 0; color: #505050">
                                                            <a href="    https://cwiki.apache.org/confluence/display/~bdelacretaz
" style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Bertrand
Delacretaz</a> a modifi&eacute; la page&nbsp;:
                                                        </div> </td>
                                                </tr>
                                                <tr>
                                                    <td valign="top" style="font-size:
13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height:
20px; margin: 0; padding: 0"> <a href="https://cwiki.apache.org/confluence/display/SLING/Health+Checks+Executor+Design"
style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:page-icon"
alt="" style="border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle" />
<strong style="font-size:16px;line-height:20px;vertical-align:top;">Health Checks Executor
Design</strong> </a> </h2> </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        <div class="email-indent" style="margin: 8px 0
16px 0">
                                            <div class="email-diff">
                                                <div id="page-diffs" class="wiki-content">
                                                    <h1 id="HealthChecksExecutorDesign-Overview"
class="diff-block-target diff-block-context"> <span class="diff-html-added" id="added-diff-0"
style="font-size: 100%; background-color: #ddfade;">Overview</span> </h1>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">With&nbsp;</span><a href="https://issues.apache.org/jira/browse/SLING-3278"
class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">https://issues.apache.org/jira/browse/SLING-3278</span></a><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">&nbsp;we
have started implementing a HealthChecksExecutor service that will help handle &quot;slow&quot;
Health Checks (HC) better.</span> </p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">Discussions on our dev list show that we have slightly different ideas about
how that should work, so I'm starting this page to clarify the use cases and requirements.</span>
</p>
                                                    <h1 id="HealthChecksExecutorDesign-Typicalusecases"
class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">Typical use cases</span> </h1>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">The general idea is that executing a set of HCs is guaranteed to return a result
in a specified amount of time. If an actual result is not available yet for a given health
check, a Result with a HEALTH_CHECK_ERROR state is returned, with a WARN log message that
indicates the problem.</span> </p>
                                                    <h2 id="HealthChecksExecutorDesign-A)JMXMBean"
class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">A) JMX MBean</span> </h2>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">An MBean acts as a JMX facade for an HC and wants to get a result quickly. Getting
a slightly stale cached result is acceptable, and getting the MBean attributes several times
per second should not cause the HC to be executed every time.</span> </p>
                                                    <h2 id="HealthChecksExecutorDesign-B)Humanuser,webconsole"
class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">B) Human user, webconsole</span> </h2>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">A human user looks at a set of HCs, selected by their tags, on the webconsole.
The user expects the webconsole page to refresh within N seconds (specified in the webconsole
execution form), even if some HCs take longer than that to execute. Getting cached results
is fine, but their age should be displayed on the webconsole, as well as the HC's name and
tags. For this use case, HCs should be executed in parallel using the Sling thread pools mechanism.</span>
</p>
                                                    <h2 id="HealthChecksExecutorDesign-C)HTTPfront-end,machineclient"
class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">C) HTTP front-end, machine client</span> </h2>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">An HTTP front-end uses a set of HCs, selected by tags, to decide whether to include
a Sling instance in the pool used to process incoming requests. Every few seconds, the front-end
pings a specific servlet on the Sling instance, which provides the aggregated HC results in
a format specified by the front-end. Cached results are not acceptable in this case, the servlet
must either reply quickly with an OK status, or fail after a timeout specified by the front-end.</span>
</p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span style="font-size: 24.0px;line-height: 1.25;"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Suggested API
changes</span></span> </p>
                                                    <h2 id="HealthChecksExecutorDesign-APIvariantA"
class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size:
100%; background-color: #ddfade;">API variant A</span> </h2>
                                                    <pre class="diff-block-target diff-block-context"
style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">&nbsp;</span>
</pre>
                                                    <table class="diff-macro diff-html-added
diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin:
10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height:
20px;"><img src="https://cwiki.apache.org/confluence/s/fr_FR-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Bloc de code</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-properties"
style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;padding:
0; border: 1px solid #dddddd;; font-size: 13px">
                                                                    <table>
                                                                        <tbody>
                                                                            <tr>
                                                                                <td style="background-color:
#fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">language</span></td>
                                                                                <td style="background-color:
#fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">java</span></td>
                                                                            </tr>
                                                                        </tbody>
                                                                    </table> </td>
                                                            </tr>
                                                        </tbody>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<pre style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">interface
HealthCheckExecutor {
  /** @param options for things like &quot;no cached results&quot;, &quot;execution
timeout&quot;, extensible
   * @param hc we might have to use ServiceReference instead of HC unfortunately
   */
  List&lt;Result&gt; execute(Map&lt;String, Object&gt; options, HealthCheck
... hc);
}</span>
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">&nbsp;If several HCs are provided, they are executed in parallel using a
configurable Sling thread pool.</span> </p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">The default execution timeout is configurable, can be overridden in the options
map.</span> </p>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">The Results class needs some changes to handle caching and to provide enough
metadata to display the results:</span> </p>
                                                    <table class="diff-macro diff-html-added
diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin:
10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title"
style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;;
font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height:
20px;"><img src="https://cwiki.apache.org/confluence/s/fr_FR-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code"
style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Bloc de code</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-properties"
style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;padding:
0; border: 1px solid #dddddd;; font-size: 13px">
                                                                    <table>
                                                                        <tbody>
                                                                            <tr>
                                                                                <td style="background-color:
#fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">language</span></td>
                                                                                <td style="background-color:
#fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"><span
class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">java</span></td>
                                                                            </tr>
                                                                        </tbody>
                                                                    </table> </td>
                                                            </tr>
                                                        </tbody>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body"
style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px">
<pre style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">public
class Result {
   /** Optional metadata, the HealthCheckExecutor initializes this
    *  with the HC's service properties, and adds timing information
    *  like the result's creation timestamp and time to live, used
    *  for caching. HC's can add any relevant metadata here
    */
   public Map&lt;String, Object&gt; getMetadata();
&nbsp;
   /** If this Result's metadata includes a creation timestamp and
    *  time to live, this is used to expire results from the
    *  HealthCheckExecutor's cache
    */
   public boolean isExpired();
&nbsp;
   // the rest is unchanged
}</span>
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-block-target diff-block-context"
style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color:
#ddfade;">For use case C we also need an AggregatedResult, which extends Result with a
getIndividualResults() method that returns a List&lt;Result&gt;. The&nbsp;AggregatedResult's
state is the highest of its individual results states, and its log is the sum of the individual
results logs.</span> </p>
                                                    <pre class="diff-block-target diff-block-context"
style="font-size: 13px">
<span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">&nbsp;</span>
</pre>
                                                </div>
                                            </div>
                                        </div>
                                        <table id="email-actions" class="email-metadata"
cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb;
color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
                                            <tbody>
                                                <tr>
                                                    <td class="left" valign="top" style="font-size:
13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a
href="https://cwiki.apache.org/confluence/display/SLING/Health+Checks+Executor+Design" style="color:
#326ca6; text-decoration: none">Afficher en ligne</a> </span> <span class="email-list-divider"
style="color: #505050; padding: 0 0.350em">&middot;</span> <span class="email-list-item"><a
href="https://cwiki.apache.org/confluence/plugins/likes/like.action?contentId=38569054" style="color:
#326ca6; text-decoration: none">J'aime</a> </span> <span class="email-list-divider"
style="color: #505050; padding: 0 0.350em">&middot;</span> <span class="email-list-item"><a
href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=38569054&amp;revisedVersion=2&amp;originalVersion=1"
style="color: #326ca6; text-decoration: none">Afficher les modifications</a> </span>
<span class="email-list-divider" style="color: #505050; padding: 0 0.350em">&middot;</span>
<span class="email-list-item"><a href="https://cwiki.apache.org/confluence/display/SLING/Health+Checks+Executor+Design?showComments=true&amp;showCommentArea=true#addcomment"
style="color: #326ca6; text-decoration: none">Ajouter un commentaire</a> </span>
</td>
                                                    <td class="right" width="50%" valign="top"
style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a
href="https://cwiki.apache.org/confluence/users/removespacenotification.action?spaceKey=SLING"
style="color: #326ca6; text-decoration: none">Ne plus surveiller l'espace</a> </span>
<span class="email-list-divider" style="color: #505050; padding: 0 0.350em">&middot;</span>
<span class="email-list-item"><a href="https://cwiki.apache.org/confluence/users/editmyemailsettings.action"
style="color: #326ca6; text-decoration: none">G&eacute;rer les notifications</a>
</span> </td>
                                                </tr>
                                            </tbody>
                                        </table> </td>
                                </tr>
                            </tbody>
                        </table> </td>
                </tr>
                <tr>
                    <td id="email-footer" align="center" style="font-size: 13px; padding:
0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> Ce message a &eacute;t&eacute;
envoy&eacute; par le <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;;
color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/overview/team-collaboration-software?utm_source=email-footer">logiciel
de collaboration d'&eacute;quipe</a> d'<a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;;
color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian
Confluence</a> 5.0.3 </small> </td>
                </tr>
            </tbody>
        </table>
    </body>
</html>
Mime
View raw message