[sheepdog] [PATCH v2 1/8] add sd_assert()
Liu Yuan
namei.unix at gmail.com
Wed Apr 8 04:19:32 CEST 2015
From: Liu Yuan <liuyuan at cmss.chinamobile.com>
This is a preparation patch to dissociate util.h and utli.c from sheepdog,
in order to be used by shared lib.
Signed-off-by: Liu Yuan <liuyuan at cmss.chinamobile.com>
---
configure.ac | 11 -----------
include/logger.h | 7 +++++++
include/util.h | 17 +----------------
lib/fec.c | 14 +++++++-------
lib/logger.c | 4 ++--
lib/work.c | 2 +-
sheep/cluster/corosync.c | 2 +-
sheep/cluster/shepherd.c | 4 ++--
sheep/cluster/zookeeper.c | 2 +-
sheep/group.c | 6 +++---
sheep/md.c | 4 ++--
sheep/migrate.c | 2 +-
sheep/object_cache.c | 6 +++---
sheep/ops.c | 6 +++---
sheep/plain_store.c | 2 +-
sheep/request.c | 10 +++++-----
sheep/sheep.c | 2 +-
sheep/trace/trace.c | 4 ++--
sheep/vdi.c | 16 ++++++++--------
19 files changed, 51 insertions(+), 70 deletions(-)
diff --git a/configure.ac b/configure.ac
index cece3d8..3635dc8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -206,10 +206,6 @@ AC_ARG_ENABLE([debug],
[ --enable-debug : enable debug build. ],
[ default="no" ])
-AC_ARG_ENABLE([assert],
- [ --enable-assert : enable assert. ],,
- [ enable_assert="yes" ],)
-
AC_ARG_ENABLE([unittest],
[ --enable-unittest : enable unittest. ],
[ default="no" ])
@@ -342,13 +338,6 @@ else
OPT_CFLAGS="-DNDEBUG"
fi
-if test "x${enable_assert}" = xyes; then
- AC_DEFINE_UNQUOTED([ASSERT], [1], [Enabling assert])
- PACKAGE_FEATURES="$PACKAGE_FEATURES assert"
-else
- OPT_CFLAGS="-DNASSERT"
-fi
-
# gdb flags
if test "x${GCC}" = xyes; then
GDB_FLAGS="-ggdb3"
diff --git a/include/logger.h b/include/logger.h
index f360342..df69faf 100644
--- a/include/logger.h
+++ b/include/logger.h
@@ -94,6 +94,13 @@ void sd_backtrace(void);
abort(); \
})
+#define sd_assert(expr) \
+({ \
+ if (!(expr)) { \
+ sd_emerg("Asserting `%s' failed.", #expr); \
+ abort(); \
+ } \
+})
static inline int loglevel_str2num(const char *str)
{
diff --git a/include/util.h b/include/util.h
index c5b5ac9..632a193 100644
--- a/include/util.h
+++ b/include/util.h
@@ -13,6 +13,7 @@
#include <pthread.h>
#include <errno.h>
#include <sys/param.h>
+#include <assert.h>
#include "logger.h"
#include "list.h"
@@ -214,22 +215,6 @@ double get_time_interval(const struct timespec *start,
__removed; \
})
-#ifdef assert
-#error "Don't include assert.h, use util.h for assert()"
-#endif
-
-#ifndef NASSERT
-#define assert(expr) \
-({ \
- if (!(expr)) { \
- sd_emerg("Asserting `%s' failed.", #expr); \
- abort(); \
- } \
-})
-#else
-#define assert(expr) ((void)0)
-#endif /* NASSERT */
-
#define SWAP(a, b) { typeof(a) tmp; tmp = a; a = b; b = tmp; }
/* urcu helpers */
diff --git a/lib/fec.c b/lib/fec.c
index fb40773..268bce6 100644
--- a/lib/fec.c
+++ b/lib/fec.c
@@ -313,7 +313,7 @@ static void _invert_mat(uint8_t *src, unsigned d)
goto found_piv;
}
} else
- assert(ipiv[ix] <= 1);
+ sd_assert(ipiv[ix] <= 1);
}
}
}
@@ -331,7 +331,7 @@ found_piv:
indxc[col] = icol;
pivot_row = &src[icol * d];
c = pivot_row[icol];
- assert(c != 0);
+ sd_assert(c != 0);
if (c != 1) { /* otherwise this is a NOP */
/*
* this is done often , but optimizing is not so
@@ -451,7 +451,7 @@ void init_fec(void)
void fec_free(struct fec *p)
{
- assert(p != NULL && p->magic == (((FEC_MAGIC ^ p->d) ^ p->dp) ^
+ sd_assert(p != NULL && p->magic == (((FEC_MAGIC ^ p->d) ^ p->dp) ^
(unsigned long) (p->enc_matrix)));
free(p->enc_matrix);
if (cpu_has_ssse3)
@@ -528,7 +528,7 @@ void fec_encode(const struct fec *code,
size_t stride = ((sz-d) < STRIDE) ? (sz-d) : STRIDE;
for (i = 0; i < num_block_nums; i++) {
fecnum = block_nums[i];
- assert(fecnum >= code->d);
+ sd_assert(fecnum >= code->d);
memset(fecs[i]+d, 0, stride);
p = &(code->enc_matrix[fecnum * code->d]);
for (j = 0; j < code->d; j++)
@@ -570,7 +570,7 @@ void fec_decode(const struct fec *code,
unsigned char row = 0;
unsigned char col = 0;
- assert(code->d * code->d < 8 * 1024 * 1024);
+ sd_assert(code->d * code->d < 8 * 1024 * 1024);
build_decode_matrix_into_space(code, idx, code->d, m_dec);
for (row = 0; row < code->d; row++) {
@@ -578,7 +578,7 @@ void fec_decode(const struct fec *code,
* If the block whose number is i is present, then it is
* required to be in the i'th element.
*/
- assert((idx[row] >= code->d) || (idx[row] == row));
+ sd_assert((idx[row] >= code->d) || (idx[row] == row));
if (idx[row] >= code->d) {
memset(outpkts[outix], 0, sz);
for (col = 0; col < code->d; col++)
@@ -614,7 +614,7 @@ static inline void decode_prepare(struct fec *ctx, const uint8_t *dp[],
out[i] = dp[i];
outidx[i] = i;
} else {
- assert(p < ctx->dp);
+ sd_assert(p < ctx->dp);
out[i] = dp[p];
outidx[i] = p;
while (++p < ctx->dp && !dp[p])
diff --git a/lib/logger.c b/lib/logger.c
index da0ebac..39d3283 100644
--- a/lib/logger.c
+++ b/lib/logger.c
@@ -214,7 +214,7 @@ static int json_log_formatter(char *buff, size_t size,
char *p = buff;
ssize_t len;
- assert(logger_user_info);
+ sd_assert(logger_user_info);
len = snprintf(p, size, "{ \"user_info\": "
"{\"program_name\": \"%s\", \"port\": %d},"
@@ -854,7 +854,7 @@ fallback:
void set_loglevel(int new_loglevel)
{
- assert(SDOG_EMERG <= new_loglevel && new_loglevel <= SDOG_DEBUG);
+ sd_assert(SDOG_EMERG <= new_loglevel && new_loglevel <= SDOG_DEBUG);
sd_log_level = new_loglevel;
}
diff --git a/lib/work.c b/lib/work.c
index 25260b4..14e3117 100644
--- a/lib/work.c
+++ b/lib/work.c
@@ -133,7 +133,7 @@ static void suspend(int num, siginfo_t *info, void *context)
eventfd_xwrite(ack_efd, 1); /* ack of suspend */
value = eventfd_xread(resume_efd);
- assert(value == 1);
+ sd_assert(value == 1);
eventfd_xwrite(ack_efd, 1); /* ack of resume */
}
diff --git a/sheep/cluster/corosync.c b/sheep/cluster/corosync.c
index b7fc025..ea65603 100644
--- a/sheep/cluster/corosync.c
+++ b/sheep/cluster/corosync.c
@@ -317,7 +317,7 @@ static bool __corosync_dispatch_one(struct corosync_event *cevent)
this_node = cevent->sender;
idx = find_sd_node(cpg_nodes, nr_cpg_nodes, node);
- assert(idx >= 0);
+ sd_assert(idx >= 0);
cpg_nodes[idx].node = *node;
sd_update_node_handler(node);
break;
diff --git a/sheep/cluster/shepherd.c b/sheep/cluster/shepherd.c
index 45a85c1..570bff5 100644
--- a/sheep/cluster/shepherd.c
+++ b/sheep/cluster/shepherd.c
@@ -454,8 +454,8 @@ static void read_msg_from_shepherd(void)
static void shepherd_comm_handler(int fd, int events, void *data)
{
- assert(fd == sph_comm_fd);
- assert(data == NULL);
+ sd_assert(fd == sph_comm_fd);
+ sd_assert(data == NULL);
if (events & EPOLLIN)
read_msg_from_shepherd();
diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
index bf94871..70f87b2 100644
--- a/sheep/cluster/zookeeper.c
+++ b/sheep/cluster/zookeeper.c
@@ -1197,7 +1197,7 @@ static void zk_handle_update_node(struct zk_event *ev)
sd_read_lock(&zk_tree_lock);
t = zk_tree_search_nolock(&snode->nid);
- assert(t);
+ sd_assert(t);
t->node = *snode;
build_node_list();
sd_rw_unlock(&zk_tree_lock);
diff --git a/sheep/group.c b/sheep/group.c
index 0fce7c0..7c7cb6d 100644
--- a/sheep/group.c
+++ b/sheep/group.c
@@ -225,7 +225,7 @@ static struct vdi_op_message *prepare_cluster_msg(struct request *req,
/* notify data that was set in process_work */
size = sizeof(*msg) + req->rp.data_length;
- assert(size <= SD_MAX_EVENT_BUF_SIZE);
+ sd_assert(size <= SD_MAX_EVENT_BUF_SIZE);
msg = xzalloc(size);
memcpy(&msg->req, &req->rq, sizeof(struct sd_req));
@@ -745,7 +745,7 @@ static void cinfo_collection_work(struct work *work)
sd_debug("start collection of cinfo...");
- assert(w == collect_work);
+ sd_assert(w == collect_work);
rb_for_each_entry(n, &w->members->nroot, rb) {
if (node_is_local(n))
@@ -786,7 +786,7 @@ static void cinfo_collection_done(struct work *work)
struct cinfo_collection_work *w =
container_of(work, struct cinfo_collection_work, work);
- assert(w == collect_work);
+ sd_assert(w == collect_work);
for (int i = 0; i < w->nr_vdi_states; i++) {
struct vdi_state *vs = &w->result[i];
diff --git a/sheep/md.c b/sheep/md.c
index c00d7a5..bcdfb73 100644
--- a/sheep/md.c
+++ b/sheep/md.c
@@ -119,7 +119,7 @@ static void remove_vdisks(const struct disk *disk)
hval = sd_hash_next(hval);
v = hval_to_vdisk(hval);
- assert(v->hash == hval);
+ sd_assert(v->hash == hval);
vdisk_free(v);
}
@@ -127,7 +127,7 @@ static void remove_vdisks(const struct disk *disk)
static inline void trim_last_slash(char *path)
{
- assert(path[0]);
+ sd_assert(path[0]);
while (path[strlen(path) - 1] == '/')
path[strlen(path) - 1] = '\0';
}
diff --git a/sheep/migrate.c b/sheep/migrate.c
index f01eaf6..2841e87 100644
--- a/sheep/migrate.c
+++ b/sheep/migrate.c
@@ -529,7 +529,7 @@ int sd_migrate_store(int from, int to)
{
int ver, ret;
- assert(to <= sizeof(migrate));
+ sd_assert(to <= sizeof(migrate));
ret = backup_store();
if (ret != 0) {
diff --git a/sheep/object_cache.c b/sheep/object_cache.c
index 3794c19..7f626c4 100644
--- a/sheep/object_cache.c
+++ b/sheep/object_cache.c
@@ -319,7 +319,7 @@ static int read_cache_object_noupdate(uint32_t vid, uint64_t idx, void *buf,
vid, idx);
if (sys->object_cache_directio && !idx_has_vdi_bit(idx)) {
- assert(is_aligned_to_pagesize(buf));
+ sd_assert(is_aligned_to_pagesize(buf));
flags |= O_DIRECT;
}
@@ -355,7 +355,7 @@ static int write_cache_object_noupdate(uint32_t vid, uint64_t idx, void *buf,
snprintf(p, sizeof(p), "%s/%06"PRIx32"/%016"PRIx64, object_cache_dir,
vid, idx);
if (sys->object_cache_directio && !idx_has_vdi_bit(idx)) {
- assert(is_aligned_to_pagesize(buf));
+ sd_assert(is_aligned_to_pagesize(buf));
flags |= O_DIRECT;
}
@@ -1323,7 +1323,7 @@ int object_cache_remove(uint64_t oid)
* in the DISCARD context, which means normally no other read/write
* requests.
*/
- assert(refcount_read(&entry->refcnt) == 1);
+ sd_assert(refcount_read(&entry->refcnt) == 1);
ret = remove_cache_object(oc, entry_idx(entry));
if (ret != SD_RES_SUCCESS) {
unlock_cache(oc);
diff --git a/sheep/ops.c b/sheep/ops.c
index 0e5ac64..a63fed7 100644
--- a/sheep/ops.c
+++ b/sheep/ops.c
@@ -862,7 +862,7 @@ static int local_md_info(struct request *request)
{
struct sd_rsp *rsp = &request->rp;
- assert(request->rq.data_length == sizeof(struct sd_md_info));
+ sd_assert(request->rq.data_length == sizeof(struct sd_md_info));
rsp->data_length = md_get_info((struct sd_md_info *)request->data);
return rsp->data_length ? SD_RES_SUCCESS : SD_RES_UNKNOWN;
@@ -900,7 +900,7 @@ static int local_get_cache_info(struct request *request)
{
struct sd_rsp *rsp = &request->rp;
- assert(request->rq.data_length == sizeof(struct object_cache_info));
+ sd_assert(request->rq.data_length == sizeof(struct object_cache_info));
rsp->data_length = object_cache_get_info((struct object_cache_info *)
request->data);
@@ -2139,6 +2139,6 @@ static int map_table[] = {
int gateway_to_peer_opcode(int opcode)
{
- assert(opcode < ARRAY_SIZE(map_table));
+ sd_assert(opcode < ARRAY_SIZE(map_table));
return map_table[opcode];
}
diff --git a/sheep/plain_store.c b/sheep/plain_store.c
index 4c19832..efbf129 100644
--- a/sheep/plain_store.c
+++ b/sheep/plain_store.c
@@ -599,7 +599,7 @@ static int check_stale_objects(uint64_t oid, const char *wd, uint32_t epoch,
int default_update_epoch(uint32_t epoch)
{
- assert(epoch);
+ sd_assert(epoch);
return for_each_object_in_wd(check_stale_objects, false, &epoch);
}
diff --git a/sheep/request.c b/sheep/request.c
index b826f0f..f12ca6b 100644
--- a/sheep/request.c
+++ b/sheep/request.c
@@ -97,7 +97,7 @@ static void gateway_op_done(struct work *work)
struct request *rq;
sys->nr_ongoing_inode_update_request--;
- assert(0 <= sys->nr_ongoing_inode_update_request);
+ sd_assert(0 <= sys->nr_ongoing_inode_update_request);
sd_debug("a number of ongoing inode update request: %d",
sys->nr_ongoing_inode_update_request);
@@ -235,7 +235,7 @@ void wakeup_requests_on_epoch(void)
* Gateway retries to send the request when
* its epoch changes.
*/
- assert(is_gateway_op(req->op));
+ sd_assert(is_gateway_op(req->op));
sd_debug("gateway %"PRIx64, req->rq.obj.oid);
req->rq.epoch = sys->cinfo.epoch;
del_requeue_request(req);
@@ -245,7 +245,7 @@ void wakeup_requests_on_epoch(void)
* Peer retries the request locally when its epoch
* changes.
*/
- assert(!is_gateway_op(req->op));
+ sd_assert(!is_gateway_op(req->op));
sd_debug("peer %"PRIx64, req->rq.obj.oid);
del_requeue_request(req);
break;
@@ -364,7 +364,7 @@ queue_work:
&sys->prevented_inode_update_request_queue);
return;
} else {
- assert(0 <= sys->nr_ongoing_inode_update_request);
+ sd_assert(0 <= sys->nr_ongoing_inode_update_request);
sys->nr_ongoing_inode_update_request++;
sd_debug("a number of ongoing inode update request: %d",
sys->nr_ongoing_inode_update_request);
@@ -1024,7 +1024,7 @@ static void client_handler(int fd, int events, void *data)
return;
}
- assert(ci->tx_req == NULL);
+ sd_assert(ci->tx_req == NULL);
ci->tx_req = list_first_entry(&ci->done_reqs, struct request,
request_list);
list_del(&ci->tx_req->request_list);
diff --git a/sheep/sheep.c b/sheep/sheep.c
index fc53ec9..2745560 100644
--- a/sheep/sheep.c
+++ b/sheep/sheep.c
@@ -240,7 +240,7 @@ static void signal_handler(int listen_fd, int events, void *data)
int uninitialized_var(ret);
ret = read(sigfd, &siginfo, sizeof(siginfo));
- assert(ret == sizeof(siginfo));
+ sd_assert(ret == sizeof(siginfo));
sd_debug("signal %d, ssi pid %d", siginfo.ssi_signo, siginfo.ssi_pid);
switch (siginfo.ssi_signo) {
case SIGTERM:
diff --git a/sheep/trace/trace.c b/sheep/trace/trace.c
index 57c2b4c..60c224d 100644
--- a/sheep/trace/trace.c
+++ b/sheep/trace/trace.c
@@ -111,7 +111,7 @@ void trace_function_enter(unsigned long ip, unsigned long *ret_addr)
return;
in_trace = true;
- assert(ret_stack_index < ARRAY_SIZE(trace_ret_stack));
+ sd_assert(ret_stack_index < ARRAY_SIZE(trace_ret_stack));
caller = trace_lookup_ip(ip);
@@ -136,7 +136,7 @@ unsigned long trace_function_exit(void)
{
struct tracer *tracer;
- assert(!in_trace);
+ sd_assert(!in_trace);
in_trace = true;
ret_stack_index--;
diff --git a/sheep/vdi.c b/sheep/vdi.c
index 8114fb5..6e4fb75 100644
--- a/sheep/vdi.c
+++ b/sheep/vdi.c
@@ -479,7 +479,7 @@ static struct vdi_state *fill_vdi_state_list_with_alloc(int *result_nr)
vs[i].participants[j] = entry->participants[j];
}
- assert(i < nr);
+ sd_assert(i < nr);
i++;
}
@@ -562,7 +562,7 @@ static bool add_new_participant(struct vdi_state_entry *entry,
int idx;
if (entry->lock_state == LOCK_STATE_UNLOCKED) {
- assert(!entry->nr_participants);
+ sd_assert(!entry->nr_participants);
sd_debug("%s is first owner of %"PRIx32, node_id_to_str(owner),
entry->vid);
@@ -575,8 +575,8 @@ static bool add_new_participant(struct vdi_state_entry *entry,
return true;
}
- assert(entry->lock_state == LOCK_STATE_SHARED);
- assert(0 < entry->nr_participants);
+ sd_assert(entry->lock_state == LOCK_STATE_SHARED);
+ sd_assert(0 < entry->nr_participants);
if (entry->nr_participants == SD_MAX_COPIES) {
sd_err("VDI: %"PRIx32 " already has SD_MAX_COPIES participants",
@@ -860,7 +860,7 @@ void play_logged_vdi_ops(void)
apply_vdi_lock_state(&entry);
} else {
- assert(op->type == LOCK_TYPE_SHARED);
+ sd_assert(op->type == LOCK_TYPE_SHARED);
apply_vdi_lock_state_shared(op->vid,
op->lock, &op->owner);
@@ -1023,7 +1023,7 @@ main_fn int inode_coherence_update(uint32_t vid, bool validate,
goto out;
}
- assert(entry->lock_state == LOCK_STATE_SHARED);
+ sd_assert(entry->lock_state == LOCK_STATE_SHARED);
if (validate) {
for (int i = 0; i < entry->nr_participants; i++) {
@@ -1100,7 +1100,7 @@ static struct sd_inode *alloc_inode(const struct vdi_iocb *iocb,
sd_inode_init(new->data_vdi_id, 1);
if (gref) {
- assert(data_vdi_id);
+ sd_assert(data_vdi_id);
for (int i = 0; i < SD_INODE_DATA_INDEX; i++) {
if (!data_vdi_id[i])
@@ -1589,7 +1589,7 @@ int vdi_snapshot(const struct vdi_iocb *iocb, uint32_t *new_vid)
return ret;
}
- assert(info.snapid > 0);
+ sd_assert(info.snapid > 0);
*new_vid = info.free_bit;
ret = notify_vdi_add(*new_vid, iocb->nr_copies, info.vid,
iocb->copy_policy, iocb->block_size_shift);
--
1.9.1
More information about the sheepdog
mailing list