IP Library Granted Patent US 9,898,350
Granted Patent B2
US 9,898,350 · App. 14/903,136 · Granted Feb 20, 2018

Techniques for synchronizing operations performed on objects

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 9,898,350
App. No.
14/903,136
Granted
Feb 20, 2018
Kind
B2
Abstract

Described are techniques for synchronizing operations performed on objects. Locking tables may be received where each of the locking tables corresponds to different object class. First processing may be performed by a first thread to acquire a set of one or more locks. Each lock in the set may be a lock for one of the objects. The first processing may include traversing the locking tables in accordance with a predefined ordering and acquiring the set of one or more locks, wherein, for each lock in the set, a first entry is updated in a first of the locking tables to indicate that the first thread has acquired the lock on one of the objects included in an associated object class corresponding to the first locking table.

Claims (69)

1. A method of synchronizing operations performed on objects comprising:

receiving a plurality of locking tables, each of said plurality of locking tables corresponding to a different one of a plurality of object classes; and

performing first processing by a first thread to acquire a set of one or more locks, each lock in said set being a lock for one of the objects, said first processing including:

traversing said plurality of locking tables in accordance with a predefined ordering and acquiring the set of one or more locks, wherein, for each lock in the set, a first entry is updated in a first of said plurality of locking tables to indicate that the first thread has acquired said each lock on one of the objects included in an associated one of the plurality of object classes corresponding to said first locking table, wherein each of said plurality of locking tables is associated with a different one of a plurality of locking events which fires when said each locking table is modified, and wherein said first processing further includes:

acquiring a locking guard by said first thread;

responsive to the first thread acquiring the locking guard, determining whether one or more objects in a first of the plurality of object classes associated with a particular one of the plurality of locking tables are currently in unblocked states whereby the first thread is able to acquire one or more locks on said one or more objects of the first object class; and

if it is determined that the first thread is not able to acquire the one or more locks on the one or more objects of the first object class, performing second processing comprising:

releasing the locking guard by the first thread; and

waiting on a first of the locking events associated with the particular one of the plurality of locking tables, wherein said locking guard is any of: a single locking guard associated with said plurality of locking tables that provides exclusive access to said plurality of locking tables to any thread holding the locking guard, and a first of a plurality of locking guards associated with the plurality of locking tables where the locking guard provides exclusive access to the particular one of the plurality of locking tables to any thread holding the locking guard.

2. The method of claim 1 , wherein each of the objects represents an entity in a data storage system and wherein the entity is any of a physical or logical entity in the data storage system and includes any of a storage processor, a physical storage device, a logical device, a storage pool, a RAID group, and a storage group.

3. The method of claim 2 , wherein each of the plurality of locking tables corresponds to a different classification of physical or logical entities in the data storage system.

4. The method of claim 3 , wherein each of the objects that is included one of the object classes and is currently locked by a thread has an entry in one of the plurality of locking tables for said one object class.

5. The method of claim 4 , wherein, at any point in time, if there is no entry in said one locking table for said each object, then said each object is not currently locked by any thread.

6. The method of claim 4 , wherein said first entry in the first locking table includes state information indicating that the first thread holds said each lock on said one object.

7. The method of claim 6 , wherein said each lock is any of a read lock and a write lock.

8. The method of claim 7 , wherein said each lock is a read lock and indicates that shared read access to said one object is allowed by multiple threads whereby a subsequent attempt to concurrently acquire another read lock for said one object is allowed and a subsequent attempt to concurrently acquire a write lock for said one object is blocked.

9. The method of claim 7 , wherein said each lock is a write lock and indicates that the first thread has exclusive access to said one object whereby a subsequent attempt to concurrently acquire any of a write lock and a read lock for said one object is blocked.

10. The method of claim 6 , wherein said each lock is any of an exclusive lock and a shared lock, wherein if said each lock is an exclusive lock then a subsequent attempt to concurrently acquire any lock for said one object is blocked.

11. The method of claim 1 , wherein the objects are data storage management objects reflecting internal states of data storage system entities represented by the objects, and wherein the objects are used to control synchronization of operations performed on the data storage system entities.

12. The method of claim 1 , where said first thread is one of a plurality of threads and each of said plurality of threads acquires one or more locks for one or more objects needed by said each thread, and performs processing including:

traversing said plurality of locking tables in accordance with the predefined ordering and acquiring the one or more locks for one or more objects needed by said each thread.

13. A method of synchronizing operations performed on objects comprising:

receiving a plurality of locking tables, each of said plurality of locking tables corresponding to a different one of a plurality of object classes; and

performing first processing by a first thread to acquire a set of one or more locks, each lock in said set being a lock for one of the objects, said first processing including:

traversing said plurality of locking tables in accordance with a predefined ordering and acquiring the set of one or more locks, wherein, for each lock in the set, a first entry is updated in a first of said plurality of locking tables to indicate that the first thread has acquired said each lock on one of the objects included in an associated one of the plurality of object classes corresponding to said first locking table, wherein each of said plurality of locking tables is associated with a different one of a plurality of locking events which fires when said each locking table is modified, and wherein said first processing further includes:

acquiring a locking guard by said first thread;

responsive to the first thread acquiring the locking guard, determining whether one or more objects in a first of the plurality of object classes associated with a particular one of the plurality of locking tables are currently in unblocked states whereby the first thread is able to acquire one or more locks on said one or more objects of the first object class; and

if it is determined that the first thread is not able to acquire the one or more locks on the one or more objects of the first object class, performing second processing comprising:

releasing the locking guard by the first thread; and

waiting on a first of the locking events associated with the particular one of the plurality of locking tables, and wherein the method further includes:

modifying the particular one of the plurality of locking tables;

responsive to said modifying, firing said first locking event of the particular one of the plurality of locking tables; and

responsive to said firing, resuming execution of said first thread and performing second processing including:

acquiring the locking guard by the first thread;

determining whether the one or more objects in the first object class associated with the particular one of the plurality of locking tables are currently in unblocked states whereby the first thread is able to acquire the one or more locks on said one or more objects of the first object class;

if it is determined that the one or more objects in the first object class associated with the particular one of the plurality of locking tables are currently in unblocked states, acquiring, by said first thread, the one or more locks on the one or more objects of the first object class.

14. The method of claim 13 , wherein, for each of the one or more objects of the first object class for which the first thread acquired a lock, updating a corresponding entry in the particular one of the plurality of locking tables to indicate the first thread has acquired a lock on said each object.

15. A method of synchronizing operations performed on objects comprising:

receiving a plurality of locking tables, each of said plurality of locking tables corresponding to a different one of a plurality of object classes; and

performing first processing by a first thread to acquire a set of one or more locks, each lock in said set being a lock for one of the objects, said first processing including:

traversing said plurality of locking tables in accordance with a predefined ordering and acquiring the set of one or more locks, wherein, for each lock in the set, a first entry is updated in a first of said plurality of locking tables to indicate that the first thread has acquired said each lock on one of the objects included in an associated one of the plurality of object classes corresponding to said first locking table, wherein each of said plurality of locking tables is associated with a different one of a plurality of locking events which fires when said each locking table is modified, and wherein said first processing further includes:

acquiring a locking guard by said first thread;

responsive to the first thread acquiring the locking guard, determining whether one or more objects in a first of the plurality of object classes associated with a particular one of the plurality of locking tables are currently in unblocked states whereby the first thread is able to acquire one or more locks on said one or more objects of the first object class; and

if it is determined that the first thread is not able to acquire the one or more locks on the one or more objects of the first object class, performing second processing comprising:

releasing the locking guard by the first thread; and

waiting on a first of the locking events associated with the particular one of the plurality of locking tables, and wherein the method further comprises:

if it is determined that the first thread is able to acquire the one or more locks on the one or more objects of the first object class, performing third processing comprising:

updating the particular one of the plurality of locking tables to indicate that the first thread has acquired the one or more locks on the one or more objects of the first object class; and

releasing the locking guard by the first thread.

16. A non-transitory computer readable medium comprising code stored thereon that, when executed, performs a method of synchronizing operations performed on objects comprising:

receiving a plurality of locking tables, each of said plurality of locking tables corresponding to a different one of a plurality of object classes; and

performing first processing by a first thread to acquire a set of one or more locks, each lock in said set being a lock for one of the objects, said first processing including:

traversing said plurality of locking tables in accordance with a predefined ordering and acquiring the set of one or more locks, wherein, for each lock in the set, a first entry is updated in a first of said plurality of locking tables to indicate that the first thread has acquired said each lock on one of the objects included in an associated one of the plurality of object classes corresponding to said first locking table, wherein each of said plurality of locking tables is associated with a different one of a plurality of locking events which fires when said each locking table is modified, and wherein said first processing further includes:

acquiring a locking guard by said first thread;

responsive to the first thread acquiring the locking guard, determining whether one or more objects in a first of the plurality of object classes associated with a particular one of the plurality of locking tables are currently in unblocked states whereby the first thread is able to acquire one or more locks on said one or more objects of the first object class; and

if it is determined that the first thread is not able to acquire the one or more locks on the one or more objects of the first object class, performing second processing comprising:

releasing the locking guard by the first thread; and

waiting on a first of the locking events associated with the particular one of the plurality of locking tables, wherein said locking guard is any of: a single locking guard associated with said plurality of locking tables that provides exclusive access to said plurality of locking tables to any thread holding the locking guard, and a first of a plurality of locking guards associated with the plurality of locking tables where the locking guard provides exclusive access to the particular one of the plurality of locking tables to any thread holding the locking guard.

17. A system comprising:

a processor; and

a memory comprising code that, when executed by the processor, performs method of synchronizing operations performed on objects comprising:

receiving a plurality of locking tables, each of said plurality of locking tables corresponding to a different one of a plurality of object classes; and

performing first processing by a first thread to acquire a set of one or more locks, each lock in said set being a lock for one of the objects, said first processing including:

traversing said plurality of locking tables in accordance with a predefined ordering and acquiring the set of one or more locks, wherein, for each lock in the set, a first entry is updated in a first of said plurality of locking tables to indicate that the first thread has acquired said each lock on one of the objects included in an associated one of the plurality of object classes corresponding to said first locking table, wherein each of said plurality of locking tables is associated with a different one of a plurality of locking events which fires when said each locking table is modified, and wherein said first processing further includes:

acquiring a locking guard by said first thread;

responsive to the first thread acquiring the locking guard, determining whether one or more objects in a first of the plurality of object classes associated with a particular one of the plurality of locking tables are currently in unblocked states whereby the first thread is able to acquire one or more locks on said one or more objects of the first object class; and

if it is determined that the first thread is not able to acquire the one or more locks on the one or more objects of the first object class, performing second processing comprising:

releasing the locking guard by the first thread; and

waiting on a first of the locking events associated with the particular one of the plurality of locking tables, wherein said locking guard is any of: a single locking guard associated with said plurality of locking tables that provides exclusive access to said plurality of locking tables to any thread holding the locking guard, and a first of a plurality of locking guards associated with the plurality of locking tables where the locking guard provides exclusive access to the particular one of the plurality of locking tables to any thread holding the locking guard.

Assignments (9)
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053546/0001) Recorded Jun 23, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC IP HOLDING COMPANY LLC
Reel/Frame 071642/0001 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (043775/0082) Recorded May 20, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL PRODUCTS L.P.; EMC CORPORATION; EMC IP HOLDING COMPANY LLC
Reel/Frame 060958/0468 →
SECURITY AGREEMENT Recorded Apr 22, 2020
From: CREDANT TECHNOLOGIES INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 053546/0001 →
SECURITY AGREEMENT Recorded Mar 21, 2019
From: CREDANT TECHNOLOGIES, INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 049452/0223 →
PATENT SECURITY AGREEMENT (NOTES) Recorded Sep 6, 2017
From: DELL PRODUCTS L.P.; EMC CORPORATION; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS COLLATERAL AGENT
Reel/Frame 043775/0082 →
PATENT SECURITY AGREEMENT (CREDIT) Recorded Sep 6, 2017
From: DELL PRODUCTS L.P.; EMC CORPORATION; EMC IP HOLDING COMPANY LLC
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 043772/0750 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 16, 2017
From: EMC CORPORATION
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 042043/0087 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 3, 2017
From: EMC CORPORATION
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 041872/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 6, 2016
From: ALEXEEV, SERGEY ALEXANDROVICH; SHUSHARIN, ALEXEY VLADIMIROVICH; MOREV, ILYA KONSTANTINOVICH; ZAPOROZHTSEV, SERGEY ALEXANDROVICH
To: EMC CORPORATION
Reel/Frame 037420/0386 →