[xio-commit] CVS update: MODIFIED: source, globus_xio_token_bucket_driver.c

John Bresnahan commit at globus.org
Sat Nov 18 16:24:59 CST 2006


, globus_xio_token_bucket_driver.h
 ...

  User: bresnaha
  Date: 06/11/18 16:24:59

  Modified:    drivers/token_bucket/source Tag: gridftpssh
                        globus_xio_token_bucket_driver.c
                        globus_xio_token_bucket_driver.h
  Log:
  groups work
  
  Revision  Changes    Path
  No                   revision
  
  http://viewcvs.globus.org/viewcvs.cgi/xio/drivers/token_bucket/source/Tag:
  No                   revision
  
  http://viewcvs.globus.org/viewcvs.cgi/xio/drivers/token_bucket/source/gridftpssh
  1.3.4.2   +162 -11   xio/drivers/token_bucket/source/globus_xio_token_bucket_driver.c
  
  http://viewcvs.globus.org/viewcvs.cgi/xio/drivers/token_bucket/source/globus_xio_token_bucket_driver.c.diff?r1=1.3.4.1&r2=1.3.4.2
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_xio_token_bucket_driver.c
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/xio/drivers/token_bucket/source/globus_xio_token_bucket_driver.c,v
  retrieving revision 1.3.4.1
  retrieving revision 1.3.4.2
  diff -u -b -r1.3.4.1 -r1.3.4.2
  --- globus_xio_token_bucket_driver.c	18 Nov 2006 00:16:13 -0000	1.3.4.1
  +++ globus_xio_token_bucket_driver.c	18 Nov 2006 22:24:58 -0000	1.3.4.2
  @@ -49,7 +49,7 @@
   
   #define DEFAULT_PERIOD_US               100
   /* set to a gigabit per sec.  unit is kilabits */
  -#define DEFAULT_RATE                    -1
  +#define DEFAULT_RATE                    (1024*1024*1024/8)
   #define DEFAULT_BURST                   (5000000)
   
   static int
  @@ -120,7 +120,6 @@
       globus_size_t                       max_allowed;
       int                                 ref;
       char *                              group_name;
  -    struct l_xio_token_bucket_handle_s * whos_my_daddy;
   } l_xio_token_bucket_op_handle_t;
   
   typedef struct l_xio_token_bucket_data_s
  @@ -372,7 +371,7 @@
       globus_hashtable_t *                table,
       l_xio_token_bucket_op_handle_t *    handle)
   {
  -    globus_bool_t                       start = GLOBUS_TRUE;
  +    globus_bool_t                       start = GLOBUS_FALSE;
       l_xio_token_bucket_op_handle_t *    tmp_h = NULL;
   
       if(handle == NULL)
  @@ -389,7 +388,6 @@
           {
               l_xio_token_bucket_destroy_op_handle(handle);
               handle = tmp_h;
  -            start = GLOBUS_FALSE;
           }
           else
           {
  @@ -401,6 +399,10 @@
       globus_mutex_lock(&handle->mutex);
       {
           handle->ref++;
  +        if(handle->ref == 1)
  +        {
  +            start = GLOBUS_TRUE;
  +        }
       }
       globus_mutex_unlock(&handle->mutex);
   
  @@ -441,9 +443,9 @@
           globus_mutex_lock(&xio_l_tb_hash_mutex);
           {
               handle->write_handle = xio_l_tb_start_ticker(
  -                &l_tb_read_group_hash, handle->write_handle);
  +                &l_tb_write_group_hash, handle->write_handle);
               handle->read_handle = xio_l_tb_start_ticker(
  -                &l_tb_write_group_hash, handle->read_handle);
  +                &l_tb_read_group_hash, handle->read_handle);
           }
           globus_mutex_unlock(&xio_l_tb_hash_mutex);
       }
  @@ -475,7 +477,6 @@
       globus_mutex_init(&handle->mutex, NULL);
       handle->finished_func = finished_func;
       handle->pass_func = pass_func;
  -    handle->whos_my_daddy = daddy;
   
       handle->per_tic = (int)((float)attr->rate *
           ((float)attr->us_period / 1000000.0f));
  @@ -527,8 +528,8 @@
   
       handle->write_handle = xio_l_tb_attr_to_handle(
           handle,
  -        &l_tb_read_group_hash,
  -        &attr->read_attr,
  +        &l_tb_write_group_hash,
  +        &attr->write_attr,
           globus_xio_driver_finished_write,
           globus_xio_driver_pass_write);
   
  @@ -787,7 +788,7 @@
       GlobusXIOTBDebugEnter();
       handle = (l_xio_token_bucket_handle_t *) driver_specific_handle;
   
  -    if(handle->read_handle == NULL)
  +    if(handle->write_handle == NULL)
       {
           globus_size_t wait_for = globus_xio_operation_get_wait_for(op);
           res = globus_xio_driver_pass_write(
  @@ -861,6 +862,17 @@
       dst_attr->write_attr.us_period = src_attr->write_attr.us_period;
       dst_attr->write_attr.burst_size = src_attr->write_attr.burst_size;
   
  +    if(src_attr->read_attr.group_name != NULL)
  +    {
  +        dst_attr->read_attr.group_name =
  +            strdup(src_attr->read_attr.group_name);
  +    }
  +    if(src_attr->write_attr.group_name != NULL)
  +    {
  +        dst_attr->write_attr.group_name =
  +            strdup(src_attr->write_attr.group_name);
  +    }
  +
       *dst = dst_attr;
   
       return GLOBUS_SUCCESS;
  @@ -913,6 +925,7 @@
       int                                 cmd,
       va_list                             ap)
   {
  +    char *                              group;
       l_xio_tb_attr_rw_t *                attr;
       GlobusXIOName(globus_l_xio_tb_attr_cntl);
   
  @@ -947,9 +960,31 @@
               break;
   
           case GLOBUS_XIO_TOKEN_BUCKET_SET_GROUP:
  +            group = va_arg(ap, char *);
  +            if(group == NULL)
  +            {
  +                goto error;
  +            }
  +            attr->write_attr.group_name = strdup(group);
  +            attr->read_attr.group_name = strdup(group);
  +            break;
  +
  +        case GLOBUS_XIO_TOKEN_BUCKET_SET_READ_GROUP:
  +            group = va_arg(ap, char *);
  +            if(group == NULL)
  +            {
  +                goto error;
  +            }
  +            attr->read_attr.group_name = strdup(group);
               break;
   
  -        case GLOBUS_XIO_TOKEN_BUCKET_GET_GROUP:
  +        case GLOBUS_XIO_TOKEN_BUCKET_SET_WRITE_GROUP:
  +            group = va_arg(ap, char *);
  +            if(group == NULL)
  +            {
  +                goto error;
  +            }
  +            attr->write_attr.group_name = strdup(group);
               break;
   
           default:
  @@ -957,6 +992,8 @@
       }
   
       return GLOBUS_SUCCESS;
  +error:
  +    return 0x1;
   }
   
   
  @@ -1061,3 +1098,117 @@
       GlobusXIOUnRegisterDriver(token_bucket);
       return globus_module_deactivate(GLOBUS_XIO_MODULE);
   }
  +
  +static
  +globus_result_t
  +xio_l_tb_set_group(
  +    char *                              group_name,
  +    globus_off_t                        rate,
  +    int                                 us_period,
  +    globus_size_t                       burst_size,
  +    globus_bool_t *                     in_out_create,
  +    globus_hashtable_t *                table,
  +    l_xio_tb_finished_func_t            finished_func,
  +    l_xio_tb_pass_func_t                pass_func)
  +{
  +    globus_bool_t                       create = GLOBUS_TRUE;
  +    l_xio_token_bucket_op_handle_t *    handle;
  +
  +    if(in_out_create != NULL)
  +    {
  +        create = *in_out_create;
  +    }
  +
  +    globus_mutex_lock(&xio_l_tb_hash_mutex);
  +    {
  +        handle = (l_xio_token_bucket_op_handle_t *)
  +            globus_hashtable_lookup(table, group_name);
  +
  +        if(handle == NULL)
  +        {
  +            if(!create)
  +            {
  +                goto error_create;
  +            }
  +            create = GLOBUS_TRUE;
  +
  +            handle = (l_xio_token_bucket_op_handle_t *)
  +                globus_calloc(sizeof(l_xio_token_bucket_op_handle_t), 1);
  +            if(handle == NULL)
  +            {
  +                goto error_alloc;
  +            }
  +            globus_mutex_init(&handle->mutex, NULL);
  +            globus_fifo_init(&handle->q);
  +            handle->group_name = strdup(group_name);
  +
  +            handle->finished_func = finished_func;
  +            handle->pass_func = pass_func;
  +
  +            globus_hashtable_insert(table, handle->group_name, handle);
  +        }
  +        else
  +        {
  +            create = GLOBUS_FALSE;
  +        }
  +
  +        globus_mutex_lock(&handle->mutex);
  +        {
  +            handle->per_tic = (int)((float)rate * ((float)us_period / 1000000.0f));
  +            GlobusTimeReltimeSet(handle->us_period, 0, us_period);
  +            handle->max_allowed = burst_size;
  +        }
  +        globus_mutex_unlock(&handle->mutex);
  +    }
  +    globus_mutex_unlock(&xio_l_tb_hash_mutex);
  +
  +    if(in_out_create != NULL)
  +    {
  +        *in_out_create = create;
  +    }
  +
  +    return GLOBUS_SUCCESS;
  +
  +error_alloc:
  +error_create:
  +
  +    return 0x1;
  +}
  +
  +globus_result_t
  +globus_xio_token_bucket_set_read_group(
  +    char *                              group_name,
  +    globus_off_t                        rate,
  +    int                                 us_period,
  +    globus_size_t                       burst_size,
  +    globus_bool_t *                     in_out_create)
  +{
  +    return xio_l_tb_set_group(
  +        group_name,
  +        rate,
  +        us_period,
  +        burst_size,
  +        in_out_create,
  +        &l_tb_read_group_hash,
  +        globus_xio_driver_finished_read,
  +        globus_xio_driver_pass_read);
  +}
  +
  +globus_result_t
  +globus_xio_token_bucket_set_write_group(
  +    char *                              group_name,
  +    globus_off_t                        rate,
  +    int                                 us_period,
  +    globus_size_t                       burst_size,
  +    globus_bool_t *                     in_out_create)
  +{
  +    return xio_l_tb_set_group(
  +        group_name,
  +        rate,
  +        us_period,
  +        burst_size,
  +        in_out_create,
  +        &l_tb_write_group_hash,
  +        globus_xio_driver_finished_write,
  +        globus_xio_driver_pass_write);
  +}
  
  
  
  1.2.6.2   +19 -1     xio/drivers/token_bucket/source/globus_xio_token_bucket_driver.h
  
  http://viewcvs.globus.org/viewcvs.cgi/xio/drivers/token_bucket/source/globus_xio_token_bucket_driver.h.diff?r1=1.2.6.1&r2=1.2.6.2
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_xio_token_bucket_driver.h
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/xio/drivers/token_bucket/source/globus_xio_token_bucket_driver.h,v
  retrieving revision 1.2.6.1
  retrieving revision 1.2.6.2
  diff -u -b -r1.2.6.1 -r1.2.6.2
  --- globus_xio_token_bucket_driver.h	18 Nov 2006 00:16:13 -0000	1.2.6.1
  +++ globus_xio_token_bucket_driver.h	18 Nov 2006 22:24:58 -0000	1.2.6.2
  @@ -10,7 +10,25 @@
       GLOBUS_XIO_TOKEN_BUCKET_SET_WRITE_RATE,
       GLOBUS_XIO_TOKEN_BUCKET_SET_WRITE_PERIOD,
       GLOBUS_XIO_TOKEN_BUCKET_SET_GROUP,
  -    GLOBUS_XIO_TOKEN_BUCKET_GET_GROUP
  +    GLOBUS_XIO_TOKEN_BUCKET_SET_READ_GROUP,
  +    GLOBUS_XIO_TOKEN_BUCKET_SET_WRITE_GROUP
   };
   
  +globus_result_t
  +globus_xio_token_bucket_set_read_group(
  +    char *                              group_name,
  +    globus_off_t                        rate,
  +    int                                 us_period,
  +    globus_size_t                       burst_size,
  +    globus_bool_t *                     in_out_create);
  +
  +globus_result_t
  +globus_xio_token_bucket_set_write_group(
  +    char *                              group_name,
  +    globus_off_t                        rate,
  +    int                                 us_period,
  +    globus_size_t                       burst_size,
  +    globus_bool_t *                     in_out_create);
  +
  +
   #endif
  
  
  




More information about the xio-commit mailing list