IP Library Granted Patent US 8,635,190
Granted Patent B2
US 8,635,190 · App. 11/409,427 · Granted Jan 21, 2014

Method and system for pruned resilvering using a dirty time log

Inventors: William H. Moore (Freemont, CA); Jeffrey S. Bonwick (Los Altos, CA); Matthew A. Ahrens (San Francisco, CA)
Assignee: Oracle America, Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,635,190
App. No.
11/409,427
Granted
Jan 21, 2014
Kind
B2
Abstract

A computer readable medium includes executable instructions for resilvering a hierarchical block tree in a storage pool. Resilvering the hierarchical block tree involves traversing a branch of the hierarchical block tree only if a birth time of a parent block of the branch is greater than or equal to a lowest birth time on a dirty time log (DTL). Resilvering the hierarchical block tree further involves resilvering a child block in the branch only if the DTL comprises a birth time of the child block.

Claims (47)

1. A computer readable medium comprising executable instructions for resilvering a hierarchical block tree in a storage pool by:

selectively traversing a branch of the hierarchical block tree when a birth time of a parent block of the branch is greater than or equal to a lowest birth time on a dirty time log (DTL), wherein the DTL is configured to:

track when one or more I/O requests are not successfully completed, and

store birth times for the one or more I/O requests that are not successfully completed, wherein the stored birth times are equivalent to birth times that would have been associated with a successful write to disk; and

resilvering a child block of a plurality of child blocks in the branch when the DTL comprises a birth time of the child block, wherein a birth time of each child block of the plurality of child blocks is less than or equal to the birth time of the parent block,

wherein the parent block comprises the birth time of the child block, and

wherein the DTL is updated only once when more than one I/O request for the child block and the parent block fail at a same birth time.

2. The computer readable medium of claim 1 , wherein the birth time of the parent block corresponds to a transaction group associated with an input/output (I/O) request to store the parent block.

3. The computer readable medium of claim 1 , wherein the birth time of the child block corresponds to a transaction group associated with an input/output (PO) request to store the child block.

4. The computer readable medium of claim 1 , wherein the DTL is associated with a first disk in the storage pool, and wherein resilvering the child block comprises updating the child block using data from a second disk in the storage pool.

5. The computer readable medium of claim 1 , wherein the traversing comprises performing a depth-first traversal of the branch.

6. The computer readable medium of claim 1 , further comprising executable instructions for resilvering a hierarchical block tree in a storage pool by:

resilvering the parent block only if the DTL comprises the birth time of the parent block.

7. A method for resilvering a hierarchical block tree in a storage pool, the method comprising:

obtaining, using a processor, a birth time of each child block of a plurality of child blocks referenced by a parent block in the hierarchical block tree, wherein the birth time of each child block of the plurality of child blocks is less than or equal to a birth time of the parent block; and

for each child block:

a) resilvering, using the processor, the child block when a dirty time log (DTL) comprises the birth time of the child block, wherein the DTL is configured to:

track when one or more I/O requests are not successfully completed, and

store birth times for the one or more I/O requests that are not successfully completed, wherein the birth times are equivalent to birth times that would have been associated with a successful write to disk; and

b) when the birth time of the child block is greater than or equal to a lowest birth time on the DTL:

selectively traversing, using the processor, the hierarchical block tree to obtain a birth time of each grandchild block referenced by the child block, when the child block is an indirect block; and

repeating a) and b) for each grandchild block, if the child block is an indirect block,

wherein the parent block comprises the birth time of the child block, and

wherein the DTL is updated only once when more than one I/O request for the child block and the parent block fail at a same birth time.

8. The method of claim 7 , wherein the birth time of the child block corresponds to a transaction group associated with an input/output (I/O) request to store the child block.

9. The method of claim 7 , wherein the grandchild block is a data block.

10. The method of claim 7 , wherein the DTL is associated with a first disk in the storage pool, and wherein resilvering the child block comprises updating the child block using data from a second disk in the storage pool.

11. The method of claim 7 , wherein the birth time of each child block is obtained only if the birth time of the parent block is greater than or equal to the lowest birth time on the DTL.

12. The method of claim 7 , wherein the hierarchical block tree corresponds to a file in a file system.

13. A computer system comprising:

a processor;

a memory;

a hierarchical block tree in a storage pool, comprising:

a parent block of a branch of the hierarchical block tree; and

a child block of a plurality of child blocks in the branch, wherein a birth time of each child block of the plurality of child blocks is less than or equal to a birth time of the parent block;

a dirty time log (DTL) configured to:

track when one or more I/O requests are not successfully completed, and

store birth times for the one or more I/O requests that are not successfully completed, wherein the stored birth times are equivalent to birth times that would have been associated with a successful write to disk; and

a file system, wherein at least a portion of the file system is resident in the memory and operating under control of the processor, configured to:

selectively traverse the branch when the birth time of the parent block is greater than or equal to a lowest birth time on the DTL; and

resilver the child block when the DTL comprises a birth time of the child block,

wherein the parent block comprises the birth time of the child block, and

wherein the DTL is updated only once when more than one I/O request for the child block and the parent block fail at a same birth time.

14. The computer system of claim 13 , wherein the birth time of the parent block corresponds to a transaction group associated with an input/output (I/O) request to store the parent block.

15. The computer system of claim 13 , wherein the birth time of the child block corresponds to a transaction group associated with an input/output (I/O) request to store the child block.

16. The computer system of claim 13 , wherein the DTL is associated with a first disk in the storage pool, and wherein resilvering the child block comprises updating the child block using data from a second disk in the storage pool.

17. The computer system of claim 13 , wherein the file system is configured to traverse the branch by performing a depth-first traversal of the branch.

Assignments (2)
MERGER AND CHANGE OF NAME Recorded Dec 16, 2015
From: ORACLE USA, INC.; SUN MICROSYSTEMS, INC.; ORACLE AMERICA, INC.
To: ORACLE AMERICA, INC.
Reel/Frame 037311/0233 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 19, 2006
From: MOORE, WILLIAM H.; BONWICK, JEFFREY S.; AHRENS, MATTHEW A.
To: SUN MICROSYSTEMS, INC.
Reel/Frame 017816/0876 →
Continuity (2)
Provisional Application 60734023 · Nov 4, 2005
Related Publication 20070106677A1 · May 10, 2007