IP Library Granted Patent US 10,303,383
Granted Patent B1
US 10,303,383 · App. 15/374,991 · Granted May 28, 2019

System and method for implementing non-blocking, concurrent hash tables

Inventor: Bryan Karr (Fort Collins, CO)
Assignee: TRAVELPORT, LP
G06F3/0631G06F3/0607G06F3/0673G06F16/2255G06F17/3033
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 10,303,383
App. No.
15/374,991
Granted
May 28, 2019
Kind
B1
Abstract

A computer-implemented method of resizing a data structure includes storing a first hash index comprising x elements, wherein x is a positive integer greater than two, determining that the first hash index needs to expand, allocating a second hash index, wherein the second index contains at least x+1 elements, attempting, by a first thread, to advance a first pointer from the first hash index to the second hash index, attempting, by a second thread, to advance the first pointer from the first hash index to the second hash index, where only one of the first thread or the second thread will advance the first pointer based on an atomic operation.

Claims (47)

1. A computer-implemented method of resizing a hash index data structure, the method comprising:

storing a first hash index comprising x elements, wherein x is a positive integer greater than two;

creating an update counter and bit map in a cache line block structure associated with the hash index, the update counter atomically incremented in response to a bit map value being modified, the bit map indicating which elements are occupied by a value;

determining that the first hash index needs to expand;

allocating a second hash index, wherein the second index contains at least x+1 elements;

attempting, by a first thread, to advance a first pointer from the first hash index to the second hash index; and

attempting, by a second thread, to advance the first pointer from the first hash index to the second hash index;

wherein only one of the first thread or the second thread will advance the first pointer based on an atomic operation.

2. The method of claim 1 , further comprising advancing the first pointer from the first hash index to the second hash index using a compare and swap.

3. The method of claim 1 , wherein determining that the hash index needs to expand comprises determining an overflow condition of the hash index.

4. The method of claim 1 , wherein, when x>3, the second hash index contains a quantity of elements equal to x times y, where y=2 or a positive multiple of 2.

5. The method of claim 1 , wherein a write operation is performed on an element of the second hash index because the last element of the first hash index is occupied by a value.

6. The method of claim 1 , wherein added write operations are blocked to the first hash index.

7. The method of claim 1 , wherein a fill pointer in a hash set is directed from the first hash index to the second hash index.

8. The method of claim 1 , wherein a current element of the first hash index is determined by performing a modulo operation wherein the numerator is derived from a value in an index field and the divisor equals x.

9. The method of claim 8 , wherein the current element represents a logical position corresponding to a value in an index field.

10. The method of claim 1 , wherein the first hash index and second hash index are associated based on a linked list data structure.

11. The method of claim 1 , further comprising storing at least one queue attribute that points to at least one attribute of a first hash index, wherein the at least one queue attribute includes one or more of:

a head pointer,

a read pointer, or

a value corresponding to a quantity of accessors.

12. The method of claim 1 , further comprising blocking added write operations to the first hash index.

13. A computer-implemented method of resizing a data structure, the method comprising:

setting a field of a first hash index to block a thread from finding an empty slot in a bucket in the first hash index;

creating an update counter and a bit map in a cache line block structure associated with the first hash index, the update counter atomically incremented in response to a bit map value being modified, and the bit map indicating which elements are occupied by a value;

attempting to allocate a second hash index, wherein the second hash index is greater in size than the first hash index;

attempting to allocate a third hash index, wherein the third hash index is greater in size than the first hash index;

linking the second hash index to the first hash index;

and

deallocating the third hash index.

14. The method of claim 13 , wherein linking the second hash index to the first hash index comprises setting a local variable equal to a next pointer of the first hash index, and wherein if the next pointer of the first hash index is empty, attempting to update the next pointer of the first hash index to the second hash index, and advancing a write pointer from the first hash index to the second hash index.

15. The method of claim 13 , wherein if the attempt to allocate the second hash index was unsuccessful, return a result indicating that there is not sufficient memory.

16. The method of claim 15 , wherein if the compare and swap operation with the second hash index was successful, advancing the write pointer of the first hash index to the second hash index and free the second hash index.

