2006-10-17 03:26:01 +00:00
|
|
|
#include <lladd/io/handle.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
2007-05-26 01:03:57 +00:00
|
|
|
/** @file
|
|
|
|
|
|
|
|
This implements a io handle that wraps another handle, logging each
|
|
|
|
call (and its result) to stdout.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
2006-10-17 03:26:01 +00:00
|
|
|
typedef struct debug_impl {
|
|
|
|
stasis_handle_t * h;
|
|
|
|
} debug_impl;
|
|
|
|
|
|
|
|
static int debug_num_copies(stasis_handle_t * h) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
|
|
|
printf("tid=%9ld call num_copies(%lx)\n", pthread_self(), (unsigned long)hh); fflush(stdout);
|
|
|
|
int ret = hh->num_copies(hh);
|
|
|
|
printf("tid=%9ld retn num_copies(%lx) = %d\n", pthread_self(), (unsigned long)hh, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
static int debug_num_copies_buffer(stasis_handle_t * h) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
|
|
|
printf("tid=%9ld call num_copies_buffer(%lx)\n", pthread_self(), (unsigned long)hh); fflush(stdout);
|
|
|
|
int ret = hh->num_copies_buffer(hh);
|
|
|
|
printf("tid=%9ld retn num_copies_buffer(%lx) = %d\n", pthread_self(), (unsigned long)hh, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
static int debug_close(stasis_handle_t * h) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
|
|
|
printf("tid=%9ld call close(%lx)\n", pthread_self(), (unsigned long)hh); fflush(stdout);
|
|
|
|
int ret = hh->close(hh);
|
|
|
|
printf("tid=%9ld retn close(%lx) = %d\n", pthread_self(), (unsigned long)hh, ret); fflush(stdout);
|
|
|
|
free(h->impl);
|
|
|
|
free(h);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
static lsn_t debug_start_position(stasis_handle_t *h) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
|
|
|
printf("tid=%9ld call start_position(%lx)\n", pthread_self(), (unsigned long)hh); fflush(stdout);
|
|
|
|
int ret = hh->start_position(hh);
|
|
|
|
printf("tid=%9ld retn start_position(%lx) = %d\n", pthread_self(), (unsigned long)hh, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
static lsn_t debug_end_position(stasis_handle_t *h) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
|
|
|
printf("tid=%9ld call end_position(%lx)\n", pthread_self(), (unsigned long)hh); fflush(stdout);
|
|
|
|
int ret = hh->end_position(hh);
|
|
|
|
printf("tid=%9ld retn end_position(%lx) = %d\n", pthread_self(), (unsigned long)hh, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
static stasis_write_buffer_t * debug_write_buffer(stasis_handle_t * h,
|
|
|
|
lsn_t off, lsn_t len) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld call write_buffer(%lx, %lld, %lld)\n",
|
2006-10-17 03:26:01 +00:00
|
|
|
pthread_self(), (unsigned long)hh, off, len); fflush(stdout);
|
|
|
|
stasis_write_buffer_t * ret = hh->write_buffer(hh,off,len);
|
|
|
|
stasis_write_buffer_t * retWrap = malloc(sizeof(stasis_write_buffer_t));
|
|
|
|
*retWrap = *ret;
|
|
|
|
retWrap->h = h;
|
|
|
|
retWrap->impl = ret;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld retn write_buffer(%lx, %lld, %lld) = %lx\n",
|
2006-10-17 03:26:01 +00:00
|
|
|
pthread_self(), (unsigned long)hh, off, len, (unsigned long)retWrap); fflush(stdout);
|
|
|
|
return retWrap;
|
|
|
|
}
|
|
|
|
static stasis_write_buffer_t * debug_append_buffer(stasis_handle_t * h,
|
|
|
|
lsn_t len) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld call append_buffer(%lx, %lld)\n",
|
2006-10-17 03:26:01 +00:00
|
|
|
pthread_self(), (unsigned long)hh, len); fflush(stdout);
|
|
|
|
stasis_write_buffer_t * ret = hh->append_buffer(hh,len);
|
|
|
|
stasis_write_buffer_t * retWrap = malloc(sizeof(stasis_write_buffer_t));
|
|
|
|
*retWrap = *ret;
|
|
|
|
retWrap->h = h;
|
|
|
|
retWrap->impl = ret;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld retn append_buffer(%lx, %lld) = %lx (off=%lld)\n",
|
2006-10-18 00:57:36 +00:00
|
|
|
pthread_self(), (unsigned long)hh, len, (unsigned long)retWrap, ret->off); fflush(stdout);
|
2006-10-17 03:26:01 +00:00
|
|
|
return retWrap;
|
|
|
|
|
|
|
|
}
|
|
|
|
static int debug_release_write_buffer(stasis_write_buffer_t * w_wrap) {
|
|
|
|
stasis_write_buffer_t * w = (stasis_write_buffer_t*)w_wrap->impl;
|
|
|
|
stasis_handle_t * hh = w->h;
|
|
|
|
|
|
|
|
// Debugging output adds a parameter, h, for convenience.
|
|
|
|
printf("tid=%9ld call release_write_buffer(%lx, %lx)\n", pthread_self(), (unsigned long)hh, (unsigned long)w_wrap); fflush(stdout);
|
|
|
|
int ret = hh->release_write_buffer(w);
|
|
|
|
printf("tid=%9ld retn release_write_buffer(%lx, %lx) = %d\n", pthread_self(), (unsigned long)hh, (unsigned long)w_wrap, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
static stasis_read_buffer_t * debug_read_buffer(stasis_handle_t * h,
|
|
|
|
lsn_t off, lsn_t len) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld call read_buffer(%lx, %lld, %lld)\n",
|
2006-10-17 03:26:01 +00:00
|
|
|
pthread_self(), (unsigned long)hh, off, len); fflush(stdout);
|
|
|
|
stasis_read_buffer_t * ret = hh->read_buffer(hh,off,len);
|
|
|
|
stasis_read_buffer_t * retWrap = malloc(sizeof(stasis_read_buffer_t));
|
|
|
|
*retWrap = *ret;
|
|
|
|
retWrap->h = h;
|
|
|
|
retWrap->impl = ret;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld retn read_buffer(%lx, %lld, %lld) = %lx\n",
|
2006-10-17 03:26:01 +00:00
|
|
|
pthread_self(), (unsigned long)hh, off, len, (unsigned long)retWrap); fflush(stdout);
|
|
|
|
return retWrap;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
static int debug_release_read_buffer(stasis_read_buffer_t * r_wrap) {
|
|
|
|
stasis_read_buffer_t * r = (stasis_read_buffer_t*)r_wrap->impl;
|
|
|
|
stasis_handle_t * hh = r->h;
|
|
|
|
|
|
|
|
// Debugging output adds a parameter, h, for convenience.
|
|
|
|
printf("tid=%9ld call release_read_buffer(%lx, %lx)\n", pthread_self(), (unsigned long)hh, (unsigned long)r_wrap); fflush(stdout);
|
|
|
|
int ret = hh->release_read_buffer(r);
|
|
|
|
printf("tid=%9ld retn release_read_buffer(%lx, %lx) = %d\n", pthread_self(), (unsigned long)hh, (unsigned long)r_wrap, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int debug_write(stasis_handle_t * h, lsn_t off,
|
|
|
|
const byte * dat, lsn_t len) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld call write(%lx, %lld, %lx, %lld)\n", pthread_self(), (unsigned long)hh, off, (unsigned long)dat, len); fflush(stdout);
|
2006-10-17 03:26:01 +00:00
|
|
|
int ret = hh->write(hh, off, dat, len);
|
|
|
|
printf("tid=%9ld retn write(%lx) = %d\n", pthread_self(), (unsigned long)hh, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
static int debug_append(stasis_handle_t * h, lsn_t * off,
|
|
|
|
const byte * dat, lsn_t len) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld call append(%lx, ??, %lx, %lld)\n", pthread_self(), (unsigned long)hh, (unsigned long)dat, len); fflush(stdout);
|
2006-10-17 03:26:01 +00:00
|
|
|
lsn_t tmpOff;
|
|
|
|
if(!off) {
|
|
|
|
off = &tmpOff;
|
|
|
|
}
|
|
|
|
int ret = hh->append(hh, off, dat, len);
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld retn append(%lx, %lld, %lx, %lld) = %d\n", pthread_self(), (unsigned long)hh, *off, (unsigned long) dat, len, ret); fflush(stdout);
|
2006-10-17 03:26:01 +00:00
|
|
|
return ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
static int debug_read(stasis_handle_t * h,
|
|
|
|
lsn_t off, byte * buf, lsn_t len) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld call read(%lx, %lld, %lx, %lld)\n", pthread_self(), (unsigned long)hh, off, (unsigned long)buf, len); fflush(stdout);
|
2006-10-17 03:26:01 +00:00
|
|
|
int ret = hh->read(hh, off, buf, len);
|
|
|
|
printf("tid=%9ld retn read(%lx) = %d\n", pthread_self(), (unsigned long)hh, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
static int debug_truncate_start(stasis_handle_t * h, lsn_t new_start) {
|
|
|
|
stasis_handle_t * hh = ((debug_impl*)h->impl)->h;
|
2006-11-07 20:36:59 +00:00
|
|
|
printf("tid=%9ld call truncate_start(%lx, %lld)\n", pthread_self(), (unsigned long)hh, new_start); fflush(stdout);
|
2006-10-17 03:26:01 +00:00
|
|
|
int ret = hh->truncate_start(hh, new_start);
|
|
|
|
printf("tid=%9ld retn truncate_start(%lx) = %d\n", pthread_self(), (unsigned long)hh, ret); fflush(stdout);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct stasis_handle_t debug_func = {
|
|
|
|
.num_copies = debug_num_copies,
|
|
|
|
.num_copies_buffer = debug_num_copies_buffer,
|
|
|
|
.close = debug_close,
|
|
|
|
.start_position = debug_start_position,
|
|
|
|
.end_position = debug_end_position,
|
|
|
|
.write = debug_write,
|
|
|
|
.append = debug_append,
|
|
|
|
.write_buffer = debug_write_buffer,
|
|
|
|
.append_buffer = debug_append_buffer,
|
|
|
|
.release_write_buffer = debug_release_write_buffer,
|
|
|
|
.read = debug_read,
|
|
|
|
.read_buffer = debug_read_buffer,
|
|
|
|
.release_read_buffer = debug_release_read_buffer,
|
|
|
|
.truncate_start = debug_truncate_start,
|
|
|
|
.error = 0
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
stasis_handle_t * stasis_handle(open_debug)(stasis_handle_t * h) {
|
|
|
|
stasis_handle_t * ret = malloc(sizeof(stasis_handle_t));
|
|
|
|
*ret = debug_func;
|
|
|
|
ret->impl = malloc(sizeof(debug_impl));
|
|
|
|
((debug_impl*)(ret->impl))->h = h;
|
|
|
|
return ret;
|
|
|
|
}
|