[Gluster-devel] Please help me with my quota xlator :-)

Angel clist at uah.es
Fri Jan 18 00:33:55 UTC 2008


Hi 

Im experiencing problems try to implement simple functions for my pet xlator QUOTA

stats mops from posix module seems nonsense, also rr sched seem to ignore them.

My setup is:

volume posix-brick0
  type storage/posix                   # POSIX FS translator
  option directory /home/export        # Export this directory
end-volume

volume posix-brick1
  type storage/posix                   # POSIX FS translator
  option directory /home/export2        # Export this directory
end-volume

volume posix-brick2
  type storage/posix                   # POSIX FS translator
  option directory /home/export3        # Export this directory
end-volume

volume quota-volume
  type features/quota
  subvolumes posix-brick0
  option max-size 5MB
end-volume

volume unify-volume
  type cluster/unify
  option namespace posix-brick2
  option scheduler rr
  option rr.limits.min-free-disk 5
  option rr.refresh-interval 2
  subvolumes quota-volume posix-brick1
end-volume

############################

Quota tries to fool unify about size of posix-brick0. 

I got trace_stats_cbk from trace to adquire return values from stats mops. 

i hope things going like this (ASYNC calls):

unifiy scheduler rr --> rr_*_stats( )  mops --> quota_stats( ) mops ---> posix_stats mops 
posix_stats --> quota_stats_cbk  mops -->  rr_stats_cbk mops

So i hacked quota_stats_cbk as this:

INFO: quota allocate on init a quota_private struct *private and store prt on this->private

static int32_t
quota_stats_cbk (call_frame_t *frame,
                 void *cookie,
                 xlator_t *this,
                 int32_t op_ret,
                 int32_t op_errno,
                 struct xlator_stats *stats)
{
  struct quota_private *private = NULL;

  private = this->private;
/* Here we control space available to upper modules */
  if (private->storage_size > 0) {
    if ( stats->total_disk_size > private->storage_size ) {
      gf_log (this->name,
              GF_LOG_WARNING,
              "quota_stats_cbk (Limiting storage to %d (Was Total: %d Free: %d,Used: %d ))\n",
              private->storage_size,
              stats->total_disk_size,
              stats->free_disk,
              stats->disk_usage);
      stats->total_disk_size = private->storage_size;
    }
  }

  STACK_UNWIND (frame, op_ret, op_errno, stats);
  return 0;
}

This code doesnt work!!

Test:
$cd /home/sinosuke/mnt
$for a in $(seq 1 4); do echo "Bloque $a"; dd if=/dev/urandom of=test$a.txt bs=10 count=1; sleep 1; done

Code prints:

2008-01-18 01:24:05 W [quota.c:2204:quota_stats_cbk] quota-volume: quota_stats_cbk (Limiting storage to 5242880 ( Was Total: 0 Free: 1586819072,Used: 12 ))
2008-01-18 01:24:09 W [quota.c:2204:quota_stats_cbk] quota-volume: quota_stats_cbk (Limiting storage to 5242880 ( Was Total: 0 Free: 1586819072,Used: 12 ))

Why stats from posix-brick0 always show the same nonsense values?? 
Does really rr scheduler use them for disk space control??

Im confused

Regards
-- 
------------------------------------------------
Clist UAH
------------------------------------------------





More information about the Gluster-devel mailing list