17. The method of claim 13 , wherein if the next pointer of the first hash index is not empty, determine whether a compare and swap operation with the second hash index was successful.

18. A computer-implemented method of resizing a hash index data structure, the method comprising:

storing a first hash index comprising x elements, wherein x is a positive integer greater than two;

creating an update counter and a bit map in a cache line block structure associated with the first hash index, the update counter atomically incremented in response to a bit map value being modified, and the bit map indicating which elements are occupied by a value;

determining that the first hash index needs to expand; and

allocating a second hash index, wherein the second index contains at least x+1 elements; and

allocating a third hash index, wherein the third index contains at least x+1 elements; and

advancing a first pointer from the first hash index to the second hash index; and

deallocating the third hash index.

19. The method of claim 18 , wherein the first hash index and second hash index are associated based on a linked list data structure.

20. The method of claim 18 , further comprising storing at least one queue attribute that points to at least one attribute of the first hash index, wherein the at least one queue attribute includes one or more of:

a head pointer,

a read pointer, or

a value corresponding to a quantity of accessors.

Assignments (25)
GRANT OF SECURITY INTEREST IN PATENT RIGHTS Recorded Mar 24, 2026
From: TRAVELPORT INTERNATIONAL OPERATIONS LIMITED; DEEM, INC.; TRAVELPORT OPERATIONS, INC.; TRAVELPORT, LP
To: WILMINGTON SAVINGS FUND SOCIETY, FSB, AS COLLATERAL AGENT
Reel/Frame 075214/0231 →
RELEASE OF SECURITY INTEREST Recorded Dec 29, 2023
From: WILMINGTON TRUST, NATIONAL ASSOCIATION
To: TRAVELPORT, LP; TRAVELPORT INTERNATIONAL OPERATIONS LIMITED; DEEM, INC.
Reel/Frame 066140/0556 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS Recorded Dec 28, 2023
From: WILMINGTON SAVINGS FUND SOCIETY, FSB
To: TRAVELPORT, LP; TRAVELPORT INTERNATIONAL OPERATIONS LIMITED; DEEM, INC.; TRAVELPORT, INC.; TRAVELPORT OPERATIONS, INC.
Reel/Frame 066157/0732 →
SECURITY INTEREST Recorded Dec 4, 2023
From: TRAVELPORT, LP; TRAVELPORT INTERNATIONAL OPERATIONS LIMITED; DEEM, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 065762/0267 →
SECURITY INTEREST Recorded May 25, 2023
From: TRAVELPORT TECHNOLOGIES LLC
To: TRAVELPORT TECHNOLOGIES HOLDINGS LLC
Reel/Frame 063764/0092 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 5, 2023
From: TRAVELPORT TECHNOLOGIES HOLDINGS LLC
To: TRAVELPORT, LP
Reel/Frame 063556/0755 →
GRANT OF SECURITY INTEREST IN PATENT RIGHTS Recorded Mar 30, 2023
From: TRAVELPORT, LP [COMPOSED OF: TRAVELPORT HOLDINGS, LLC]; TRAVELPORT INTERNATIONAL OPERATIONS LIMITED; DEEM, INC.; TRAVELPORT, INC.; TRAVELPORT OPERATIONS, INC.
To: WILMINGTON SAVINGS FUND SOCIETY, FSB
Reel/Frame 063197/0551 →
RELEASE OF SECURITY INTEREST Recorded Oct 9, 2020
From: WILMINGTON SAVINGS FUND SOCIETY, FSB, AS COLLATERAL AGENT
To: TRAVELPORT, LP; TRAVELPORT INTERNATIONAL OPERATIONS LIMITED
Reel/Frame 054016/0938 →
RELEASE OF SECURITY INTEREST Recorded Sep 25, 2020
From: UMB BANK, NATIONAL ASSOCIATION
To: TRAVELPORT TECHNOLOGIES LLC
Reel/Frame 053888/0968 →
SECURITY INTEREST Recorded Sep 25, 2020
From: TRAVELPORT INTERNATIONAL OPERATIONS LIMITED; TRAVELPORT TECHNOLOGIES LLC
To: WILMINGTON SAVINGS FUND SOCIETY, FSB
Reel/Frame 053889/0722 →
SECURITY INTEREST Recorded Sep 25, 2020
From: TRAVELPORT INTERNATIONAL OPERATIONS LIMITED; TRAVELPORT TECHNOLOGIES LLC
To: WILMINGTON SAVINGS FUND SOCIETY, FSB
Reel/Frame 053890/0852 →
ASSIGNMENT OF PATENT SECURITY INTERESTS (2ND LIEN) Recorded Jun 29, 2020
From: BANK OF AMERICA, N.A.
To: WILMINGTON SAVINGS FUND SOCIETY, FSB, AS SUCCESSOR ADMINISTRATIVE AGENT AND SUCCESSOR COLLATERAL AGENT
Reel/Frame 053080/0430 →
ASSIGNMENT OF PATENT SECURITY INTERESTS (1ST LIEN) Recorded Jun 29, 2020
From: BANK OF AMERICA, N.A.
To: WILMINGTON SAVINGS FUND SOCIETY, FSB, AS SUCCESSOR ADMINISTRATIVE AGENT AND SUCCESSOR COLLATERAL AGENT
Reel/Frame 053080/0298 →
SECURITY INTEREST Recorded Jun 5, 2020
From: TRAVELPORT TECHNOLOGIES LLC
To: UMB BANK, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 052852/0587 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 5, 2020
From: TRAVELPORT TECHNOLOGIES HOLDINGS LLC
To: TRAVELPORT TECHNOLOGIES LLC
Reel/Frame 052569/0640 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 5, 2020
From: TRAVELPORT, LP
To: TRAVELPORT TECHNOLOGIES HOLDINGS LLC
Reel/Frame 052569/0506 →
RELEASE OF SECURITY INTEREST Recorded Jun 14, 2019
From: GOLDMAN SACHS BANK USA
To: TRAVELPORT, LP; TRAVELPORT INC.; TRAVELPORT OPERATIONS, INC.; GALILEO INTERNATIONAL TECHNOLOGY, LLC
Reel/Frame 049469/0262 →
RELEASE OF SECURITY INTEREST Recorded Jun 14, 2019
From: US BANK
To: TRAVELPORT, LP; TRAVELPORT, INC.; TRAVELPORT OPERATIONS, INC.; GALILEO INTERNATIONAL TECHNOLOGY, LLC
Reel/Frame 049469/0269 →
SECOND LIEN SECURITY AGREEMENT Recorded Jun 5, 2019
From: TRAVELPORT, LP
To: BANK OF AMERICA, N.A.
Reel/Frame 049372/0777 →
FIRST LIEN SECURITY AGREEMENT Recorded Jun 4, 2019
From: TRAVELPORT, LP
To: BANK OF AMERICA, N.A.
Reel/Frame 049368/0703 →
RELEASE OF SECURITY INTEREST Recorded Mar 18, 2018
From: GOLDMAN SACHS BANK USA
To: GALILEO INTERNATIONAL TECHNOLOGY, LLC; TRAVELPORT, LP; TRAVELPORT INC.; TRAVELPORT OPERATIONS, INC.
Reel/Frame 045263/0772 →
SECURITY INTEREST Recorded Mar 18, 2018
From: TRAVELPORT, LP; TRAVELPORT OPERATIONS, INC.; TRAVELPORT INC.; GALILEO INTERNATIONAL TECHNOLOGY, LLC
To: GOLDMAN SACHS BANK USA
Reel/Frame 045263/0779 →
SECURITY INTEREST Recorded Mar 16, 2018
From: TRAVELPORT, LP; TRAVELPORT OPERATIONS, INC.; TRAVELPORT INC.; GALILEO INTERNATIONAL TECHNOLOGY, LLC
To: U.S. BANK, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 045257/0659 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 2, 2017
From: KARR, BRYAN
To: TRAVELPORT, LP
Reel/Frame 044018/0747 →
SECURITY INTEREST Recorded Aug 1, 2017
From: TRAVELPORT, LP
To: GOLDMAN SACHS BANK USA
Reel/Frame 043160/0909 →
Continuity (1)
Provisional Application 62265006 · Dec 9, 2015
Cited By (1)
US 12,360,985