[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