Author: rjung
Date: Wed Aug 23 14:02:24 2006
New Revision: 434177

URL: http://svn.apache.org/viewvc?rev=434177&view=rev
Log:
Cleanup of the code structure of the service method.
Adding TACE, JK_LOG_NULL_PARAMS and do the same null pointer
checks in all service methods.
95% of the diff log comes from changed indentation due to
deleted "if" statements.

Modified:
    tomcat/connectors/trunk/jk/native/common/jk_ajp12_worker.c
    tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
    tomcat/connectors/trunk/jk/native/common/jk_jni_worker.c
    tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
    tomcat/connectors/trunk/jk/native/common/jk_status.c

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp12_worker.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp12_worker.c?rev=434177&r1=434176&r2=434177&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp12_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp12_worker.c Wed Aug 23 
14:02:24 2006
@@ -87,45 +87,50 @@
                              jk_ws_service_t *s,
                              jk_logger_t *l, int *is_error)
 {
-    jk_log(l, JK_LOG_DEBUG, "Into jk_endpoint_t::service");
+    ajp12_endpoint_t *p = e->endpoint_private;
+    unsigned int attempt;
+    int rc = -1;
+    /*
+     * AJP12 protocol is not recoverable.
+     */
 
-    if (e && e->endpoint_private && s && is_error) {
-        ajp12_endpoint_t *p = e->endpoint_private;
-        unsigned int attempt;
-        /*
-         * AJP12 protocol is not recoverable.
-         */
+    JK_TRACE_ENTER(l);
+ 
+    if (is_error)
         *is_error = JK_HTTP_SERVER_ERROR;
+    if (!e || !e->endpoint_private || !s || !is_error) {
+        JK_LOG_NULL_PARAMS(l);
+        JK_TRACE_EXIT(l);
+        return JK_FALSE;
+    }
 
-        for (attempt = 0; attempt < p->worker->connect_retry_attempts;
-             attempt++) {
-            p->sd =
-                jk_open_socket(&p->worker->worker_inet_addr,
-                               JK_FALSE, -1, 0, l);
+    for (attempt = 0; attempt < p->worker->connect_retry_attempts;
+         attempt++) {
+        p->sd =
+            jk_open_socket(&p->worker->worker_inet_addr,
+                           JK_FALSE, -1, 0, l);
 
-            jk_log(l, JK_LOG_DEBUG, "In jk_endpoint_t::service, sd = %d",
-                   p->sd);
-            if (IS_VALID_SOCKET(p->sd)) {
-                break;
-            }
-        }
+        jk_log(l, JK_LOG_DEBUG, "In jk_endpoint_t::service, sd = %d",
+               p->sd);
         if (IS_VALID_SOCKET(p->sd)) {
-
-            jk_sb_open(&p->sb, p->sd);
-            if (ajpv12_handle_request(p, s, l)) {
-                jk_log(l, JK_LOG_DEBUG,
-                       "In jk_endpoint_t::service, sent request");
-                return ajpv12_handle_response(p, s, l);
-            }
+            break;
         }
-        jk_log(l, JK_LOG_ERROR, "In jk_endpoint_t::service, Error sd = %d",
-               p->sd);
     }
-    else {
-        jk_log(l, JK_LOG_ERROR,
-               "In jk_endpoint_t::service, NULL parameters");
+    if (IS_VALID_SOCKET(p->sd)) {
+
+        jk_sb_open(&p->sb, p->sd);
+        if (ajpv12_handle_request(p, s, l)) {
+            jk_log(l, JK_LOG_DEBUG,
+                   "In jk_endpoint_t::service, sent request");
+            rc = ajpv12_handle_response(p, s, l);
+            JK_TRACE_EXIT(l);
+            return rc;
+        }
     }
+    jk_log(l, JK_LOG_ERROR, "In jk_endpoint_t::service, Error sd = %d",
+           p->sd);
 
+    JK_TRACE_EXIT(l);
     return JK_FALSE;
 }
 

Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?rev=434177&r1=434176&r2=434177&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Wed Aug 23 
14:02:24 2006
@@ -1654,152 +1654,152 @@
     int i, err;
     ajp_operation_t oper;
     ajp_operation_t *op = &oper;
+    ajp_endpoint_t *p;
 
     JK_TRACE_ENTER(l);
 
     if (is_error)
         *is_error = JK_HTTP_SERVER_ERROR;
+    if (!e || !e->endpoint_private || !s || !is_error) {
+        JK_LOG_NULL_PARAMS(l);
+        JK_TRACE_EXIT(l);
+        return JK_FALSE;
+    }
 
-    if (e && e->endpoint_private && s && is_error) {
-        ajp_endpoint_t *p = e->endpoint_private;
-        op->request = jk_b_new(&(p->pool));
-        jk_b_set_buffer_size(op->request, DEF_BUFFER_SZ);
-        jk_b_reset(op->request);
-
-        op->reply = jk_b_new(&(p->pool));
-        jk_b_set_buffer_size(op->reply, DEF_BUFFER_SZ);
-        jk_b_reset(op->reply);
-
-        op->post = jk_b_new(&(p->pool));
-        jk_b_set_buffer_size(op->post, DEF_BUFFER_SZ);
-        jk_b_reset(op->post);
-
-        op->recoverable = JK_TRUE;
-        op->uploadfd = -1;      /* not yet used, later ;) */
-
-        p->left_bytes_to_send = s->content_length;
-        p->reuse = JK_FALSE;
-
-        s->secret = p->worker->secret;
+    p = e->endpoint_private;
+    op->request = jk_b_new(&(p->pool));
+    jk_b_set_buffer_size(op->request, DEF_BUFFER_SZ);
+    jk_b_reset(op->request);
+
+    op->reply = jk_b_new(&(p->pool));
+    jk_b_set_buffer_size(op->reply, DEF_BUFFER_SZ);
+    jk_b_reset(op->reply);
+
+    op->post = jk_b_new(&(p->pool));
+    jk_b_set_buffer_size(op->post, DEF_BUFFER_SZ);
+    jk_b_reset(op->post);
+
+    op->recoverable = JK_TRUE;
+    op->uploadfd = -1;      /* not yet used, later ;) */
+
+    p->left_bytes_to_send = s->content_length;
+    p->reuse = JK_FALSE;
+
+    s->secret = p->worker->secret;
+
+    /*
+     * We get here initial request (in reqmsg)
+     */
+    if (!ajp_marshal_into_msgb(op->request, s, l, p)) {
+        *is_error = JK_REQUEST_TOO_LARGE;
+        jk_log(l, JK_LOG_INFO,
+                "Creating AJP message failed, "
+                "without recovery");
+        JK_TRACE_EXIT(l);
+        return JK_CLIENT_ERROR;
+    }
 
+    if (JK_IS_DEBUG_LEVEL(l)) {
+        jk_log(l, JK_LOG_DEBUG, "processing %s with %d retries",
+               p->worker->name, p->worker->worker.retries);
+    }
+    /*
+     * JK_RETRIES could be replaced by the number of workers in
+     * a load-balancing configuration
+     */
+    for (i = 0; i < p->worker->worker.retries; i++) {
         /*
-         * We get here initial request (in reqmsg)
+         * We're using reqmsg which hold initial request
+         * if Tomcat is stopped or restarted, we will pass reqmsg
+         * to next valid tomcat.
          */
-        if (!ajp_marshal_into_msgb(op->request, s, l, p)) {
-            *is_error = JK_REQUEST_TOO_LARGE;
-            jk_log(l, JK_LOG_INFO,
-                    "Creating AJP message failed, "
-                    "without recovery");
-            JK_TRACE_EXIT(l);
-            return JK_CLIENT_ERROR;
-        }
+        err = ajp_send_request(e, s, l, p, op);
+        if (err == JK_TRUE) {
 
-        if (JK_IS_DEBUG_LEVEL(l)) {
-            jk_log(l, JK_LOG_DEBUG, "processing %s with %d retries",
-                   p->worker->name, p->worker->worker.retries);
-        }
-        /*
-         * JK_RETRIES could be replaced by the number of workers in
-         * a load-balancing configuration
-         */
-        for (i = 0; i < p->worker->worker.retries; i++) {
-            /*
-             * We're using reqmsg which hold initial request
-             * if Tomcat is stopped or restarted, we will pass reqmsg
-             * to next valid tomcat.
+            /* If we have the no recoverable error, it's probably because
+             * the sender (browser) stopped sending data before the end
+             * (certainly in a big post)
              */
-            err = ajp_send_request(e, s, l, p, op);
+            if (!op->recoverable) {
+                *is_error = JK_HTTP_SERVER_ERROR;
+                jk_log(l, JK_LOG_ERROR,
+                       "sending request to tomcat failed "
+                       "without recovery in send loop %d", i);
+                JK_TRACE_EXIT(l);
+                return JK_FALSE;
+            }
+
+            /* Up to there we can recover */
+
+            err = ajp_get_reply(e, s, l, p, op);
             if (err == JK_TRUE) {
+                *is_error = JK_HTTP_OK;
+                /* Done with the request */
+                JK_TRACE_EXIT(l);
+                return JK_TRUE;
+            }
 
-                /* If we have the no recoverable error, it's probably because
-                 * the sender (browser) stopped sending data before the end
-                 * (certainly in a big post)
+            if (err != JK_CLIENT_ERROR) {
+                /* if we can't get reply, check if no recover flag was set
+                 * if is_recoverable_error is cleared, we have started
+                 * receiving upload data and we must consider that
+                 * operation is no more recoverable
                  */
                 if (!op->recoverable) {
-                    *is_error = JK_HTTP_SERVER_ERROR;
+                    *is_error = JK_HTTP_BAD_GATEWAY;
                     jk_log(l, JK_LOG_ERROR,
-                           "sending request to tomcat failed "
+                           "receiving reply from tomcat failed "
                            "without recovery in send loop %d", i);
                     JK_TRACE_EXIT(l);
                     return JK_FALSE;
                 }
-
-                /* Up to there we can recover */
-
-                err = ajp_get_reply(e, s, l, p, op);
-                if (err == JK_TRUE) {
-                    *is_error = JK_HTTP_OK;
-                    /* Done with the request */
-                    JK_TRACE_EXIT(l);
-                    return JK_TRUE;
-                }
-
-                if (err != JK_CLIENT_ERROR) {
-                    /* if we can't get reply, check if no recover flag was set
-                     * if is_recoverable_error is cleared, we have started
-                     * receiving upload data and we must consider that
-                     * operation is no more recoverable
-                     */
-                    if (!op->recoverable) {
-                        *is_error = JK_HTTP_BAD_GATEWAY;
-                        jk_log(l, JK_LOG_ERROR,
-                               "receiving reply from tomcat failed "
-                               "without recovery in send loop %d", i);
-                        JK_TRACE_EXIT(l);
-                        return JK_FALSE;
-                    }
-                    jk_log(l, JK_LOG_INFO,
-                           "Receiving from tomcat failed, "
-                           "recoverable operation attempt=%d", i);
-                    /* Check for custom retries */
-                    if (i >= JK_RETRIES) {
-                        jk_sleep_def();
-                    }
-                }
-                else {
-                    *is_error = JK_HTTP_BAD_REQUEST;
-                    jk_log(l, JK_LOG_INFO,
-                           "Receiving from tomcat failed, "
-                           "because of client error "
-                           "without recovery in send loop %d", i);
-                    JK_TRACE_EXIT(l);
-                    return JK_CLIENT_ERROR;
+                jk_log(l, JK_LOG_INFO,
+                       "Receiving from tomcat failed, "
+                       "recoverable operation attempt=%d", i);
+                /* Check for custom retries */
+                if (i >= JK_RETRIES) {
+                    jk_sleep_def();
                 }
             }
-            if (err == JK_CLIENT_ERROR) {
+            else {
                 *is_error = JK_HTTP_BAD_REQUEST;
-                if (p->worker->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
-                    /* Mark the endpoint for shutdown */
-                    p->reuse = JK_FALSE;
-                }
                 jk_log(l, JK_LOG_INFO,
-                       "Sending request to tomcat failed, "
+                       "Receiving from tomcat failed, "
                        "because of client error "
                        "without recovery in send loop %d", i);
                 JK_TRACE_EXIT(l);
                 return JK_CLIENT_ERROR;
             }
-            else {
-                jk_log(l, JK_LOG_INFO,
-                       "Sending request to tomcat failed,  "
-                       "recoverable operation attempt=%d", i + 1);
+        }
+        if (err == JK_CLIENT_ERROR) {
+            *is_error = JK_HTTP_BAD_REQUEST;
+            if (p->worker->recovery_opts & RECOVER_ABORT_IF_CLIENTERROR) {
+                /* Mark the endpoint for shutdown */
+                p->reuse = JK_FALSE;
             }
-            /* Get another connection from the pool and try again.
-             * Note: All sockets are probably closed already.
-             */
-            ajp_next_connection(p, l);
+            jk_log(l, JK_LOG_INFO,
+                   "Sending request to tomcat failed, "
+                   "because of client error "
+                   "without recovery in send loop %d", i);
+            JK_TRACE_EXIT(l);
+            return JK_CLIENT_ERROR;
         }
-        *is_error = JK_HTTP_SERVER_BUSY;
-        /* Log the error only once per failed request. */
-        jk_log(l, JK_LOG_ERROR,
-               "Error connecting to tomcat. Tomcat is probably not started "
-               "or is listening on the wrong port. worker=%s failed",
-               p->worker->name);
-
-    }
-    else {
-        jk_log(l, JK_LOG_ERROR, "end of service with error");
+        else {
+            jk_log(l, JK_LOG_INFO,
+                   "Sending request to tomcat failed,  "
+                   "recoverable operation attempt=%d", i + 1);
+        }
+        /* Get another connection from the pool and try again.
+         * Note: All sockets are probably closed already.
+         */
+        ajp_next_connection(p, l);
     }
+    *is_error = JK_HTTP_SERVER_BUSY;
+    /* Log the error only once per failed request. */
+    jk_log(l, JK_LOG_ERROR,
+           "Error connecting to tomcat. Tomcat is probably not started "
+           "or is listening on the wrong port. worker=%s failed",
+           p->worker->name);
 
     JK_TRACE_EXIT(l);
     return JK_FALSE;

Modified: tomcat/connectors/trunk/jk/native/common/jk_jni_worker.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_jni_worker.c?rev=434177&r1=434176&r2=434177&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_jni_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_jni_worker.c Wed Aug 23 
14:02:24 2006
@@ -254,7 +254,10 @@
     jint rc;
 
     JK_TRACE_ENTER(l);
-    if (!e || !e->endpoint_private || !s) {
+
+    if (is_recoverable_error)
+        *is_recoverable_error = JK_FALSE;
+    if (!e || !e->endpoint_private || !s || !is_recoverable_error) {
         JK_LOG_NULL_PARAMS(l);
         JK_TRACE_EXIT(l);
         return JK_FALSE;
@@ -262,11 +265,6 @@
 
     p = e->endpoint_private;
 
-    if (!is_recoverable_error) {
-        JK_TRACE_EXIT(l);
-        return JK_FALSE;
-    }
-
     if (!p->attached) {
         /* Try to attach */
         if (!(p->env = attach_to_jvm(p->worker, l))) {
@@ -285,8 +283,6 @@
      * When we call the JVM we cannot know what happens
      * So we can not recover !!!
      */
-    *is_recoverable_error = JK_FALSE;
-
     jk_log(l, JK_LOG_DEBUG, "In service, calling Tomcat...");
 
     rc = (*(p->env))->CallIntMethod(p->env,

Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c?rev=434177&r1=434176&r2=434177&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Wed Aug 23 14:02:24 
2006
@@ -609,234 +609,239 @@
                              jk_ws_service_t *s,
                              jk_logger_t *l, int *is_error)
 {
-    JK_TRACE_ENTER(l);
+    lb_endpoint_t *p;
+    int attempt = 0;
+    int num_of_workers;
+    worker_record_t *prec = NULL;
 
-    if (e && e->endpoint_private && s && is_error) {
-        lb_endpoint_t *p = e->endpoint_private;
-        int attempt = 0;
-        int num_of_workers = p->worker->num_of_workers;
-        worker_record_t *prec = NULL;
-        /* Set returned error to OK */
-        *is_error = JK_HTTP_OK;
-
-        /* set the recovery post, for LB mode */
-        s->reco_buf = jk_b_new(s->pool);
-        jk_b_set_buffer_size(s->reco_buf, DEF_BUFFER_SZ);
-        jk_b_reset(s->reco_buf);
-        s->reco_status = RECO_INITED;
-        if (JK_IS_DEBUG_LEVEL(l))
-            jk_log(l, JK_LOG_DEBUG,
-                   "service sticky_session=%d",
-                   p->worker->s->sticky_session);
-
-        while (num_of_workers) {
-            worker_record_t *rec =
-                get_most_suitable_worker(p->worker, s, attempt, l);
-            int rc;
-            /* Do not reuse previous worker, because
-             * that worker already failed.
-             */
-            if (rec && rec != prec) {
-                int is_service_error = JK_HTTP_OK;
-                int service_stat = JK_FALSE;
-                jk_endpoint_t *end = NULL;
-
-                s->jvm_route = rec->r;
-                rc = rec->w->get_endpoint(rec->w, &end, l);
-
-                if (JK_IS_DEBUG_LEVEL(l))
-                    jk_log(l, JK_LOG_DEBUG,
-                           "service worker=%s jvm_route=%s",
-                           rec->s->name, s->jvm_route);
-                if (rc && end) {
-                    size_t rd = 0;
-                    size_t wr = 0;
-                    /* Reset endpoint read and write sizes for
-                     * this request.
-                     */
-                    end->rd = end->wr = 0;
-                    if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
-                        jk_shm_lock();
+    JK_TRACE_ENTER(l);
 
-                    rec->s->elected++;
-                    /* Increment the number of workers serving request */
-                    p->worker->s->busy++;
-                    if (p->worker->s->busy > p->worker->s->max_busy)
-                        p->worker->s->max_busy = p->worker->s->busy;
-                    rec->s->busy++;
-                    if (p->worker->lbmethod == JK_LB_METHOD_REQUESTS)
-                        rec->s->lb_value += rec->s->lb_mult;
-                    else if (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS)
-                        rec->s->lb_value += rec->s->lb_mult;
-                    if (rec->s->busy > rec->s->max_busy)
-                        rec->s->max_busy = rec->s->busy;
-                    if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
-                        jk_shm_unlock();
+    if (is_error)
+        *is_error = JK_HTTP_SERVER_ERROR;
+    if (!e || !e->endpoint_private || !s || !is_error) {
+        JK_LOG_NULL_PARAMS(l);
+        JK_TRACE_EXIT(l);
+        return JK_FALSE;
+    }
 
-                    service_stat = end->service(end, s, l, &is_service_error);
-                    rd = end->rd;
-                    wr = end->wr;
-                    end->done(&end, l);
+    p = e->endpoint_private;
+    num_of_workers = p->worker->num_of_workers;
 
-                    if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
-                        jk_shm_lock();
+    /* Set returned error to OK */
+    *is_error = JK_HTTP_OK;
 
-                    /* Update partial reads and writes if any */
-                    rec->s->readed += rd;
-                    rec->s->transferred += wr;
-                    if (p->worker->lbmethod == JK_LB_METHOD_TRAFFIC)
-                        rec->s->lb_value += (rd+wr)*rec->s->lb_mult;
-                    else if (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS)
-                        if (rec->s->lb_value >= rec->s->lb_mult)
-                            rec->s->lb_value -= rec->s->lb_mult;
-                        else {
-                            rec->s->lb_value = 0;
-                            if (JK_IS_DEBUG_LEVEL(l)) {
-                                jk_log(l, JK_LOG_DEBUG,
-                                       "worker %s has load value to low (%"
-                                       JK_UINT64_T_FMT
-                                       " < %"
-                                       JK_UINT64_T_FMT
-                                       ") ",
-                                       "- correcting to 0",
-                                       rec->s->name,
-                                       rec->s->lb_value,
-                                       rec->s->lb_mult);
-                            }
+    /* set the recovery post, for LB mode */
+    s->reco_buf = jk_b_new(s->pool);
+    jk_b_set_buffer_size(s->reco_buf, DEF_BUFFER_SZ);
+    jk_b_reset(s->reco_buf);
+    s->reco_status = RECO_INITED;
+    if (JK_IS_DEBUG_LEVEL(l))
+        jk_log(l, JK_LOG_DEBUG,
+               "service sticky_session=%d",
+               p->worker->s->sticky_session);
+
+    while (num_of_workers) {
+        worker_record_t *rec =
+            get_most_suitable_worker(p->worker, s, attempt, l);
+        int rc;
+        /* Do not reuse previous worker, because
+         * that worker already failed.
+         */
+        if (rec && rec != prec) {
+            int is_service_error = JK_HTTP_OK;
+            int service_stat = JK_FALSE;
+            jk_endpoint_t *end = NULL;
+
+            s->jvm_route = rec->r;
+            rc = rec->w->get_endpoint(rec->w, &end, l);
+
+            if (JK_IS_DEBUG_LEVEL(l))
+                jk_log(l, JK_LOG_DEBUG,
+                       "service worker=%s jvm_route=%s",
+                       rec->s->name, s->jvm_route);
+            if (rc && end) {
+                size_t rd = 0;
+                size_t wr = 0;
+                /* Reset endpoint read and write sizes for
+                 * this request.
+                 */
+                end->rd = end->wr = 0;
+                if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
+                    jk_shm_lock();
+
+                rec->s->elected++;
+                /* Increment the number of workers serving request */
+                p->worker->s->busy++;
+                if (p->worker->s->busy > p->worker->s->max_busy)
+                    p->worker->s->max_busy = p->worker->s->busy;
+                rec->s->busy++;
+                if (p->worker->lbmethod == JK_LB_METHOD_REQUESTS)
+                    rec->s->lb_value += rec->s->lb_mult;
+                else if (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS)
+                    rec->s->lb_value += rec->s->lb_mult;
+                if (rec->s->busy > rec->s->max_busy)
+                    rec->s->max_busy = rec->s->busy;
+                if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
+                    jk_shm_unlock();
+
+                service_stat = end->service(end, s, l, &is_service_error);
+                rd = end->rd;
+                wr = end->wr;
+                end->done(&end, l);
+
+                if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
+                    jk_shm_lock();
+
+                /* Update partial reads and writes if any */
+                rec->s->readed += rd;
+                rec->s->transferred += wr;
+                if (p->worker->lbmethod == JK_LB_METHOD_TRAFFIC)
+                    rec->s->lb_value += (rd+wr)*rec->s->lb_mult;
+                else if (p->worker->lbmethod == JK_LB_METHOD_BUSYNESS)
+                    if (rec->s->lb_value >= rec->s->lb_mult)
+                        rec->s->lb_value -= rec->s->lb_mult;
+                    else {
+                        rec->s->lb_value = 0;
+                        if (JK_IS_DEBUG_LEVEL(l)) {
+                            jk_log(l, JK_LOG_DEBUG,
+                                   "worker %s has load value to low (%"
+                                   JK_UINT64_T_FMT
+                                   " < %"
+                                   JK_UINT64_T_FMT
+                                   ") ",
+                                   "- correcting to 0",
+                                   rec->s->name,
+                                   rec->s->lb_value,
+                                   rec->s->lb_mult);
                         }
-
-                    /* When returning the endpoint mark the worker as not busy.
-                     * We have at least one endpoint free
-                     */
-                    rec->s->is_busy = JK_FALSE;
-                    /* Decrement the busy worker count.
-                     * Check if the busy was reset to zero by graceful
-                     * restart of the server.
-                     */
-                    if (rec->s->busy)
-                        rec->s->busy--;
-                    if (p->worker->s->busy)
-                        p->worker->s->busy--;
-                    if (service_stat == JK_TRUE) {
-                        rec->s->in_error_state = JK_FALSE;
-                        rec->s->in_recovering = JK_FALSE;
-                        rec->s->error_time = 0;
-                        if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
-                            jk_shm_unlock();
-                        JK_TRACE_EXIT(l);
-                        return JK_TRUE;
                     }
+
+                /* When returning the endpoint mark the worker as not busy.
+                 * We have at least one endpoint free
+                 */
+                rec->s->is_busy = JK_FALSE;
+                /* Decrement the busy worker count.
+                 * Check if the busy was reset to zero by graceful
+                 * restart of the server.
+                 */
+                if (rec->s->busy)
+                    rec->s->busy--;
+                if (p->worker->s->busy)
+                    p->worker->s->busy--;
+                if (service_stat == JK_TRUE) {
+                    rec->s->in_error_state = JK_FALSE;
+                    rec->s->in_recovering = JK_FALSE;
+                    rec->s->error_time = 0;
                     if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
                         jk_shm_unlock();
+                    JK_TRACE_EXIT(l);
+                    return JK_TRUE;
                 }
-                else {
-                    /* If we can not get the endpoint
-                     * mark the worker as busy rather then
-                     * as in error if the attemp number is
-                     * greater then the number of retries.
-                     */
-                    attempt++;
-                    if (attempt > p->worker->s->retries) {
-                        rec->s->is_busy = JK_TRUE;
-                        num_of_workers = 0;
-                    }
-                    jk_log(l, JK_LOG_INFO,
-                           "could not get free endpoint for worker %s (attempt 
%d)",
-                           rec->s->name, attempt);
-                    /* In case of attempt > num of workers sleep for 100 ms
-                     * on each consequtive attempt.
-                     */
-                    if (attempt > (int)p->worker->num_of_workers)
-                        jk_sleep_def();
-                    continue;
+                if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC)
+                    jk_shm_unlock();
+            }
+            else {
+                /* If we can not get the endpoint
+                 * mark the worker as busy rather then
+                 * as in error if the attemp number is
+                 * greater then the number of retries.
+                 */
+                attempt++;
+                if (attempt > p->worker->s->retries) {
+                    rec->s->is_busy = JK_TRUE;
+                    num_of_workers = 0;
                 }
-                if (service_stat == JK_FALSE) {
-                    /*
-                    * Service failed !!!
-                    *
-                    * Time for fault tolerance (if possible)...
-                    */
-
-                    rec->s->errors++;
-                    rec->s->in_error_state = JK_TRUE;
-                    rec->s->in_recovering = JK_FALSE;
-                    rec->s->error_time = time(NULL);
+                jk_log(l, JK_LOG_INFO,
+                       "could not get free endpoint for worker %s (attempt 
%d)",
+                       rec->s->name, attempt);
+                /* In case of attempt > num of workers sleep for 100 ms
+                 * on each consequtive attempt.
+                 */
+                if (attempt > (int)p->worker->num_of_workers)
+                    jk_sleep_def();
+                continue;
+            }
+            if (service_stat == JK_FALSE) {
+                /*
+                * Service failed !!!
+                *
+                * Time for fault tolerance (if possible)...
+                */
+
+                rec->s->errors++;
+                rec->s->in_error_state = JK_TRUE;
+                rec->s->in_recovering = JK_FALSE;
+                rec->s->error_time = time(NULL);
 
-                    if (is_service_error != JK_HTTP_SERVER_BUSY) {
-                        /*
-                        * Error is not recoverable - break with an error.
-                        */
-                        jk_log(l, JK_LOG_ERROR,
-                            "unrecoverable error %d, request failed."
-                            " Tomcat failed in the middle of request,"
-                            " we can't recover to another instance.",
-                            is_service_error);
-                        *is_error = is_service_error;
-                        JK_TRACE_EXIT(l);
-                        return JK_FALSE;
-                    }
-                    jk_log(l, JK_LOG_INFO,
-                           "service failed, worker %s is in error state",
-                           rec->s->name);
-                }
-                else if (service_stat == JK_CLIENT_ERROR) {
+                if (is_service_error != JK_HTTP_SERVER_BUSY) {
                     /*
-                    * Clent error !!!
-                    * Since this is bad request do not fail over.
+                    * Error is not recoverable - break with an error.
                     */
-                    rec->s->errors++;
-                    rec->s->in_error_state = JK_FALSE;
-                    rec->s->in_recovering = JK_FALSE;
-                    rec->s->error_time = 0;
+                    jk_log(l, JK_LOG_ERROR,
+                        "unrecoverable error %d, request failed."
+                        " Tomcat failed in the middle of request,"
+                        " we can't recover to another instance.",
+                        is_service_error);
                     *is_error = is_service_error;
-
-                    jk_log(l, JK_LOG_INFO,
-                           "unrecoverable error %d, request failed."
-                           " Client failed in the middle of request,"
-                           " we can't recover to another instance.",
-                           is_service_error);
                     JK_TRACE_EXIT(l);
-                    return JK_CLIENT_ERROR;
-                }
-                else {
-                    /* If we can not get the endpoint from the worker
-                     * that does not mean that the worker is in error
-                     * state. It means that the worker is busy.
-                     * We will try another worker.
-                     * To prevent infinite loop decrement worker count;
-                     */
+                    return JK_FALSE;
                 }
+                jk_log(l, JK_LOG_INFO,
+                       "service failed, worker %s is in error state",
+                       rec->s->name);
+            }
+            else if (service_stat == JK_CLIENT_ERROR) {
                 /*
-                 * Error is recoverable by submitting the request to
-                 * another worker... Lets try to do that.
-                 */
-                if (JK_IS_DEBUG_LEVEL(l))
-                    jk_log(l, JK_LOG_DEBUG,
-                           "recoverable error... will try to recover on other 
host");
+                * Client error !!!
+                * Since this is bad request do not fail over.
+                */
+                rec->s->errors++;
+                rec->s->in_error_state = JK_FALSE;
+                rec->s->in_recovering = JK_FALSE;
+                rec->s->error_time = 0;
+                *is_error = is_service_error;
+
+                jk_log(l, JK_LOG_INFO,
+                       "unrecoverable error %d, request failed."
+                       " Client failed in the middle of request,"
+                       " we can't recover to another instance.",
+                       is_service_error);
+                JK_TRACE_EXIT(l);
+                return JK_CLIENT_ERROR;
             }
-#if 0
             else {
-                /* NULL record, no more workers left ... */
-                jk_log(l, JK_LOG_ERROR,
-                       "All tomcat instances failed, no more workers left");
-                JK_TRACE_EXIT(l);
-                *is_error = JK_HTTP_SERVER_BUSY;
-                return JK_FALSE;
+                /* If we can not get the endpoint from the worker
+                 * that does not mean that the worker is in error
+                 * state. It means that the worker is busy.
+                 * We will try another worker.
+                 * To prevent infinite loop decrement worker count;
+                 */
             }
-#endif
-            --num_of_workers;
-            prec = rec;
+            /*
+             * Error is recoverable by submitting the request to
+             * another worker... Lets try to do that.
+             */
+            if (JK_IS_DEBUG_LEVEL(l))
+                jk_log(l, JK_LOG_DEBUG,
+                       "recoverable error... will try to recover on other 
host");
         }
-        jk_log(l, JK_LOG_INFO,
-               "All tomcat instances are busy or in error state");
-        JK_TRACE_EXIT(l);
-        /* Set error to Timeout */
-        *is_error = JK_HTTP_SERVER_BUSY;
-        return JK_FALSE;
+#if 0
+        else {
+            /* NULL record, no more workers left ... */
+            jk_log(l, JK_LOG_ERROR,
+                   "All tomcat instances failed, no more workers left");
+            JK_TRACE_EXIT(l);
+            *is_error = JK_HTTP_SERVER_BUSY;
+            return JK_FALSE;
+        }
+#endif
+        --num_of_workers;
+        prec = rec;
     }
-    if (is_error)
-        *is_error = JK_HTTP_SERVER_ERROR;
-    JK_LOG_NULL_PARAMS(l);
+    jk_log(l, JK_LOG_INFO,
+           "All tomcat instances are busy or in error state");
+    /* Set error to Timeout */
+    *is_error = JK_HTTP_SERVER_BUSY;
     JK_TRACE_EXIT(l);
     return JK_FALSE;
 }

Modified: tomcat/connectors/trunk/jk/native/common/jk_status.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_status.c?rev=434177&r1=434176&r2=434177&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_status.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_status.c Wed Aug 23 14:02:24 
2006
@@ -841,146 +841,148 @@
                              jk_ws_service_t *s,
                              jk_logger_t *l, int *is_recoverable_error)
 {
-    JK_TRACE_ENTER(l);
+    char buf[128];
+    char *worker = NULL;
+    int cmd;
+    int mime;
+    status_endpoint_t *p;
 
-    if (e && e->endpoint_private && s) {
-        char buf[128];
-        char *worker = NULL;
-        int cmd;
-        int mime;
-        status_endpoint_t *p = e->endpoint_private;
+    JK_TRACE_ENTER(l);
 
+    if (is_recoverable_error)
         *is_recoverable_error = JK_FALSE;
+    if (!e || !e->endpoint_private || !s || !is_recoverable_error) {
+        JK_LOG_NULL_PARAMS(l);
+        JK_TRACE_EXIT(l);
+        return JK_FALSE;
+    }
 
-        /* Step 1: Process GET params and update configuration */
-        cmd = status_cmd_type(s->query_string);
-        mime = status_mime_type(s->query_string);
-        if (cmd > 0 && (status_cmd("w", s->query_string, buf, sizeof(buf)) != 
NULL))
-            worker = strdup(buf);
-        if ((cmd == 2) && worker) {
-            /* lock shared memory */
-            jk_shm_lock();
-            update_worker(s, p->s_worker, worker, l);
-            /* update modification time to reflect the current config */
-            jk_shm_set_workers_time(time(NULL));
-            /* Since we updated the config no need to reload
-             * on the next request
-             */
-            jk_shm_sync_access_time();
-            /* unlock the shared memory */
-            jk_shm_unlock();
-        }
-        else if ((cmd == 3) && worker) {
-            /* lock shared memory */
-            jk_shm_lock();
-            reset_worker(s, p->s_worker, worker, l);
-            /* update modification time to reflect the current config */
-            jk_shm_set_workers_time(time(NULL));
-            /* Since we updated the config no need to reload
-             * on the next request
-             */
-            jk_shm_sync_access_time();
-            /* unlock the shared memory */
-            jk_shm_unlock();
-        }
-        if (mime == 0) {
-            int refresh = status_int("refresh", s->query_string, -1);
-            s->start_response(s, 200, "OK", headers_names, headers_vhtml, 3);
-            s->write(s, JK_STATUS_HEAD, sizeof(JK_STATUS_HEAD) - 1);
-            if (cmd > 1) {
-                jk_putv(s, "\n<meta http-equiv=\"Refresh\" content=\"0;url=",
-                          s->req_uri, "\">", NULL);
-            }
-            else if (cmd == 0 && refresh >= 0) {
-                jk_printf(s, "\n<meta http-equiv=\"Refresh\" 
content=\"%d;url=%s?%s\">",
-                          refresh, s->req_uri, s->query_string);
-            }
-            if (p->s_worker->css) {
-                jk_putv(s, "\n<link rel=\"stylesheet\" type=\"text/css\" 
href=\"",
-                        p->s_worker->css, "\" />\n", NULL);
-            }
-            s->write(s, JK_STATUS_HEND, sizeof(JK_STATUS_HEND) - 1);
-            if ( cmd <= 1 ) {
-                jk_puts(s, "<h1>JK Status Manager for ");
-                jk_puts(s, s->server_name);
-                jk_puts(s, "</h1>\n\n");
-                jk_putv(s, "<dl><dt>Server Version:</dt><dd>",
-                        s->server_software, "</dd>\n", NULL);
-                jk_putv(s, "<dt>JK Version:</dt><dd>",
-                            JK_VERSTRING, "\n</dd></dl>\n", NULL);
-            }
-            if ( cmd == 0 ) {
-                jk_putv(s, "[<a href=\"", s->req_uri, NULL);
-                if (refresh >= 0) {
-                    char *buf = jk_pool_alloc(s->pool, sizeof(char *) * 
BIG_POOL_SIZE);
-                    const char *str = s->query_string;
-                    int result = 0;
-                    int scan = 0;
-    
-                    while (str[scan] != 0) {
-                        if (strncmp(&str[scan], "refresh=", 8) == 0) {
-                            scan += 8;
-                            while (str[scan] != 0 && str[scan] != '&')
-                                scan++;
-                            if (str[scan] == '&')
-                                scan++;
+    p = e->endpoint_private;
+
+    /* Step 1: Process GET params and update configuration */
+    cmd = status_cmd_type(s->query_string);
+    mime = status_mime_type(s->query_string);
+    if (cmd > 0 && (status_cmd("w", s->query_string, buf, sizeof(buf)) != 
NULL))
+        worker = strdup(buf);
+    if ((cmd == 2) && worker) {
+        /* lock shared memory */
+        jk_shm_lock();
+        update_worker(s, p->s_worker, worker, l);
+        /* update modification time to reflect the current config */
+        jk_shm_set_workers_time(time(NULL));
+        /* Since we updated the config no need to reload
+         * on the next request
+         */
+        jk_shm_sync_access_time();
+        /* unlock the shared memory */
+        jk_shm_unlock();
+    }
+    else if ((cmd == 3) && worker) {
+        /* lock shared memory */
+        jk_shm_lock();
+        reset_worker(s, p->s_worker, worker, l);
+        /* update modification time to reflect the current config */
+        jk_shm_set_workers_time(time(NULL));
+        /* Since we updated the config no need to reload
+         * on the next request
+         */
+        jk_shm_sync_access_time();
+        /* unlock the shared memory */
+        jk_shm_unlock();
+    }
+    if (mime == 0) {
+        int refresh = status_int("refresh", s->query_string, -1);
+        s->start_response(s, 200, "OK", headers_names, headers_vhtml, 3);
+        s->write(s, JK_STATUS_HEAD, sizeof(JK_STATUS_HEAD) - 1);
+        if (cmd > 1) {
+            jk_putv(s, "\n<meta http-equiv=\"Refresh\" content=\"0;url=",
+                      s->req_uri, "\">", NULL);
+        }
+        else if (cmd == 0 && refresh >= 0) {
+            jk_printf(s, "\n<meta http-equiv=\"Refresh\" 
content=\"%d;url=%s?%s\">",
+                      refresh, s->req_uri, s->query_string);
+        }
+        if (p->s_worker->css) {
+            jk_putv(s, "\n<link rel=\"stylesheet\" type=\"text/css\" href=\"",
+                    p->s_worker->css, "\" />\n", NULL);
+        }
+        s->write(s, JK_STATUS_HEND, sizeof(JK_STATUS_HEND) - 1);
+        if ( cmd <= 1 ) {
+            jk_puts(s, "<h1>JK Status Manager for ");
+            jk_puts(s, s->server_name);
+            jk_puts(s, "</h1>\n\n");
+            jk_putv(s, "<dl><dt>Server Version:</dt><dd>",
+                    s->server_software, "</dd>\n", NULL);
+            jk_putv(s, "<dt>JK Version:</dt><dd>",
+                        JK_VERSTRING, "\n</dd></dl>\n", NULL);
+        }
+        if ( cmd == 0 ) {
+            jk_putv(s, "[<a href=\"", s->req_uri, NULL);
+            if (refresh >= 0) {
+                char *buf = jk_pool_alloc(s->pool, sizeof(char *) * 
BIG_POOL_SIZE);
+                const char *str = s->query_string;
+                int result = 0;
+                int scan = 0;
+
+                while (str[scan] != 0) {
+                    if (strncmp(&str[scan], "refresh=", 8) == 0) {
+                        scan += 8;
+                        while (str[scan] != 0 && str[scan] != '&')
+                            scan++;
+                        if (str[scan] == '&')
+                            scan++;
+                    }
+                    else {
+                        if (result > 0 && str[scan] != 0 && str[scan] != '&') {
+                            buf[result] = '&';
+                            result++;
                         }
-                        else {
-                            if (result > 0 && str[scan] != 0 && str[scan] != 
'&') {
-                                buf[result] = '&';
-                                result++;
-                            }
-                            while (str[scan] != 0 && str[scan] != '&') {
-                                buf[result] = str[scan];
-                                result++;
-                                scan++;
-                            }
-                            if (str[scan] == '&')
-                                scan++;
+                        while (str[scan] != 0 && str[scan] != '&') {
+                            buf[result] = str[scan];
+                            result++;
+                            scan++;
                         }
+                        if (str[scan] == '&')
+                            scan++;
                     }
-                    buf[result] = 0;
-    
-                    if (buf && buf[0])
-                        jk_putv(s, "?", buf, NULL);
-                    jk_puts(s, "\">stop");
-                }
-                else {
-                    jk_puts(s, "?");
-                    if (s->query_string && s->query_string[0])
-                        jk_putv(s, s->query_string, "&", NULL);
-                    jk_puts(s, "refresh=10\">start");
                 }
-                jk_puts(s, " auto update</a>]");
-            }
-            if ( cmd <= 1 ) {
-                /* Step 2: Display configuration */
-                display_workers(s, p->s_worker, worker, l);
+                buf[result] = 0;
+
+                if (buf && buf[0])
+                    jk_putv(s, "?", buf, NULL);
+                jk_puts(s, "\">stop");
+            }
+            else {
+                jk_puts(s, "?");
+                if (s->query_string && s->query_string[0])
+                    jk_putv(s, s->query_string, "&", NULL);
+                jk_puts(s, "refresh=10\">start");
             }
-    
-            s->write(s, JK_STATUS_BEND, sizeof(JK_STATUS_BEND) - 1);
-    
-        }
-        else if (mime == 1) {
-            s->start_response(s, 200, "OK", headers_names, headers_vxml, 3);
-            s->write(s, JK_STATUS_XMLH, sizeof(JK_STATUS_XMLH) - 1);
-            dump_config(s, p->s_worker, l);
-            s->write(s, JK_STATUS_XMLE, sizeof(JK_STATUS_XMLE) - 1);
-        }
-        else {
-            s->start_response(s, 200, "OK", headers_names, headers_vtxt, 3);
-            s->write(s,  JK_STATUS_TEXTUPDATE_RESPONCE,
-                     sizeof(JK_STATUS_TEXTUPDATE_RESPONCE) - 1);
+            jk_puts(s, " auto update</a>]");
         }
-        if (worker)
-            free(worker);
-        JK_TRACE_EXIT(l);
-        return JK_TRUE;
-    }
+        if ( cmd <= 1 ) {
+            /* Step 2: Display configuration */
+            display_workers(s, p->s_worker, worker, l);
+        }
+
+        s->write(s, JK_STATUS_BEND, sizeof(JK_STATUS_BEND) - 1);
 
-    jk_log(l, JK_LOG_ERROR, "status: end of service with error");
+    }
+    else if (mime == 1) {
+        s->start_response(s, 200, "OK", headers_names, headers_vxml, 3);
+        s->write(s, JK_STATUS_XMLH, sizeof(JK_STATUS_XMLH) - 1);
+        dump_config(s, p->s_worker, l);
+        s->write(s, JK_STATUS_XMLE, sizeof(JK_STATUS_XMLE) - 1);
+    }
+    else {
+        s->start_response(s, 200, "OK", headers_names, headers_vtxt, 3);
+        s->write(s,  JK_STATUS_TEXTUPDATE_RESPONCE,
+                 sizeof(JK_STATUS_TEXTUPDATE_RESPONCE) - 1);
+    }
+    if (worker)
+        free(worker);
     JK_TRACE_EXIT(l);
-    return JK_FALSE;
+    return JK_TRUE;
 }
 
 static int JK_METHOD done(jk_endpoint_t **e, jk_logger_t *l)



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to