[Gluster-users] Concurrency limitation?
Jeff Darcy
jdarcy at redhat.com
Tue Feb 7 19:58:23 UTC 2012
On Tue, 07 Feb 2012 20:03:18 +0100
Arnold Krille <arnold at arnoldarts.de> wrote:
> > GlusterFS is a file-level protocol, more like NFS, and as far as I
> > know there is no inherent locking between clients.
>
> There has to be locking. Otherwise two apps on two machines opening
> the same file for writing would destroy each others changes.
That's not exactly true. For one thing, non-overlapping non-extending
writes won't affect each other.
> Therefor
> one client has to gather locks on all brick filesystems (which is the
> same as synchronizing access with all other clients).
Again, not really. For a write, only *that file* would need to be
locked, and only on the bricks that actually contain that file.
Without replication or striping, the number of bricks holding a file is
exactly one, and all necessary synchronization can occur within that
one server. With striping, serialization only needs to occur across
bricks holding stripes affected by that write - often just one again.
With replication, there does need to be more complex coordination and
there's a whole protocol in place to handle that . . . but, again, it
only affects those bricks holding replicas of the file being written.
Locking across all bricks in a volume only needs to occur for volume
level operations (e.g. volume parameter changes).
> > Why, when I simply read
> > a file, would a lock need to be created anywhere?
>
> One client opens the file for reading, the other opens the file for
> trunc|write. What do you get on the first client? How should this
> scenario be any save without some kind of locking. And since its a
> distributed filesystem, it has to be distributed locking.
There are other solutions besides locking. One is cache invalidation -
a write causes other clients to be notified that any cached data
related to the just-written range is invalid. Another is polling -
part of a read is to validate the freshness of cached data (e.g. by
checking timestamps or generation numbers) before using it. There are
still other "optimistic concurrency control" alternatives that I won't
go into right now, because I think the point is sufficiently made.
> I might be wrong and glusterfs really doesn't do any locking to
> prevent concurrent write accesses. But if thats true, I think this
> rules out glusterfs for any usage above "proof-of-concept". And thats
> why I doubt that glusterfs doesn't do any locking (or synchronization
> of the fs-locks underneath).
It does synchronization, but it's much finer-grained than you seem to
think and it uses many techniques besides locking.
More information about the Gluster-users
mailing list