Please help me with my quota xlator :-)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
------------------------------------------------




[Index of Archives]     [Gluster Users]     [Ceph Users]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux