Implementing coherency and page cache support for a storage system spread across multiple data centers
A plurality of computing devices are communicatively coupled to each other via a network, and each of the plurality of computing devices is operably coupled to one or more of a plurality of storage devices. The computing devices may use local caches and storing snapshots in a coherent manner when accessing the plurality of storage devices spread across multiple data centers.
1 . A system comprising:
a plurality of buckets, wherein:
each bucket is associated with a group of storage nodes,
no two buckets of the plurality of buckets are associated with the same group of storage nodes, and
a compute node is configured to transfer data to or from the group of storage nodes associated with at least one bucket of the plurality of buckets.
2 . The system of claim 1 , wherein the compute node is configured to take a snapshot of the at least one bucket of the plurality of buckets.
3 . The system of claim 2 , wherein the compute node is configured to store the snapshot to one or more storage nodes of the group of storage nodes associated with the at least one bucket of the plurality of buckets.
4 . The system of claim 3 , wherein one or more storage nodes are associated with a particular bucket of the plurality of buckets.
5 . The system of claim 2 , wherein prior to the compute node taking the snapshot, data transfer is halted to all storage nodes.
6 . The system of claim 2 , wherein the compute node is operable to distribute information regarding the snapshot to keep track of the snapshot.
7 . The system of claim 1 , wherein each of the buckets is associated with five storage nodes.
8 . The system of claim 1 , wherein the compute node is configured to request a lease to open a file for at least a write privilege for a file.
9 . The system of claim 1 , wherein the compute node is configured to request a lease when a file is in a bucket other than the at least one bucket of the plurality of buckets.
10 . The system of claim 1 , wherein the compute node is operable to send extents affected by a write to one or more storage nodes of the group of storage nodes associated with the at least one bucket of the plurality of buckets to provide a coherent view to all storage nodes of the group of storage nodes.
11 . A method, comprising:
transferring data, via a compute node, to or from a group of storage nodes associated with at least one bucket of a plurality of buckets, wherein no two buckets of the plurality of buckets are associated with the same group of storage nodes.
12 . The method of claim 11 , wherein the method comprises taking a snapshot, via the compute node, of a first bucket.
13 . The method of claim 12 , wherein the method comprises storing the snapshot, via the compute node, to one or more storage nodes of the plurality of storage nodes.
14 . The method of claim 13 , wherein:
the one or more storage nodes are associated with the first bucket, and
the first bucket is managed by the compute node.
15 . The method of claim 13 , wherein the method comprises verifying, via the compute node, that no other bucket holds any information associated with an extent of the snapshot, prior to storing the snapshot.
16 . The method of claim 12 , wherein the method comprises halting data transfer to all storage nodes, prior to the compute node taking the snapshot.
17 . The method of claim 12 , wherein the method comprises sending a command to take the snapshot, prior to taking the snapshot.
18 . The method of claim 12 , wherein:
the method comprises distributing dirty extents, and
the dirty extents comprise information regarding the snapshot, and wherein the information can be logged to keep track of the snapshot.
19 . The method of claim 11 , wherein each group of storage nodes comprises five storage nodes.
20 . The method of claim 11 , wherein the method comprises sending extents affected by a write, when the compute node is writing data to a storage node.
21 . The method of claim 11 , wherein the method comprises requesting, via the compute node, a lease to open a file in a first bucket, prior to transferring data to the first bucket.