svn commit: r256360 - projects/zfsd/head/cddl/sbin/zfsd
Alan Somers
asomers at FreeBSD.org
Fri Oct 11 23:11:35 UTC 2013
Author: asomers
Date: Fri Oct 11 23:11:33 2013
New Revision: 256360
URL: http://svnweb.freebsd.org/changeset/base/256360
Log:
Style, organization, and syntax improvements to zfsd.
cddl/sbin/zfsd/guid.cc:
cddl/sbin/zfsd/guid.h:
cddl/sbin/zfsd/vdev.h:
cddl/sbin/zfsd/vdev.cc:
cddl/sbin/zfsd/Makefile:
o Since GUIDs pertain to more than just vdevs, move its
implementation out into its own file. No functional changes.
cddl/sbin/zfsd/case_file.cc:
cddl/sbin/zfsd/zfsd.cc:
cddl/sbin/zfsd/dev_ctl_event.cc:
o Local varables declared in the same block are aligned
by their first character.
cddl/sbin/zfsd/case_file.cc:
cddl/sbin/zfsd/zfsd.cc:
cddl/sbin/zfsd/dev_ctl_event.cc:
o Function arguments wrap to the first column after the
function's opening '('.
o syslog strings referencing a method use the fully qualified
method name.
o There are no spaces after '(' or before ')' in conditionals.
o Boolean operators in conditionals are aligned on the right
side and indented based on the level of their operation.
o Cache return values in local variable to avoid the need to
compress whitespace to make lines fit in 80 cols.
o There is one newline between function declarations.
cddl/sbin/zfsd/vdev.h:
cddl/sbin/zfsd/vdev.cc:
o Wrap comments at 76 cols (i.e. what fmt does by default).
o Method names start with a capital letter.
o Implementations are never inlined within a class definition.
This just encourages consumers of an interface to depend
unnecessarily upon the implementation.
cddl/sbin/zfsd/zfsd.cc:
o Simple checks in conditionals (like '==' and '!=') do not
require extra parenthesis.
cddl/sbin/zfsd/dev_ctl_event.cc:
o Use a constant format string so that syslog() cannot be
confused by random '%' characters in the string we are
logging.
Submitted by: gibbs
Approved by: ken (mentor)
Sponsored by: Spectra Logic Corporation
Added:
projects/zfsd/head/cddl/sbin/zfsd/guid.cc
projects/zfsd/head/cddl/sbin/zfsd/guid.h
Modified:
projects/zfsd/head/cddl/sbin/zfsd/Makefile
projects/zfsd/head/cddl/sbin/zfsd/case_file.cc
projects/zfsd/head/cddl/sbin/zfsd/dev_ctl_event.cc
projects/zfsd/head/cddl/sbin/zfsd/vdev.cc
projects/zfsd/head/cddl/sbin/zfsd/vdev.h
projects/zfsd/head/cddl/sbin/zfsd/zfsd.cc
Modified: projects/zfsd/head/cddl/sbin/zfsd/Makefile
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/Makefile Fri Oct 11 23:02:46 2013 (r256359)
+++ projects/zfsd/head/cddl/sbin/zfsd/Makefile Fri Oct 11 23:11:33 2013 (r256360)
@@ -4,11 +4,12 @@ PROG_CXX= zfsd
SRCS= callout.cc \
case_file.cc \
dev_ctl_event.cc \
+ guid.cc \
vdev.cc \
vdev_iterator.cc \
zfsd.cc \
zfsd_exception.cc \
- zpool_list.cc \
+ zpool_list.cc \
zfsd_main.cc
NO_MAN= YES
Modified: projects/zfsd/head/cddl/sbin/zfsd/case_file.cc
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/case_file.cc Fri Oct 11 23:02:46 2013 (r256359)
+++ projects/zfsd/head/cddl/sbin/zfsd/case_file.cc Fri Oct 11 23:11:33 2013 (r256360)
@@ -372,37 +372,36 @@ CaseFile::ReEvaluate(const ZfsEvent &eve
bool
CaseFile::ActivateSpare() {
- nvlist_t *config, *nvroot;
- nvlist_t **spares;
- zpool_handle_t *zhp;
- char *devPath, *vdev_type;
- const char* poolname;
- unsigned nspares, i;
+ nvlist_t *config, *nvroot;
+ nvlist_t **spares;
+ zpool_handle_t *zhp;
+ char *devPath, *vdev_type;
+ const char *poolname;
+ u_int nspares, i;
+ int error;
ZpoolList zpl(ZpoolList::ZpoolByGUID, &m_poolGUID);
if (zpl.empty()) {
- syslog(LOG_ERR, "CaseFile::Replace: could not find pool for "
- "pool_guid %ju", (uint64_t)m_poolGUID);
+ syslog(LOG_ERR, "CaseFile::ActivateSpare: Could not find pool "
+ "for pool_guid %ju.", (uint64_t)m_poolGUID);
return (false);
}
zhp = zpl.front();
poolname = zpool_get_name(zhp);
config = zpool_get_config(zhp, NULL);
if (config == NULL) {
- syslog(LOG_ERR,
- "ActivateSpare: Could not find pool config for pool %s",
- poolname);
+ syslog(LOG_ERR, "CaseFile::ActivateSpare: Could not find pool "
+ "config for pool %s", poolname);
return (false);
}
if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, &nvroot) != 0){
- syslog(LOG_ERR,
- "ActivateSpare: Could not find vdev tree for pool %s",
- poolname);
+ syslog(LOG_ERR, "CaseFile::ActivateSpare: Could not find vdev "
+ "tree for pool %s", poolname);
return (false);
}
nspares = 0;
nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_SPARES, &spares,
- &nspares);
+ &nspares);
if (nspares == 0) {
/* The pool has no spares configured */
return (false);
@@ -413,14 +412,14 @@ CaseFile::ActivateSpare() {
if (nvlist_lookup_uint64_array(spares[i],
ZPOOL_CONFIG_VDEV_STATS, (uint64_t**)&vs, &nstats) != 0) {
- syslog(LOG_ERR, "ActivateSpare: Could not find vdev "
- "stats for pool %s, spare %d",
- poolname, i);
+ syslog(LOG_ERR, "CaseFile::ActivateSpare: Could not "
+ "find vdev stats for pool %s, spare %d",
+ poolname, i);
return (false);
}
- if ( (vs->vs_aux != VDEV_AUX_SPARED)
- && (vs->vs_state == VDEV_STATE_HEALTHY)) {
+ if ((vs->vs_aux != VDEV_AUX_SPARED)
+ && (vs->vs_state == VDEV_STATE_HEALTHY)) {
/* We found a usable spare */
break;
}
@@ -431,15 +430,19 @@ CaseFile::ActivateSpare() {
return (false);
}
- if (nvlist_lookup_string(spares[i], ZPOOL_CONFIG_PATH, &devPath) != 0){
- syslog(LOG_ERR, "ActivateSpare: Cannot determine the path of "
- "pool %s, spare %d", poolname, i);
+ error = nvlist_lookup_string(spares[i], ZPOOL_CONFIG_PATH, &devPath);
+ if (error != 0) {
+ syslog(LOG_ERR, "CaseFile::ActivateSpare: Cannot determine "
+ "the path of pool %s, spare %d. Error %d",
+ poolname, i, error);
return (false);
}
- if (nvlist_lookup_string(spares[i], ZPOOL_CONFIG_TYPE, &vdev_type)!= 0){
- syslog(LOG_ERR, "ActivateSpare: Cannot determine the vdev type "
- "of pool %s, spare %d", poolname, i);
+ error = nvlist_lookup_string(spares[i], ZPOOL_CONFIG_TYPE, &vdev_type);
+ if (error != 0) {
+ syslog(LOG_ERR, "CaseFile::ActivateSpare: Cannot determine "
+ "the vdev type of pool %s, spare %d. Error %d",
+ poolname, i, error);
return (false);
}
@@ -728,7 +731,6 @@ CaseFile::SerializeEvList(const DevCtlEv
}
}
-
void
CaseFile::Serialize()
{
@@ -800,15 +802,17 @@ CaseFile::OnGracePeriodEnded()
if (zpool_vdev_degrade(zpl.front(), (uint64_t)m_vdevGUID,
VDEV_AUX_ERR_EXCEEDED) == 0) {
syslog(LOG_INFO, "Degrading vdev(%s/%s)",
- PoolGUIDString().c_str(), VdevGUIDString().c_str());
+ PoolGUIDString().c_str(),
+ VdevGUIDString().c_str());
Close();
return;
}
else {
syslog(LOG_ERR, "Degrade vdev(%s/%s): %s: %s\n",
- PoolGUIDString().c_str(), VdevGUIDString().c_str(),
- libzfs_error_action(g_zfsHandle),
- libzfs_error_description(g_zfsHandle));
+ PoolGUIDString().c_str(),
+ VdevGUIDString().c_str(),
+ libzfs_error_action(g_zfsHandle),
+ libzfs_error_description(g_zfsHandle));
}
}
Serialize();
@@ -824,7 +828,7 @@ CaseFile::Replace(const char* vdev_type,
ZpoolList zpl(ZpoolList::ZpoolByGUID, &m_poolGUID);
if (zpl.empty()) {
syslog(LOG_ERR, "CaseFile::Replace: could not find pool for "
- "pool_guid %ju", (uint64_t)m_poolGUID);
+ "pool_guid %ju.", (uint64_t)m_poolGUID);
return (false);
}
zhp = zpl.front();
Modified: projects/zfsd/head/cddl/sbin/zfsd/dev_ctl_event.cc
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/dev_ctl_event.cc Fri Oct 11 23:02:46 2013 (r256359)
+++ projects/zfsd/head/cddl/sbin/zfsd/dev_ctl_event.cc Fri Oct 11 23:11:33 2013 (r256360)
@@ -165,7 +165,7 @@ DevCtlEvent::CreateEvent(const string &e
EventFactoryRegistry::iterator foundMethod(s_factoryRegistry.find(key));
if (foundMethod == s_factoryRegistry.end()) {
syslog(LOG_INFO, "DevCtlEvent::CreateEvent: unhandled event %s",
- eventString.c_str());
+ eventString.c_str());
return (NULL);
}
return ((foundMethod->second)(type, nvpairs, eventString));
@@ -684,7 +684,7 @@ ZfsEvent::Process() const
msg << zpool_get_name(zpl.front()) << ",";
msg << vdev.GUID() << ") ";
msg << (queued ? "queued" : "dropped");
- syslog(priority, msg.str().c_str());
+ syslog(priority, "%s", msg.str().c_str());
return;
}
}
Added: projects/zfsd/head/cddl/sbin/zfsd/guid.cc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/zfsd/head/cddl/sbin/zfsd/guid.cc Fri Oct 11 23:11:33 2013 (r256360)
@@ -0,0 +1,62 @@
+/*-
+ * Copyright (c) 2012 Spectra Logic Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * substantially similar to the "NO WARRANTY" disclaimer below
+ * ("Disclaimer") and any redistribution must be conditioned upon
+ * including a substantially similar Disclaimer requirement for further
+ * binary redistribution.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Authors: Alan Somers (Spectra Logic Corporation)
+ *
+ * $FreeBSD$
+ */
+
+/**
+ * \file guid.cc
+ *
+ * Implementation of the Guid class.
+ */
+#include <sys/cdefs.h>
+
+#include <stdlib.h>
+#include <limits.h>
+#include <inttypes.h>
+
+#include <sstream>
+#include <string>
+
+#include "guid.h"
+
+__FBSDID("$FreeBSD$");
+/*=========================== Class Implementations ==========================*/
+/*----------------------------------- Guid -----------------------------------*/
+std::ostream&
+operator<< (std::ostream& out, Guid g)
+{
+ if (g.IsValid())
+ out << (uint64_t)g;
+ else
+ out << "None";
+ return (out);
+}
Added: projects/zfsd/head/cddl/sbin/zfsd/guid.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/zfsd/head/cddl/sbin/zfsd/guid.h Fri Oct 11 23:11:33 2013 (r256360)
@@ -0,0 +1,136 @@
+/*-
+ * Copyright (c) 2012 Spectra Logic Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * substantially similar to the "NO WARRANTY" disclaimer below
+ * ("Disclaimer") and any redistribution must be conditioned upon
+ * including a substantially similar Disclaimer requirement for further
+ * binary redistribution.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Authors: Alan Somers (Spectra Logic Corporation)
+ *
+ * $FreeBSD$
+ */
+
+/**
+ * \file guid.h
+ *
+ * Definition of the Guid class.
+ */
+#ifndef _GUID_H_
+#define _GUID_H_
+
+#include <string>
+
+/**
+ * \brief Object that represents guids.
+ *
+ * It can generally be manipulated as a uint64_t, but with a special
+ * value "None" that does not equal any valid guid.
+ *
+ * As of this writing, spa_generate_guid() in spa_misc.c explicitly
+ * refuses to return a guid of 0. So this class uses 0 as a flag
+ * value for "None". In the future, if 0 is allowed to be a valid
+ * guid, the implementation of this class must change.
+ */
+class Guid
+{
+public:
+ /* Constructors */
+ Guid();
+ Guid(uint64_t guid);
+
+ /* Assignment */
+ Guid& operator=(const Guid& rhs);
+
+ /* Test the validity of this guid. */
+ bool IsValid() const;
+
+ /* Comparison to other Guid operators */
+ bool operator==(const Guid& rhs) const;
+ bool operator!=(const Guid& rhs) const;
+
+ /* Integer conversion operators */
+ operator uint64_t() const;
+ operator bool() const;
+
+ static const uint64_t NONE_FLAG = 0;
+protected:
+ /* The stored value. 0 is a flag for "None" */
+ uint64_t m_GUID;
+};
+
+//- Guid Inline Public Methods ------------------------------------------------
+inline
+Guid::Guid()
+ : m_GUID(NONE_FLAG)
+{
+}
+
+inline
+Guid::Guid(uint64_t guid)
+ : m_GUID(guid)
+{
+}
+
+inline Guid&
+Guid::operator=(const Guid &rhs)
+{
+ m_GUID = rhs.m_GUID;
+ return (*this);
+}
+
+inline bool
+Guid::IsValid() const
+{
+ return (m_GUID != NONE_FLAG);
+}
+
+inline bool
+Guid::operator==(const Guid& rhs) const
+{
+ return (m_GUID == rhs.m_GUID);
+}
+
+inline bool
+Guid::operator!=(const Guid& rhs) const
+{
+ return (m_GUID != rhs.m_GUID);
+}
+
+inline
+Guid::operator uint64_t() const
+{
+ return (m_GUID);
+}
+
+inline
+Guid::operator bool() const
+{
+ return (m_GUID != NONE_FLAG);
+}
+
+/** Convert the GUID into its string representation */
+std::ostream& operator<< (std::ostream& out, Guid g);
+
+#endif /* _GUID_H_ */
Modified: projects/zfsd/head/cddl/sbin/zfsd/vdev.cc
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/vdev.cc Fri Oct 11 23:02:46 2013 (r256359)
+++ projects/zfsd/head/cddl/sbin/zfsd/vdev.cc Fri Oct 11 23:11:33 2013 (r256360)
@@ -50,16 +50,6 @@ __FBSDID("$FreeBSD$");
using std::stringstream;
/*=========================== Class Implementations ==========================*/
-/*----------------------------------- Guid -----------------------------------*/
-std::ostream& operator<< (std::ostream& out, Guid g){
- if (g.isValid())
- out << (uint64_t) g;
- else
- out << "None";
- return (out);
-}
-
-
/*----------------------------------- Vdev -----------------------------------*/
Vdev::Vdev(zpool_handle_t *pool, nvlist_t *config)
: m_poolConfig(zpool_get_config(pool, NULL)),
Modified: projects/zfsd/head/cddl/sbin/zfsd/vdev.h
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/vdev.h Fri Oct 11 23:02:46 2013 (r256359)
+++ projects/zfsd/head/cddl/sbin/zfsd/vdev.h Fri Oct 11 23:11:33 2013 (r256360)
@@ -46,56 +46,7 @@
#include <sys/fs/zfs.h>
#include <libzfs.h>
-
-/**
- * \brief Object that represents guids.
- *
- * It can generally be manipulated as a uint64_t, but with a special value
- * "None" that does not equal any valid guid.
- *
- * As of this writing, spa_generate_guid() in spa_misc.c explicitly refuses to
- * return a guid of 0. So this class uses 0 as a flag value for "None". In the
- * future, if 0 is allowed to be a valid guid, the implementation of this class
- * must change.
- */
-class Guid
-{
-public:
- /* Constructors */
- Guid(uint64_t guid) : m_GUID(guid) {};
- Guid() { m_GUID = NONE_FLAG; };
-
- /* Assignment */
- Guid& operator=(const uint64_t& other) {
- m_GUID = other;
- return (*this);
- };
-
- /* Test the validity of this guid. */
- bool isValid() const { return ((bool)m_GUID); };
-
- /* Comparison to other Guid operators */
- bool operator==(const Guid& other) const {
- return (m_GUID == other.m_GUID);
- };
- bool operator!=(const Guid& other) const {
- return (m_GUID != other.m_GUID);
- };
-
- /* Integer conversion operators */
- operator uint64_t() const { return (m_GUID); };
- operator bool() const { return (m_GUID != NONE_FLAG); };
-
-protected:
- const static uint64_t NONE_FLAG = 0;
- /* The stored value. 0 is a flag for "None" */
- uint64_t m_GUID;
-};
-
-
-/** Convert the GUID into its string representation */
-std::ostream& operator<< (std::ostream& out, Guid g);
-
+#include "guid.h"
/**
* \brief Wrapper class for a vdev's name/value configuration list
@@ -161,6 +112,7 @@ private:
nvlist_t *m_config;
};
+//- Vdev Inline Public Methods ------------------------------------------------
inline Guid
Vdev::PoolGUID() const
{
Modified: projects/zfsd/head/cddl/sbin/zfsd/zfsd.cc
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/zfsd.cc Fri Oct 11 23:02:46 2013 (r256359)
+++ projects/zfsd/head/cddl/sbin/zfsd/zfsd.cc Fri Oct 11 23:11:33 2013 (r256360)
@@ -518,16 +518,17 @@ ZfsDaemon::EventsPending()
fds->events = POLLIN;
fds->revents = 0;
result = poll(fds, NUM_ELEMENTS(fds), /*timeout*/0);
- } while ( (result == -1) && (errno == EINTR) ) ;
+ } while (result == -1 && errno == EINTR);
if (result == -1) {
/* Unexpected error; try reconnecting the socket */
- throw ZfsdException(
- "ZfsdDaemon::EventsPending(): Unexpected error from poll()");
+ throw ZfsdException("ZfsdDaemon::EventsPending(): "
+ "Unexpected error from poll()");
}
if ((fds->revents & POLLHUP) != 0) {
- /* The other end hung up the socket. Throw an exception
+ /*
+ * The other end hung up the socket. Throw an exception
* so ZfsDaemon will try to reconnect
*/
throw ZfsdException("ZfsDaemon::EventsPending(): Got POLLHUP");
@@ -535,8 +536,8 @@ ZfsDaemon::EventsPending()
if ((fds->revents & POLLERR) != 0) {
/* Try reconnecting. */
- throw ZfsdException(
- "ZfsdDaemon:EventsPending(): Got POLLERR. Reconnecting.");
+ throw ZfsdException("ZfsdDaemon:EventsPending(): Got POLLERR. "
+ " Reconnecting.");
}
return ((fds->revents & POLLIN) != 0);
@@ -703,5 +704,3 @@ ZfsDaemon::EventLoop()
}
}
}
-
-
More information about the svn-src-projects
mailing list