From 63617ac219787335b77eb40d276b41546420c763 Mon Sep 17 00:00:00 2001 From: Michael Rasmussen Date: Fri, 28 Feb 2014 01:52:48 +0100 Subject: [PATCH] Refactored to mimic zpool create --- class-diagram.dia | Bin 4610 -> 4814 bytes src/Dataset.php | 2 +- src/Exception.php | 26 +++++++ src/Snapshot.php | 2 +- src/Vdev.php | 181 ++++++++++++++++++++++++++++++++++++++++------ src/VdevType.php | 45 ++++++++++++ src/Zpool.php | 2 +- src/Zvol.php | 2 +- 8 files changed, 234 insertions(+), 26 deletions(-) create mode 100644 src/Exception.php create mode 100644 src/VdevType.php diff --git a/class-diagram.dia b/class-diagram.dia index c46a19b5231e8f727d78d4a3621bb410efafbad6..7c3b469c1a268f32c8ea0b410a1b117192443ae7 100644 GIT binary patch literal 4814 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 literal 4610 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 MW7Z?7Cf5l53u!v?_y7O^ diff --git a/src/Dataset.php b/src/Dataset.php index 210fc6e..8cf2802 100644 --- a/src/Dataset.php +++ b/src/Dataset.php @@ -7,7 +7,7 @@ * @version XXX * @copyright XXX */ -class Dataset { +class OMVModuleZFSDataset { // Attributes /** * XXX diff --git a/src/Exception.php b/src/Exception.php new file mode 100644 index 0000000..9195025 --- /dev/null +++ b/src/Exception.php @@ -0,0 +1,26 @@ + + * @abstract + */ +class OMVModuleZFSException extends Exception { + + /** + * XXX + * + * @param Disk $disk XXX + * @return void XXX + * @access public + */ + public function __construct(string $message = "", int $code = 0, Exception $previous = NULL) { + parent::__construct(string $message = "", int $code = 0, Exception $previous = NULL); + } + +} + +?> diff --git a/src/Snapshot.php b/src/Snapshot.php index 33a469a..c47bf6c 100644 --- a/src/Snapshot.php +++ b/src/Snapshot.php @@ -7,7 +7,7 @@ * @version XXX * @copyright XXX */ -class Snapshot { +class OMVModuleZFSSnapshot { // Attributes /** * XXX diff --git a/src/Vdev.php b/src/Vdev.php index e740edf..d6c0047 100644 --- a/src/Vdev.php +++ b/src/Vdev.php @@ -1,54 +1,191 @@ */ -class Vdev { +class OMVModuleZFSVdev { // Attributes /** - * XXX + * Array holding disks * - * @var list $disks + * @var array $disks * @access private */ - protected $_disks; + private $disks; + + /** + * Name of pool + * + * @var string $pool pool name + * @access private + */ + private $pool; + + /** + * Array holding disks + * + * @var OMVModuleZFSVdevType $type Vdev type + * @access private + */ + private $type; // Associations // Operations + /** + * Constructor + * + * @param $pool pool this mirror belongs to + */ + + public function __construct($pool, OMVModuleZFSVdevType $type, array $disks) { + switch ($type) { + case OMVModuleZFSVdevType::OMVMODULEZFSPLAIN: + break; + case OMVModuleZFSVdevType::OMVMODULEZFSMIRROR: + if (count($disks) < 2) + throw new OMVModuleZFSException("A mirror must contain at least 2 disks"); + break; + case OMVModuleZFSVdevType::OMVMODULEZFSRAIDZ1: + if (count($disks) < 3) + throw new OMVModuleZFSException("A Raidz1 must contain at least 3 disks"); + break; + case OMVModuleZFSVdevType::OMVMODULEZFSRAIDZ2: + if (count($disks) < 4) + throw new OMVModuleZFSException("A Raidz2 must contain at least 4 disks"); + break; + case OMVModuleZFSVdevType::OMVMODULEZFSRAIDZ3: + if (count($disks) < 5) + throw new OMVModuleZFSException("A Raidz3 must contain at least 5 disks"); + break; + } + $this->pool = $pool; + $this->disks = $disks; + $this->type = $type; + } + + /** + * Helper function to execute an external program. + * @param command The command that will be executed. + * @param output If the output argument is present, then the specified + * array will be filled with every line of output from the command. + * Trailing whitespace, such as \n, is not included in this array. + * @return The exit code of the command. + * @throws E_EXEC_FAILED + */ + private function exec($command, &$output = NULL) { + OMVUtil::exec($command, $output, $result); + return $result; + } + + private function safeExec($disk, $add = true, $change = false) { + $result = 1; + + if ($add) { + if ($change || $this->type == OMVModuleZFSVdevType::OMVMODULEZFSMIRROR) { + $disk1 = $this->disks[0]; + $result = exec("zpool attach {$this->pool} $disk1 $disk", $err); + } else { + $result = exec("zpool add {$this->pool} $disk", $err); + } + } else { + if ($this->type == OMVModuleZFSVdevType::OMVMODULEZFSMIRROR) { + $disk1 = $this->disks[0]; + if (($res = exec("zpool offline {$this->pool} $disk", $err)) > 0) + $result = $res; + else + $result = exec("zpool detach {$this->pool} $disk", $err); + } else { + $result = 1; + $err = "Cannot remove $disk from {$this->pool}"; + } + } + + return ($result) ? $err : null; + } + /** - * XXX + * Add a disk to this Vdev * - * @param Disk $disk XXX - * @return void XXX + * @param $disk the disk + * @throws OMVModuleZFSException * @access public */ - public function addDisk($disk) { - trigger_error('Not Implemented!', E_USER_WARNING); + public function addDisk($disk, $changeType = false) { + if ($this->type != OMVModuleZFSVdevType::OMVMODULEZFSPLAIN || + $this->type != OMVModuleZFSVdevType::OMVMODULEZFSMIRROR) + throw new OMVModuleZFSException("A Raidz Vdev cannot be changed"); + + if (in_array($disk, $this->disks)) + throw new OMVModuleZFSException("$disk: Already part of Vdev"); + + if ($this->type == OMVModuleZFSVdevType::OMVMODULEZFSPLAIN && + count($this->disks) < 2 && $changeType) { + $this->type = OMVModuleZFSVdevType::OMVMODULEZFSMIRROR; + } + + if (($err = safeExec($disk, true, $changeType)) != null) + throw new OMVModuleZFSException($err); + else + array_push($this->disks, $disk); } /** - * XXX + * Remove a disk from Vdev * - * @param Disk $disk XXX - * @return void XXX + * @param $disk disk to remove + * @throws OMVModuleZFSException * @access public */ - public abstract function removeDisk($disk) { - trigger_error('Not Implemented!', E_USER_WARNING); - } + public function removeDisk($disk, $changeType = false) { + $new_disks = array(); + + if ($this->type != OMVModuleZFSVdevType::OMVMODULEZFSMIRROR) + throw new OMVModuleZFSException("Only inactive hot spares," . + "cache, top-level, or log devices can be removed"); + + if (count($this->disks) < 3 && ! $changeType) + throw new OMVModuleZFSException("A mirror must contain at least 2 disks"); + + if (! in_array($disk, $this->disks)) + throw new OMVModuleZFSException("$disk: Not part of Vdev"); + + if (($err = safeExec($disk, false, $changeType)) != null) + throw new OMVModuleZFSException($err); + else { + foreach ($this->disks as $_disk) { + if (strcmp($_disk, $disk) != 0) + array_push($new_disks, $_disk); + } + } + + $this->disks = $new_disks; + } /** - * XXX + * Get disk array * - * @return list XXX + * @return array with disks * @access public */ public function getDisks() { - trigger_error('Not Implemented!', E_USER_WARNING); + return $this->disks; + } + + /** + * Get pool + * + * @return string pool + * @access public + */ + public function getPool() { + return $pool; } } diff --git a/src/VdevType.php b/src/VdevType.php new file mode 100644 index 0000000..81797b8 --- /dev/null +++ b/src/VdevType.php @@ -0,0 +1,45 @@ + + * @abstract + */ +abstract class OMVModuleZFSVdevType { + + /** + * @var OMVMODULEZFSPLAIN + * @access public + */ + const OMVMODULEZFSPLAIN = 0; + + /** + * @var OMVMODULEZFSMIRROR + * @access public + */ + const OMVMODULEZFSMIRROR = 1; + + /** + * @var OMVMODULEZFSRAIDZ1 + * @access public + */ + const OMVMODULEZFSRAIDZ1 = 2; + + /** + * @var OMVMODULEZFSRAIDZ2 + * @access public + */ + const OMVMODULEZFSRAIDZ2 = 3; + + /** + * @var OMVMODULEZFSRAIDZ3 + * @access public + */ + const OMVMODULEZFSRAIDZ3 = 4; + +} + +?> diff --git a/src/Zpool.php b/src/Zpool.php index a2fee73..ef4f835 100644 --- a/src/Zpool.php +++ b/src/Zpool.php @@ -11,7 +11,7 @@ require_once 'Zvol.php'; * @version XXX * @copyright XXX */ -class Zpool { +class OMVModuleZFSZpool { // Attributes /** * XXX diff --git a/src/Zvol.php b/src/Zvol.php index b5b5941..286d6ab 100644 --- a/src/Zvol.php +++ b/src/Zvol.php @@ -7,7 +7,7 @@ * @version XXX * @copyright XXX */ -class Zvol { +class OMVModuleZFSZvol { // Attributes /** * XXX -- 2.39.2