DETAILED ACTION
Notice of Pre-AIA or AIA Status
The present application, filed on or after March 16, 2013, is being examined under the first inventor to file provisions of the AIA .
Claim Rejections - 35 USC § 102
In the event the determination of the status of the application as subject to AIA 35 U.S.C. 102 and 103 (or as subject to pre-AIA 35 U.S.C. 102 and 103) is incorrect, any correction of the statutory basis (i.e., changing from AIA to pre-AIA ) for the rejection will not be considered a new ground of rejection if the prior art relied upon, and the rationale supporting the rejection, would be the same under either status.
The following is a quotation of the appropriate paragraphs of 35 U.S.C. 102 that form the basis for the rejections under this section made in this Office action:
A person shall be entitled to a patent unless –
(a)(1) the claimed invention was patented, described in a printed publication, or in public use, on sale, or otherwise available to the public before the effective filing date of the claimed invention.
Claim(s) 1-20 is/are rejected under 35 U.S.C. 102(a)(1) as being anticipated by Tal et al. 11704053 herein Tal.
Per claim 1, Tal discloses: obtaining a first request, wherein the first request is used to update a first data block in an erasure coding (EC) stripe to a second data block; determining a first data block based on the first request, wherein the first data block is associated with the first request; (fig. 6, col. 8 lines 10-30; in performing an “optimized” direct stripe write operation, a storage control node (e.g., storage control node 140-1, FIG. 1) receives data from a host system to be written to a striped volume and allocates a first stripe (referred to herein as “interim stripe”) and a second stripe (referred to herein as “destination stripe”) in the striped volume.) and sending a processing request to a set of secondary nodes, wherein the set of secondary nodes comprises at least one secondary node in the distributed storage system, (fig. 6, col. 8 lines 10-30; The storage control node writes the received data to at least one data strip of the first stripe, computes parity data based on the data written to the first stripe, and writes the parity data to at least one parity strip of the first stripe.) and the processing request indicates to offload (col. 15; copying the interim data strips 500-1 and 500-2 of the interim stripe 500 to the corresponding data strips 510-1 and 510-2 of the destination stripe 510 using copy-offload commands, as schematically illustrated in FIG. 5) a data block update operation performed by the primary node to one or more secondary nodes in the set of secondary nodes (fig. 6, col. 8 lines 10-30; The storage control node sends a copy command to a target storage node of the plurality of storage nodes 150, which comprises the at least one data strip of the first stripe to which the received data was written, to thereby cause the target storage node to copy the at least one data strip to a data strip of the second stripe which resides on the target storage node. The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.; the examiner notes that per the applicants specification, the offload operation is merely a reading, generating parity and copying data and parity to a secondary node.).
Per claim 2, Tal discloses: wherein sending the processing request to the set of secondary nodes comprises: sending a second request comprising the second data block to a first secondary node; receiving the first data block returned by the first secondary node when the first data block is updated to the second data block; determining parity block update information based on the first data block and the second data block; and sending a third request comprising the parity block update information to a second secondary node, wherein the parity block update information is used to update a parity block (fig. 6, col. 8 lines 10-30; The storage control node sends a copy command to a target storage node of the plurality of storage nodes 150, which comprises the at least one data strip of the first stripe to which the received data was written, to thereby cause the target storage node to copy the at least one data strip to a data strip of the second stripe which resides on the target storage node. The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.;).
Per claim 3, Tal discloses: wherein sending the processing request to the set of secondary nodes comprises: sending a second request comprising the second data block to a first secondary node, wherein the second request indicates the first secondary node to update the first data block to the second data block; determining parity block update information based on the first data block and the second data block; and sending, through the first secondary node, a third request comprising the parity block update information to a second secondary node, wherein the parity block update information is used to update a parity block (fig. 5&6, col. 8 lines 10-30; The storage control node sends a copy command to a target storage node of the plurality of storage nodes 150, which comprises the at least one data strip of the first stripe to which the received data was written, to thereby cause the target storage node to copy the at least one data strip to a data strip of the second stripe which resides on the target storage node. The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.;).
Per claim 4, Tal discloses: wherein: the first data block is stored at the first secondary node, and the primary node and the first secondary node are a same node; or the parity block in the EC stripe is stored at the second secondary node, and the primary node and the second secondary node are a same node (fig. 5&6, col. 8 lines 10-30; The storage control node sends a copy command to a target storage node of the plurality of storage nodes 150, which comprises the at least one data strip of the first stripe to which the received data was written, to thereby cause the target storage node to copy the at least one data strip to a data strip of the second stripe which resides on the target storage node. The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.; the examiner is not certain how the primary and secondary nodes are the same node as the first secondary and second secondary nodes respectively. The examiner interprets the “same node” as a stripe).
Per claim 5, Tal discloses: further comprising, before obtaining the first request: obtaining a fourth request comprising a data stream; splitting data in the data stream into a plurality of data blocks, and writing the plurality of data blocks into data block storage nodes in the distributed storage system by column, wherein the data block storage nodes comprise the primary node and the first secondary node; and calculating the parity block based on each group of data blocks in the plurality of data blocks, and writing the parity block into a parity block storage node in the distributed storage system, wherein the parity block storage node comprises the second secondary node, (fig. 5&6, col. 8 lines 10-30; The storage control node sends a copy command to a target storage node of the plurality of storage nodes 150, which comprises the at least one data strip of the first stripe to which the received data was written, to thereby cause the target storage node to copy the at least one data strip to a data strip of the second stripe which resides on the target storage node. The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.; the examiner is not certain how the primary and secondary nodes are the same node as the first secondary and second secondary nodes respectively. The examiner interprets the “same node” as a stripe)wherein in response to the plurality of data blocks not being able to be fully written into at least one EC stripe, a no operation is performed on a chunk that has no data in the at least one EC stripe (fig. 5&6, col. 20 lines 1-6; The parity update process is performed with the knowledge the unused portions of the interim stripe (e.g., unused interim data strip(s) and/or unused portion of an interim data strip) are zero-filled, which eliminates the need to perform I/O read operations to read such unused portions of the interim stripe for purposes of computing updated parity information.).
Per claim 6, Tal discloses: obtaining a fifth request comprising a start address; and determining a target node based on the start address, and reading a target data block by column (fig. 4&5, col. 12 lines 1-10; The RAID 6 configuration 400 is organized in grids of data blocks, with N rows and K columns, wherein each column is a separate physical storage device (e.g., SSD device) of a different storage node, and wherein 4 data columns are used to store data strips, and two columns are used to store associated parity data strips, e.g., PQ parity data, which is computed using known techniques).
Per claim 7, Tal discloses: A computing device cluster comprising at least one computing device, the at least one computing device comprising at least one processor and at least one memory, the at least one memory storing computer-readable instructions, wherein the computer-readable instructions, when executed by the at least one processor, enable the computing device cluster to: (fig. 1, col. 3; a network computing system 100 which comprises one or more host systems 110-1, 110-2, . . . 110-H (collectively, host systems 110), a communications network 120, and a data storage system 130 (e.g., disaggregated data storage system). The data storage system 130 comprises a plurality of storage control nodes 140-1, 140-2, . . . , 140-C (collectively, storage control nodes 140), and a plurality of storage nodes 150-1, 150-2, . . . , 150-S (collectively, storage nodes 150)) obtain a first request, wherein the first request is used to update a first data block stored in an erasure coding (EC) stripe to a second data block; determine a first data block based on the first request, wherein the first data block is associated with the first request; (fig. 6, col. 8 lines 10-30; in performing an “optimized” direct stripe write operation, a storage control node (e.g., storage control node 140-1, FIG. 1) receives data from a host system to be written to a striped volume and allocates a first stripe (referred to herein as “interim stripe”) and a second stripe (referred to herein as “destination stripe”) in the striped volume.) and send a processing request to a set of secondary nodes, wherein the set of secondary nodes comprises at least one secondary node in a distributed storage system, (fig. 6, col. 8 lines 10-30; The storage control node writes the received data to at least one data strip of the first stripe, computes parity data based on the data written to the first stripe, and writes the parity data to at least one parity strip of the first stripe.) and the processing request indicates to offload (col. 15; copying the interim data strips 500-1 and 500-2 of the interim stripe 500 to the corresponding data strips 510-1 and 510-2 of the destination stripe 510 using copy-offload commands, as schematically illustrated in FIG. 5) a data block update operation performed by a primary node to one or more secondary nodes in the set of secondary nodes (fig. 6, col. 8 lines 10-30; The storage control node sends a copy command to a target storage node of the plurality of storage nodes 150, which comprises the at least one data strip of the first stripe to which the received data was written, to thereby cause the target storage node to copy the at least one data strip to a data strip of the second stripe which resides on the target storage node. The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.; the examiner notes that per the applicants specification, the offload operation is merely a reading, generating parity and copying data and parity to a secondary node.).
Claims 8-12 are the device claims corresponding to the method claims 2-6 and are rejected under the same reasons set forth in connection with the rejection of claims 2-6.
Per claim 13, Tal discloses: obtain a first request, wherein the first request is used to update a first data block stored in an erasure coding (EC) stripe to a second data block; determining a first data block based on the first request, wherein the first data block is associated with the first request; (fig. 6, col. 8 lines 10-30; in performing an “optimized” direct stripe write operation, a storage control node (e.g., storage control node 140-1, FIG. 1) receives data from a host system to be written to a striped volume and allocates a first stripe (referred to herein as “interim stripe”) and a second stripe (referred to herein as “destination stripe”) in the striped volume.) and sending a processing request to a set of secondary nodes, wherein the set of secondary nodes comprises at least one secondary node in a distributed storage system, (fig. 6, col. 8 lines 10-30; The storage control node writes the received data to at least one data strip of the first stripe, computes parity data based on the data written to the first stripe, and writes the parity data to at least one parity strip of the first stripe.) and the processing request indicates to offload (col. 15; copying the interim data strips 500-1 and 500-2 of the interim stripe 500 to the corresponding data strips 510-1 and 510-2 of the destination stripe 510 using copy-offload commands, as schematically illustrated in FIG. 5) a data block update operation performed by a primary node to one or more secondary nodes in the set of secondary nodes (fig. 6, col. 8 lines 10-30; The storage control node sends a copy command to a target storage node of the plurality of storage nodes 150, which comprises the at least one data strip of the first stripe to which the received data was written, to thereby cause the target storage node to copy the at least one data strip to a data strip of the second stripe which resides on the target storage node. The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.; the examiner notes that per the applicant’s specification, the offload operation is merely a reading, generating parity and copying data and parity to a secondary node.).
Claims 14-18 are the device claims corresponding to the method claims 2-6 and are rejected under the same reasons set forth in connection with the rejection of claims 2-6.
Per claim 19, Tal discloses: wherein the second request is an update request that indicates the first secondary node to update the first data block to the second data block and return the first data block, and wherein a return value of the update request is the first data block (fig. 6, col. 8 lines 10-30; The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.; the examiner interprets the limitation as updating parity information after the write to the second stripe).
Per claim 20, Tal discloses: wherein the third request indicates the second secondary node to read the parity block at the second secondary node, determine a new parity block based on the parity block and the parity block update information, and store the new parity block, without reading the parity block to the primary node (fig. 6, col. 8 lines 10-30; The storage control node writes additional data to the second stripe, computes updated parity data based on the additional data written to the second stripe and the parity data of the first stripe, and writes the updated parity data to at least one parity strip of the second stripe.; the examiner notes that “without reading…” is an intended result of the parity update).
Response to Arguments
Applicant's arguments filed 3/11/26 have been fully considered but they are not persuasive.
The applicant argues: Tal does not disclose this limitation. Tal is directed to an "optimized direct stripe write" operation for writing new data to a striped storage volume. Tal's operation does not update a first data block that is "stored in" an EC stripe. Instead, Tal freshly allocates both an interim stripe and a destination stripe (see Tal, 18:37-42) and writes new host data into empty data strips of the interim stripe, zero-fills the unused portions. (Tal, 18:37-42; 20:1-6). At no point does Tal identify a first data block stored in an EC stripe and update that data block to a second data block. Rather, every data strip in Tal's process is written for the first time.
Indeed, Tal's own specification expressly avoids in-place updates to existing stripes. Tal discloses a log-structured RAID array in which:
[W]hen stored data is updated, the stored (existing) data is not updated in place, rather, the updated data is written to a new location (out-of-place update) according to a log format
a log-structured RAID control system is configured to write full stripes, thus avoiding the overhead associated with updating a RAID stripe in place."
(Tal, 7:32-42; emphasis added.) Because Tal expressly avoids in-place updates and instead writes only to newly allocated stripes, Tal does not disclose obtaining a request to update a first data block stored in an EC stripe to a second data block, as required by amended claim 1.
The examiner respectfully disagrees and asserts that the claim merely requires that a first request is directed to updating a previously stored data block to a second block. The claim does not preclude writing data to a temporary or new location prior to writing a second block. The only requirement disclosed in the claim is that updating the first data block to a second data block. Tal as cited supra specifically discloses an update of a first data block to a secondary data block. The fact that the data block is temporarily stored prior to storing it permanently to a second lock is immaterial based on the claim requirement. Therefore, Tal discloses obtaining a first request, “wherein the first request is used to update a first data block stored in an erasure encoding stripe to a second data block.” If it is the applicant’s intent to distinguish the claim with the prior art by precluding and temporary storage, the examiner encourages the applicant to do so without adding new matter.
Remark
Examiner respectfully requests, in response to this Office action, support be shown for language added to any original claims on amendment and any new claims. That is, indicate support for newly added claim language by specifically pointing to page(s) and line number(s) in the specification and/or drawing figure(s). This will assist Examiner in prosecuting the application.
Conclusion
THIS ACTION IS MADE FINAL. Applicant is reminded of the extension of time policy as set forth in 37 CFR 1.136(a).
A shortened statutory period for reply to this final action is set to expire THREE MONTHS from the mailing date of this action. In the event a first reply is filed within TWO MONTHS of the mailing date of this final action and the advisory action is not mailed until after the end of the THREE-MONTH shortened statutory period, then the shortened statutory period will expire on the date the advisory action is mailed, and any nonprovisional extension fee (37 CFR 1.17(a)) pursuant to 37 CFR 1.136(a) will be calculated from the mailing date of the advisory action. In no event, however, will the statutory period for reply expire later than SIX MONTHS from the mailing date of this final action.
Any inquiry concerning this communication or earlier communications from the examiner should be directed to BABOUCARR FAAL whose telephone number is (571)270-5073. The examiner can normally be reached M-F 8:30-5:30 EST.
Examiner interviews are available via telephone, in-person, and video conferencing using a USPTO supplied web-based collaboration tool. To schedule an interview, applicant is encouraged to use the USPTO Automated Interview Request (AIR) at http://www.uspto.gov/interviewpractice.
If attempts to reach the examiner by telephone are unsuccessful, the examiner’s supervisor, Tim VO can be reached at 5712723642. The fax phone number for the organization where this application or proceeding is assigned is 571-273-8300.
Information regarding the status of published or unpublished applications may be obtained from Patent Center. Unpublished application information in Patent Center is available to registered users. To file and manage patent submissions in Patent Center, visit: https://patentcenter.uspto.gov. Visit https://www.uspto.gov/patents/apply/patent-center for more information about Patent Center and https://www.uspto.gov/patents/docx for information about filing in DOCX format. For additional questions, contact the Electronic Business Center (EBC) at 866-217-9197 (toll-free). If you would like assistance from a USPTO Customer Service Representative, call 800-786-9199 (IN USA OR CANADA) or 571-272-1000.
BABOUCARR . FAAL
Primary Examiner
Art Unit 2138
/BABOUCARR FAAL/Primary Examiner, Art Unit 2138