Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
pvfs2-osd/doc/design/pvfs2-trove-usage.tex
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
138 lines (100 sloc)
4.44 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\documentclass[10pt]{article} % FORMAT CHANGE | |
\usepackage[dvips]{graphicx} | |
\usepackage{times} | |
\graphicspath{{./}{figs/}} | |
% | |
% GET THE MARGINS RIGHT, THE UGLY WAY | |
% | |
% \topmargin 0.2in | |
% \textwidth 6.5in | |
% \textheight 8.75in | |
% \columnsep 0.25in | |
% \oddsidemargin 0.0in | |
% \evensidemargin 0.0in | |
% \headsep 0.0in | |
% \headheight 0.0in | |
\pagestyle{plain} | |
\addtolength{\hoffset}{-2cm} | |
\addtolength{\textwidth}{4cm} | |
\addtolength{\voffset}{-1.5cm} | |
\addtolength{\textheight}{3cm} | |
\setlength{\parindent}{0pt} | |
\setlength{\parskip}{11pt} | |
\title{Trove and PVFS2} | |
\author{PVFS Development Team} | |
% \date{December 2000} | |
\begin{document} | |
\maketitle | |
\section{Motivation and Goals} | |
The purpose of this document is to describe the use of Trove in PVFS2. | |
PVFS2 deals with four basic types of objects: | |
\begin{itemize} | |
\item directories | |
\item metafiles | |
\item datafiles | |
\item symlinks | |
\end{itemize} | |
We will discuss how Trove is used to store these objects in the upcoming | |
sections. Additionally we will cover how PVFS2 bootstraps from the Trove | |
perspective; that is, how it obtains a ``root handle'' and so on. | |
\section{Current Implementation (03/21/2003)} | |
This section describes the implementation as of the date above. Eventually, | |
when the implementation catches up with the long term plan, this entire | |
section will probably disappear. | |
\subsection{PVFS2 Objects} | |
At this time the type of an object is stored in at least one place, the | |
dataspace attributes. These can be retrieved using | |
\texttt{job\_trove\_dspace\_getattr}. Additionally, as we will see, | |
directories and metafiles store metadata as keyvals. | |
Directories are of type \texttt{PVFS\_TYPE\_DIRECTORY}. They are actually | |
stored as two dataspaces in the current implementation. | |
% | |
The first dataspace is used solely to store the attributes of the directory | |
(under the key \texttt{metadata}, as a \texttt{PVFS\_object\_attr} structure) | |
and, if entries have been created, the handle of a second dataspace where the | |
directory entries are stored (under the key \texttt{dir\_ent}, as a | |
\texttt{PVFS\_handle} type). | |
% | |
The second dataspace is marked as type \texttt{PVFS\_TYPE\_DIRDATA} to | |
differentiate it. This one holds the directory entries, with keys being | |
short names of files in the directory and values being the corresponding handle | |
(stored as a \texttt{PVFS\_handle} type). This dataspace is created lazily | |
when the first entry is created (in the \texttt{crdirent} state machine). | |
Metafiles are made up of a single dataspace and are of type | |
\texttt{PVFS\_TYPE\_METAFILE}. Basic attributes | |
are stored in a keyval under the key \texttt{metadata}, as a | |
\texttt{PVFS\_object\_attr} structure, just as in the directory case. | |
An additional keyval (\texttt{datafile\_handles}) stores the array of datafile | |
handles as \texttt{PVFS\_handle} types. A final keyval | |
(\texttt{metafile\_dist}) stores the distribution information (in some | |
arbitrary format at this time). | |
Datafiles are made up of a single Trove dataspace of type | |
\texttt{PVFS\_TYPE\_DATAFILE}. Currently there are no attributes stored for | |
datafiles, and all data is stored in the bstream. | |
Symlinks are not currently implemented, but the intention is to use a keyval | |
to hold the target of the link. | |
\subsection{Bootstrapping} | |
WHERE DO WE GET THE ROOT HANDLE? | |
WHAT ELSE? | |
\section{Long Term Plan} | |
This section describes the (probably moving) target for how we will use Trove | |
to store PVFS2 objects. Eventually, as we progress, this will start to | |
describe interesting things such as storing small files in the metafile... | |
\subsection{PVFS2 Objects} | |
The biggest overall change is the move to using dataspace attributes for | |
storing basic metadata for PVFS2 objects. | |
Directories are made up of a single dataspace. Dataspace attributes are used | |
to store basic metadata. Keyvals in the dataspace are used to store the | |
directory entries in (short name, handle) format as before. | |
Metafiles are made up of a single dataspace. Basic metadata is stored in the | |
dataspace attributes as with directories. The keyval space is used to store | |
additional attributes, including the list of datafile handles (TODO: WHAT | |
ELSE?). | |
Datafiles are made up of a single Trove dataspace, with basic metadata stored | |
in the dataspace attributes and data stored in the bstream (TODO: WHAT KEY?). | |
Symlinks are made up of a single Trove dataspace with basic metadata (if any?) | |
stored in the dataspace attributes and target stored as a keyval (TODO: WHAT KEY?). | |
\subsection{Bootstrapping} | |
WHERE DO WE GET THE ROOT HANDLE? | |
WHAT ELSE? | |
\end{document} | |