On 3/11/2012 9:14 PM, Steven Dake wrote: > Make man page for ploadstart we don´t have man pages for test/ ? it´s not in tool/ anymore. > > The structure > > +static char buffer[1000000]; > > > make this dynamic please - 1mb used all the time for a test service > doesn't make alot of sense. I know it was this way in the code > previously but freeing was difficult, now freeing doesn't matter since > the patch exits. Yeps.. works for me. Will do at merge. Fabio > > Reviewed-by: Steven Dake <sdake@xxxxxxxxxx> > > > On 03/10/2012 09:15 AM, Fabio M. Di Nitto wrote: >> From: "Fabio M. Di Nitto" <fdinitto@xxxxxxxxxx> >> >> pload is a performance benchmark that measures the onwire >> speed of corosync. >> >> problem is that once pload has been executed, the cluster >> is basically dead. >> >> turn pload into a test tool, by removing corosync-pload tool >> and user library. >> >> cleanup pload code to make it more readable and drop lots >> of unnecessary stuff. >> >> add test/ploadstart tool that can configure and start pload >> via cmap calls. >> >> Signed-off-by: Fabio M. Di Nitto <fdinitto@xxxxxxxxxx> >> --- >> configure.ac | 1 - >> corosync.spec.in | 4 - >> exec/coroparse.c | 14 ++ >> exec/pload.c | 343 ++++++++++++++++++++++-------------------- >> exec/util.h | 3 +- >> include/Makefile.am | 4 +- >> include/corosync/ipc_pload.h | 70 --------- >> include/corosync/pload.h | 110 -------------- >> lib/Makefile.am | 5 +- >> lib/libpload.versions | 6 - >> lib/libpload.verso | 1 - >> lib/pload.c | 202 ------------------------- >> man/Makefile.am | 1 - >> man/corosync-pload.8 | 69 --------- >> man/index.html | 4 - >> pkgconfig/Makefile.am | 2 +- >> test/Makefile.am | 10 +- >> test/ploadstart.sh | 60 ++++++++ >> tools/.gitignore | 1 - >> tools/Makefile.am | 5 +- >> tools/corosync-pload.c | 79 ---------- >> 21 files changed, 270 insertions(+), 724 deletions(-) >> delete mode 100644 include/corosync/ipc_pload.h >> delete mode 100644 include/corosync/pload.h >> delete mode 100644 lib/libpload.versions >> delete mode 100644 lib/libpload.verso >> delete mode 100644 lib/pload.c >> delete mode 100644 man/corosync-pload.8 >> create mode 100644 test/ploadstart.sh >> delete mode 100644 tools/corosync-pload.c >> >> diff --git a/configure.ac b/configure.ac >> index 9f22fce..721eb2d 100644 >> --- a/configure.ac >> +++ b/configure.ac >> @@ -217,7 +217,6 @@ SONAME="${SOMAJOR}.${SOMINOR}.${SOMICRO}" >> LIB_SONAME_IMPORT([cfg]) >> LIB_SONAME_IMPORT([cpg]) >> LIB_SONAME_IMPORT([evs]) >> -LIB_SONAME_IMPORT([pload]) >> LIB_SONAME_IMPORT([quorum]) >> LIB_SONAME_IMPORT([sam]) >> LIB_SONAME_IMPORT([votequorum]) >> diff --git a/corosync.spec.in b/corosync.spec.in >> index b7e21a9..51fb7ad 100644 >> --- a/corosync.spec.in >> +++ b/corosync.spec.in >> @@ -151,7 +151,6 @@ fi >> %{_sbindir}/corosync-cmapctl >> %{_sbindir}/corosync-cfgtool >> %{_sbindir}/corosync-fplay >> -%{_sbindir}/corosync-pload >> %{_sbindir}/corosync-cpgtool >> %{_sbindir}/corosync-quorumtool >> %{_sbindir}/corosync-notifyd >> @@ -191,7 +190,6 @@ fi >> %{_mandir}/man8/corosync-cfgtool.8* >> %{_mandir}/man8/corosync-cpgtool.8* >> %{_mandir}/man8/corosync-fplay.8* >> -%{_mandir}/man8/corosync-pload.8* >> %{_mandir}/man8/corosync-notifyd.8* >> %{_mandir}/man8/corosync-quorumtool.8* >> %{_mandir}/man5/corosync.conf.5* >> @@ -241,7 +239,6 @@ This package contains corosync libraries. >> %{_libdir}/libtotem_pg.so.* >> %{_libdir}/libquorum.so.* >> %{_libdir}/libvotequorum.so.* >> -%{_libdir}/libpload.so.* >> %{_libdir}/libsam.so.* >> %{_libdir}/libcorosync_common.so.* >> >> @@ -286,7 +283,6 @@ The Corosync Cluster Engine APIs. >> %{_libdir}/libtotem_pg.so >> %{_libdir}/libquorum.so >> %{_libdir}/libvotequorum.so >> -%{_libdir}/libpload.so >> %{_libdir}/libsam.so >> %{_libdir}/libcorosync_common.so >> %{_libdir}/pkgconfig/*.pc >> diff --git a/exec/coroparse.c b/exec/coroparse.c >> index c69a462..e9081ff 100644 >> --- a/exec/coroparse.c >> +++ b/exec/coroparse.c >> @@ -90,6 +90,7 @@ enum main_cp_cb_data_state { >> MAIN_CP_CB_DATA_STATE_QDEVICE, >> MAIN_CP_CB_DATA_STATE_NODELIST, >> MAIN_CP_CB_DATA_STATE_NODELIST_NODE, >> + MAIN_CP_CB_DATA_STATE_PLOAD >> }; >> >> struct key_value_list_item { >> @@ -386,6 +387,16 @@ static int main_config_parser_cb(const char *path, >> switch (data->state) { >> case MAIN_CP_CB_DATA_STATE_NORMAL: >> break; >> + case MAIN_CP_CB_DATA_STATE_PLOAD: >> + if ((strcmp(path, "pload.count") == 0) || >> + (strcmp(path, "pload.size") == 0)) { >> + if (safe_atoi(value, &i) != 0) { >> + goto atoi_error; >> + } >> + icmap_set_uint32(path, i); >> + add_as_string = 0; >> + } >> + break; >> case MAIN_CP_CB_DATA_STATE_QUORUM: >> if ((strcmp(path, "quorum.expected_votes") == 0) || >> (strcmp(path, "quorum.votes") == 0) || >> @@ -696,6 +707,9 @@ static int main_config_parser_cb(const char *path, >> switch (data->state) { >> case MAIN_CP_CB_DATA_STATE_NORMAL: >> break; >> + case MAIN_CP_CB_DATA_STATE_PLOAD: >> + data->state = MAIN_CP_CB_DATA_STATE_NORMAL; >> + break; >> case MAIN_CP_CB_DATA_STATE_INTERFACE: >> /* >> * Create new interface section >> diff --git a/exec/pload.c b/exec/pload.c >> index 8301477..a7d3e33 100644 >> --- a/exec/pload.c >> +++ b/exec/pload.c >> @@ -3,7 +3,8 @@ >> * >> * All rights reserved. >> * >> - * Author: Steven Dake (sdake@xxxxxxxxxx) >> + * Authors: Steven Dake (sdake@xxxxxxxxxx) >> + * Fabio M. Di Nitto (fdinitto@xxxxxxxxxx) >> * >> * This software licensed under BSD license, the text of which follows: >> * >> @@ -34,109 +35,53 @@ >> >> #include <config.h> >> >> -#include <sys/types.h> >> -#include <sys/socket.h> >> -#include <sys/un.h> >> -#include <sys/time.h> >> -#include <sys/ioctl.h> >> -#include <netinet/in.h> >> -#include <sys/uio.h> >> -#include <unistd.h> >> -#include <fcntl.h> >> -#include <stdlib.h> >> -#include <stdio.h> >> -#include <errno.h> >> -#include <time.h> >> -#include <netinet/in.h> >> -#include <arpa/inet.h> >> -#include <string.h> >> -#include <assert.h> >> - >> #include <qb/qblist.h> >> #include <qb/qbutil.h> >> #include <qb/qbipc_common.h> >> >> #include <corosync/swab.h> >> -#include <corosync/corotypes.h> >> #include <corosync/corodefs.h> >> -#include <corosync/mar_gen.h> >> #include <corosync/coroapi.h> >> -#include <corosync/ipc_pload.h> >> -#include <corosync/list.h> >> +#include <corosync/icmap.h> >> #include <corosync/logsys.h> >> >> #include "service.h" >> +#include "util.h" >> >> LOGSYS_DECLARE_SUBSYS ("PLOAD"); >> >> -enum pload_exec_message_req_types { >> - MESSAGE_REQ_EXEC_PLOAD_START = 0, >> - MESSAGE_REQ_EXEC_PLOAD_MCAST = 1 >> -}; >> - >> /* >> * Service Interfaces required by service_message_handler struct >> */ >> -static char *pload_exec_init_fn (struct corosync_api_v1 *corosync_api); >> - >> -static void pload_confchg_fn ( >> - enum totem_configuration_type configuration_type, >> - const unsigned int *member_list, size_t member_list_entries, >> - const unsigned int *left_list, size_t left_list_entries, >> - const unsigned int *joined_list, size_t joined_list_entries, >> - const struct memb_ring_id *ring_id); >> - >> -static void message_handler_req_exec_pload_start (const void *msg, >> - unsigned int nodeid); >> - >> -static void message_handler_req_exec_pload_mcast (const void *msg, >> - unsigned int nodeid); >> - >> -static void req_exec_pload_start_endian_convert (void *msg); >> - >> -static void req_exec_pload_mcast_endian_convert (void *msg); >> - >> -static void message_handler_req_pload_start (void *conn, const void *msg); >> - >> -static int pload_lib_init_fn (void *conn); >> - >> -static int pload_lib_exit_fn (void *conn); >> - >> -static char buffer[1000000]; >> - >> -static unsigned int msgs_delivered = 0; >> - >> -static unsigned int msgs_wanted = 0; >> - >> -static unsigned int msg_size = 0; >> - >> -static unsigned int msg_code = 1; >> - >> -static unsigned int msgs_sent = 0; >> +static struct corosync_api_v1 *api; >> >> +static char *pload_exec_init_fn (struct corosync_api_v1 *corosync_api); >> >> -static struct corosync_api_v1 *api; >> +/* >> + * on wire / network bits >> + */ >> +enum pload_exec_message_req_types { >> + MESSAGE_REQ_EXEC_PLOAD_START = 0, >> + MESSAGE_REQ_EXEC_PLOAD_MCAST = 1 >> +}; >> >> struct req_exec_pload_start { >> struct qb_ipc_request_header header; >> - unsigned int msg_code; >> - unsigned int msg_count; >> - unsigned int msg_size; >> - unsigned int time_interval; >> + uint32_t msg_count; >> + uint32_t msg_size; >> }; >> >> struct req_exec_pload_mcast { >> struct qb_ipc_request_header header; >> - unsigned int msg_code; >> }; >> >> -static struct corosync_lib_handler pload_lib_engine[] = >> -{ >> - { /* 0 */ >> - .lib_handler_fn = message_handler_req_pload_start, >> - .flow_control = CS_LIB_FLOW_CONTROL_NOT_REQUIRED >> - } >> -}; >> +static void message_handler_req_exec_pload_start (const void *msg, >> + unsigned int nodeid); >> +static void req_exec_pload_start_endian_convert (void *msg); >> + >> +static void message_handler_req_exec_pload_mcast (const void *msg, >> + unsigned int nodeid); >> +static void req_exec_pload_mcast_endian_convert (void *msg); >> >> static struct corosync_exec_handler pload_exec_engine[] = >> { >> @@ -150,100 +95,108 @@ static struct corosync_exec_handler pload_exec_engine[] = >> } >> }; >> >> +/* >> + * internal bits and pieces >> + */ >> + >> +/* >> + * really unused buffer but we need to give something to iovec >> + */ >> +static char buffer[1000000]; >> + >> +/* >> + * wanted/size come from config >> + * sent/delivered track the runtime status >> + */ >> +static uint32_t msgs_wanted = 0; >> +static uint32_t msg_size = 0; >> +static uint32_t msgs_sent = 0; >> +static uint32_t msgs_delivered = 0; >> + >> +/* >> + * bit flip to track if we are running or not and avoid multiple instances >> + */ >> +static uint8_t pload_started = 0; >> + >> +/* >> + * handle for scheduler >> + */ >> +static hdb_handle_t start_mcasting_handle; >> + >> +/* >> + * timing/profiling >> + */ >> +static unsigned long long int tv1; >> +static unsigned long long int tv2; >> +static unsigned long long int tv_elapsed; >> + >> +/* >> + * Service engine hooks >> + */ >> struct corosync_service_engine pload_service_engine = { >> .name = "corosync profile loading service", >> .id = PLOAD_SERVICE, >> .priority = 1, >> - .private_data_size = 0, >> .flow_control = CS_LIB_FLOW_CONTROL_REQUIRED, >> - .lib_init_fn = pload_lib_init_fn, >> - .lib_exit_fn = pload_lib_exit_fn, >> - .lib_engine = pload_lib_engine, >> - .lib_engine_count = sizeof (pload_lib_engine) / sizeof (struct corosync_lib_handler), >> .exec_engine = pload_exec_engine, >> .exec_engine_count = sizeof (pload_exec_engine) / sizeof (struct corosync_exec_handler), >> - .confchg_fn = pload_confchg_fn, >> - .exec_init_fn = pload_exec_init_fn, >> - .exec_dump_fn = NULL >> + .exec_init_fn = pload_exec_init_fn >> }; >> >> -static DECLARE_LIST_INIT (confchg_notify); >> - >> struct corosync_service_engine *pload_get_service_engine_ver0 (void) >> { >> return (&pload_service_engine); >> } >> >> -static char *pload_exec_init_fn (struct corosync_api_v1 *corosync_api) >> -{ >> -#ifdef COROSYNC_SOLARIS >> - logsys_subsys_init(); >> -#endif >> - api = corosync_api; >> - >> - return NULL; >> -} >> - >> -static void pload_confchg_fn ( >> - enum totem_configuration_type configuration_type, >> - const unsigned int *member_list, size_t member_list_entries, >> - const unsigned int *left_list, size_t left_list_entries, >> - const unsigned int *joined_list, size_t joined_list_entries, >> - const struct memb_ring_id *ring_id) >> -{ >> -} >> +/* >> + * internal use only functions >> + */ >> >> -static int pload_lib_init_fn (void *conn) >> -{ >> - return (0); >> -} >> +/* >> + * not all architectures / OSes define timersub in sys/time.h or time.h >> + */ >> >> -static int pload_lib_exit_fn (void *conn) >> -{ >> - return (0); >> -} >> +#ifndef timersub >> +#warning Using internal timersub definition. Check your include header files >> +#define timersub(a, b, result) \ >> +do { \ >> + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ >> + (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ >> + if ((result)->tv_usec < 0) { \ >> + --(result)->tv_sec; \ >> + (result)->tv_usec += 1000000; \ >> + } \ >> +} while (0) >> +#endif /* timersub */ >> >> -static void message_handler_req_pload_start (void *conn, const void *msg) >> +/* >> + * tell all cluster nodes to start mcasting >> + */ >> +static void pload_send_start (uint32_t count, uint32_t size) >> { >> - const struct req_lib_pload_start *req_lib_pload_start = msg; >> struct req_exec_pload_start req_exec_pload_start; >> struct iovec iov; >> >> - req_exec_pload_start.header.id = >> - SERVICE_ID_MAKE (PLOAD_SERVICE, MESSAGE_REQ_EXEC_PLOAD_START); >> - req_exec_pload_start.msg_code = req_lib_pload_start->msg_code; >> - req_exec_pload_start.msg_size = req_lib_pload_start->msg_size; >> - req_exec_pload_start.msg_count = req_lib_pload_start->msg_count; >> - req_exec_pload_start.time_interval = req_lib_pload_start->time_interval; >> + req_exec_pload_start.header.id = SERVICE_ID_MAKE (PLOAD_SERVICE, MESSAGE_REQ_EXEC_PLOAD_START); >> + req_exec_pload_start.msg_count = count; >> + req_exec_pload_start.msg_size = size; >> iov.iov_base = (void *)&req_exec_pload_start; >> iov.iov_len = sizeof (struct req_exec_pload_start); >> >> - msgs_delivered = 0; >> - >> - msgs_wanted = 0; >> - >> - msgs_sent = 0; >> - >> api->totem_mcast (&iov, 1, TOTEM_AGREED); >> } >> >> -static void req_exec_pload_start_endian_convert (void *msg) >> -{ >> -} >> - >> -static void req_exec_pload_mcast_endian_convert (void *msg) >> -{ >> -} >> - >> -static int send_message (const void *arg) >> +/* >> + * send N empty data messages of size X >> + */ >> +static int pload_send_message (const void *arg) >> { >> struct req_exec_pload_mcast req_exec_pload_mcast; >> struct iovec iov[2]; >> unsigned int res; >> unsigned int iov_len = 1; >> >> - req_exec_pload_mcast.header.id = >> - SERVICE_ID_MAKE (PLOAD_SERVICE, MESSAGE_REQ_EXEC_PLOAD_MCAST); >> + req_exec_pload_mcast.header.id = SERVICE_ID_MAKE (PLOAD_SERVICE, MESSAGE_REQ_EXEC_PLOAD_MCAST); >> req_exec_pload_mcast.header.size = sizeof (struct req_exec_pload_mcast) + msg_size; >> >> iov[0].iov_base = (void *)&req_exec_pload_mcast; >> @@ -260,9 +213,9 @@ static int send_message (const void *arg) >> break; >> } else { >> msgs_sent++; >> - msg_code++; >> } >> } while (msgs_sent < msgs_wanted); >> + >> if (msgs_sent == msgs_wanted) { >> return (0); >> } else { >> @@ -270,14 +223,77 @@ static int send_message (const void *arg) >> } >> } >> >> -hdb_handle_t start_mcasting_handle; >> +/* >> + * hook into icmap to read config at runtime >> + * we do NOT start by default, ever! >> + */ >> +static void pload_read_config( >> + int32_t event, >> + const char *key_name, >> + struct icmap_notify_value new_val, >> + struct icmap_notify_value old_val, >> + void *user_data) >> +{ >> + uint32_t pload_count = 1500000; >> + uint32_t pload_size = 300; >> + char *pload_start = NULL; >> + >> + icmap_get_uint32("pload.count", &pload_count); >> + icmap_get_uint32("pload.size", &pload_size); >> + >> + if (pload_size >= sizeof(buffer)) { >> + pload_size = sizeof(buffer); >> + log_printf(LOGSYS_LEVEL_WARNING, "pload size limited to %u", pload_size); >> + } >> + >> + if ((!pload_started) && >> + (icmap_get_string("pload.start", &pload_start) == CS_OK)) { >> + if (!strcmp(pload_start, >> + "i_totally_understand_pload_will_crash_my_cluster_and_kill_corosync_on_exit")) { >> + log_printf(LOGSYS_LEVEL_WARNING, "Starting pload!"); >> + pload_send_start(pload_count, pload_size); >> + } >> + free(pload_start); >> + } >> +} >> >> -static void start_mcasting (void) >> +/* >> + * exec functions >> + */ >> +static char *pload_exec_init_fn (struct corosync_api_v1 *corosync_api) >> { >> - api->schedwrk_create ( >> - &start_mcasting_handle, >> - send_message, >> - &start_mcasting_handle); >> + icmap_track_t pload_track = NULL; >> + >> +#ifdef COROSYNC_SOLARIS >> + logsys_subsys_init(); >> +#endif >> + >> + api = corosync_api; >> + >> + /* >> + * track changes to pload config and start only on demand >> + */ >> + if (icmap_track_add("pload.", >> + ICMAP_TRACK_ADD | ICMAP_TRACK_DELETE | ICMAP_TRACK_MODIFY | ICMAP_TRACK_PREFIX, >> + pload_read_config, >> + NULL, >> + &pload_track) != CS_OK) { >> + return (char *)"Unable to setup pload config tracking!\n"; >> + } >> + >> + return NULL; >> +} >> + >> +/* >> + * network messages/onwire handlers >> + */ >> + >> +static void req_exec_pload_start_endian_convert (void *msg) >> +{ >> + struct req_exec_pload_start *req_exec_pload_start = msg; >> + >> + req_exec_pload_start->msg_count = swab32(req_exec_pload_start->msg_count); >> + req_exec_pload_start->msg_size = swab32(req_exec_pload_start->msg_size); >> } >> >> static void message_handler_req_exec_pload_start ( >> @@ -286,37 +302,34 @@ static void message_handler_req_exec_pload_start ( >> { >> const struct req_exec_pload_start *req_exec_pload_start = msg; >> >> + /* >> + * don't start multiple instances >> + */ >> + if (pload_started) { >> + return; >> + } >> + >> + pload_started = 1; >> + >> msgs_wanted = req_exec_pload_start->msg_count; >> msg_size = req_exec_pload_start->msg_size; >> - msg_code = req_exec_pload_start->msg_code; >> >> - start_mcasting (); >> + api->schedwrk_create ( >> + &start_mcasting_handle, >> + pload_send_message, >> + &start_mcasting_handle); >> } >> -#ifndef timersub >> -#define timersub(a, b, result) \ >> -do { \ >> - (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ >> - (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ >> - if ((result)->tv_usec < 0) { \ >> - --(result)->tv_sec; \ >> - (result)->tv_usec += 1000000; \ >> - } \ >> -} while (0) >> -#endif /* timersub */ >> >> -unsigned long long int tv1; >> -unsigned long long int tv2; >> -unsigned long long int tv_elapsed; >> -int last_msg_no = 0; >> +static void req_exec_pload_mcast_endian_convert (void *msg) >> +{ >> +} >> >> static void message_handler_req_exec_pload_mcast ( >> const void *msg, >> unsigned int nodeid) >> { >> - const struct req_exec_pload_mcast *pload_mcast = msg; >> char log_buffer[1024]; >> >> - last_msg_no = pload_mcast->msg_code; >> if (msgs_delivered == 0) { >> tv1 = qb_util_nano_current_get (); >> } >> @@ -332,5 +345,7 @@ static void message_handler_req_exec_pload_mcast ( >> (((float)msgs_delivered) * ((float)msg_size) / >> (tv_elapsed / 1000000000.0)) / (1024.0 * 1024.0)); >> log_printf (LOGSYS_LEVEL_NOTICE, "%s", log_buffer); >> + log_printf (LOGSYS_LEVEL_WARNING, "Stopping corosync the hard way"); >> + exit(COROSYNC_DONE_PLOAD); >> } >> } >> diff --git a/exec/util.h b/exec/util.h >> index a6e3593..faf038f 100644 >> --- a/exec/util.h >> +++ b/exec/util.h >> @@ -56,7 +56,8 @@ enum e_corosync_done { >> COROSYNC_DONE_AQUIRE_LOCK = 17, >> COROSYNC_DONE_ALREADY_RUNNING = 18, >> COROSYNC_DONE_STD_TO_NULL_REDIR = 19, >> - COROSYNC_DONE_SERVICE_ENGINE_INIT = 20 >> + COROSYNC_DONE_SERVICE_ENGINE_INIT = 20, >> + COROSYNC_DONE_PLOAD = 99 >> }; >> >> >> diff --git a/include/Makefile.am b/include/Makefile.am >> index ccd594f..e15d36c 100644 >> --- a/include/Makefile.am >> +++ b/include/Makefile.am >> @@ -34,8 +34,8 @@ MAINTAINERCLEANFILES = Makefile.in corosync/config.h.in >> CS_H = hdb.h cpg.h cfg.h evs.h corodefs.h \ >> corotypes.h quorum.h votequorum.h sam.h cmap.h >> >> -CS_INTERNAL_H = ipc_cfg.h ipc_cpg.h ipc_evs.h ipc_pload.h ipc_quorum.h \ >> - pload.h quorum.h sq.h ipc_votequorum.h ipc_cmap.h \ >> +CS_INTERNAL_H = ipc_cfg.h ipc_cpg.h ipc_evs.h ipc_quorum.h \ >> + quorum.h sq.h ipc_votequorum.h ipc_cmap.h \ >> logsys.h coroapi.h icmap.h mar_gen.h list.h swab.h cs_config.h >> >> TOTEM_H = totem.h totemip.h totempg.h >> diff --git a/include/corosync/ipc_pload.h b/include/corosync/ipc_pload.h >> deleted file mode 100644 >> index e815584..0000000 >> --- a/include/corosync/ipc_pload.h >> +++ /dev/null >> @@ -1,70 +0,0 @@ >> -/* >> - * Copyright (c) 2008-2011 Red Hat, Inc. >> - * >> - * All rights reserved. >> - * >> - * Author: Steven Dake (sdake@xxxxxxxxxx) >> - * >> - * This software licensed under BSD license, the text of which follows: >> - * >> - * Redistribution and use in source and binary forms, with or without >> - * modification, are permitted provided that the following conditions are met: >> - * >> - * - Redistributions of source code must retain the above copyright notice, >> - * this list of conditions and the following disclaimer. >> - * - Redistributions in binary form must reproduce the above copyright notice, >> - * this list of conditions and the following disclaimer in the documentation >> - * and/or other materials provided with the distribution. >> - * - Neither the name of the MontaVista Software, Inc. nor the names of its >> - * contributors may be used to endorse or promote products derived from this >> - * software without specific prior written permission. >> - * >> - * 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 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >> - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE >> - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 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 DAMAGE. >> - */ >> -#ifndef IPC_PLOAD_H_DEFINED >> -#define IPC_PLOAD_H_DEFINED >> - >> -#include <corosync/corotypes.h> >> -#include <corosync/mar_gen.h> >> - >> -enum req_lib_evs_types { >> - MESSAGE_REQ_PLOAD_START = 0, >> -}; >> - >> -enum res_lib_evs_types { >> - MESSAGE_RES_PLOAD_START = 0, >> -}; >> - >> -struct res_lib_pload_start { >> - struct qb_ipc_response_header header; >> - unsigned int dataset[1024]; >> -}; >> - >> -struct res_lib_pload_mcast { >> - struct qb_ipc_response_header header; >> -}; >> - >> -struct req_lib_pload_start { >> - struct qb_ipc_request_header header; >> - unsigned int msg_code; >> - unsigned int msg_size; >> - unsigned int msg_count; >> - unsigned int time_interval; >> -}; >> - >> -struct req_lib_pload_mcast { >> - struct qb_ipc_request_header header; >> - unsigned int code; >> -}; >> - >> -#endif /* IPC_PLOAD_H_DEFINED */ >> diff --git a/include/corosync/pload.h b/include/corosync/pload.h >> deleted file mode 100644 >> index 8109d8c..0000000 >> --- a/include/corosync/pload.h >> +++ /dev/null >> @@ -1,110 +0,0 @@ >> -/* >> - * Copyright (c) 2008-2011 Red Hat, Inc. >> - * >> - * All rights reserved. >> - * >> - * Author: Steven Dake (sdake@xxxxxxxxxx) >> - * >> - * This software licensed under BSD license, the text of which follows: >> - * >> - * Redistribution and use in source and binary forms, with or without >> - * modification, are permitted provided that the following conditions are met: >> - * >> - * - Redistributions of source code must retain the above copyright notice, >> - * this list of conditions and the following disclaimer. >> - * - Redistributions in binary form must reproduce the above copyright notice, >> - * this list of conditions and the following disclaimer in the documentation >> - * and/or other materials provided with the distribution. >> - * - Neither the name of the MontaVista Software, Inc. nor the names of its >> - * contributors may be used to endorse or promote products derived from this >> - * software without specific prior written permission. >> - * >> - * 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 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >> - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE >> - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 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 DAMAGE. >> - */ >> -#ifndef COROSYNC_PLOAD_H_DEFINED >> -#define COROSYNC_PLOAD_H_DEFINED >> - >> -#include <sys/types.h> >> -#include <netinet/in.h> >> - >> -#ifdef __cplusplus >> -extern "C" { >> -#endif >> - >> -/** >> - * @defgroup corosync Other API services provided by corosync >> - */ >> -/** >> - * @addtogroup pload_corosync >> - * >> - * @{ >> - */ >> - >> -typedef uint64_t pload_handle_t; >> - >> -typedef enum { >> - PLOAD_OK = 1, >> - PLOAD_ERR_LIBRARY = 2, >> - PLOAD_ERR_TIMEOUT = 5, >> - PLOAD_ERR_TRY_AGAIN = 6, >> - PLOAD_ERR_INVALID_PARAM = 7, >> - PLOAD_ERR_NO_MEMORY = 8, >> - PLOAD_ERR_BAD_HANDLE = 9, >> - PLOAD_ERR_ACCESS = 11, >> - PLOAD_ERR_NOT_EXIST = 12, >> - PLOAD_ERR_EXIST = 14, >> - PLOAD_ERR_NOT_SUPPORTED = 20, >> - PLOAD_ERR_SECURITY = 29, >> - PLOAD_ERR_TOO_MANY_GROUPS=30 >> -} pload_error_t; >> - >> -typedef struct { >> - int callback; >> -} pload_callbacks_t; >> - >> -/** @} */ >> - >> -/** >> - * Create a new pload connection >> - */ >> -pload_error_t pload_initialize ( >> - pload_handle_t *handle, >> - pload_callbacks_t *callbacks); >> - >> -/** >> - * Close the pload handle >> - */ >> -pload_error_t pload_finalize ( >> - pload_handle_t handle); >> - >> -/** >> - * Get a file descriptor on which to poll. >> - * >> - * @note pload_handle_t is NOT a file descriptor and may not be used directly. >> - */ >> -pload_error_t pload_fd_get ( >> - pload_handle_t handle, >> - int *fd); >> - >> -unsigned int pload_start ( >> - pload_handle_t handle, >> - unsigned int code, >> - unsigned int msg_count, >> - unsigned int msg_size); >> - >> - >> -#ifdef __cplusplus >> -} >> -#endif >> - >> -#endif /* COROSYNC_PLOAD_H_DEFINED */ >> diff --git a/lib/Makefile.am b/lib/Makefile.am >> index 6ded330..58c7b78 100644 >> --- a/lib/Makefile.am >> +++ b/lib/Makefile.am >> @@ -47,13 +47,12 @@ AM_LDFLAGS = -lpthread -L../common_lib -lcorosync_common >> INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include >> >> lib_LIBRARIES = libcpg.a libquorum.a libevs.a libcfg.a \ >> - libvotequorum.a libpload.a libsam.a libcmap.a >> + libvotequorum.a libsam.a libcmap.a >> SHARED_LIBS_SO = $(lib_LIBRARIES:%.a=%.so) >> >> libcpg_a_SOURCES = cpg.c >> libcfg_a_SOURCES = cfg.c >> libevs_a_SOURCES = evs.c >> -libpload_a_SOURCES = pload.c >> libquorum_a_SOURCES = quorum.c >> libvotequorum_a_SOURCES = votequorum.c >> libcmap_a_SOURCES = cmap.c >> @@ -63,7 +62,7 @@ libsam_a_SOURCES = sam.c >> noinst_HEADERS = util.h \ >> libcfg.versions \ >> libcpg.versions \ >> - libevs.versions libpload.versions \ >> + libevs.versions \ >> libquorum.versions libvotequorum.versions \ >> libsam.versions libcmap.versions >> >> diff --git a/lib/libpload.versions b/lib/libpload.versions >> deleted file mode 100644 >> index b5cf01a..0000000 >> --- a/lib/libpload.versions >> +++ /dev/null >> @@ -1,6 +0,0 @@ >> -# Version and symbol export for libSaClm.so >> - >> -COROSYNC_PLOAD_1.0 { >> - global: >> - pload_start; >> -}; >> diff --git a/lib/libpload.verso b/lib/libpload.verso >> deleted file mode 100644 >> index fcdb2e1..0000000 >> --- a/lib/libpload.verso >> +++ /dev/null >> @@ -1 +0,0 @@ >> -4.0.0 >> diff --git a/lib/pload.c b/lib/pload.c >> deleted file mode 100644 >> index 6cb5f44..0000000 >> --- a/lib/pload.c >> +++ /dev/null >> @@ -1,202 +0,0 @@ >> -/* >> - * Copyright (c) 2008-2012 Red Hat, Inc. >> - * >> - * All rights reserved. >> - * >> - * Author: Steven Dake (sdake@xxxxxxxxxx) >> - * >> - * This software licensed under BSD license, the text of which follows: >> - * >> - * Redistribution and use in source and binary forms, with or without >> - * modification, are permitted provided that the following conditions are met: >> - * >> - * - Redistributions of source code must retain the above copyright notice, >> - * this list of conditions and the following disclaimer. >> - * - Redistributions in binary form must reproduce the above copyright notice, >> - * this list of conditions and the following disclaimer in the documentation >> - * and/or other materials provided with the distribution. >> - * - Neither the name of the MontaVista Software, Inc. nor the names of its >> - * contributors may be used to endorse or promote products derived from this >> - * software without specific prior written permission. >> - * >> - * 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 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >> - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE >> - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 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 DAMAGE. >> - */ >> - >> -#include <config.h> >> - >> -#include <stdlib.h> >> -#include <string.h> >> -#include <unistd.h> >> -#include <sys/types.h> >> -#include <sys/socket.h> >> -#include <errno.h> >> - >> -#include <qb/qbipcc.h> >> - >> -#include <corosync/corotypes.h> >> -#include <corosync/corodefs.h> >> -#include <corosync/hdb.h> >> - >> -#include <corosync/pload.h> >> -#include <corosync/ipc_pload.h> >> - >> -#include "util.h" >> - >> -struct pload_inst { >> - qb_ipcc_connection_t *c; >> - unsigned int finalize; >> -}; >> - >> -DECLARE_HDB_DATABASE(pload_handle_t_db,NULL); >> - >> -/** >> - * @defgroup pload_corosync The extended virtual synchrony passthrough API >> - * @ingroup corosync >> - * >> - * @{ >> - */ >> -/** >> - * test >> - * @param handle The handle of pload initialize >> - * @param callbacks The callbacks for pload_initialize >> - * @returns PLOAD_OK >> - */ >> -unsigned int pload_initialize ( >> - pload_handle_t *handle, >> - pload_callbacks_t *callbacks) >> -{ >> - cs_error_t error; >> - struct pload_inst *pload_inst; >> - >> - error = hdb_error_to_cs(hdb_handle_create (&pload_handle_t_db, sizeof (struct pload_inst), handle)); >> - if (error != CS_OK) { >> - goto error_no_destroy; >> - } >> - >> - error = hdb_error_to_cs(hdb_handle_get (&pload_handle_t_db, *handle, (void *)&pload_inst)); >> - if (error != CS_OK) { >> - goto error_destroy; >> - } >> - >> - pload_inst->c = qb_ipcc_connect ("pload", IPC_REQUEST_SIZE); >> - if (pload_inst->c == NULL) { >> - error = qb_to_cs_error(-errno); >> - goto error_put_destroy; >> - } >> - >> - (void)hdb_handle_put (&pload_handle_t_db, *handle); >> - >> - return (CS_OK); >> - >> -error_put_destroy: >> - (void)hdb_handle_put (&pload_handle_t_db, *handle); >> -error_destroy: >> - (void)hdb_handle_destroy (&pload_handle_t_db, *handle); >> -error_no_destroy: >> - return (error); >> -} >> - >> -unsigned int pload_finalize ( >> - pload_handle_t handle) >> -{ >> - struct pload_inst *pload_inst; >> - cs_error_t error; >> - >> - error = hdb_error_to_cs (hdb_handle_get (&pload_handle_t_db, handle, (void *)&pload_inst)); >> - if (error != CS_OK) { >> - return (error); >> - } >> - >> - /* >> - * Another thread has already started finalizing >> - */ >> - if (pload_inst->finalize) { >> - (void)hdb_handle_put (&pload_handle_t_db, handle); >> - return (PLOAD_ERR_BAD_HANDLE); >> - } >> - >> - pload_inst->finalize = 1; >> - >> - qb_ipcc_disconnect(pload_inst->c); >> - >> - (void)hdb_handle_destroy (&pload_handle_t_db, handle); >> - >> - (void)hdb_handle_put (&pload_handle_t_db, handle); >> - >> - return (PLOAD_OK); >> -} >> - >> -unsigned int pload_fd_get ( >> - pload_handle_t handle, >> - int *fd) >> -{ >> - cs_error_t error; >> - struct pload_inst *pload_inst; >> - >> - error = hdb_error_to_cs(hdb_handle_get (&pload_handle_t_db, handle, (void *)&pload_inst)); >> - if (error != CS_OK) { >> - return (error); >> - } >> - >> - qb_ipcc_fd_get (pload_inst->c, fd); >> - >> - (void)hdb_handle_put (&pload_handle_t_db, handle); >> - >> - return (CS_OK); >> -} >> - >> -unsigned int pload_start ( >> - pload_handle_t handle, >> - unsigned int code, >> - unsigned int msg_count, >> - unsigned int msg_size) >> -{ >> - unsigned int error; >> - struct pload_inst *pload_inst; >> - struct iovec iov; >> - struct req_lib_pload_start req_lib_pload_start; >> - struct res_lib_pload_start res_lib_pload_start; >> - >> - error = hdb_error_to_cs(hdb_handle_get (&pload_handle_t_db, handle, (void *)&pload_inst)); >> - if (error != CS_OK) { >> - return (error); >> - } >> - >> - req_lib_pload_start.header.size = sizeof (struct req_lib_pload_start); >> - req_lib_pload_start.header.id = MESSAGE_REQ_PLOAD_START; >> - req_lib_pload_start.msg_code = code; >> - req_lib_pload_start.msg_count = msg_count; >> - req_lib_pload_start.msg_size = msg_size; >> - >> - iov.iov_base = (char *)&req_lib_pload_start; >> - iov.iov_len = sizeof (struct req_lib_pload_start); >> - >> - error = qb_to_cs_error(qb_ipcc_sendv_recv(pload_inst->c, >> - &iov, >> - 1, >> - &res_lib_pload_start, >> - sizeof (struct res_lib_pload_start), CS_IPC_TIMEOUT_MS)); >> - >> - if (error != CS_OK) { >> - goto error_exit; >> - } >> - >> - error = res_lib_pload_start.header.error; >> - >> -error_exit: >> - (void)hdb_handle_put (&pload_handle_t_db, handle); >> - >> - return (error); >> -} >> - >> -/** @} */ >> diff --git a/man/Makefile.am b/man/Makefile.am >> index 69c536c..54b1e19 100644 >> --- a/man/Makefile.am >> +++ b/man/Makefile.am >> @@ -135,7 +135,6 @@ dist_man_MANS = corosync.conf.5 \ >> corosync-cfgtool.8 \ >> corosync-cpgtool.8 \ >> corosync-fplay.8 \ >> - corosync-pload.8 \ >> corosync-notifyd.8 \ >> corosync-quorumtool.8 \ >> corosync_overview.8 \ >> diff --git a/man/corosync-pload.8 b/man/corosync-pload.8 >> deleted file mode 100644 >> index b04fff4..0000000 >> --- a/man/corosync-pload.8 >> +++ /dev/null >> @@ -1,69 +0,0 @@ >> -.\"/* >> -.\" * Copyright (C) 2010 Red Hat, Inc. >> -.\" * >> -.\" * All rights reserved. >> -.\" * >> -.\" * Author: Angus Salkeld <asalkeld@xxxxxxxxxx> >> -.\" * >> -.\" * This software licensed under BSD license, the text of which follows: >> -.\" * >> -.\" * Redistribution and use in source and binary forms, with or without >> -.\" * modification, are permitted provided that the following conditions are met: >> -.\" * >> -.\" * - Redistributions of source code must retain the above copyright notice, >> -.\" * this list of conditions and the following disclaimer. >> -.\" * - Redistributions in binary form must reproduce the above copyright notice, >> -.\" * this list of conditions and the following disclaimer in the documentation >> -.\" * and/or other materials provided with the distribution. >> -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its >> -.\" * contributors may be used to endorse or promote products derived from this >> -.\" * software without specific prior written permission. >> -.\" * >> -.\" * 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 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >> -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE >> -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 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 DAMAGE. >> -.\" */ >> -.TH COROSYNC-PLOAD 8 2010-05-30 >> -.SH NAME >> -corosync-pload \- Start payload test. >> -.SH SYNOPSIS >> -.B "corosync-pload" >> -.SH DESCRIPTION >> -.B corosync-pload >> -starts the pload service. >> -This is used as a test tool to generate traffic. >> -All nodes will begin transmitting messages and they will stop when >> -1500000 messages have been received per node. >> -.PP >> -To view the progress of this execute: >> -.PP >> -$ corosync-cmapctl runtime.services.pload. >> -.br >> -runtime.services.pload.service_id=13 >> -.br >> -runtime.services.pload.0.tx=3 >> -.br >> -runtime.services.pload.0.rx=2 >> -.br >> -runtime.services.pload.1.tx=2478788 >> -.br >> -runtime.services.pload.1.rx=4467870 >> -.PP >> -At the end of the run a log message will be written showing the number of messages written >> -and the time that this took. >> -.PP >> -corosync[4931]: [PLOAD ] 1500000 Writes 300 bytes per write 30.838 seconds runtime, 48640.968 TP/S, 13.916 MB/S. >> -.TP >> -.SH SEE ALSO >> -.BR corosync-cmapctl (8) >> -.SH AUTHOR >> -Angus Salkeld >> -.PP >> diff --git a/man/index.html b/man/index.html >> index b067b71..793d511 100644 >> --- a/man/index.html >> +++ b/man/index.html >> @@ -67,10 +67,6 @@ >> Description of corosync-cmapctl tool. >> <br> >> >> - <a href="corosync-pload.8.html">corosync-pload(8)</a>: >> - Description of corosync-pload tool. >> - <br> >> - >> <a href="corosync-quorumtool.8.html">corosync-quorumtool(8)</a>: >> Description of corosync-quorumtool tool. >> <br> >> diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am >> index 50691ba..ac2f974 100644 >> --- a/pkgconfig/Makefile.am >> +++ b/pkgconfig/Makefile.am >> @@ -32,7 +32,7 @@ MAINTAINERCLEANFILES = Makefile.in >> >> EXTRA_DIST = libtemplate.pc.in corosync.pc.in >> >> -LIBS = cfg cpg evs pload quorum \ >> +LIBS = cfg cpg evs quorum \ >> totem_pg votequorum sam cmap corosync_common >> >> target_LIBS = $(LIBS:%=lib%.pc) >> diff --git a/test/Makefile.am b/test/Makefile.am >> index af19ab2..647aad2 100644 >> --- a/test/Makefile.am >> +++ b/test/Makefile.am >> @@ -33,11 +33,15 @@ >> MAINTAINERCLEANFILES = Makefile.in >> INCLUDES = -I$(top_builddir)/include/corosync -I$(top_srcdir)/include >> >> +EXTRA_DIST = ploadstart.sh >> + >> noinst_PROGRAMS = testevs evsbench evsverify cpgverify testcpg testcpg2 cpgbench \ >> testquorum testvotequorum1 testvotequorum2 \ >> stress_cpgfdget stress_cpgcontext cpgbound testsam \ >> testcpgzc cpgbenchzc testzcgc stress_cpgzc >> >> +noinst_SCRIPTS = ploadstart >> + >> COMMON_OPTS = -L../lib -L../common_lib -Wl,-rpath,../common_lib >> >> testevs_LDADD = -levs $(LIBQB_LIBS) >> @@ -77,6 +81,10 @@ cpgbenchzc_LDFLAGS = $(COMMON_OPTS) >> testsam_LDADD = -lsam -lcmap -lquorum $(LIBQB_LIBS) >> testsam_LDFLAGS = $(COMMON_OPTS) >> >> +ploadstart: ploadstart.sh >> + cp $^ $@ >> + chmod 755 $@ >> + >> LINT_FILES1:=$(filter-out sa_error.c, $(wildcard *.c)) >> LINT_FILES2:=$(filter-out testevsth.c, $(LINT_FILES1)) >> LINT_FILES:=$(filter-out testparse.c, $(LINT_FILES2)) >> @@ -85,4 +93,4 @@ lint: >> -for f in $(LINT_FILES) ; do echo Splint $$f ; splint $(INCLUDES) $(LINT_FLAGS) $(CFLAGS) $$f ; done >> >> clean-local: >> - rm -f fdata >> + rm -f fdata ploadstart >> diff --git a/test/ploadstart.sh b/test/ploadstart.sh >> new file mode 100644 >> index 0000000..7bd7c9d >> --- /dev/null >> +++ b/test/ploadstart.sh >> @@ -0,0 +1,60 @@ >> +#!/bin/bash >> + >> +set -e >> + >> +msg_count="" >> +msg_size="" >> + >> +usage() { >> + echo "ploadstart [options]" >> + echo "" >> + echo "Options:" >> + echo " -c msg_count Number of messages to send (max UINT32_T default 1500000)" >> + echo " -s msg_size Size of messages in bytes (max 1000000 default 300)" >> + echo " -h display this help" >> +} >> + >> +while getopts "hs:c:" optflag; do >> + case "$optflag" in >> + h) >> + usage >> + exit 0 >> + ;; >> + c) >> + msg_count="$OPTARG" >> + ;; >> + s) >> + msg_size="$OPTARG" >> + ;; >> + \?|:) >> + usage >> + exit 1 >> + ;; >> + esac >> +done >> + >> +[ -n "$msg_count" ] && corosync-cmapctl -s pload.count u32 $msg_count >> +[ -n "$msg_size" ] && corosync-cmapctl -s pload.size u32 $msg_size >> + >> +echo "***** WARNING *****" >> +echo "" >> +echo "Running pload test will kill your cluster and all corosync daemons will exit" >> +echo "at the end of the load test" >> +echo "" >> +echo "***** END OF WARNING *****" >> +echo "" >> +echo "YOU HAVE BEEN WARNED" >> +echo "" >> +echo "If you agree, and want to proceed, please type:" >> +echo "Yes, I fully understand the risks of what I am doing" >> +echo "" >> +read -p "type here: " ans >> + >> +[ "$ans" = "Yes, I fully understand the risks of what I am doing" ] || { >> + echo "Wise choice.. or you simply didn't type it right" >> + exit 0 >> +} >> + >> +corosync-cmapctl -s pload.start str i_totally_understand_pload_will_crash_my_cluster_and_kill_corosync_on_exit >> + >> +echo "PLOAD started, please see corosync.log for final results" >> diff --git a/tools/.gitignore b/tools/.gitignore >> index 2d9fa0f..c63290e 100644 >> --- a/tools/.gitignore >> +++ b/tools/.gitignore >> @@ -2,7 +2,6 @@ corosync-cfgtool >> corosync-cpgtool >> corosync-fplay >> corosync-keygen >> -corosync-pload >> corosync-quorumtool >> corosync-notifyd >> corosync-cmapctl >> diff --git a/tools/Makefile.am b/tools/Makefile.am >> index ed24725..5cd738b 100644 >> --- a/tools/Makefile.am >> +++ b/tools/Makefile.am >> @@ -35,7 +35,7 @@ INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \ >> >> sbin_PROGRAMS = corosync-fplay corosync-cfgtool \ >> corosync-keygen \ >> - corosync-pload corosync-cpgtool corosync-quorumtool \ >> + corosync-cpgtool corosync-quorumtool \ >> corosync-notifyd corosync-cmapctl >> >> bin_SCRIPTS = corosync-blackbox >> @@ -56,9 +56,6 @@ corosync_cmapctl_LDADD = -lcorosync_common -lcmap $(LIBQB_LIBS) >> >> corosync_fplay_LDADD = $(LIBQB_LIBS) >> >> -corosync_pload_LDFLAGS = $(COMMON_OPTS) >> -corosync_pload_LDADD = -lpload $(LIBQB_LIBS) >> - >> corosync_cfgtool_LDFLAGS= $(COMMON_OPTS) >> corosync_cfgtool_LDADD = -lcfg $(LIBQB_LIBS) >> >> diff --git a/tools/corosync-pload.c b/tools/corosync-pload.c >> deleted file mode 100644 >> index 0f2f646..0000000 >> --- a/tools/corosync-pload.c >> +++ /dev/null >> @@ -1,79 +0,0 @@ >> -/* >> - * Copyright (c) 2008-2011 Red Hat, Inc. >> - * >> - * All rights reserved. >> - * >> - * Author: Steven Dake (sdake@xxxxxxxxxx) >> - * >> - * This software licensed under BSD license, the text of which follows: >> - * >> - * Redistribution and use in source and binary forms, with or without >> - * modification, are permitted provided that the following conditions are met: >> - * >> - * - Redistributions of source code must retain the above copyright notice, >> - * this list of conditions and the following disclaimer. >> - * - Redistributions in binary form must reproduce the above copyright notice, >> - * this list of conditions and the following disclaimer in the documentation >> - * and/or other materials provided with the distribution. >> - * - Neither the name of the MontaVista Software, Inc. nor the names of its >> - * contributors may be used to endorse or promote products derived from this >> - * software without specific prior written permission. >> - * >> - * 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 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE >> - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE >> - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 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 DAMAGE. >> - */ >> - >> -#include <config.h> >> - >> -#include <stdio.h> >> -#include <stdlib.h> >> -#include <unistd.h> >> -#include <errno.h> >> -#include <unistd.h> >> -#include <time.h> >> -#include <sys/time.h> >> -#include <sys/types.h> >> -#include <sys/socket.h> >> -#include <sys/select.h> >> -#include <sys/un.h> >> -#include <sys/socket.h> >> -#include <netinet/in.h> >> -#include <arpa/inet.h> >> - >> -#include <corosync/corotypes.h> >> -#include <corosync/pload.h> >> - >> -#ifndef timersub >> -#define timersub(a, b, result) \ >> -do { \ >> - (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ >> - (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ >> - if ((result)->tv_usec < 0) { \ >> - --(result)->tv_sec; \ >> - (result)->tv_usec += 1000000; \ >> - } \ >> -} while (0) >> -#endif /* timersub */ >> - >> -int main (void) { >> - pload_error_t result; >> - pload_handle_t handle; >> - >> - result = pload_initialize (&handle, NULL); >> - printf ("Init result %d\n", result); >> - result = pload_start ( >> - handle, >> - 0, /* code */ >> - 1500000, /* count */ >> - 300); /* size */ >> - return (0); >> -} > _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss