Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

EvmsAccess.h

Go to the documentation of this file.
00001 #ifndef EVMS_ACCESS_H
00002 #define EVMS_ACCESS_H
00003 
00004 #include <iostream>
00005 #include <list>
00006 
00007 extern "C"
00008 {
00009 #define bool boolean
00010 #include <appAPI.h>
00011 #undef bool
00012 }
00013 
00014 using namespace std;
00015 
00016 typedef enum { EVMS_UNKNOWN, EVMS_DISK, EVMS_SEGMENT, EVMS_REGION, EVMS_PLUGIN,
00017                EVMS_CONTAINER, EVMS_VOLUME, EVMS_OBJ } ObjType;
00018 
00019 class EvmsAccess;
00020 
00021 class EvmsObject
00022     {
00023     public:
00024         EvmsObject() { Init(); };
00025         EvmsObject( object_handle_t id );
00026         virtual ~EvmsObject();
00027 
00028         ObjType Type() const { return type; };
00029         const string& Name() const { return name; };
00030         const object_handle_t Id() const { return id; };
00031 
00032         void DisownPtr() { own_ptr = false; };
00033         void Output( ostream& Stream ) const;
00034         unsigned long long SizeK() const { return size; };
00035         bool IsDataType() const;
00036         bool IsData() const { return is_data; };
00037         bool IsFreespace() const { return is_freespace; };
00038         virtual void AddRelation( EvmsAccess* Acc ) {};
00039 
00040     protected:
00041         void Init();
00042         bool own_ptr;
00043         bool is_data;
00044         bool is_freespace;
00045         unsigned long long size;
00046         ObjType type;
00047         object_handle_t id;
00048         string name;
00049         handle_object_info_t *info_p;
00050     };
00051 
00052 class EvmsDataObject : public EvmsObject
00053     {
00054     public:
00055         EvmsDataObject( EvmsObject *const obj );
00056         EvmsDataObject( object_handle_t id );
00057         const EvmsObject *const ConsumedBy() const { return consumed; };
00058         const EvmsObject *const Volume() const { return volume; };
00059         void Output( ostream& Stream ) const;
00060         virtual void AddRelation( EvmsAccess* Acc );
00061 
00062     protected:
00063         void Init();
00064         storage_object_info_t* GetInfop();
00065         EvmsObject * consumed;
00066         EvmsObject * volume;
00067     };
00068 
00069 class EvmsContainerObject : public EvmsObject
00070     {
00071     public:
00072         EvmsContainerObject( EvmsObject *const obj );
00073         EvmsContainerObject( object_handle_t id );
00074         unsigned long long FreeK() const { return free; };
00075         unsigned long long PeSize() const { return pe_size; };
00076         const list<EvmsObject *>& Consumes() const { return consumes; };
00077         const list<EvmsObject *>& Creates() const { return creates; };
00078         const string& TypeName() const { return ctype; };
00079         void Output( ostream& Stream ) const;
00080         virtual void AddRelation( EvmsAccess* Acc );
00081 
00082     protected:
00083         void Init();
00084         storage_container_info_t* GetInfop();
00085         unsigned long long free;
00086         unsigned long long pe_size;
00087         list<EvmsObject *> consumes;
00088         list<EvmsObject *> creates;
00089         string ctype;
00090     };
00091 
00092 class EvmsVolumeObject : public EvmsObject
00093     {
00094     public:
00095         EvmsVolumeObject( EvmsObject *const obj );
00096         EvmsVolumeObject( object_handle_t id );
00097         const EvmsObject * ConsumedBy() const { return consumed; };
00098         EvmsObject * Consumes() const { return consumes; };
00099         const EvmsObject * AssVol() const { return assc; };
00100         bool Native() const { return native; };
00101         const string& Device() const { return device; };
00102         void Output( ostream& Stream ) const;
00103         void SetConsumedBy( EvmsObject* Obj );
00104         virtual void AddRelation( EvmsAccess* Acc );
00105 
00106     protected:
00107         void Init();
00108         logical_volume_info_s* GetInfop();
00109         bool native;
00110         EvmsObject * consumed;
00111         EvmsObject * consumes;
00112         EvmsObject * assc;
00113         string device;
00114     };
00115 
00116 class EvmsAccess
00117     {
00118     public:
00119         EvmsObject *const AddObject( object_handle_t id );
00120         EvmsObject *const Find( object_handle_t id );
00121         EvmsAccess();
00122         ~EvmsAccess();
00123         void Output( ostream &Stream ) const;
00124         void ListVolumes( list<const EvmsVolumeObject*>& l ) const;
00125         void ListContainer(list<const EvmsContainerObject*>& l ) const;
00126         string GetErrorText() {return Error_C;};
00127         string GetCmdLine() {return CmdLine_C;};
00128         bool ChangeActive( const string& Name_Cv, bool Active_bv );
00129         bool DeleteCo( const string& Container_Cv );
00130         bool ExtendCo( const string& Container_Cv, const string& PvName_Cv );
00131         bool ShrinkCo( const string& Container_Cv, const string& PvName_Cv );
00132         bool CreateCo( const string& Container_Cv, unsigned long PeSize_lv,
00133                        bool NewMeta_bv, list<string>& Devices_Cv );
00134         bool CreateLv( const string& LvName_Cv, const string& Container_Cv,
00135                        unsigned long Size_lv, unsigned long Stripe_lv,
00136                        unsigned long StripeSize_lv );
00137         bool ChangeLvSize( const string& LvName_Cv, const string& Container_Cv,
00138                            unsigned long Size_lv );
00139         bool DeleteLv( const string& LvName_Cv, const string& Container_Cv );
00140         bool CreateCompatVol( const string& Volume_Cv );
00141 
00142     protected:
00143         void AddObjectRelations();
00144         void RereadAllObjects();
00145         plugin_handle_t GetLvmPlugin();
00146         object_handle_t FindUsingVolume( object_handle_t id );
00147         const EvmsContainerObject* FindContainer( const string& name );
00148         const EvmsDataObject* FindRegion( const string& container, 
00149                                           const string& name );
00150         const EvmsDataObject* FindSegment( const string& name );
00151         const EvmsVolumeObject* FindVolume( const string& name );
00152         static int PluginFilterFunction( const char* plugin );
00153 
00154         list<EvmsObject*> objects;
00155         boolean EndEvmsCommand();
00156         boolean EvmsOpen_b;
00157         string Error_C;
00158         string CmdLine_C;
00159     };
00160 
00161 extern ostream& operator<<( ostream &Stream, const ObjType Obj );
00162 extern ostream& operator<<( ostream &Stream, const EvmsAccess& Obj );
00163 extern ostream& operator<<( ostream &Stream, const EvmsObject& Obj );
00164 extern ostream& operator<<( ostream &Stream, const EvmsDataObject& Obj );
00165 extern ostream& operator<<( ostream &Stream, const EvmsContainerObject& Obj );
00166 extern ostream& operator<<( ostream &Stream, const EvmsVolumeObject& Obj );
00167 
00168 #endif

Generated on Tue Jul 17 04:35:14 2007 for yast2-storage by doxygen 1.3.6