File Organization

Content in the OLRC is organized using Domains, Projects and Containers.

A diagram that shows how content is structured in OLRC 2.0. The top level is the domain, which contains projects, which have containers, which have files.

Domains

Every partner member has access to one domain, and members will only have access to their own domain. A domain will have a domain administrator, who can create users, projects, and manage permissions under that domain.

Projects

A project is a grouping of containers. A domain must contain at least one project, but can contain multiple projects.

Access to your content is most easily managed at the project level. You can assign permissions to users on projects. For example, you could have a project called “preservation” to which only preservation staff have access, and another called “scanning” to which only your digitization staff have access. Users will have access to all containers within their respective project(s). For a given project, a user can be assigned admin (project admin), read/write (member), or read-only (reader) privileges.

In Horizon, your domain and current project will be shown in the top left corner as “domain ○ project.” Expanding the drop-down menu will display the projects that you have permission to access.

The button to open a dropdown menu listing a user's projects in Horizon.

When using the Swift CLI, your project variable will be OS_PROJECT_NAME.

If you would like to delete a project, please contact us. This feature has been disabled to prevent data from being “stranded” with no ownership attached.

Containers

Containers are groupings of objects within a project. A single container can hold roughly 1 million objects.

By default, a user that has permissions for a project will have access to all containers within that project. It is possible to further restrict access to individual containers using Access Control Lists (ACLs), however these are more complex to manage. For assistance with this, please contact us.

Settings can also be customized for individual containers to protect data from being overwritten or deleted, or to make a container public.

Pseudo Folders

Object storage does not follow the traditional, hierarchical structure of a typical computer file system, and therefore, there is no concept of folders in Swift. If a directory is uploaded to the OLRC, the full path to each object in that directory is embedded in the object’s name.

As most users are more familiar with hierarchical file systems, clients that interact with object storage often mimic the hierarchical construct by displaying pseudo folders to users.

For instance, if you have a file on your local machine that is stored in a series of nested folders at:

mystuff/folder1/folder2/movie.mp4

When you upload this file, either through the browser or using the Swift CLI:

swift upload container-name mystuff/folder1/folder2/movie.mp4

Swift would simply create and store a single object called “mystuff/folder1/folder2/movie.mp4” in the container “container-name”, and this string would be the access point for the objects. The physical nested folder structure—“mystuff”, “folder1”, and “folder2”—would not be replicated in the OLRC.

Horizon and other clients that interact with OLRC storage parse the path from the object name and display pseudo folders in order to present the object to you as though a hierarchical file structure is in place. Horizon does not provide an expandable navigation pane to move between pseudo folders, so deeply nested folder structures will require clicking through all folder levels to access content in the browser.

Breadcrumb navigation showing three levels in Horizon.

Objects

Data uploaded to the OLRC is stored as an object. A given object includes:

  • The uploaded data: data can be of any format, but is typically a content object of some kind that is relatively static and unlikely to change over its lifespan
  • Metadata: including system-generated metadata and any custom metadata assigned by a user
  • A unique identifier: this is automatically assigned and is used by the system to support indexing, retrieval, and management

Objects can be stored, served, updated, and downloaded to support various use cases.