1/*- 2 * Copyright (c) 2009 The FreeBSD Foundation 3 * Copyright (c) 2010-2011 Pawel Jakub Dawidek <pawel@dawidek.net> 4 * All rights reserved. 5 * 6 * This software was developed by Pawel Jakub Dawidek under sponsorship from 7 * the FreeBSD Foundation. 8 * --- 15 unchanged lines hidden (view full) --- 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31#include <sys/cdefs.h> |
32__FBSDID("$FreeBSD: head/sbin/hastd/primary.c 225830 2011-09-28 13:08:51Z pjd $"); |
33 34#include <sys/types.h> 35#include <sys/time.h> 36#include <sys/bio.h> 37#include <sys/disk.h> 38#include <sys/refcount.h> 39#include <sys/stat.h> 40 --- 250 unchanged lines hidden (view full) --- 291 buf = activemap_bitmap(res->hr_amp, &size); 292 PJDLOG_ASSERT(buf != NULL); 293 PJDLOG_ASSERT((size % res->hr_local_sectorsize) == 0); 294 if (pwrite(res->hr_localfd, buf, size, METADATA_SIZE) != 295 (ssize_t)size) { 296 pjdlog_errno(LOG_ERR, "Unable to flush activemap to disk"); 297 return (-1); 298 } |
299 if (res->hr_metaflush == 1 && g_flush(res->hr_localfd) == -1) { 300 if (errno == EOPNOTSUPP) { 301 pjdlog_warning("The %s provider doesn't support flushing write cache. Disabling it.", 302 res->hr_localpath); 303 res->hr_metaflush = 0; 304 } else { 305 pjdlog_errno(LOG_ERR, 306 "Unable to flush disk cache on activemap update"); 307 return (-1); 308 } 309 } |
310 return (0); 311} 312 313static bool 314real_remote(const struct hast_resource *res) 315{ 316 317 return (strcmp(res->hr_remoteaddr, "none") != 0); --- 1687 unchanged lines hidden (view full) --- 2005 PJDLOG_ASSERT(gres == res); 2006 nv_assert(nv, "remoteaddr"); 2007 nv_assert(nv, "sourceaddr"); 2008 nv_assert(nv, "replication"); 2009 nv_assert(nv, "checksum"); 2010 nv_assert(nv, "compression"); 2011 nv_assert(nv, "timeout"); 2012 nv_assert(nv, "exec"); |
2013 nv_assert(nv, "metaflush"); |
2014 2015 ncomps = HAST_NCOMPONENTS; 2016 2017#define MODIFIED_REMOTEADDR 0x01 2018#define MODIFIED_SOURCEADDR 0x02 2019#define MODIFIED_REPLICATION 0x04 2020#define MODIFIED_CHECKSUM 0x08 2021#define MODIFIED_COMPRESSION 0x10 2022#define MODIFIED_TIMEOUT 0x20 2023#define MODIFIED_EXEC 0x40 |
2024#define MODIFIED_METAFLUSH 0x80 |
2025 modified = 0; 2026 2027 vstr = nv_get_string(nv, "remoteaddr"); 2028 if (strcmp(gres->hr_remoteaddr, vstr) != 0) { 2029 /* 2030 * Don't copy res->hr_remoteaddr to gres just yet. 2031 * We want remote_close() to log disconnect from the old 2032 * addresses, not from the new ones. --- 25 unchanged lines hidden (view full) --- 2058 gres->hr_timeout = vint; 2059 modified |= MODIFIED_TIMEOUT; 2060 } 2061 vstr = nv_get_string(nv, "exec"); 2062 if (strcmp(gres->hr_exec, vstr) != 0) { 2063 strlcpy(gres->hr_exec, vstr, sizeof(gres->hr_exec)); 2064 modified |= MODIFIED_EXEC; 2065 } |
2066 vint = nv_get_int32(nv, "metaflush"); 2067 if (gres->hr_metaflush != vint) { 2068 gres->hr_metaflush = vint; 2069 modified |= MODIFIED_METAFLUSH; 2070 } |
2071 2072 /* 2073 * Change timeout for connected sockets. 2074 * Don't bother if we need to reconnect. 2075 */ 2076 if ((modified & MODIFIED_TIMEOUT) != 0 && 2077 (modified & (MODIFIED_REMOTEADDR | MODIFIED_SOURCEADDR | 2078 MODIFIED_REPLICATION)) == 0) { --- 33 unchanged lines hidden (view full) --- 2112 } 2113#undef MODIFIED_REMOTEADDR 2114#undef MODIFIED_SOURCEADDR 2115#undef MODIFIED_REPLICATION 2116#undef MODIFIED_CHECKSUM 2117#undef MODIFIED_COMPRESSION 2118#undef MODIFIED_TIMEOUT 2119#undef MODIFIED_EXEC |
2120#undef MODIFIED_METAFLUSH |
2121 2122 pjdlog_info("Configuration reloaded successfully."); 2123} 2124 2125static void 2126guard_one(struct hast_resource *res, unsigned int ncomp) 2127{ 2128 struct proto_conn *in, *out; --- 107 unchanged lines hidden --- |