AVOIDING INDEX CONTENTION WITH DISTRIBUTED TASK QUEUES IN A DISTRIBUTED STORAGE SYSTEM
A dispersed storage network (DSN) includes determining to update an index node of a dispersed hierarchical index in accordance with a pending update, and when the updating of the index node is not successful, generating a task entry of a task queue associated with the index node, storing the task entry in the task queue. The method continues by subsequently accessing the index node by identifying a DSN address of the index node, issuing a set of read slice requests to a set of storage units utilizing the DSN address of the index node, receiving read slice responses, and decoding index node slices of the received read slice responses to reproduce the index node, determining whether the task queue associated with the index node includes at least one task entry, initiating updating of the index node, and deleting the at least one task entry from the task queue.
1 . A method for execution by one or more processing modules of one or more computing devices of a dispersed storage network (DSN), the method comprises:
determining to update an index node of a dispersed hierarchical index in accordance with a pending update;
initiating updating of the index node;
when the updating of the index node is not successful, generating a task entry of a task queue associated with the index node.
storing the task entry in the task queue;
subsequently accessing the index node by identifying a DSN address of the index node, issuing a set of read slice requests to a set of storage units utilizing the DSN address of the index node, receiving read slice responses, and decoding index node slices of the received read slice responses to reproduce the index node;
determining whether the task queue associated with the index node includes at least one task entry;
when the task queue associated with the index node includes the at least one task entry, initiating updating of the index node; and
when the updating of the index node is successful, deleting the at least one task entry from the task queue.
2 . The method of claim 1 , wherein the initiating updating of the index node includes generating an updated index node, encoding the updated index node to produce a set of index slices, issuing write slice requests to the set of storage units that includes the set of index slices, receiving write slice responses, and determining whether the updating is successful based on the received write slice responses.
3 . The method of claim 1 further comprises indicating that the updating was unsuccessful due to any of: not receiving a write threshold number of favorable write slice responses or a conflict with another writer.
4 . The method of claim 1 , wherein the generating a task entry of a task queue associated with the index node includes generating the task entry to include a pending update of the index node.
5 . The method of claim 1 , wherein the storing the task entry in the task queue includes generating a DSN address for the task entry based on a DSN address of the index node, and generating a set of encoded task slices, generating a set of write slice requests that includes the set of encoded task slices and slice names derived from the DSN address for the task entry, and sending the set of write slice requests to the set of storage units.
6 . The method of claim 1 , wherein the determining whether the task queue associated with the index node includes at least one task entry further includes interpreting an entry count of a reproduced index node and indicating that the index node includes the at least one task entry when a count is greater than zero.
7 . The method of claim 1 , wherein the determining whether the task queue associated with the index node includes at least one task entry further includes initiating access to a first task entry and indicates that the at least one task entry is included when successfully decoding the first task entry.
8 . The method of claim 1 , wherein the initiating updating of the index node, for each task entry of the task queue, includes facilitating updating of the index node in accordance with the task entry.
9 . The method of claim 8 , wherein the facilitating updating of the index node in accordance with the task entry includes modifying a reproduced index node in accordance with the task entry, dispersed storage error encoding the modified reproduced index node to produce a set of modified index slices, sending the set of modified index slices to the set of storage units, receiving write slice responses, and interpreting the received read slice responses to determine whether the updating of the index node is successful.
10 . The method of claim 1 , wherein the deleting the at least one task entry from the task queue includes issuing a set of delete slice requests to a DSN address associated with each corresponding successfully updated entry of the task queue.
11 . A computing device of a group of computing devices of a dispersed storage network (DSN), the computing device comprises:
an interface;
a local memory; and
a processing module operably coupled to the interface and the local memory, wherein the processing module functions to:
determine to update an index node of a dispersed hierarchical index in accordance with a pending update;
initiate updating of the index node;
when the updating of the index node is not successful, generate a task entry of a task queue associated with the index node.
store the task entry in the task queue;
subsequently access the index node by identifying a DSN address of the index node, issue a set of read slice requests to a set of storage units utilizing the DSN address of the index node, receive read slice responses, and decode index node slices of the received read slice responses to reproduce the index node;
determine whether the task queue associated with the index node includes at least one task entry;
when the task queue associated with the index node includes the at least one task entry, initiate updating of the index node; and
when the updating of the index node is successful, delete the at least one task entry from the task queue.
12 . The computing device of claim 11 , wherein the initiate updating of the index node includes generating an updated index node, encoding the updated index node to produce a set of index slices, issuing write slice requests to the set of storage units that includes the set of index slices, receiving write slice responses, and determining whether the updating is successful based on the received write slice responses.
13 . The computing device of claim 11 further comprises indicating that the updating was unsuccessful due to any of: not receiving a write threshold number of favorable write slice responses or a conflict with another writer.
14 . The computing device of claim 11 , wherein the generate a task entry of a task queue associated with the index node includes generating the task entry to include a pending update of the index node.
15 . The computing device of claim 11 , wherein the store the task entry in the task queue includes generating a DSN address for the task entry based on a DSN address of the index node, and generating a set of encoded task slices, generating a set of write slice requests that includes the set of encoded task slices and slice names derived from the DSN address for the task entry, and sending the set of write slice requests to the set of storage units.
16 . The computing device of claim 11 , wherein the determine whether the task queue associated with the index node includes at least one task entry further includes interpreting an entry count of a reproduced index node and indicating that the index node includes the at least one task entry when a count is greater than zero.
17 . The computing device of claim 11 , wherein the determine whether the task queue associated with the index node includes at least one task entry further includes initiating access to a first task entry and indicates that the at least one task entry is included when successfully decoding the first task entry.
18 . The computing device of claim 17 , wherein the facilitate updating of the index node in accordance with the task entry includes modifying a reproduced index node in accordance with the task entry, dispersed storage error encoding the modified reproduced index node to produce a set of modified index slices, sending the set of modified index slices to the set of storage units, receiving write slice responses, and interpreting the received read slice responses to determine whether the updating of the index node is successful.
19 . The computing device of claim 11 , wherein the delete the at least one task entry from the task queue includes issuing a set of delete slice requests to a DSN address associated with each corresponding successfully updated entry of the task queue.
20 . A dispersed storage network (DSN), the DSN comprises:
a set of storage units;
a processing module operably coupled to an interface and a local memory, wherein the processing module functions to:
determine to update an index node of a dispersed hierarchical index in accordance with a pending update;
initiate updating of the index node;
when the updating of the index node is not successful, generate a task entry of a task queue associated with the index node.
store the task entry in the task queue;
subsequently access the index node by identifying a DSN address of the index node, issue a set of read slice requests to the set of storage units utilizing the DSN address of the index node, receive read slice responses, and decode index node slices of the received read slice responses to reproduce the index node;
determine whether the task queue associated with the index node includes at least one task entry;
when the task queue associated with the index node includes the at least one task entry, initiate updating of the index node; and
when the updating of the index node is successful, delete the at least one task entry from the task queue.