Forwarding Read Requests in a Storage Network
A storage unit of a directory-less storage network is operable to receive a read request regarding a data segment of a data object, wherein the data segment was error encoded into a set of encoded data slices. A read response regarding an encoded data slice of the set of encoded data slices that is stored by the storage unit is outputted. Another storage unit of the directory-less storage network to which the read request is to be forwarded is identified, and the read request is forwarded to the other storage unit.
1 . A method for execution by a storage unit in a directory-less storage network, the method comprises:
receiving a read request regarding a data segment of a data object, wherein the data segment was error encoded into a set of encoded data slices;
outputting a read response regarding an encoded data slice of the set of encoded data slices that is stored by the storage unit;
identifying another storage unit of the directory-less storage network to which the read request is to be forwarded; and
forwarding the read request to the other storage unit.
2 . The method of claim 1 , wherein the outputting the read response comprises:
determining, based on the read request, whether the encoded data slice is locally stored; and
when the encoded data slice is locally stored, generating the read response.
3 . The method of claim 2 , wherein the determining whether the encoded data slice is locally stored comprises:
receiving a data object identifier within the read request;
determining whether a slice name associated with the encoded data slice of stored encoded data slices within the storage unit includes a corresponding portion that substantially matches the data object identifier; and
when the slice name has the corresponding portion that substantially matches the data object identifier, indicating that the encoded data slice is locally stored.
4 . The method of claim 1 further comprises:
generating the read response to include the encoded data slice; and
outputting the read response to a requesting entity that sent the read request.
5 . The method of claim 1 further comprises:
generating the read response to include a slice name of the encoded data slice; and
outputting the read response to a requesting entity that sent the read request.
6 . The method of claim 5 further comprises:
receiving a slice read request from the requesting entity, wherein the slice read request includes the slice name;
generating a second read response to include the encoded data slice; and
outputting the second read response to the requesting entity.
7 . The method of claim 1 further comprises:
generating the read response to include the encoded data slice; and
outputting the read response to the other storage unit.
8 . The method of claim 1 further comprises:
generating the read response to include a slice name of the encoded data slice; and
outputting the read response to the identified other storage unit.
9 . The method of claim 1 further comprises:
determining whether to identify the other storage unit based on the receiving the read request for the other storage unit as a forward read request, wherein the forward read request includes propagated response information regarding a number of encoded data slices of the set of encoded data slices that have been identified in response to the read request; and
when the number of encoded data slices that have been identified in response to the request plus the encoded data slice is less than a decode threshold, performing the identifying the other storage unit, wherein the identifying includes indicating that the read request is to be forwarded to the other storage unit.
10 . The method of claim 1 , wherein the identifying the other storage unit comprises:
determining whether slices names of stored encoded data slices within the storage unit include a corresponding portion that substantially matches an identifier of the data object;
when a slice name of the slice names includes a corresponding portion that substantially matches an identifier of the data object, generating slices names of other slices of the set of encoded data slices; and
identifying the other storage unit based on one or more of the generated slices names of the other slices.
11 . A storage unit of a directory-less storage network, the storage unit comprises:
memory;
an interface; and
a processing module operably coupled to the memory and the interface, wherein the processing module is operable to:
receive, via the interface, a read request regarding a data segment of a data object, wherein the data segment was error encoded into a set of encoded data slices;
output, via the interface, a read response regarding an encoded data slice of the set of encoded data slices that is stored by the storage unit;
identify another storage unit of the directory-less storage network to which the read request is to be forwarded; and
forward, via the interface, the read request to the other storage unit.
12 . The storage unit of claim 11 , wherein the processing module is operable to perform the outputting the read response by:
determining, based on the read request, whether the encoded data slice is locally stored; and
when the encoded data slice is locally stored, generating the read response.
13 . The storage unit of claim 12 , wherein the processing module is operable to perform the determining whether the encoded data slice is locally stored by:
receiving, via the interface, a data object identifier within the read request;
determining whether a slice name associated with the encoded data slice of stored encoded data slices within the storage unit includes a corresponding portion that substantially matches the data object identifier; and
when the slice name has the corresponding portion that substantially matches the data object identifier, indicating that the encoded data slice is locally stored.
14 . The storage unit of claim 11 , wherein the processing module is further operable to:
generate the read response to include the encoded data slice; and
output, via the interface, the read response to a requesting entity that sent the read request.
15 . The storage unit of claim 11 , wherein the processing module is further operable to:
generate the read response to include a slice name of the encoded data slice; and
output, via the interface, the read response to a requesting entity that sent the read request.
16 . The storage unit of claim 15 , wherein the processing module is further operable to:
receive, via the interface, a slice read request from the requesting entity, wherein the slice read request includes the slice name;
generate a second read response to include the encoded data slice; and
output, via the interface, the second read response to the requesting entity.
17 . The storage unit of claim 11 , wherein the processing module is further operable to:
generate the read response to include the encoded data slice; and
output, via the interface, the read response to the other storage unit.
18 . The storage unit of claim 11 , wherein the processing module is further operable to:
generate the read response to include a slice name of the encoded data slice; and
output, via the interface, the read response to the identified other storage unit.
19 . The storage unit of claim 11 , wherein the processing module is further operable to:
determine whether to identify the other storage unit based on the receiving the read request for the other storage unit as a forward read request, wherein the forward read request includes propagated response information regarding a number of encoded data slices of the set of encoded data slices that have been identified in response to the read request; and
when the number of encoded data slices that have been identified in response to the request plus the encoded data slice is less than a decode threshold, perform the identifying the other storage unit, wherein the identifying includes indicating that the read request is to be forwarded to the other storage unit.
20 . The storage unit of claim 11 , wherein the processing module is operable to perform the identifying the other storage unit by:
determining whether slices names of stored encoded data slices within the storage unit include a corresponding portion that substantially matches an identifier of the data object;
when a slice name of the slice names includes a corresponding portion that substantially matches the identifier of the data object, generating slices names of other slices of the set of encoded data slices; and
identifying the other storage unit based on one or more of the generated slices names of the other slices.