Author: aschnell
Date: Tue Jul 22 17:20:52 2008
New Revision: 49331
URL: http://svn.opensuse.org/viewcvs/yast?rev=49331&view=rev
Log:
- added querying md state to libstorage (fate #303613)
Modified:
trunk/storage/VERSION
trunk/storage/libstorage/src/Md.cc
trunk/storage/libstorage/src/Md.h
trunk/storage/libstorage/src/MdCo.cc
trunk/storage/libstorage/src/MdCo.h
trunk/storage/libstorage/src/Storage.cc
trunk/storage/libstorage/src/Storage.h
trunk/storage/libstorage/src/StorageInterface.h
trunk/storage/package/yast2-storage.changes
trunk/storage/yast2-storage.spec.in
Modified: trunk/storage/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/VERSION?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/VERSION (original)
+++ trunk/storage/VERSION Tue Jul 22 17:20:52 2008
@@ -1 +1 @@
-2.17.2
+2.17.3
Modified: trunk/storage/libstorage/src/Md.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Md.cc?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Md.cc (original)
+++ trunk/storage/libstorage/src/Md.cc Tue Jul 22 17:20:52 2008
@@ -3,6 +3,7 @@
*/
#include <sstream>
+#include
#include "y2storage/Md.h"
#include "y2storage/StorageTypes.h"
@@ -246,6 +247,35 @@
}
void
+Md::getState(MdStateInfo& info) const
+{
+ SystemCmd c("mdadm --detail " + device());
+
+ c.select("State : ");
+ if( c.retcode()==0 && c.numLines(true)>0 )
+ {
+ string state = *c.getLine(0,true);
+ string::size_type pos;
+ if( (pos=state.find( "State : " ))!=string::npos )
+ state.erase( 0, pos+8 );
+
+ list<string> entries;
+ boost::algorithm::split(entries, state, boost::algorithm::is_any_of(","));
+
+ info.active = false;
+ info.degraded = false;
+ for (list<string>::const_iterator i = entries.begin(); i != entries.end(); i++)
+ {
+ string s = boost::trim_copy(*i, locale::classic());
+ if (s == "active")
+ info.active = true;
+ else if (s == "degraded")
+ info.degraded = true;
+ }
+ }
+}
+
+void
Md::computeSize()
{
unsigned long long sum = 0;
Modified: trunk/storage/libstorage/src/Md.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Md.h?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Md.h (original)
+++ trunk/storage/libstorage/src/Md.h Tue Jul 22 17:20:52 2008
@@ -54,6 +54,7 @@
void getInfo( storage::MdInfo& info ) const;
bool equalContent( const Md& rhs ) const;
void logDifference( const Md& d ) const;
+ void getState(MdStateInfo& info) const;
protected:
void init();
Modified: trunk/storage/libstorage/src/MdCo.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/MdCo.cc?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/libstorage/src/MdCo.cc (original)
+++ trunk/storage/libstorage/src/MdCo.cc Tue Jul 22 17:20:52 2008
@@ -486,6 +486,28 @@
return( ret );
}
+int
+MdCo::getMdState(unsigned num, MdStateInfo& info)
+{
+ int ret = 0;
+ MdIter i;
+ if( ret==0 )
+ {
+ if( !findMd( num, i ))
+ ret = MD_UNKNOWN_NUMBER;
+ }
+ if( ret==0 && i->created() )
+ {
+ ret = MD_STATE_NOT_ON_DISK;
+ }
+ if( ret==0 )
+ {
+ i->getState(info);
+ }
+ y2milestone("ret:%d", ret);
+ return ret;
+}
+
int
MdCo::removeMd( unsigned num, bool destroySb )
{
Modified: trunk/storage/libstorage/src/MdCo.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/MdCo.h?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/libstorage/src/MdCo.h (original)
+++ trunk/storage/libstorage/src/MdCo.h Tue Jul 22 17:20:52 2008
@@ -30,6 +30,7 @@
int changeMdChunk( unsigned num, unsigned long chunk );
int changeMdParity( unsigned num, storage::MdParity ptype );
int checkMd( unsigned num );
+ int getMdState(unsigned num, MdStateInfo& info);
bool equalContent( const Container& rhs ) const;
void logDifference( const Container& d ) const;
Modified: trunk/storage/libstorage/src/Storage.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Storage.cc?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Storage.cc (original)
+++ trunk/storage/libstorage/src/Storage.cc Tue Jul 22 17:20:52 2008
@@ -3578,6 +3578,28 @@
return( ret );
}
+int Storage::getMdState(const string& name, MdStateInfo& info)
+{
+ int ret = 0;
+ assertInit();
+ y2milestone("name:%s", name.c_str());
+ unsigned num = 0;
+ if (ret == 0 && !Md::mdStringNum(name, num))
+ {
+ ret = STORAGE_MD_INVALID_NAME;
+ }
+ if (ret == 0)
+ {
+ MdCo *md = NULL;
+ if (haveMd(md))
+ ret = md->getMdState(num, info);
+ else
+ ret = STORAGE_MD_NOT_FOUND;
+ }
+ y2milestone("ret:%d", ret);
+ return ret;
+}
+
bool Storage::haveMd( MdCo*& md )
{
md = NULL;
Modified: trunk/storage/libstorage/src/Storage.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Storage.h?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Storage.h (original)
+++ trunk/storage/libstorage/src/Storage.h Tue Jul 22 17:20:52 2008
@@ -433,6 +433,7 @@
int changeMdChunk( const string& name, unsigned long chunk );
int changeMdParity( const string& name, storage::MdParity ptype );
int checkMd( const string& name );
+ int getMdState(const string& name, MdStateInfo& info);
int addNfsDevice( const string& nfsDev, const string& opts,
unsigned long long sizeK, const string& mp );
Modified: trunk/storage/libstorage/src/StorageInterface.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/StorageInterface.h?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/libstorage/src/StorageInterface.h (original)
+++ trunk/storage/libstorage/src/StorageInterface.h Tue Jul 22 17:20:52 2008
@@ -342,6 +342,15 @@
};
/**
+ * Contains state of a software raid device.
+ */
+ struct MdStateInfo
+ {
+ bool active;
+ bool degraded;
+ };
+
+ /**
* Contains info about a nfs volumes
*/
struct NfsInfo
@@ -570,6 +579,7 @@
MD_REMOVE_NONEXISTENT = -6016,
MD_NO_CHANGE_ON_DISK = -6017,
MD_NO_CREATE_UNKNOWN = -6018,
+ MD_STATE_NOT_ON_DISK = -6019,
LOOP_CHANGE_READONLY = -7000,
LOOP_DUPLICATE_FILE = -7001,
@@ -1752,6 +1762,16 @@
virtual int checkMd( const string& name ) = 0;
/**
+ * Get state of a raid device.
+ * This can only be done after the raid has been created on disk.
+ *
+ * @param name name of software raid device (e.g. /dev/md0)
+ * @param info record that gets filled with raid special data
+ * @return zero if all is ok, a negative number to indicate an error
+ */
+ virtual int getMdState(const string& name, MdStateInfo& info) = 0;
+
+ /**
* Add knowledge about existence of nfs device.
*
* @param nfsDev name of nfs device
Modified: trunk/storage/package/yast2-storage.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/package/yast2-storage.changes?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/package/yast2-storage.changes (original)
+++ trunk/storage/package/yast2-storage.changes Tue Jul 22 17:20:52 2008
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Tue Jul 22 17:07:05 CEST 2008 - aschnell@suse.de
+
+- added querying md state to libstorage (fate #303613)
+- version 2.17.3
+
+-------------------------------------------------------------------
Sat Jul 19 20:36:17 CEST 2008 - aschnell@suse.de
- removed evms subpackage
Modified: trunk/storage/yast2-storage.spec.in
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/yast2-storage.spec.in?rev=49331&r1=49330&r2=49331&view=diff
==============================================================================
--- trunk/storage/yast2-storage.spec.in (original)
+++ trunk/storage/yast2-storage.spec.in Tue Jul 22 17:20:52 2008
@@ -2,7 +2,7 @@
@HEADER@
-BuildRequires: blocxx-devel gcc-c++ libxcrypt-devel openssl-devel sablot swig docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer sgml-skel update-desktop-files yast2 yast2-core-devel yast2-devtools yast2-testsuite yast2-perl-bindings
+BuildRequires: blocxx-devel boost-devel gcc-c++ libxcrypt-devel openssl-devel sablot swig docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer sgml-skel update-desktop-files yast2 yast2-core-devel yast2-devtools yast2-testsuite yast2-perl-bindings
Requires: parted yast2-storage-lib = %version yast2-perl-bindings mdadm lvm2 dmraid kpartx cryptsetup
# proc_meminfo.scr moved to yast2-2.15.23
# Installation::installedVersion and Installation::updateVersion
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org