costin      01/12/12 13:51:33

  Modified:    jk/native2/common jk_lb_worker.c
  Log:
  Start to use the new code, reuse the endpoints.
  
  Revision  Changes    Path
  1.7       +107 -41   jakarta-tomcat-connectors/jk/native2/common/jk_lb_worker.c
  
  Index: jk_lb_worker.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_lb_worker.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- jk_lb_worker.c    2001/12/06 22:54:44     1.6
  +++ jk_lb_worker.c    2001/12/12 21:51:33     1.7
  @@ -60,7 +60,7 @@
    *              several workers.                                           *
    * Author:      Gal Shachor <[EMAIL PROTECTED]>                           *
    * Based on:                                                               *
  - * Version:     $Revision: 1.6 $                                           *
  + * Version:     $Revision: 1.7 $                                           *
    ***************************************************************************/
   
   #include "jk_pool.h"
  @@ -170,12 +170,8 @@
       /* The 'real' endpoint */
       jk_endpoint_t *end = NULL;
       
  -    l->jkLog(l, JK_LOG_DEBUG, 
  -           "Into jk_endpoint_t::service\n");
  -
       if(e==NULL || s==NULL || is_recoverable_error==NULL) {
  -        l->jkLog(l, JK_LOG_ERROR, 
  -           "In jk_endpoint_t::service: NULL Parameters\n");
  +        l->jkLog(l, JK_LOG_ERROR, "lb.service() NullPointerException\n");
           return JK_FALSE;
       }
   
  @@ -195,13 +191,14 @@
               return JK_FALSE;
           }
                   
  +        l->jkLog(l, JK_LOG_INFO, "lb.service() try %s\n", rec->name );
  +        
           s->jvm_route = s->pool->pstrdup(s->pool,  rec->name);
   
           rc = rec->get_endpoint(rec, &end, l);
           if( rc!= JK_TRUE ||
               end==NULL ) {
  -            
  -        } else {
  +         } else {
   
               rc = end->service(end, s, l, &is_recoverable);
               end->done(&end, l);
  @@ -249,25 +246,41 @@
   static int JK_METHOD done(jk_endpoint_t **eP,
                             jk_logger_t *l)
   {
  -    l->jkLog(l, JK_LOG_DEBUG, 
  -           "Into jk_endpoint_t::done\n");
  +    jk_worker_t *w;
  +    jk_endpoint_t *e;
  +    int err;
  +    
  +    if(eP==NULL || *eP==NULL ) {
  +        l->jkLog(l, JK_LOG_ERROR, "lb.done() NullPointerException\n" );
  +        return JK_FALSE;
  +    }
   
  -    if(eP && *eP ) {
  -        jk_endpoint_t *e = *eP;
  +    e=*eP;
  +    w=e->worker;
   
  -        if(e->realEndpoint!=NULL) {  
  -            e->realEndpoint->done(&e->realEndpoint, l);  
  -        }  
  +    if( e->cPool != NULL ) 
  +        e->cPool->reset(e->cPool);
   
  -        free(e);
  -        *eP = NULL;
  -        return JK_TRUE;
  +    if(e->realEndpoint!=NULL) {  
  +        e->realEndpoint->done(&e->realEndpoint, l);  
  +    }  
  +
  +    if (w->endpointCache != NULL ) {
  +        err=w->endpointCache->put( w->endpointCache, e );
  +        if( err==JK_TRUE ) {
  +            l->jkLog(l, JK_LOG_INFO, "lb.done() return to pool %s\n",
  +                     w->name );
  +            return JK_TRUE;
  +        }
       }
  +    
  +    l->jkLog(l, JK_LOG_INFO, "lb.done() %s\n", w->name );
   
  -    l->jkLog(l, JK_LOG_ERROR, 
  -           "In jk_endpoint_t::done: NULL Parameters\n");
  +    e->cPool->close( e->cPool );
  +    e->pool->close( e->pool );
   
  -    return JK_FALSE;
  +    *eP = NULL;
  +    return JK_TRUE;
   }
   
   static int JK_METHOD validate(jk_worker_t *_this,
  @@ -280,10 +293,8 @@
       unsigned num_of_workers;
       unsigned i = 0;
       
  -    l->jkLog(l, JK_LOG_DEBUG, "lb_workers.validate()\n");
  -
       if(! _this ) {
  -        l->jkLog(l, JK_LOG_ERROR,"lb_worker.validate(): NPE\n");
  +        l->jkLog(l, JK_LOG_ERROR,"lb_worker.validate(): NullPointerException\n");
           return JK_FALSE;
       }
   
  @@ -306,11 +317,9 @@
       _this->num_of_workers=0;
       for(i = 0 ; i < num_of_workers ; i++) {
           char *name = _this->pool->pstrdup(_this->pool, worker_names[i]);
  -            
  +
           _this->lb_workers[i]=
  -            _this->workerEnv->createWorker( _this->workerEnv,
  -                                            name, props );
  -        
  +            _this->workerEnv->createWorker( _this->workerEnv,  name, props );
           if( _this->lb_workers[i] == NULL ) {
               l->jkLog(l, JK_LOG_ERROR,
                        "lb_worker.validate(): Error creating %s %s\n",
  @@ -337,15 +346,36 @@
           _this->num_of_workers++;
       }
   
  +    l->jkLog(l, JK_LOG_INFO, "lb_workers.validate() %s %d workers\n",
  +             _this->name, _this->num_of_workers );
  +
       return JK_TRUE;
   }
   
  -static int JK_METHOD init(jk_worker_t *pThis,
  +static int JK_METHOD init(jk_worker_t *_this,
                             jk_map_t *props, 
                             jk_workerEnv_t *we,
                             jk_logger_t *log)
   {
  -    /* Nothing to do for now */
  +    /* start the connection cache */
  +    int cache_sz = map_getIntProp( props, "worker", _this->name, "cachesize",
  +                                   JK_OBJCACHE_DEFAULT_SZ );
  +
  +    if (cache_sz > 0) {
  +        int err;
  +        _this->endpointCache=jk_objCache_create( _this->pool,
  +                                                 _this->workerEnv->l );
  +        
  +        if( _this->endpointCache != NULL ) {
  +            err=_this->endpointCache->init( _this->endpointCache, cache_sz );
  +            if( err!= JK_TRUE ) {
  +                _this->endpointCache=NULL;
  +            }
  +        }
  +    } else {
  +        _this->endpointCache=NULL;
  +    }
  +    
       return JK_TRUE;
   }
   
  @@ -356,13 +386,22 @@
       jk_endpoint_t *e;
       jk_pool_t *endpointPool;
       
  -    l->jkLog(l, JK_LOG_DEBUG, "lb_worker.getEndpoint()\n");
  -
       if(_this==NULL || pend==NULL ) {        
           l->jkLog(l, JK_LOG_ERROR, 
  -               "lb_worker.getEndpoint() NPE\n");
  +                 "lb.getEndpoint() NullPointerException\n");
       }
   
  +    if (_this->endpointCache != NULL ) {
  +
  +        e=_this->endpointCache->get( _this->endpointCache );
  +        
  +        if (e!=NULL) {
  +            l->jkLog(l, JK_LOG_INFO, "lb.getEndpoint(): Reusing endpoint\n");
  +            *pend = e;
  +            return JK_TRUE;
  +        }
  +    }
  +    
       endpointPool=_this->pool->create( _this->pool, HUGE_POOL_SIZE);
       
       e = (jk_endpoint_t *)endpointPool->calloc(endpointPool,
  @@ -374,6 +413,8 @@
       }
   
       e->pool = endpointPool;
  +
  +    e->cPool=endpointPool->create( endpointPool, HUGE_POOL_SIZE );
       
       e->worker = _this;
       e->service = service;
  @@ -381,6 +422,7 @@
       e->channelData = NULL;
       *pend = e;
   
  +    l->jkLog(l, JK_LOG_INFO, "lb_worker.getEndpoint()\n");
       return JK_TRUE;
   }
   
  @@ -389,6 +431,7 @@
                                jk_logger_t *l)
   {
       int i = 0;
  +    jk_worker_t *w;
   
       l->jkLog(l, JK_LOG_DEBUG, "lb_worker.destroy()\n");
   
  @@ -397,14 +440,35 @@
           return JK_FALSE;
       }
   
  -    for(i = 0 ; i < (*pThis)->num_of_workers ; i++) {
  -        (*pThis)->lb_workers[i]->destroy( & (*pThis)->lb_workers[i],
  -                                         l);
  +    w=*pThis;
  +
  +    for(i = 0 ; i < w->num_of_workers ; i++) {
  +        w->lb_workers[i]->destroy( & w->lb_workers[i], l);
       }
   
  -    (*pThis)->pool->close((*pThis)->pool);
  -    free(pThis);
  -    
  +    if( w->endpointCache != NULL ) {
  +        
  +        for( i=0; i< w->endpointCache->ep_cache_sz; i++ ) {
  +            jk_endpoint_t *e;
  +            
  +            e= w->endpointCache->get( w->endpointCache );
  +            
  +            if( e==NULL ) {
  +                // we finished all endpoints in the cache
  +                break;
  +            }
  +
  +            /* Nothing else to clean up ? */
  +            e->cPool->close( e->cPool );
  +            e->pool->close( e->pool );
  +        }
  +        w->endpointCache->destroy( w->endpointCache );
  +
  +        l->jkLog(l, JK_LOG_DEBUG, "ajp14.destroy() closed %d cached endpoints\n",
  +                 i);
  +    }
  +
  +    w->pool->close(w->pool);    
       return JK_TRUE;
   }
   
  @@ -418,8 +482,6 @@
       jk_logger_t *l=env->logger;
       jk_worker_t *_this;
       
  -    l->jkLog(l, JK_LOG_DEBUG, "lb_worker.factory()\n");
  -
       if(NULL == name ) {
           l->jkLog(l, JK_LOG_ERROR,"lb_worker.factory() NullPointerException\n");
           return JK_FALSE;
  @@ -432,6 +494,7 @@
           return JK_FALSE;
       }
   
  +    _this->name=name;
       _this->pool=pool;
   
       _this->lb_workers = NULL;
  @@ -443,6 +506,9 @@
       _this->destroy        = destroy;
       
       *result=_this;
  +
  +    l->jkLog(l, JK_LOG_INFO, "lb_worker.factory() New lb worker %s\n",
  +             _this->name);
       
       /* name, pool will be set by workerEnv ( our factory ) */
       
  
  
  

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

Reply via email to