00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __COLLECTION_H__
00025 #define __COLLECTION_H__
00026
00027 #include "view.h"
00028 #include "source.h"
00029 #include "sink.h"
00030
00031 BEGIN_NAMESPACE( classad )
00032
00033
00034 class ClassAdCollectionInterface {
00035 public:
00036 ClassAdCollectionInterface( );
00037 virtual ~ClassAdCollectionInterface( );
00038
00039 enum {
00040 ClassAdCollOp_NoOp = 10000,
00041
00042 __ClassAdCollOp_ViewOps_Begin__,
00043 ClassAdCollOp_CreateSubView = __ClassAdCollOp_ViewOps_Begin__,
00044 ClassAdCollOp_CreatePartition ,
00045 ClassAdCollOp_DeleteView ,
00046 ClassAdCollOp_SetViewInfo ,
00047 ClassAdCollOp_AckViewOp ,
00048 __ClassAdCollOp_ViewOps_End__ = ClassAdCollOp_AckViewOp,
00049
00050 __ClassAdCollOp_ClassAdOps_Begin__,
00051 ClassAdCollOp_AddClassAd =__ClassAdCollOp_ClassAdOps_Begin__,
00052 ClassAdCollOp_UpdateClassAd ,
00053 ClassAdCollOp_ModifyClassAd ,
00054 ClassAdCollOp_RemoveClassAd ,
00055 ClassAdCollOp_AckClassAdOp ,
00056 __ClassAdCollOp_ClassAdOps_End__ = ClassAdCollOp_AckClassAdOp,
00057
00058 __ClassAdCollOp_XactionOps_Begin__,
00059 ClassAdCollOp_OpenTransaction =__ClassAdCollOp_XactionOps_Begin__,
00060 ClassAdCollOp_AckOpenTransaction ,
00061 ClassAdCollOp_CommitTransaction ,
00062 ClassAdCollOp_AbortTransaction ,
00063 ClassAdCollOp_AckCommitTransaction ,
00064 ClassAdCollOp_ForgetTransaction ,
00065 __ClassAdCollOp_XactionOps_End__ = ClassAdCollOp_ForgetTransaction,
00066
00067 __ClassAdCollOp_ReadOps_Begin__ ,
00068 ClassAdCollOp_GetClassAd = __ClassAdCollOp_ReadOps_Begin__,
00069 ClassAdCollOp_GetViewInfo ,
00070 ClassAdCollOp_GetSubordinateViewNames,
00071 ClassAdCollOp_GetPartitionedViewNames,
00072 ClassAdCollOp_FindPartitionName ,
00073 ClassAdCollOp_IsActiveTransaction ,
00074 ClassAdCollOp_IsCommittedTransaction,
00075 ClassAdCollOp_GetAllActiveTransactions,
00076 ClassAdCollOp_GetAllCommittedTransactions,
00077 ClassAdCollOp_GetServerTransactionState,
00078 ClassAdCollOp_AckReadOp ,
00079 __ClassAdCollOp_ReadOps_End__ = ClassAdCollOp_AckReadOp,
00080
00081 __ClassAdCollOp_MiscOps_Begin__ ,
00082 ClassAdCollOp_Connect = __ClassAdCollOp_MiscOps_Begin__,
00083 ClassAdCollOp_QueryView ,
00084 ClassAdCollOp_Disconnect ,
00085 __ClassAdCollOp_MiscOps_End__ = ClassAdCollOp_Disconnect,
00086 ClassAdCollOp_CheckPoint
00087 };
00088
00089 static const char * const CollOpStrings[];
00090
00091 enum AckMode { _DEFAULT_ACK_MODE, WANT_ACKS, DONT_WANT_ACKS };
00092
00093
00094 enum { XACTION_ABORTED, XACTION_COMMITTED, XACTION_UNKNOWN };
00095
00096
00097 virtual bool InitializeFromLog( const std::string &filename,
00098 const std::string storagefile="",
00099 const std::string checkpointfile="" ) = 0;
00100 bool TruncateLog( );
00101
00102
00103
00104 virtual bool CreateSubView( const ViewName &viewName,
00105 const ViewName &parentViewName,
00106 const std::string &constraint, const std::string &rank,
00107 const std::string &partitionExprs ) = 0;
00108 virtual bool CreatePartition( const ViewName &viewName,
00109 const ViewName &parentViewName,
00110 const std::string &constraint, const std::string &rank,
00111 const std::string &partitionExprs, ClassAd *rep ) = 0;
00112 virtual bool DeleteView( const ViewName &viewName ) = 0;
00113 virtual bool SetViewInfo( const ViewName &viewName,
00114 const std::string &constraint, const std::string &rank,
00115 const std::string &partitionAttrs ) = 0;
00116 virtual bool GetViewInfo( const ViewName &viewName, ClassAd *&viewInfo )=0;
00117
00118 virtual bool GetSubordinateViewNames( const ViewName &viewName,
00119 std::vector<std::string>& views ) = 0;
00120 virtual bool GetPartitionedViewNames( const ViewName &viewName,
00121 std::vector<std::string>& views ) = 0;
00122 virtual bool FindPartitionName( const ViewName &viewName, ClassAd *rep,
00123 ViewName &partition ) = 0;
00124
00125
00126
00127 virtual bool AddClassAd( const std::string &key, ClassAd *newAd ) = 0;
00128 virtual bool UpdateClassAd( const std::string &key, ClassAd *updateAd ) = 0;
00129 virtual bool ModifyClassAd( const std::string &key, ClassAd *modifyAd ) = 0;
00130 virtual bool RemoveClassAd( const std::string &key ) = 0;
00131 virtual ClassAd *GetClassAd(const std::string &key ) = 0;
00132
00133
00134
00135 bool SetAcknowledgementMode( AckMode );
00136 AckMode GetAcknowledgementMode( ) const { return( amode ); }
00137
00138
00139
00140 virtual bool OpenTransaction( const std::string &xactionName) = 0;
00141 bool SetCurrentTransaction( const std::string &xactionName );
00142 void GetCurrentTransaction( std::string &xactionName ) const;
00143 virtual bool CloseTransaction( const std::string &xactionName, bool commit,
00144 int &outcome )=0;
00145
00146 virtual bool IsMyActiveTransaction( const std::string &xactionName ) = 0;
00147 virtual void GetMyActiveTransactions( std::vector<std::string>& ) = 0;
00148 virtual bool IsActiveTransaction( const std::string &xactionName ) = 0;
00149 virtual bool GetAllActiveTransactions( std::vector<std::string>& ) = 0;
00150 virtual bool IsCommittedTransaction( const std::string &xactionName ) = 0;
00151 virtual bool GetAllCommittedTransactions( std::vector<std::string>& ) = 0;
00152
00153
00154
00155 static inline const char *GetOpString( int op ) {
00156 return( op>=ClassAdCollOp_NoOp && op<=__ClassAdCollOp_MiscOps_End__ ?
00157 CollOpStrings[op-ClassAdCollOp_NoOp] : "(unknown)" );
00158 }
00159
00160 protected:
00161
00162 ClassAd *_CreateSubView( const ViewName &viewName,
00163 const ViewName &parentViewName,
00164 const std::string &constraint, const std::string &rank,
00165 const std::string &partitionExprs );
00166 ClassAd *_CreatePartition( const ViewName &viewName,
00167 const ViewName &parentViewName,
00168 const std::string &constraint, const std::string &rank,
00169 const std::string &partitionExprs, ClassAd *rep );
00170 ClassAd *_DeleteView( const ViewName &viewName );
00171 ClassAd *_SetViewInfo( const ViewName &viewName,
00172 const std::string &constraint, const std::string &rank,
00173 const std::string &partitionAttrs );
00174 ClassAd *_AddClassAd( const std::string &xactionName,
00175 const std::string &key, ClassAd *newAd );
00176 ClassAd *_UpdateClassAd( const std::string &xactionName,
00177 const std::string &key, ClassAd *updateAd );
00178 ClassAd *_ModifyClassAd( const std::string &xactionName,
00179 const std::string &key, ClassAd *modifyAd );
00180 ClassAd *_RemoveClassAd( const std::string &xactionName,
00181 const std::string &key );
00182
00183
00184 AckMode amode;
00185 std::string currentXactionName;
00186
00187
00188 virtual bool OperateInRecoveryMode( ClassAd* ) = 0;
00189
00190
00191 ClassAd *ReadLogEntry( FILE * );
00192 bool WriteLogEntry( FILE *, ClassAd *, bool sync=true );
00193 bool ReadLogFile( );
00194 std::string logFileName;
00195 ClassAdParser parser;
00196 ClassAdUnParser unparser;
00197 FILE *log_fp;
00198
00199 std::string StorageFileName;
00200 int sfiled;
00201
00202 virtual bool LogState( FILE * ) = 0;
00203
00204 private:
00205 ClassAdCollectionInterface(const ClassAdCollectionInterface &i) { return; }
00206 ClassAdCollectionInterface &operator=(const ClassAdCollectionInterface &i) { return *this; }
00207 };
00208
00209
00210 END_NAMESPACE
00211
00212 #endif