A transactional
file system wherein multiple
file system operations may be performed as part of a user-level transaction. An application specifies that the operations on a file, or the
file system operations of a thread, should be handled as part of a transaction, and the application is given a file
handle associated with a transaction context. For file
system requests associated with a transaction context, a component within the file
system manages the operations consistent with transactional behavior. The component, which may be a resource manager for distributed transactions, provides data isolation by providing multiple versions of a file by tracking copies of pages that have changed, such that transactional readers do not receive changes to a file made by transactional writers, until the transactional writer commits the transaction and the reader reopens the file. The component also handles
namespace logging operations in a multiple-level log that facilitates
logging and
recovery. Page data is also logged separate from the main log, with a unique signature that enables the log to determine whether a page was fully flushed to disk prior to a
system crash.
Namespace isolation is provided until a transaction commits via isolation directories, whereby until committed, a transaction sees the effects of its own operations not the operations of other transactions. Transactions over a network are also facilitated via a redirector protocol.