<body style="padding:12px 8px; font-size:12px;"><p></p><div>I tracked this problem, and found that the loc.parent and loc.pargfid are all null in the call <span>sequences below</span>:<br><br>ec_manager_writev() -&gt; ec_get_size_version() -&gt; ec_lookup(). This can cause server_resolve() return an EINVAL.<br><br>A replace-brick will cause all opened fd and inode table recreate, but ec_lookup() get the loc from fd-&gt;_ctx. <br><br>So loc.parent and loc.pargfid are missing while fd changed.&nbsp; Other xlators always do a lookup from root&nbsp; <br><br>directory, so never cause this problem. It seems that a recursive lookup from root directory may address this <br><br>issue.<br><br>----- 原邮件信息 -----<br><strong>发件人:</strong>Raghavendra&nbsp;Gowdappa&nbsp;&lt;rgowdapp@redhat.com&gt;<br><strong>发送时间:</strong>14-12-24 21:48:56<br><strong>收件人:</strong>Xavier&nbsp;Hernandez&nbsp;&lt;xhernandez@datalab.es&gt;<br><strong>抄送人:</strong>Gluster&nbsp;Devel&nbsp;&lt;gluster-devel@gluster.org&gt;<br><strong>主题:</strong>Re:&nbsp;[Gluster-devel]&nbsp;Problems&nbsp;with&nbsp;graph&nbsp;switch&nbsp;in&nbsp;disperse<br><br>Do&nbsp;you&nbsp;know&nbsp;the&nbsp;origins&nbsp;of&nbsp;EIO?&nbsp;fuse-bridge&nbsp;only&nbsp;fails&nbsp;a&nbsp;lookup&nbsp;fop&nbsp;with&nbsp;EIO&nbsp;(when&nbsp;NULL&nbsp;gfid&nbsp;is&nbsp;received&nbsp;in&nbsp;a&nbsp;successful&nbsp;lookup&nbsp;reply).&nbsp;So,&nbsp;there&nbsp;might&nbsp;be&nbsp;other&nbsp;xlator&nbsp;which&nbsp;is&nbsp;sending&nbsp;EIO.<br>
<br>
-----&nbsp;Original&nbsp;Message&nbsp;-----<br>
&gt;&nbsp;From:&nbsp;&amp;quot;Xavier&nbsp;Hernandez&amp;quot;&nbsp;&lt;xhernandez@datalab.es&gt;<br>
&gt;&nbsp;To:&nbsp;&amp;quot;Gluster&nbsp;Devel&amp;quot;&nbsp;&lt;gluster-devel@gluster.org&gt;<br>
&gt;&nbsp;Sent:&nbsp;Wednesday,&nbsp;December&nbsp;24,&nbsp;2014&nbsp;6:25:17&nbsp;PM<br>
&gt;&nbsp;Subject:&nbsp;[Gluster-devel]&nbsp;Problems&nbsp;with&nbsp;graph&nbsp;switch&nbsp;in&nbsp;disperse<br>
&gt;&nbsp;<br>
&gt;&nbsp;Hi,<br>
&gt;&nbsp;<br>
&gt;&nbsp;I'm&nbsp;experiencing&nbsp;a&nbsp;problem&nbsp;when&nbsp;gluster&nbsp;graph&nbsp;is&nbsp;changed&nbsp;as&nbsp;a&nbsp;result&nbsp;of<br>
&gt;&nbsp;a&nbsp;replace-brick&nbsp;operation&nbsp;(probably&nbsp;with&nbsp;any&nbsp;other&nbsp;operation&nbsp;that<br>
&gt;&nbsp;changes&nbsp;the&nbsp;graph)&nbsp;while&nbsp;the&nbsp;client&nbsp;is&nbsp;also&nbsp;doing&nbsp;other&nbsp;tasks,&nbsp;like<br>
&gt;&nbsp;writing&nbsp;a&nbsp;file.<br>
&gt;&nbsp;<br>
&gt;&nbsp;When&nbsp;operation&nbsp;starts,&nbsp;I&nbsp;see&nbsp;that&nbsp;the&nbsp;replaced&nbsp;brick&nbsp;is&nbsp;disconnected,<br>
&gt;&nbsp;but&nbsp;writes&nbsp;continue&nbsp;working&nbsp;normally&nbsp;with&nbsp;one&nbsp;brick&nbsp;less.<br>
&gt;&nbsp;<br>
&gt;&nbsp;At&nbsp;some&nbsp;point,&nbsp;another&nbsp;graph&nbsp;is&nbsp;created&nbsp;and&nbsp;comes&nbsp;online.&nbsp;Remaining<br>
&gt;&nbsp;bricks&nbsp;on&nbsp;the&nbsp;old&nbsp;graph&nbsp;are&nbsp;disconnected&nbsp;and&nbsp;the&nbsp;old&nbsp;graph&nbsp;is&nbsp;destroyed.<br>
&gt;&nbsp;I&nbsp;see&nbsp;how&nbsp;new&nbsp;write&nbsp;requests&nbsp;are&nbsp;sent&nbsp;to&nbsp;the&nbsp;new&nbsp;graph.<br>
&gt;&nbsp;<br>
&gt;&nbsp;This&nbsp;seems&nbsp;correct.&nbsp;However&nbsp;there's&nbsp;a&nbsp;point&nbsp;where&nbsp;I&nbsp;see&nbsp;this:<br>
&gt;&nbsp;<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541130]&nbsp;T&nbsp;[fuse-bridge.c:2305:fuse_write_resume]<br>
&gt;&nbsp;0-glusterfs-fuse:&nbsp;2234:&nbsp;WRITE&nbsp;(0x16dcf3c,&nbsp;size=131072,&nbsp;offset=255721472)<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541156]&nbsp;T&nbsp;[ec-helpers.c:101:ec_trace]&nbsp;2-ec:<br>
&gt;&nbsp;WIND(INODELK)&nbsp;0x7f8921b7a9a4(0x7f8921b78e14)&nbsp;[refs=5,&nbsp;winds=3,&nbsp;jobs=1]<br>
&gt;&nbsp;frame=0x7f8932e92c38/0x7f8932e9e6b0,&nbsp;min/exp=3/3,&nbsp;err=0&nbsp;state=1<br>
&gt;&nbsp;{111:000:000}&nbsp;idx=0<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541292]&nbsp;T&nbsp;[rpc-clnt.c:1384:rpc_clnt_record]<br>
&gt;&nbsp;2-patchy-client-0:&nbsp;Auth&nbsp;Info:&nbsp;pid:&nbsp;0,&nbsp;uid:&nbsp;0,&nbsp;gid:&nbsp;0,&nbsp;owner:<br>
&gt;&nbsp;d025e932897f0000<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541296]&nbsp;T&nbsp;[io-cache.c:133:ioc_inode_flush]<br>
&gt;&nbsp;2-patchy-io-cache:&nbsp;locked&nbsp;inode(0x16d2810)<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541354]&nbsp;T<br>
&gt;&nbsp;[rpc-clnt.c:1241:rpc_clnt_record_build_header]&nbsp;2-rpc-clnt:&nbsp;Request<br>
&gt;&nbsp;fraglen&nbsp;152,&nbsp;payload:&nbsp;84,&nbsp;rpc&nbsp;hdr:&nbsp;68<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541408]&nbsp;T&nbsp;[io-cache.c:137:ioc_inode_flush]<br>
&gt;&nbsp;2-patchy-io-cache:&nbsp;unlocked&nbsp;inode(0x16d2810)<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541493]&nbsp;T&nbsp;[io-cache.c:133:ioc_inode_flush]<br>
&gt;&nbsp;2-patchy-io-cache:&nbsp;locked&nbsp;inode(0x16d2810)<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541536]&nbsp;T&nbsp;[io-cache.c:137:ioc_inode_flush]<br>
&gt;&nbsp;2-patchy-io-cache:&nbsp;unlocked&nbsp;inode(0x16d2810)<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541537]&nbsp;T&nbsp;[rpc-clnt.c:1577:rpc_clnt_submit]<br>
&gt;&nbsp;2-rpc-clnt:&nbsp;submitted&nbsp;request&nbsp;(XID:&nbsp;0x17&nbsp;Program:&nbsp;GlusterFS&nbsp;3.3,<br>
&gt;&nbsp;ProgVers:&nbsp;330,&nbsp;Proc:&nbsp;29)&nbsp;to&nbsp;rpc-transport&nbsp;(patchy-client-0)<br>
&gt;&nbsp;[2014-12-24&nbsp;11:29:58.541646]&nbsp;W&nbsp;[fuse-bridge.c:2271:fuse_writev_cbk]<br>
&gt;&nbsp;0-glusterfs-fuse:&nbsp;2234:&nbsp;WRITE&nbsp;=&gt;&nbsp;-1&nbsp;(Input/output&nbsp;error)<br>
&gt;&nbsp;<br>
&gt;&nbsp;It&nbsp;seems&nbsp;that&nbsp;fuse&nbsp;still&nbsp;has&nbsp;a&nbsp;write&nbsp;request&nbsp;pending&nbsp;for&nbsp;graph&nbsp;0.&nbsp;It&nbsp;is<br>
&gt;&nbsp;resumed&nbsp;but&nbsp;it&nbsp;returns&nbsp;EIO&nbsp;without&nbsp;calling&nbsp;the&nbsp;xlator&nbsp;stack&nbsp;(operations<br>
&gt;&nbsp;seen&nbsp;between&nbsp;the&nbsp;two&nbsp;log&nbsp;messages&nbsp;are&nbsp;from&nbsp;other&nbsp;operations&nbsp;and&nbsp;they&nbsp;are<br>
&gt;&nbsp;sent&nbsp;to&nbsp;graph&nbsp;2).&nbsp;I'm&nbsp;not&nbsp;sure&nbsp;why&nbsp;this&nbsp;happens&nbsp;and&nbsp;how&nbsp;I&nbsp;should&nbsp;aviod&nbsp;this.<br>
&gt;&nbsp;<br>
&gt;&nbsp;I&nbsp;tried&nbsp;the&nbsp;same&nbsp;scenario&nbsp;with&nbsp;replicate&nbsp;and&nbsp;it&nbsp;seems&nbsp;to&nbsp;work,&nbsp;so&nbsp;there<br>
&gt;&nbsp;must&nbsp;be&nbsp;something&nbsp;wrong&nbsp;in&nbsp;disperse,&nbsp;but&nbsp;I&nbsp;don't&nbsp;see&nbsp;where&nbsp;the&nbsp;problem<br>
&gt;&nbsp;could&nbsp;be.<br>
&gt;&nbsp;<br>
&gt;&nbsp;Any&nbsp;ideas&nbsp;?<br>
&gt;&nbsp;<br>
&gt;&nbsp;Thanks,<br>
&gt;&nbsp;<br>
&gt;&nbsp;Xavi<br>
&gt;&nbsp;_______________________________________________<br>
&gt;&nbsp;Gluster-devel&nbsp;mailing&nbsp;list<br>
&gt;&nbsp;Gluster-devel@gluster.org<br>
&gt;&nbsp;<a target="_blank" href="http://www.gluster.org/mailman/listinfo/gluster-devel">http://www.gluster.org/mailman/listinfo/gluster-devel</a><br>
&gt;&nbsp;<br>
_______________________________________________<br>
Gluster-devel&nbsp;mailing&nbsp;list<br>
Gluster-devel@gluster.org<br>
<a target="_blank" href="http://www.gluster.org/mailman/listinfo/gluster-devel">http://www.gluster.org/mailman/listinfo/gluster-devel</a><br>
<p></p></div></body>