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..24063f7
--- /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.count 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);
-}
--
1.7.7.6
_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss
[Corosync Project]
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Free Online Dating]
[Linux Kernel]
[Linux SCSI]
[XFree86]