[Gluster-devel] question on quota

Raghavendra Gowdappa rgowdapp at redhat.com
Mon Sep 22 03:14:37 UTC 2014


Hi Emmanuel,

If Quota cannot allow the entire payload in the write call without exceeding limit, it allows the fraction of payload that can fit-in within the quota boundaries. This has led to "short" writes which the comment in frame 12 mentions. Its the behaviour of write-behind to return EIO for short writes. Since its unlikely that the writes incident on quota when the limit is about be reached, can be allowed in their entirety, we can expect an EIO before EDQUOT. However, without write-behind in xlator graph, there would be no EIO.

regards,
Raghavendra.
----- Original Message -----
> From: "Emmanuel Dreyfus" <manu at netbsd.org>
> To: "Gluster Devel" <gluster-devel at gluster.org>
> Sent: Sunday, September 21, 2014 11:09:11 PM
> Subject: [Gluster-devel] question on quota
> 
> Hi
> 
> I am trying to get tests/basic/quota.t working on NetBSD and I notice an
> oddity:
> before betting EDQUOT, I get EIO. The backtrace leading there is below. Note
> the
> comments at frame 12. Shall I assume it is the expected behavior to get EIO
> for
> an over quota write?
> 
> #0  0xbb491dc7 in _lwp_kill () from /lib/libc.so.12
> #1  0xbb491d68 in raise () from /lib/libc.so.12
> #2  0xbb491982 in abort () from /lib/libc.so.12
> #3  0xba5a68bb in fuse_writev_cbk (frame=0xb99b7670, cookie=0xb98b5e28,
>     this=0xbb287018, op_ret=-1, op_errno=5, stbuf=0xbf7fe1e0,
>     postbuf=0xbf7fe1e0, xdata=0x0) at fuse-bridge.c:2271
> #4  0xb9ba0d48 in io_stats_writev_cbk (frame=0xb98b5e28, cookie=0xb98b5eb8,
>     this=0xbb2d9018, op_ret=-1, op_errno=5, prebuf=0xbf7fe1e0,
>     postbuf=0xbf7fe1e0, xdata=0x0) at io-stats.c:1402
> #5  0xb9bbb504 in mdc_writev_cbk (frame=0xb98b5eb8, cookie=0xb98b5fd8,
>     this=0xbb2d7018, op_ret=-1, op_errno=5, prebuf=0xbf7fe1e0,
>     postbuf=0xbf7fe1e0, xdata=0x0) at md-cache.c:1509
> #6  0xbb768d7c in default_writev_cbk (frame=0xb98b5fd8, cookie=0xb98b6068,
>     this=0xbb2d6018, op_ret=-1, op_errno=5, prebuf=0xbf7fe1e0,
>     postbuf=0xbf7fe1e0, xdata=0x0) at defaults.c:1019
> #7  0xbb768d7c in default_writev_cbk (frame=0xb98b6068, cookie=0xb98b6338,
>     this=0xbb2d5018, op_ret=-1, op_errno=5, prebuf=0xbf7fe1e0,
>     postbuf=0xbf7fe1e0, xdata=0x0) at defaults.c:1019
> #8  0xb9be372d in ioc_writev_cbk (frame=0xb98b6338, cookie=0xb98b6458,
>     this=0xbb2d4018, op_ret=-1, op_errno=5, prebuf=0xbf7fe1e0,
>     postbuf=0xbf7fe1e0, xdata=0x0) at io-cache.c:1225
> #9  0xb9bf421f in ra_writev_cbk (frame=0xb98b6458, cookie=0xb98b64e8,
>     this=0xbb2d3018, op_ret=-1, op_errno=5, prebuf=0xbf7fe1e0,
>     postbuf=0xbf7fe1e0, xdata=0x0) at read-ahead.c:654
> #10 0xbb3068c4 in wb_do_unwinds (wb_inode=0xbb2403a8, lies=0xbf7fe288)
>     at write-behind.c:921
> #11 0xbb30724c in wb_process_queue (wb_inode=0xbb2403a8) at
> write-behind.c:1209
> #12 0xbb305ec0 in wb_fulfill_cbk (frame=0xb98e9e70, cookie=0xb98b5be8,
>     this=0xbb2d2018, op_ret=81920, op_errno=0, prebuf=0xb98de3fc,
>     postbuf=0xb98de464, xdata=0xb98bbaa8) at write-behind.c:758
> 
> Here we have this code:
> 742             if (op_ret == -1) {
> 743                     wb_fulfill_err (head, op_errno);
> 744             } else if (op_ret < head->total_size) {
> 745                     /*
> 746                      * We've encountered a short write, for whatever
> reason.
> 747                      * Set an EIO error for the next fop. This should be
> 748                      * valid for writev or flush (close).
> 749                      *
> 750                      * TODO: Retry the write so we can potentially
> capture
> 751                      * a real error condition (i.e., ENOSPC).
> 752                      */
> 753                     wb_fulfill_err (head, EIO);
> 754             }
> 
> #13 0xb9c3fed8 in dht_writev_cbk (frame=0xb98b5be8, cookie=0xb98b5c78,
>     this=0xbb2d1018, op_ret=81920, op_errno=0, prebuf=0xb98de3fc,
>     postbuf=0xb98de464, xdata=0xb98bbaa8) at dht-inode-write.c:84
> #14 0xb9c7e97d in afr_writev_unwind (frame=0xb98b5c78, this=0xbb2cf018)
>     at afr-inode-write.c:188
> #15 0xb9c7ed43 in afr_writev_wind_cbk (frame=0xb99b6e70, cookie=0x1,
>     this=0xbb2cf018, op_ret=81920, op_errno=0, prebuf=0xbf7fe438,
>     postbuf=0xbf7fe3d0, xdata=0xb98bbaa8) at afr-inode-write.c:313
> #16 0xb9cdd30d in client3_3_writev_cbk (req=0xb9ad4428, iov=0xb9ad4448,
>     count=1, myframe=0xb98b5918) at client-rpc-fops.c:855
> #17 0xbb7330c2 in rpc_clnt_handle_reply (clnt=0xbb2af508, pollin=0xb98a6fc8)
>     at rpc-clnt.c:766
> #18 0xbb7333ba in rpc_clnt_notify (trans=0xb99a2018, mydata=0xbb2af528,
>     event=RPC_TRANSPORT_MSG_RECEIVED, data=0xb98a6fc8) at rpc-clnt.c:894
> #19 0xbb72fab5 in rpc_transport_notify (this=0xb99a2018,
>     event=RPC_TRANSPORT_MSG_RECEIVED, data=0xb98a6fc8) at rpc-transport.c:516
> #20 0xb9d6d832 in socket_event_poll_in (this=0xb99a2018) at socket.c:2153
> #21 0xb9d6dce7 in socket_event_handler (fd=15, idx=5, data=0xb99a2018,
>     poll_in=1, poll_out=0, poll_err=0) at socket.c:2266
> #22 0xbb7be78f in event_dispatch_poll_handler (event_pool=0xbb242098,
>     ufds=0xbb2856b8, i=5) at event-poll.c:357
> #23 0xbb7be9f6 in event_dispatch_poll (event_pool=0xbb242098)
>     at event-poll.c:436
> #24 0xbb791571 in event_dispatch (event_pool=0xbb242098) at event.c:113
> #25 0x080503e0 in main (argc=8, argv=0xbf7febd8) at glusterfsd.c:2043
> 
> --
> Emmanuel Dreyfus
> http://hcpnet.free.fr/pubz
> manu at netbsd.org
> _______________________________________________
> Gluster-devel mailing list
> Gluster-devel at gluster.org
> http://supercolony.gluster.org/mailman/listinfo/gluster-devel
> 


More information about the Gluster-devel mailing list