\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}


