gettext("Forget all formerly connected consumers"), "clear" => gettext("Remove metadata from disk"), "insert" => gettext("Insert consumer into mirror"), "remove" => gettext("Remove consumer from mirror"), "activate" => gettext("Reactivate consumer on mirror"), "deactivate" => gettext("Deactivate consumer from mirror"), "rebuild" => gettext("Force rebuild of mirror consumer"), ); /* User tried to pass a bogus action */ if (!empty($_REQUEST['action']) && !array_key_exists($_REQUEST['action'], $action_list)) { header("Location: diag_gmirror.php"); return; } if ($_POST) { if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm"))) { header("Location: diag_gmirror.php"); return; } $input_errors = ""; if (($_POST['action'] != "clear") && !is_valid_mirror($_POST['mirror'])) { $input_errors[] = gettext("A valid mirror name must be supplied."); } if (!empty($_POST['consumer']) && !is_valid_consumer($_POST['consumer'])) { $input_errors[] = gettext("A valid consumer name must be supplied"); } /* Additional action-specific validation that hasn't already been tested */ switch ($_POST['action']) { case "insert": if (!is_consumer_unused($_POST['consumer'])) { $input_errors[] = gettext("Consumer is already in use and cannot be inserted. Remove consumer from existing mirror first."); } if (gmirror_consumer_has_metadata($_POST['consumer'])) { $input_errors[] = gettext("Consumer has metadata from an existing mirror. Clear metadata before inserting consumer."); } $mstat = gmirror_get_status_single($_POST['mirror']); if (strtoupper($mstat) != "COMPLETE") { $input_errors[] = gettext("Mirror is not in a COMPLETE state, cannot insert consumer. Forget disconnected disks or wait for rebuild to finish."); } break; case "clear": if (!is_consumer_unused($_POST['consumer'])) { $input_errors[] = gettext("Consumer is in use and cannot be cleared. Deactivate disk first."); } if (!gmirror_consumer_has_metadata($_POST['consumer'])) { $input_errors[] = gettext("Consumer has no metadata to clear."); } break; case "activate": if (is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) { $input_errors[] = gettext("Consumer is already present on specified mirror."); } if (!gmirror_consumer_has_metadata($_POST['consumer'])) { $input_errors[] = gettext("Consumer has no metadata and cannot be reactivated."); } break; case "remove": case "deactivate": case "rebuild": if (!is_consumer_in_mirror($_POST['consumer'], $_POST['mirror'])) { $input_errors[] = gettext("Consumer must be present on the specified mirror."); } break; } $result = 0; if (empty($input_errors)) { switch ($_POST['action']) { case "forget": $result = gmirror_forget_disconnected($_POST['mirror']); break; case "clear": $result = gmirror_clear_consumer($_POST['consumer']); break; case "insert": $result = gmirror_insert_consumer($_POST['mirror'], $_POST['consumer']); break; case "remove": $result = gmirror_remove_consumer($_POST['mirror'], $_POST['consumer']); break; case "activate": $result = gmirror_activate_consumer($_POST['mirror'], $_POST['consumer']); break; case "deactivate": $result = gmirror_deactivate_consumer($_POST['mirror'], $_POST['consumer']); break; case "rebuild": $result = gmirror_force_rebuild($_POST['mirror'], $_POST['consumer']); break; } $redir = "Location: diag_gmirror.php"; if ($result != 0) { $redir .= "?error=" . urlencode($result); } /* If we reload the page too fast, the gmirror information may be missing or not up-to-date. */ sleep(3); header($redir); return; } } $mirror_status = gmirror_get_status(); $mirror_list = gmirror_get_mirrors(); $unused_disks = gmirror_get_disks(); $unused_consumers = array(); foreach ($unused_disks as $disk) { if (is_consumer_unused($disk)) { $unused_consumers = array_merge($unused_consumers, gmirror_get_all_unused_consumer_sizes_on_disk($disk)); } } if ($input_errors) { print_input_errors($input_errors); } if ($_REQUEST["error"] && ($_REQUEST["error"] != 0)) { print_info_box(gettext("There was an error performing the chosen mirror operation. Check the System Log for details.")); } ?>



: " />

0): ?> $name): $components = count($name["components"]); ?> 1): $morecomponents = array_slice($name["components"], 1); ?>

Size:


1)): ?>

1)): ?>

0): ?>
$mirror_size): ?>
' . gettext("To repair a failed mirror, first perform a 'Forget' command on the mirror, followed by an 'insert' action on the new consumer."), 'default'); endif; ?>