Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

QuorumSystem.h

00001 /*
00002  * Copyright 2003 Michael A. Marsh, Cornell University. All rights reserved.
00003  * This software is released under the modified BSD license.
00004  * See the file LICENSE in the top-level directory for details.
00005  */
00006 //
00007 // $Id: QuorumSystem.h,v 1.3 2004/05/19 15:56:55 mmarsh Exp $
00008 //
00009 // $Log: QuorumSystem.h,v $
00010 // Revision 1.3  2004/05/19 15:56:55  mmarsh
00011 // *** empty log message ***
00012 //
00013 // Revision 1.2  2003/11/04 22:17:23  mmarsh
00014 // General code cleanup.
00015 //
00016 //
00017 
00018 #ifndef __CODEX_QUORUM_QUORUMSYSTEM_H__
00019 #define __CODEX_QUORUM_QUORUMSYSTEM_H__
00020 
00021 #include <vector>
00022 #include <algorithm>
00023 #include <map>
00024 
00025 #include "Message.h"
00026 #include "RemoteServer.h"
00027 #include "ResponseTracker.h"
00028 #include "MessageDispatcher.h"
00029 
00065 namespace CODEX_Quorum
00066 {
00068    typedef vector<Message>  MessageVector;
00070    typedef vector<RemoteServerReturn>  ReturnVector;
00071    //typedef pair<const RemoteServerReturn*, const Response*>  ResponsePair;
00072    //typedef vector<ResponsePair>  ResponsePairVector;
00073 
00078    class QuorumSystem
00079    {
00080       public :
00087          QuorumSystem( ResponseTracker* aRT ) : m_responseTracker( aRT ) {}
00088 
00092          virtual ~QuorumSystem() { delete m_responseTracker; }
00093 
00097          virtual unsigned int  quorumSystemSize() = 0;
00098 
00102          virtual unsigned int  quorumSize() = 0;
00103 
00107          virtual unsigned int  faultsTolerated() = 0;
00108 
00141          virtual bool  broadcastMessage( const Message& msg,
00142                                          ReturnVector& rets,
00143                                          ResponseCallback* cb ) = 0;
00144 
00175          virtual bool  unicastMessage( const MessageVector& msgs,
00176                                        ReturnVector& rets,
00177                                        ResponseCallback* cb = 0 ) = 0;
00178 
00193          virtual void poll( MessageDispatcher& requestDispatcher,
00194                             QuorumDispatcher& responseDispatcher ) = 0;
00195 
00199          virtual unsigned char* extractKey(const unsigned char* data) {
00200             return m_responseTracker->extractKey( data );
00201          }
00202 
00207          virtual bool keyRegistered( const unsigned char* key ) {
00208             return ( 0 != (*m_responseTracker)( key ) );
00209          }
00210 
00211       protected :
00213          ResponseTracker* m_responseTracker;
00214    };
00215 
00221    class ByzantineQuorumSystem : public QuorumSystem
00222    {
00223       public :
00225          ByzantineQuorumSystem( ResponseTracker* aRT ) : QuorumSystem( aRT ) {}
00226 
00228          virtual ~ByzantineQuorumSystem() {}
00229    };
00230 
00231 }
00232 
00233 #endif /* __CODEX_QUORUM_QUORUMSYSTEM_H__ */

Generated on Fri May 6 17:40:51 2005 for COrnell Data EXchange (CODEX) by  doxygen 1.4.1