[BACK]Return to FileSystem.h CVS log [TXT][DIR] Up to [Development] / fam / fam

Annotation of fam/fam/FileSystem.h, Revision 1.1.1.1

1.1       trev        1: //  Copyright (C) 1999 Silicon Graphics, Inc.  All Rights Reserved.
                      2: //
                      3: //  This program is free software; you can redistribute it and/or modify it
                      4: //  under the terms of version 2 of the GNU General Public License as
                      5: //  published by the Free Software Foundation.
                      6: //
                      7: //  This program is distributed in the hope that it would be useful, but
                      8: //  WITHOUT ANY WARRANTY; without even the implied warranty of
                      9: //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  Further, any
                     10: //  license provided herein, whether implied or otherwise, is limited to
                     11: //  this program in accordance with the express provisions of the GNU
                     12: //  General Public License.  Patent licenses, if any, provided herein do not
                     13: //  apply to combinations of this program with other product or programs, or
                     14: //  any other product whatsoever.  This program is distributed without any
                     15: //  warranty that the program is delivered free of the rightful claim of any
                     16: //  third person by way of infringement or the like.  See the GNU General
                     17: //  Public License for more details.
                     18: //
                     19: //  You should have received a copy of the GNU General Public License along
                     20: //  with this program; if not, write the Free Software Foundation, Inc., 59
                     21: //  Temple Place - Suite 330, Boston MA 02111-1307, USA.
                     22:
                     23: #ifndef FileSystem_included
                     24: #define FileSystem_included
                     25:
                     26: #include "ClientInterest.h"
                     27: #include "Request.h"
                     28: #include "Set.h"
                     29:
                     30: struct mntent;
                     31: struct stat;
                     32:
                     33: //  FileSystem is the abstract base class for a per-filesystem object.
                     34: //  A FileSystem has two monitoring interfaces: high level and low
                     35: //  level.  It also maintains a set of all ClientInterests on the
                     36: //  file system
                     37: //
                     38: //  It also has miscellaneous access functions:
                     39: //
                     40: //	dir() returns the mount point.
                     41: //
                     42: //	fsname() returns the device name.
                     43: //
                     44: //	matches() tests whether a given struct mntent describes the
                     45: //	current filesystem.
                     46: //
                     47: //	interests() returns a set of all ClientInterests on the
                     48: //	filesystem.
                     49: //
                     50: //  A FileSystem also can relocate its interests (after it's been
                     51: //  dismounted or another FileSystem has been mounted on it), by calling
                     52: //  relocate_interests().  This checks all Interests to see what FileSystem
                     53: //  they're on, and moves them appropriately.
                     54: //
                     55: //  The high level interface supports monitoring a file whether it
                     56: //  exists or not, and can monitor all entries in a directory.
                     57: //  The high level interface corresponds to what fam can rely
                     58: //  on from a remote fam on an NFS server.
                     59: //
                     60: //  The high level interface is:
                     61: //
                     62: //	monitor()
                     63: //	cancel()
                     64: //	hl_suspend()
                     65: //	hl_resume()
                     66: //	hl_map_path()
                     67: //
                     68: //  See the strong resemblance to FAM's client interface? (-:
                     69: //  hl_map_path() maps a local pathname to a remote pathname.
                     70: //  For a local FileSystem, this is trivial.  For a remote
                     71: //  file system, it's less trivial.
                     72: //
                     73: //  The low level interface monitors a single filesystem entity
                     74: //  and must be informed if the entity is a special file or does
                     75: //  not exist.  The low level interface corresponds to what fam
                     76: //  needs for local files.
                     77: //
                     78: //  The low level interface is:
                     79: //
                     80: //	ll_monitor()		start monitoring an interest.
                     81: //	ll_notify_created()	notify the FS that the interest was deleted.
                     82: //	ll_notify_deleted()	notify the FS that the interest was created.
                     83: //
                     84: //  The two subclasses of FileSystem are LocalFileSystem and
                     85: //  NFSFileSystem.  LocalFileSystem implements the low level
                     86: //  interface.  NFSFileSystem implements the high level interface.
                     87:
                     88: class FileSystem {
                     89:
                     90: public:
                     91:
                     92:     typedef Set<ClientInterest *> Interests;
                     93:
                     94:     FileSystem(const mntent&);
                     95:     virtual ~FileSystem();
                     96:
                     97:     //  Miscellaneous routines
                     98:
                     99:     bool matches(const mntent& m) const;
                    100:     const char *dir() const		{ return mydir; }
                    101:     const char *fsname() const		{ return myfsname; }
                    102:     const Interests& interests()	{ return myinterests; }
                    103:     virtual bool dir_entries_scanned() const = 0;
                    104:     void relocate_interests();
                    105:     virtual int get_attr_cache_timeout() const = 0;
                    106:
                    107:     //  High level monitoring interface
                    108:
                    109:     Request      monitor(ClientInterest *, ClientInterest::Type);
                    110:     void         cancel(ClientInterest *, Request);
                    111:     virtual void hl_suspend(Request) = 0;
                    112:     virtual void hl_resume(Request) = 0;
                    113:     virtual void hl_map_path(char *remote_path, const char *local_path,
                    114: 			     const Cred& cr) = 0;
                    115:
                    116:     //  Low level monitoring interface
                    117:
                    118:     virtual void ll_monitor(Interest *, bool imonitored) = 0;
                    119:     virtual void ll_notify_created(Interest *) = 0;
                    120:     virtual void ll_notify_deleted(Interest *) = 0;
                    121:
                    122: private:
                    123:
                    124:     //  Instance Variables
                    125:
                    126:     char *mydir;
                    127:     char *myfsname;
                    128:     Interests myinterests;
                    129:
                    130:     virtual Request hl_monitor(ClientInterest *, ClientInterest::Type) = 0;
                    131:     virtual void    hl_cancel(Request) = 0;
                    132:
                    133: };
                    134:
                    135: #endif /* !FileSystem_included */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>