[Pvfs2-developers] concurrent ls and rm

Sam Lang slang at mcs.anl.gov
Fri Sep 7 09:16:36 EDT 2007


Thanks for digging into this Phil.  It sounds like the right fix is  
to send the segment name as the position, and get rid of the pcache  
entirely.  This avoids the pcache miss issue, and allows it to work  
over server restarts, which was really the purpose of the pcache anyway.

In the meantime, it might help your test case to crank the limits on  
the pcache way up.

-sam

On Sep 7, 2007, at 8:46 AM, Phil Carns wrote:

>>> I just stumbled on to something while trying to clean up my   
>>> previous tests.  If I have the pcache disabled, then rm -rf of a   
>>> large directory never works right, even if all of the other  
>>> clients  are idle.  It is possible that we have the opposite  
>>> problem?  That  actually the pcache works fine it but it is the  
>>> pcache miss case  that is broken?
>>>
>>> I'll switch back and forth a couple more times to confirm, but  
>>> I'm  pretty sure this is consistent.
>> Yeah possibly.  It would make sense that ls while rm -rf would  
>> cause  that too.  The pcache is FIFO, so the pos->name entries  
>> might be  getting FIFO-ed out of the cache by the entries that ls  
>> is adding.   When the pcache misses, it uses the step_to function  
>> based on the  value of the position (walks through all the  
>> entries).  It could just  be a bug in that code, but honestly the  
>> readdir with removes always  confuses me when the index is meant  
>> to keep track of the position.   How did it work in the previous  
>> impl when we had a db per directory?
>> -sam
>
> I confirmed that it seems to be a problem with the "pcache miss"  
> path. If I disable the pcache, then rm -rf of a directory with just  
> 50 entries fails.  Everything works fine if the pcache is enabled.   
> Here is an example:
>
> # mkdir /mnt/pvfs2/testdir6
>
> # for i in `seq 1 50`; do cp /etc/hosts /mnt/pvfs2/testdir6/$i; done
>
> # rm -rf /mnt/pvfs2/testdir6
> rm: cannot remove directory `/mnt/pvfs2/testdir6': Directory not empty
>
> # ls /mnt/pvfs2/testdir6
> 33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50
>
> # ls /mnt/pvfs2/testdir6 |wc
>      18      18      54
>
> -Phil
>



More information about the Pvfs2-developers mailing list