IP Library Granted Patent US 9,710,535
Granted Patent B2
US 9,710,535 · App. 14/820,471 · Granted Jul 18, 2017

Object storage system with local transaction logs, a distributed namespace, and optimized support for user directories

Inventors: Alexander Aizman (Mountain View, CA); Caitlin Bestler (Sunnyvale, CA); Robert E. Novak (Tracy, CA)
Assignee: Nexenta Systems, Inc.
G06F17/30578G06F17/30159G06F17/30174G06F17/30215G06F17/30221H04L9/3239H04L2209/34
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,710,535
App. No.
14/820,471
Granted
Jul 18, 2017
Kind
B2
Abstract

The present invention relates to object storage systems that support hierarchical directories within a namespace manifest stored as an object. The namespace manifest is stored as namespace manifest shards that are determined based on a partial key derived from the full name of the referenced version manifest in each directory entry. Each storage server maintains a local transaction log that keeps track of changes to the namespace manifest in response to put transactions. The namespace manifest can be updated after each put transaction is acknowledged, which minimizes the number of write operations required for a put transaction. Updates to the namespace manifest are batched, distributed, and processed concurrently and in parallel by the storage servers that store the corresponding shards. This reduces the latency that would otherwise exist in the object storage cluster as a result of a put transaction. Updates to namespace manifest shards optionally occur in a batch process using MapReduce techniques.

Claims (34)

1. A method for a storage server within an object storage system to process a put transaction for a new version of an object associated with a new version manifest chunk, wherein the storage server contains an old version of the object associated with an old version manifest chunk, the method comprising:

validating the new version manifest chunk;

saving the new version manifest chunk to persistent storage;

comparing a unique version identifier for the new version manifest with a unique version identifier for the old version manifest stored in a local name index and updating a local name index for the object's name if the unique version identifier for the new version manifest is more current than the unique version identifier for the old version manifest stored in the local name index;

creating an entry in the storage server's local transaction log recording the existence of the new version manifest;

sending an acknowledgement message for the put transaction; and

asynchronously processing the entry to update one or more namespace manifests of the object storage system;

wherein each transaction log entry specifying creation or deletion of version manifests is mapped into records to be distributed to namespace manifests, wherein the mapped records comprise inclusive mapped records and iterative mapped records; and

wherein the inclusive mapped records each comprises type, enclosing directory name, the remaining portion of the fully qualified object name which is not part of the enclosing directory name, unique version identifier, and cryptographic hash identifying token of the version manifest, wherein the type comprises data indicating a version manifest exists or data indicating a version manifest does not exist.

2. A method for a storage server within an object storage system to process a put transaction for a new version of an object associated with a new version manifest chunk, wherein the storage server contains an old version of the object associated with an old version manifest chunk, the method comprising:

validating the new version manifest chunk;

saving the new version manifest chunk to persistent storage;

comparing a unique version identifier for the new version manifest with a unique version identifier for the old version manifest stored in a local name index and updating a local name index for the object's name if the unique version identifier for the new version manifest is more current than the unique version identifier for the old version manifest stored in the local name index;

creating an entry in the storage server's local transaction log recording the existence of the new version manifest;

sending an acknowledgement message for the put transaction; and

asynchronously processing the entry to update one or more namespace manifests of the object storage system;

wherein each transaction log entry specifying creation or deletion of version manifests is mapped into records to be distributed to namespace manifests, wherein the mapped records comprise inclusive mapped records and iterative mapped records; and

wherein each iterative mapped record comprises type, enclosing directory name, and the immediate sub-directory name relative to the enclosing directory.

3. A method for a storage server within an object storage system to process a put transaction for a new version of an object associated with a new version manifest chunk, wherein the storage server contains an old version of the object associated with an old version manifest chunk, the method comprising:

validating the new version manifest chunk;

saving the new version manifest chunk to persistent storage;

comparing a unique version identifier for the new version manifest with a unique version identifier for the old version manifest stored in a local name index and updating a local name index for the object's name if the unique version identifier for the new version manifest is more current than the unique version identifier for the old version manifest stored in the local name index;

creating an entry in the storage server's local transaction log recording the existence of the new version manifest;

sending an acknowledgement message for the put transaction; and

asynchronously processing the entry to update one or more namespace manifests of the object storage system;

wherein each transaction log entry specifying creation or deletion of version manifests is mapped into records to be distributed to namespace manifests, wherein the mapped records comprise inclusive mapped records and iterative mapped records; and

wherein each mapped record is assigned to a specific namespace manifest by a configuration rule assigning subsets of the entire namespace to specific namespace manifests, and to a specific shard of that namespace manifest, by the cryptographic hash of the enclosing path name.

4. The method of claim 3 , wherein each of the mapped records assigned to a batch based upon its assigned namespace shard; and wherein the collected batches are eventually dispatched to and merged with a target namespace shard.

5. The method of claim 4 , wherein the storage server that stores a namespace shard performs the merge of the batches of mapped records to create a new chunk for the namespace shard.

6. The method of claim 4 , wherein each transaction log entry specifying creation or deletion of version manifests is mapped into back-reference edit records to be distributed to storage servers, wherein the back-reference edit records comprise:

the content hash identifying token (CHIT) of the referenced chunk;

the CHIT of the referencing manifest; and

the effective replication count required of this chunk by the referencing manifest, wherein an effective replication count of zero indicates that the chunk is no longer required by this referencing manifest.

7. The method of claim 6 , wherein each storage server assigns the generated back-reference edit records to a corresponding target Negotiating Group and dispatches the resulting batch of back-reference edit records to the target Negotiating Group.

Assignments (4)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 4, 2019
From: NEXENTA SYSTEMS, INC.
To: NEXENTA BY DDN, INC.
Reel/Frame 050624/0524 →
RELEASE OF SECURITY INTEREST Recorded Mar 8, 2018
From: SILICON VALLEY BANK
To: NEXENTA SYSTEMS, INC.
Reel/Frame 045144/0872 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 2, 2017
From: AIZMAN, ALEXANDER; BESTLER, CAITLIN; NOVAK, ROBERT E.
To: NEXENTA SYSTEMS, INC.
Reel/Frame 042212/0877 →
SECURITY INTEREST Recorded Nov 9, 2016
From: NEXENTA SYSTEMS, INC.
To: SILICON VALLEY BANK
Reel/Frame 040270/0049 →
Continuity (12)
Continuation In Part 14258791 · Apr 22, 2014
Continuation 13624593 · Sep 21, 2012
Continuation In Part 13029342 · Aug 12, 2011
Continuation In Part 13415742 · Mar 8, 2012
Continuation In Part 14820471
Continuation In Part 14095839 · Dec 3, 2013
Continuation In Part 14095843 · Dec 3, 2013
Continuation In Part 14095848 · Dec 3, 2013
Continuation In Part 14095855 · Dec 3, 2013
Provisional Application 62040962 · Aug 22, 2014
Provisional Application 62098727 · Dec 31, 2014
Related Publication 20150347553A1 · Dec 3, 2015