Mailinglist Archive: yast-commit (1208 mails)
| < Previous | Next > |
[yast-commit] r59350 - /branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc
- From: mpatelcz@xxxxxxxxxxxxxxxx
- Date: Thu, 05 Nov 2009 16:27:14 -0000
- Message-id: <E1N65B4-0004wH-9B@xxxxxxxxxxxxxxxx>
Author: mpatelcz
Date: Thu Nov 5 17:27:14 2009
New Revision: 59350
URL: http://svn.opensuse.org/viewcvs/yast?rev=59350&view=rev
Log:
Rework after review
Modified:
branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc
Modified: branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc
URL:
http://svn.opensuse.org/viewcvs/yast/branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc?rev=59350&r1=59349&r2=59350&view=diff
==============================================================================
--- branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc (original)
+++ branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc Thu Nov 5 17:27:14
2009
@@ -42,6 +42,7 @@
#include "y2storage/Storage.h"
#include "y2storage/StorageDefines.h"
#include "y2storage/Regex.h"
+#include "y2storage/EtcRaidtab.h"
namespace storage
@@ -60,7 +61,7 @@
getMajorMinor();
- active = del_ptable = false;
+ del_ptable = false;
disk = NULL;
/* First Initialize RAID properties. */
@@ -68,13 +69,6 @@
/* Initialize 'disk' part, partitions.*/
init( ppart );
- is_copy = false;
- if( sto->instsys() == false )
- {
- handlingMd = true;
- }
- devHandled.push_back(name);
-
y2mil("MdPartCo (nm=" << nm << ", dev=" << dev << ", level=" << md_type <<
", disks=" << devs << ") ready.");
}
@@ -87,23 +81,6 @@
disk = NULL;
}
y2deb("destructed MdPartCo : " << dev);
-
- if( is_copy == false )
- {
- for(list<string>::iterator i = devHandled.begin();
- i != devHandled.end();
- i++)
- {
- if( nm == undevName(*i) )
- {
- devHandled.remove((*i));
- }
- }
- if( devHandled.empty() && !sto->instsys() )
- {
- handlingMd = false;
- }
- }
}
bool MdPartCo::isMdPart(const string& name)
@@ -372,7 +349,6 @@
y2mil( " nm: " << nm << " size_k: " << size_k);
createDisk( ppart );
getVolumes( ppart );
- active = true;
}
void
@@ -504,17 +480,25 @@
}
// Makes complete partition name (like md125p5)
-string MdPartCo::numToName( unsigned num ) const
+string MdPartCo::numToName( unsigned mdNum ) const
{
string ret = nm;
- if( num>0 )
+ if( mdNum>0 )
{
ret += "p";
- ret += decString(num);
+ ret += decString(mdNum);
}
return( ret );
}
+int MdPartCo::nr()
+{
+ int n;
+ nm.erase(0,2) >> n;
+ return n;
+}
+
+
//
// Assumption is that we're using /dev not /dev/md
// directory.
@@ -1050,12 +1034,12 @@
info.spares += " ";
}
info.level = md_type;
- info.state = md_state;
info.nr = mnr;
info.parity = md_parity;
info.uuid = md_uuid;
info.sb_ver = sb_ver;
info.chunk = chunk_size;
+ info.md_name = md_name;
tinfo = info;
}
@@ -1082,7 +1066,8 @@
std::ostream& operator<< (std::ostream& s, const MdPartCo& d )
{
s << *((Container*)&d);
- s << " MdNr:" << d.mnr
+ s << " Name:" << d.md_name
+ << " MdNr:" << d.mnr
<< " PNum:" << d.num_part;
if( !d.udev_id.empty() )
s << " UdevId:" << d.udev_id;
@@ -1134,6 +1119,10 @@
log += " SbVer:" + sb_ver + "-->" + d.sb_ver;
if( md_uuid!=d.md_uuid )
log += " MD-UUID:" + md_uuid + "-->" + d.md_uuid;
+ if( md_name!=d.md_name )
+ {
+ log += " MDName:" + md_uuid + "-->" + d.md_uuid;
+ }
if( destrSb!=d.destrSb )
{
if( d.destrSb )
@@ -1212,8 +1201,14 @@
spare == mdp->spare &&
md_uuid == mdp->md_uuid &&
destrSb == mdp->destrSb &&
- parent_container == mdp->parent_container);
-
+ md_name == mdp->md_name);
+ if( ret )
+ {
+ if( sb_ver == "imsm" || sb_ver == "ddf" )
+ {
+ ret = ret && (parent_container == mdp->parent_container);
+ }
+ }
if( ret )
{
ConstMdPartPair pp = mdpartPair();
@@ -1247,6 +1242,7 @@
destrSb = rhs.destrSb;
devs = rhs.devs;
spare = rhs.spare;
+ md_name = rhs.md_name;
udev_path = rhs.udev_path;
udev_id = rhs.udev_id;
@@ -1263,7 +1259,6 @@
}
updatePointers(true);
num_part = rhs.num_part;
- is_copy = true;
}
bool MdPartCo::isMdName(const string& name)
@@ -1714,24 +1709,9 @@
void MdPartCo::activate( bool val, const string& tmpDir )
{
- y2milestone( "old active:%d val:%d tmp:%s", active, val, tmpDir.c_str() );
if( active!=val )
{
- SystemCmd c;
- if( val )
- {
- string mdconf = tmpDir + "/mdadm.conf";
- string cmd = "echo 1 > /sys/module/md_mod/parameters/start_ro";
- c.execute( cmd );
- cmd = MDADMBIN " --examine --scan --config=partitions >" + mdconf;
- c.execute( cmd );
- cmd = MDADMBIN " --assemble --scan --config=" + mdconf;
- c.execute( cmd );
- }
- else
- {
- c.execute(MDADMBIN " --stop --scan");
- }
+ MdCo::activate(val,tmpDir);
active = val;
}
}
@@ -1924,64 +1904,94 @@
}
-// No '/dev/' please.
-bool MdPartCo::isHandled(const string& name)
-{
- if( devHandled.empty() )
+
+
+void
+MdPartCo::initTab()
{
- return false;
+ if( tab==NULL && !getStorage()->instsys() )
+ tab = new EtcRaidtab( getStorage()->root() );
}
- string dev;
- string::size_type pos;
- // Check who called it. Md or Dm.
- if( name.find("md") == 0 )
+void
+MdPartCo::syncRaidtab()
{
- // Md Device.
- dev = name;
+ delete tab;
+ string d = getStorage()->root()+"/etc";
+ if( !checkDir( d ) )
+ createPath( d );
+ tab = new EtcRaidtab( getStorage()->root() );
+ updateEntry();
}
- else if ( (pos=name.find("isw_")) == 0 )
+
+void MdPartCo::updateEntry( void )
{
- // DM raid is asking.
- // isw_xxxxxxx_Name - Name will be link in /dev/md/Name to /dev/mdXXX
- dev = name;
- dev.erase(0,4);
- pos = dev.find("_");
- if( pos == string::npos )
- {
- return false;
- }
- dev.erase(0,pos+1);
- string link = "/dev/md/" + dev;
- string tmpDev;
+ initTab();
+ if( tab )
+ {
+ list<string> lines;
+ list<string> devices;
+ raidtabLines(lines);
+ getDevs( devices );
+ tab->updateEntry( nr(), lines, mdadmLine(), devices );
+ }
+ }
- if( readlink(link,tmpDev) == -1 )
- {
- return false;
- }
- pos = tmpDev.find_last_of("/");
- if( pos != string::npos )
- {
- tmpDev.erase(0,pos+1);
- dev = tmpDev;
- }
- else
- {
- dev = tmpDev;
- }
+string MdPartCo::mdadmLine() const
+ {
+ string line = "ARRAY " + device() + " level=" + pName();
+ line += " UUID=" + md_uuid;
+ y2mil("line:" << line);
+ return( line );
}
- for( list<string>::const_iterator i = devHandled.begin();
- i != devHandled.end();
- i++)
+void MdPartCo::raidtabLines( list<string>& lines ) const
{
- if( *i == dev)
- {
- return true;
- }
+ lines.clear();
+ lines.push_back( "raiddev " + device() );
+ string tmp = " raid-level ";
+ switch( md_type )
+ {
+ case RAID1:
+ tmp += "1";
+ break;
+ case RAID5:
+ tmp += "5";
+ break;
+ case RAID6:
+ tmp += "6";
+ break;
+ case RAID10:
+ tmp += "10";
+ break;
+ case MULTIPATH:
+ tmp += "multipath";
+ break;
+ default:
+ tmp += "0";
+ break;
+ }
+ lines.push_back( tmp );
+ lines.push_back( " nr-raid-disks " + decString(devs.size()));
+ lines.push_back( " nr-spare-disks " + decString(spare.size()));
+ lines.push_back( " persistent-superblock 1" );
+ if( md_parity!=PAR_NONE )
+ lines.push_back( " parity-algorithm " + ptName());
+ if( chunk_size>0 )
+ lines.push_back( " chunk-size " + decString(chunk_size));
+ unsigned cnt = 0;
+ for( list<string>::const_iterator i=devs.begin(); i!=devs.end(); ++i )
+ {
+ lines.push_back( " device " + *i);
+ lines.push_back( " raid-disk " + decString(cnt++));
+ }
+ cnt = 0;
+ for( list<string>::const_iterator i=spare.begin(); i!=spare.end(); ++i )
+ {
+ lines.push_back( " device " + *i);
+ lines.push_back( " spare-disk " + decString(cnt++));
+ }
}
- return false;
-}
string MdPartCo::md_names[] = { "unknown", "raid0", "raid1", "raid5", "raid6",
@@ -2004,9 +2014,12 @@
bool MdPartCo::handlingMd = false;
-list<string> MdPartCo::devHandled;
+void MdPartCo::logData( const string& Dir ) {}
+<<<<<<< .mine
+=======
void MdPartCo::logData( const string& Dir ) {}
+>>>>>>> .r59349
}
--
To unsubscribe, e-mail: yast-commit+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: yast-commit+help@xxxxxxxxxxxx
Date: Thu Nov 5 17:27:14 2009
New Revision: 59350
URL: http://svn.opensuse.org/viewcvs/yast?rev=59350&view=rev
Log:
Rework after review
Modified:
branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc
Modified: branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc
URL:
http://svn.opensuse.org/viewcvs/yast/branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc?rev=59350&r1=59349&r2=59350&view=diff
==============================================================================
--- branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc (original)
+++ branches/tmp/mpatelcz/SP1-md/libstorage/src/MdPartCo.cc Thu Nov 5 17:27:14
2009
@@ -42,6 +42,7 @@
#include "y2storage/Storage.h"
#include "y2storage/StorageDefines.h"
#include "y2storage/Regex.h"
+#include "y2storage/EtcRaidtab.h"
namespace storage
@@ -60,7 +61,7 @@
getMajorMinor();
- active = del_ptable = false;
+ del_ptable = false;
disk = NULL;
/* First Initialize RAID properties. */
@@ -68,13 +69,6 @@
/* Initialize 'disk' part, partitions.*/
init( ppart );
- is_copy = false;
- if( sto->instsys() == false )
- {
- handlingMd = true;
- }
- devHandled.push_back(name);
-
y2mil("MdPartCo (nm=" << nm << ", dev=" << dev << ", level=" << md_type <<
", disks=" << devs << ") ready.");
}
@@ -87,23 +81,6 @@
disk = NULL;
}
y2deb("destructed MdPartCo : " << dev);
-
- if( is_copy == false )
- {
- for(list<string>::iterator i = devHandled.begin();
- i != devHandled.end();
- i++)
- {
- if( nm == undevName(*i) )
- {
- devHandled.remove((*i));
- }
- }
- if( devHandled.empty() && !sto->instsys() )
- {
- handlingMd = false;
- }
- }
}
bool MdPartCo::isMdPart(const string& name)
@@ -372,7 +349,6 @@
y2mil( " nm: " << nm << " size_k: " << size_k);
createDisk( ppart );
getVolumes( ppart );
- active = true;
}
void
@@ -504,17 +480,25 @@
}
// Makes complete partition name (like md125p5)
-string MdPartCo::numToName( unsigned num ) const
+string MdPartCo::numToName( unsigned mdNum ) const
{
string ret = nm;
- if( num>0 )
+ if( mdNum>0 )
{
ret += "p";
- ret += decString(num);
+ ret += decString(mdNum);
}
return( ret );
}
+int MdPartCo::nr()
+{
+ int n;
+ nm.erase(0,2) >> n;
+ return n;
+}
+
+
//
// Assumption is that we're using /dev not /dev/md
// directory.
@@ -1050,12 +1034,12 @@
info.spares += " ";
}
info.level = md_type;
- info.state = md_state;
info.nr = mnr;
info.parity = md_parity;
info.uuid = md_uuid;
info.sb_ver = sb_ver;
info.chunk = chunk_size;
+ info.md_name = md_name;
tinfo = info;
}
@@ -1082,7 +1066,8 @@
std::ostream& operator<< (std::ostream& s, const MdPartCo& d )
{
s << *((Container*)&d);
- s << " MdNr:" << d.mnr
+ s << " Name:" << d.md_name
+ << " MdNr:" << d.mnr
<< " PNum:" << d.num_part;
if( !d.udev_id.empty() )
s << " UdevId:" << d.udev_id;
@@ -1134,6 +1119,10 @@
log += " SbVer:" + sb_ver + "-->" + d.sb_ver;
if( md_uuid!=d.md_uuid )
log += " MD-UUID:" + md_uuid + "-->" + d.md_uuid;
+ if( md_name!=d.md_name )
+ {
+ log += " MDName:" + md_uuid + "-->" + d.md_uuid;
+ }
if( destrSb!=d.destrSb )
{
if( d.destrSb )
@@ -1212,8 +1201,14 @@
spare == mdp->spare &&
md_uuid == mdp->md_uuid &&
destrSb == mdp->destrSb &&
- parent_container == mdp->parent_container);
-
+ md_name == mdp->md_name);
+ if( ret )
+ {
+ if( sb_ver == "imsm" || sb_ver == "ddf" )
+ {
+ ret = ret && (parent_container == mdp->parent_container);
+ }
+ }
if( ret )
{
ConstMdPartPair pp = mdpartPair();
@@ -1247,6 +1242,7 @@
destrSb = rhs.destrSb;
devs = rhs.devs;
spare = rhs.spare;
+ md_name = rhs.md_name;
udev_path = rhs.udev_path;
udev_id = rhs.udev_id;
@@ -1263,7 +1259,6 @@
}
updatePointers(true);
num_part = rhs.num_part;
- is_copy = true;
}
bool MdPartCo::isMdName(const string& name)
@@ -1714,24 +1709,9 @@
void MdPartCo::activate( bool val, const string& tmpDir )
{
- y2milestone( "old active:%d val:%d tmp:%s", active, val, tmpDir.c_str() );
if( active!=val )
{
- SystemCmd c;
- if( val )
- {
- string mdconf = tmpDir + "/mdadm.conf";
- string cmd = "echo 1 > /sys/module/md_mod/parameters/start_ro";
- c.execute( cmd );
- cmd = MDADMBIN " --examine --scan --config=partitions >" + mdconf;
- c.execute( cmd );
- cmd = MDADMBIN " --assemble --scan --config=" + mdconf;
- c.execute( cmd );
- }
- else
- {
- c.execute(MDADMBIN " --stop --scan");
- }
+ MdCo::activate(val,tmpDir);
active = val;
}
}
@@ -1924,64 +1904,94 @@
}
-// No '/dev/' please.
-bool MdPartCo::isHandled(const string& name)
-{
- if( devHandled.empty() )
+
+
+void
+MdPartCo::initTab()
{
- return false;
+ if( tab==NULL && !getStorage()->instsys() )
+ tab = new EtcRaidtab( getStorage()->root() );
}
- string dev;
- string::size_type pos;
- // Check who called it. Md or Dm.
- if( name.find("md") == 0 )
+void
+MdPartCo::syncRaidtab()
{
- // Md Device.
- dev = name;
+ delete tab;
+ string d = getStorage()->root()+"/etc";
+ if( !checkDir( d ) )
+ createPath( d );
+ tab = new EtcRaidtab( getStorage()->root() );
+ updateEntry();
}
- else if ( (pos=name.find("isw_")) == 0 )
+
+void MdPartCo::updateEntry( void )
{
- // DM raid is asking.
- // isw_xxxxxxx_Name - Name will be link in /dev/md/Name to /dev/mdXXX
- dev = name;
- dev.erase(0,4);
- pos = dev.find("_");
- if( pos == string::npos )
- {
- return false;
- }
- dev.erase(0,pos+1);
- string link = "/dev/md/" + dev;
- string tmpDev;
+ initTab();
+ if( tab )
+ {
+ list<string> lines;
+ list<string> devices;
+ raidtabLines(lines);
+ getDevs( devices );
+ tab->updateEntry( nr(), lines, mdadmLine(), devices );
+ }
+ }
- if( readlink(link,tmpDev) == -1 )
- {
- return false;
- }
- pos = tmpDev.find_last_of("/");
- if( pos != string::npos )
- {
- tmpDev.erase(0,pos+1);
- dev = tmpDev;
- }
- else
- {
- dev = tmpDev;
- }
+string MdPartCo::mdadmLine() const
+ {
+ string line = "ARRAY " + device() + " level=" + pName();
+ line += " UUID=" + md_uuid;
+ y2mil("line:" << line);
+ return( line );
}
- for( list<string>::const_iterator i = devHandled.begin();
- i != devHandled.end();
- i++)
+void MdPartCo::raidtabLines( list<string>& lines ) const
{
- if( *i == dev)
- {
- return true;
- }
+ lines.clear();
+ lines.push_back( "raiddev " + device() );
+ string tmp = " raid-level ";
+ switch( md_type )
+ {
+ case RAID1:
+ tmp += "1";
+ break;
+ case RAID5:
+ tmp += "5";
+ break;
+ case RAID6:
+ tmp += "6";
+ break;
+ case RAID10:
+ tmp += "10";
+ break;
+ case MULTIPATH:
+ tmp += "multipath";
+ break;
+ default:
+ tmp += "0";
+ break;
+ }
+ lines.push_back( tmp );
+ lines.push_back( " nr-raid-disks " + decString(devs.size()));
+ lines.push_back( " nr-spare-disks " + decString(spare.size()));
+ lines.push_back( " persistent-superblock 1" );
+ if( md_parity!=PAR_NONE )
+ lines.push_back( " parity-algorithm " + ptName());
+ if( chunk_size>0 )
+ lines.push_back( " chunk-size " + decString(chunk_size));
+ unsigned cnt = 0;
+ for( list<string>::const_iterator i=devs.begin(); i!=devs.end(); ++i )
+ {
+ lines.push_back( " device " + *i);
+ lines.push_back( " raid-disk " + decString(cnt++));
+ }
+ cnt = 0;
+ for( list<string>::const_iterator i=spare.begin(); i!=spare.end(); ++i )
+ {
+ lines.push_back( " device " + *i);
+ lines.push_back( " spare-disk " + decString(cnt++));
+ }
}
- return false;
-}
string MdPartCo::md_names[] = { "unknown", "raid0", "raid1", "raid5", "raid6",
@@ -2004,9 +2014,12 @@
bool MdPartCo::handlingMd = false;
-list<string> MdPartCo::devHandled;
+void MdPartCo::logData( const string& Dir ) {}
+<<<<<<< .mine
+=======
void MdPartCo::logData( const string& Dir ) {}
+>>>>>>> .r59349
}
--
To unsubscribe, e-mail: yast-commit+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: yast-commit+help@xxxxxxxxxxxx
| < Previous | Next > |