Gs-commits
Threads by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
January 2010
- 1 participants
- 18 discussions
Grayskull Repository branch, master, updated. git-migration-366-g8a337d5
by noreply@mcs.anl.gov 29 Jan '10
by noreply@mcs.anl.gov 29 Jan '10
29 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 8a337d5a23937e5bc614cb0185286e294fa4e0e9 (commit)
from 0ab2aafa5ccb295dad1a766c376072c0383620e2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 8a337d5a23937e5bc614cb0185286e294fa4e0e9
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 29 14:26:13 2010 -0500
hack test program do key/val style fork access too
-----------------------------------------------------------------------
Summary of changes:
.../cosd-prototype/test/cosd-bench-concurrent.gs | 71 +++++++++++++------
1 files changed, 48 insertions(+), 23 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs b/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
index dafa470..c4848b4 100644
--- a/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
+++ b/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
@@ -47,14 +47,20 @@ static double Wtime(void)
static double start_tm;
static double end_tm;
static int64_t total_size = 0;
-int concurrent;
+static int concurrent;
+static char data_mode;
+static uint64_t first_version;
+static uint64_t version;
static __blocking int do_cosd_test(void)
{
int ret;
+ int w_flags = COSD_FLAG_AUTO_TXN;
+
+ if(data_mode == 'k')
+ w_flags |= COSD_FLAG_TRUNC_WRITE;
uint64_t out_oid1;
- uint64_t version;
ret = gs_cosd_create(1, &out_oid1);
if(ret == -EEXIST)
@@ -73,6 +79,7 @@ static __blocking int do_cosd_test(void)
printf("Error getting version number for oid=1: %d\n", ret);
return(1);
}
+ first_version = version;
start_tm = Wtime();
@@ -85,6 +92,9 @@ static __blocking int do_cosd_test(void)
pprivate struct bench_op* tmp_op;
pprivate int b_ret;
pprivate int64_t out_size;
+ pprivate int64_t keyval_offset = 0;
+ pprivate int64_t* offset_ptr;
+ pprivate uint64_t fork;
/* TODO: make buffer size configurable, and check that
* nothing in workload desc is bigger than this
*/
@@ -110,36 +120,33 @@ static __blocking int do_cosd_test(void)
total_size += tmp_op->size;
assert(tmp_op->size <= buffer_size);
- if(tmp_op->type == WRITE)
+ if(data_mode == 'k')
{
- ret = gs_cosd_txn_open(1, 0, b_version);
- if(ret != 0)
- {
- /* TODO: err handling */
- assert(0);
- }
+ offset_ptr = &keyval_offset;
+ fork = tmp_op->offset;
+ }
+ else
+ {
+ offset_ptr = &tmp_op->offset;
+ fork = 0;
+ }
- b_ret = gs_cosd_write(1, 0, b_version, &buffer,
+ if(tmp_op->type == WRITE)
+ {
+ b_ret = gs_cosd_write(1, fork, b_version, &buffer,
&tmp_op->size, 1, &tmp_op->offset,
- &tmp_op->size, 1, 0);
+ &tmp_op->size, 1, w_flags);
if(b_ret < 0)
{
/* TODO: error handling */
assert(0);
}
-
- ret = gs_cosd_txn_close(1, 0, b_version);
- if(ret != 0)
- {
- /* TODO: error handling */
- assert(0);
- }
}
else
{
assert(tmp_op->type == READ);
- b_ret = gs_cosd_read(1, 0, &buffer, &tmp_op->size, 1,
+ b_ret = gs_cosd_read(1, fork, &buffer, &tmp_op->size, 1,
&tmp_op->offset, &tmp_op->size, 1, &out_size);
if(b_ret < 0)
{
@@ -189,31 +196,48 @@ int main(int argc, char *argv[])
int ret;
struct bench_op* tmp_op;
- if(argc != 5)
+ if(argc != 6)
{
- fprintf(stderr, "Usage: cosd1 <1|2> <workload description file> <cosd dir> <concurrent ops>\n");
+ fprintf(stderr, "Usage: cosd1 <1|2> <workload description file> <cosd dir> <concurrent ops> <k|d>\n");
fprintf(stderr, " # 1 for polling\n");
fprintf(stderr, " # 2 for thread-per-op\n");
+ fprintf(stderr, " # k for key/val mode\n");
+ fprintf(stderr, " # d for data mode\n");
return(-1);
}
sscanf(argv[1], "%d", &mode);
if(mode > 2 || mode < 1)
{
- fprintf(stderr, "Usage: cosd1 <1|2> <workload description file> <cosd dir> <concurrent ops>\n");
+ fprintf(stderr, "Usage: cosd1 <1|2> <workload description file> <cosd dir> <concurrent ops> <k|d>\n");
fprintf(stderr, " # 1 for polling\n");
fprintf(stderr, " # 2 for thread-per-op\n");
+ fprintf(stderr, " # k for key/val mode\n");
+ fprintf(stderr, " # d for data mode\n");
return(-1);
}
ret = sscanf(argv[4], "%d", &concurrent);
if(ret != 1 || concurrent < 1)
{
- fprintf(stderr, "Usage: cosd1 <1|2> <workload description file> <cosd dir> <concurrent ops>\n");
+ fprintf(stderr, "Usage: cosd1 <1|2> <workload description file> <cosd dir> <concurrent ops> <k|d>\n");
fprintf(stderr, " # 1 for polling\n");
fprintf(stderr, " # 2 for thread-per-op\n");
+ fprintf(stderr, " # k for key/val mode\n");
+ fprintf(stderr, " # d for data mode\n");
}
+ ret = sscanf(argv[5], "%c", &data_mode);
+ if(ret != 1 || (data_mode != 'k' && data_mode != 'd'))
+ {
+ fprintf(stderr, "Usage: cosd1 <1|2> <workload description file> <cosd dir> <concurrent ops> <k|d>\n");
+ fprintf(stderr, " # 1 for polling\n");
+ fprintf(stderr, " # 2 for thread-per-op\n");
+ fprintf(stderr, " # k for key/val mode\n");
+ fprintf(stderr, " # d for data mode\n");
+ }
+
+
/* parse description of workload */
desc = fopen(argv[2], "r");
if(!desc)
@@ -273,6 +297,7 @@ int main(int argc, char *argv[])
printf("# Moved %lld bytes in %f seconds.\n", lld(total_size),
(end_tm-start_tm));
printf("%f MB/s\n", (((double)total_size)/(1024.0*1024.0))/(end_tm-start_tm));
+ printf("%f ops/s\n", ((double)(version-first_version))/(end_tm-start_tm));
return 0;
}
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-365-g0ab2aaf
by noreply@mcs.anl.gov 29 Jan '10
by noreply@mcs.anl.gov 29 Jan '10
29 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 0ab2aafa5ccb295dad1a766c376072c0383620e2 (commit)
via d98a47022f1523d537d7803f1360b226ce931d3f (commit)
via 720bd0a4c7664584bc96bae602e1aa4de9bd6b72 (commit)
via 4d7c42c8580f692eb51074d8b69588d5ace20680 (commit)
via 01d213ca4b01136efcf02bded9d515da63e427b7 (commit)
from b7520255a7b588bcbb4eabfafd9499e674338cdb (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 0ab2aafa5ccb295dad1a766c376072c0383620e2
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 29 13:21:14 2010 -0500
test auto commit and fix memory leak
commit d98a47022f1523d537d7803f1360b226ce931d3f
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 29 13:20:46 2010 -0500
fix to earlier memset in opcache
commit 720bd0a4c7664584bc96bae602e1aa4de9bd6b72
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 29 12:46:02 2010 -0500
flag to enable auto-commit of individual writes
Added a little infrastructure to combine multiple COSD operations into
compound operations, used to implement COSD_FLAG_AUTO_TXN. Untested.
commit 4d7c42c8580f692eb51074d8b69588d5ace20680
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 29 12:45:08 2010 -0500
zero out op structures for convenience
commit 01d213ca4b01136efcf02bded9d515da63e427b7
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 29 10:29:40 2010 -0500
move op_worker function to be resource-specific
-----------------------------------------------------------------------
Summary of changes:
code/src/gsl/common/gs-opcache.c | 4 +
code/src/gsl/include/gs-op.h | 1 -
.../gsl/resources/cosd-prototype/cosd-prototype.c | 573 ++++++++++++--------
.../resources/cosd-prototype/cosd-prototype.gsh | 1 +
.../src/gsl/resources/cosd-prototype/test/cosd1.gs | 21 +
code/src/gsl/resources/storage/gs-storage.c | 21 +-
6 files changed, 386 insertions(+), 235 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/common/gs-opcache.c b/code/src/gsl/common/gs-opcache.c
index 63ab731..724e7a8 100644
--- a/code/src/gsl/common/gs-opcache.c
+++ b/code/src/gsl/common/gs-opcache.c
@@ -108,6 +108,8 @@ struct gs_op *gs_opcache_get(gs_opcache_t cache)
op = (struct gs_op *)(((char *)cache->array[aind]) +
(count * cache->typesize) +
cache->member_offset);
+ memset((void*)((unsigned long)op - cache->member_offset), 0,
+ cache->typesize);
op->cache_id = (aind << 25) | count;
gs_op_clear(op);
++cache->count;
@@ -115,6 +117,8 @@ struct gs_op *gs_opcache_get(gs_opcache_t cache)
else
{
op = gs_oplist_pop(&cache->free_list);
+ memset((void*)((unsigned long)op - cache->member_offset), 0,
+ cache->typesize);
}
gs_mutex_unlock(&cache->mutex);
return op;
diff --git a/code/src/gsl/include/gs-op.h b/code/src/gsl/include/gs-op.h
index 06515e3..a4debd7 100644
--- a/code/src/gsl/include/gs-op.h
+++ b/code/src/gsl/include/gs-op.h
@@ -7,7 +7,6 @@
struct gs_op
{
void (*callback)(void *ptr, int ret);
- int (*op_worker)(struct gs_op* op);
void *user_ptr;
gs_hints_t hints;
gs_context_t ctx;
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
index 54b8c8b..2837ebd 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
@@ -96,23 +96,6 @@ static gs_mutex_t global_log_mutex = GS_MUTEX_INITIALIZER;
static int gs_cosd_resource_id;
static enum progress_mode gs_cosd_progress_mode = GS_PROG_NONE;
-static int merge_logical_map(struct gs_list_link* list1_in, int
- list1_count, struct gs_list_link* list2_in, int list2_count,
- struct gs_list_link* list_out, void** free_ptr);
-static int compare_log_map_key(DB * dbp, const DBT * a, const DBT * b);
-static int compare_missing_version(DB * dbp, const DBT * a, const DBT * b);
-static int compare_uint64(DB * dbp, const DBT * a, const DBT * b);
-static int cmp_lme(const void *p1, const void *p2);
-static int advance_listio_ptrs(
- char** mem_offsets,
- int64_t* mem_sizes,
- int mem_count,
- int* mem_index,
- int64_t* obj_offsets,
- int64_t* obj_sizes,
- int obj_count,
- int* obj_index,
- int64_t size);
/* counter used by poll function in thread-per-op case to know if ops have
* finished since last poll
@@ -165,9 +148,12 @@ struct missing_version
uint64_t version;
};
-struct cosd_op
+struct cosd_op;
+
+struct cosd_work
{
- union {
+ union
+ {
struct create_op{
uint64_t requested_oid;
uint64_t* out_oid;
@@ -204,30 +190,93 @@ struct cosd_op
uint64_t oid;
uint64_t *version;
} get_version;
- } u;
+ }u;
+
+ int (*op_worker)(struct gs_op* op);
+ void (*cleanup_fn)(struct cosd_work* work);
+};
+
+struct cosd_op
+{
+ struct cosd_work work;
+ struct cosd_work* work_array;
+ int work_array_count;
gs_op_id_t op_id;
struct gs_op op;
int error_code;
- void (*cleanup_fn)(struct cosd_op* c_op);
};
+static int merge_logical_map(struct gs_list_link* list1_in, int
+ list1_count, struct gs_list_link* list2_in, int list2_count,
+ struct gs_list_link* list_out, void** free_ptr);
+static int compare_log_map_key(DB * dbp, const DBT * a, const DBT * b);
+static int compare_missing_version(DB * dbp, const DBT * a, const DBT * b);
+static int compare_uint64(DB * dbp, const DBT * a, const DBT * b);
+static int cmp_lme(const void *p1, const void *p2);
+static int advance_listio_ptrs(
+ char** mem_offsets,
+ int64_t* mem_sizes,
+ int mem_count,
+ int* mem_index,
+ int64_t* obj_offsets,
+ int64_t* obj_sizes,
+ int obj_count,
+ int* obj_index,
+ int64_t size);
+static int cosd_write_set_work(
+ struct cosd_work* work,
+ uint64_t oid,
+ uint64_t fork,
+ uint64_t txn_number,
+ char** mem_offsets,
+ int64_t* mem_sizes,
+ int mem_count,
+ int64_t* obj_offsets,
+ int64_t* obj_sizes,
+ int obj_count,
+ int flags);
+static int cosd_txn_close_set_work(
+ struct cosd_work* work,
+ uint64_t oid,
+ uint64_t fork,
+ uint64_t txn_number);
+
static void* thread_fn(void* foo)
{
struct gs_op* op = foo;
struct cosd_op* c_op = gs_op_entry(op, struct cosd_op, op);
+ int i = 0;
gs_mutex_lock(&cosd_mutex);
/* pull off of list */
gs_oplist_del(op, &cosd_oplist);
gs_mutex_unlock(&cosd_mutex);
- /* spin on op worker */
- while(op->op_worker(op) != 1);
+ if(c_op->work_array_count == 0)
+ {
+ /* normal operation */
+ /* spin on op worker */
+ while(c_op->work.op_worker(op) != 1);
- /* call cleanup function if present */
- if(c_op->cleanup_fn)
+ /* call cleanup function if present */
+ if(c_op->work.cleanup_fn)
+ c_op->work.cleanup_fn(&c_op->work);
+ }
+ else
{
- c_op->cleanup_fn(c_op);
+ /* compound operation */
+ while(i<c_op->work_array_count && c_op->error_code == 0)
+ {
+ c_op->work = c_op->work_array[i];
+ while(c_op->work.op_worker(op) != 1);
+ i++;
+ }
+ for(i=0; i<c_op->work_array_count; i++)
+ {
+ if(c_op->work_array[i].cleanup_fn)
+ c_op->work_array[i].cleanup_fn(&c_op->work_array[i]);
+ }
+ free(c_op->work_array);
}
/* trigger completion of the operation */
@@ -353,7 +402,7 @@ static int gs_cosd_poll(gs_context_t context, int millisecs)
struct gs_op *gop;
struct cosd_op *c_op;
struct timespec ts_sleep;
- int ret;
+ int i=0;
/* NOTE: just servicing one op per call right now */
@@ -383,25 +432,35 @@ static int gs_cosd_poll(gs_context_t context, int millisecs)
c_op = gs_op_entry(gop, struct cosd_op, op);
- ret = gop->op_worker(gop);
- if(ret == 1)
+ if(c_op->work_array_count == 0)
{
- /* call cleanup function if present */
- if(c_op->cleanup_fn)
- {
- c_op->cleanup_fn(c_op);
- }
+ /* normal operation */
+ /* spin on op worker */
+ while(c_op->work.op_worker(gop) != 1);
- /* done */
- gs_opcache_complete_op(cosd_opcache, gop, c_op->error_code);
+ /* call cleanup function if present */
+ if(c_op->work.cleanup_fn)
+ c_op->work.cleanup_fn(&c_op->work);
}
else
{
- assert(ret == 0); /* only 0 and 1 allowed? */
- /* not done */
- gs_oplist_add(gop, &cosd_oplist);
+ /* compound operation */
+ while(i<c_op->work_array_count && c_op->error_code == 0)
+ {
+ c_op->work = c_op->work_array[i];
+ while(c_op->work.op_worker(gop) != 1);
+ i++;
+ }
+ for(i=0; i<c_op->work_array_count; i++)
+ {
+ if(c_op->work_array[i].cleanup_fn)
+ c_op->work_array[i].cleanup_fn(&c_op->work_array[i]);
+ }
+ free(c_op->work_array);
}
+ gs_opcache_complete_op(cosd_opcache, gop, c_op->error_code);
+
/* gs_mutex_unlock(&cosd_mutex); */
return 0;
@@ -668,16 +727,16 @@ int gs_cosd_finalize(void)
*
* cleans up memory after a read operation completes
*/
-static void read_op_cleanup(struct cosd_op *c_op)
+static void read_op_cleanup(struct cosd_work *work)
{
- if(c_op->u.read.mem_offsets)
- free(c_op->u.read.mem_offsets);
- if(c_op->u.read.mem_sizes)
- free(c_op->u.read.mem_sizes);
- if(c_op->u.read.obj_sizes)
- free(c_op->u.read.obj_sizes);
- if(c_op->u.read.obj_offsets)
- free(c_op->u.read.obj_offsets);
+ if(work->u.read.mem_offsets)
+ free(work->u.read.mem_offsets);
+ if(work->u.read.mem_sizes)
+ free(work->u.read.mem_sizes);
+ if(work->u.read.obj_sizes)
+ free(work->u.read.obj_sizes);
+ if(work->u.read.obj_offsets)
+ free(work->u.read.obj_offsets);
return;
}
@@ -686,16 +745,16 @@ static void read_op_cleanup(struct cosd_op *c_op)
*
* cleans up memory after a write operation completes
*/
-static void write_op_cleanup(struct cosd_op *c_op)
+static void write_op_cleanup(struct cosd_work* work)
{
- if(c_op->u.write.mem_offsets)
- free(c_op->u.write.mem_offsets);
- if(c_op->u.write.mem_sizes)
- free(c_op->u.write.mem_sizes);
- if(c_op->u.write.obj_sizes)
- free(c_op->u.write.obj_sizes);
- if(c_op->u.write.obj_offsets)
- free(c_op->u.write.obj_offsets);
+ if(work->u.write.mem_offsets)
+ free(work->u.write.mem_offsets);
+ if(work->u.write.mem_sizes)
+ free(work->u.write.mem_sizes);
+ if(work->u.write.obj_sizes)
+ free(work->u.write.obj_sizes);
+ if(work->u.write.obj_offsets)
+ free(work->u.write.obj_offsets);
return;
}
@@ -725,18 +784,18 @@ static int read_op_worker(struct gs_op* op)
assert(c_op);
/* only support one object for now */
- assert(c_op->u.read.oid == 1);
- lmk.oid = c_op->u.read.oid;
- lmk.fork = c_op->u.read.fork;
+ assert(c_op->work.u.read.oid == 1);
+ lmk.oid = c_op->work.u.read.oid;
+ lmk.fork = c_op->work.u.read.fork;
- assert(c_op->u.read.mem_count > 0);
- assert(c_op->u.read.obj_count > 0);
+ assert(c_op->work.u.read.mem_count > 0);
+ assert(c_op->work.u.read.obj_count > 0);
if(global_fd < 0)
{
/* open log file */
sprintf(log_name, "%s/%llu.dat", cosd_log_path,
- llu(c_op->u.read.oid));
+ llu(c_op->work.u.read.oid));
ret = open(log_name, O_RDWR|O_DIRECT|O_EXCL|O_NOATIME,
S_IRUSR|S_IWUSR);
if(ret < 0)
@@ -788,7 +847,7 @@ read_op_retry:
COSD_INIT_DBT(key, lmk);
COSD_INIT_DBT(value, lme);
- lmk.logical_offset_end = c_op->u.read.obj_offsets[obj_index] + 1;
+ lmk.logical_offset_end = c_op->work.u.read.obj_offsets[obj_index] + 1;
ret = dbc_p->c_get(dbc_p, &key, &value, DB_SET_RANGE);
if(ret == DB_NOTFOUND)
@@ -842,27 +901,27 @@ read_op_retry:
assert(0);
}
- if(lmk.oid != c_op->u.read.oid || lmk.fork != c_op->u.read.fork ||
- lme.logical_offset > c_op->u.read.obj_offsets[obj_index])
+ if(lmk.oid != c_op->work.u.read.oid || lmk.fork != c_op->work.u.read.fork ||
+ lme.logical_offset > c_op->work.u.read.obj_offsets[obj_index])
{
int64_t amt_to_zero;
int64_t amt_left;
/* figure out how big this hole is */
- if(lmk.oid == c_op->u.read.oid &&
- lmk.fork == c_op->u.read.fork &&
- c_op->u.read.obj_sizes[obj_index] > (lme.logical_offset -
- c_op->u.read.obj_offsets[obj_index]))
+ if(lmk.oid == c_op->work.u.read.oid &&
+ lmk.fork == c_op->work.u.read.fork &&
+ c_op->work.u.read.obj_sizes[obj_index] > (lme.logical_offset -
+ c_op->work.u.read.obj_offsets[obj_index]))
{
/* zero up to the next region in the log */
amt_to_zero = lme.logical_offset -
- c_op->u.read.obj_offsets[obj_index];
+ c_op->work.u.read.obj_offsets[obj_index];
}
- else if(lmk.oid == c_op->u.read.oid &&
- lmk.fork == c_op->u.read.fork)
+ else if(lmk.oid == c_op->work.u.read.oid &&
+ lmk.fork == c_op->work.u.read.fork)
{
/* zero this whole buffer */
- amt_to_zero = c_op->u.read.obj_sizes[obj_index];
+ amt_to_zero = c_op->work.u.read.obj_sizes[obj_index];
}
else
{
@@ -877,26 +936,26 @@ read_op_retry:
{
int64_t this_region;
- if(amt_left > c_op->u.read.mem_sizes[mem_index])
- this_region = c_op->u.read.mem_sizes[mem_index];
+ if(amt_left > c_op->work.u.read.mem_sizes[mem_index])
+ this_region = c_op->work.u.read.mem_sizes[mem_index];
else
this_region = amt_left;
assert(this_region > 0);
- memset(c_op->u.read.mem_offsets[mem_index], 0, this_region);
+ memset(c_op->work.u.read.mem_offsets[mem_index], 0, this_region);
amt_left -= this_region;
done = advance_listio_ptrs(
- c_op->u.read.mem_offsets,
- c_op->u.read.mem_sizes,
- c_op->u.read.mem_count,
+ c_op->work.u.read.mem_offsets,
+ c_op->work.u.read.mem_sizes,
+ c_op->work.u.read.mem_count,
&mem_index,
- c_op->u.read.obj_offsets,
- c_op->u.read.obj_sizes,
- c_op->u.read.obj_count,
+ c_op->work.u.read.obj_offsets,
+ c_op->work.u.read.obj_sizes,
+ c_op->work.u.read.obj_count,
&obj_index,
this_region);
- *c_op->u.read.out_size += this_region;
+ *c_op->work.u.read.out_size += this_region;
/* keep going; there might be more data after the hole */
continue;
@@ -906,17 +965,17 @@ read_op_retry:
/* we have some data to read */
/* ignore portions of logical map beyond what we want */
- if(lme.logical_offset < c_op->u.read.obj_offsets[obj_index])
+ if(lme.logical_offset < c_op->work.u.read.obj_offsets[obj_index])
{
- int64_t diff = c_op->u.read.obj_offsets[obj_index] -
+ int64_t diff = c_op->work.u.read.obj_offsets[obj_index] -
lme.logical_offset;
lme.size -= diff;
lme.logical_offset += diff;
lme.log_offset += diff;
}
- if(lme.size > c_op->u.read.obj_sizes[obj_index])
+ if(lme.size > c_op->work.u.read.obj_sizes[obj_index])
{
- int64_t diff = lme.size - c_op->u.read.obj_sizes[obj_index];
+ int64_t diff = lme.size - c_op->work.u.read.obj_sizes[obj_index];
lme.size -= diff;
lme.logical_offset_end -= diff;
}
@@ -930,27 +989,27 @@ read_op_retry:
*/
if(lme.log_offset % DIRECT_ALIGN == 0 &&
lme.size % DIRECT_ALIGN == 0 &&
- ((unsigned long)c_op->u.read.mem_offsets[mem_index]) % DIRECT_ALIGN == 0 &&
- c_op->u.read.mem_sizes[mem_index] >= lme.size)
+ ((unsigned long)c_op->work.u.read.mem_offsets[mem_index]) % DIRECT_ALIGN == 0 &&
+ c_op->work.u.read.mem_sizes[mem_index] >= lme.size)
{
int64_t pread_ret;
- pread_ret = pread(global_fd, c_op->u.read.mem_offsets[mem_index],
+ pread_ret = pread(global_fd, c_op->work.u.read.mem_offsets[mem_index],
lme.size, lme.log_offset);
/* TODO: error handling */
assert(pread_ret == lme.size);
/* advance pointers */
done = advance_listio_ptrs(
- c_op->u.read.mem_offsets,
- c_op->u.read.mem_sizes,
- c_op->u.read.mem_count,
+ c_op->work.u.read.mem_offsets,
+ c_op->work.u.read.mem_sizes,
+ c_op->work.u.read.mem_count,
&mem_index,
- c_op->u.read.obj_offsets,
- c_op->u.read.obj_sizes,
- c_op->u.read.obj_count,
+ c_op->work.u.read.obj_offsets,
+ c_op->work.u.read.obj_sizes,
+ c_op->work.u.read.obj_count,
&obj_index,
lme.size);
- *c_op->u.read.out_size += lme.size;
+ *c_op->work.u.read.out_size += lme.size;
}
else
{
@@ -998,27 +1057,27 @@ read_op_retry:
copy_remaining = lme.size;
while(copy_remaining)
{
- if(copy_remaining > c_op->u.read.mem_sizes[mem_index])
- copy_amt = c_op->u.read.mem_sizes[mem_index];
+ if(copy_remaining > c_op->work.u.read.mem_sizes[mem_index])
+ copy_amt = c_op->work.u.read.mem_sizes[mem_index];
else
copy_amt = copy_remaining;
- memcpy(c_op->u.read.mem_offsets[mem_index], copy_ptr, copy_amt);
+ memcpy(c_op->work.u.read.mem_offsets[mem_index], copy_ptr, copy_amt);
copy_ptr += copy_amt;
copy_remaining -= copy_amt;
/* advance pointers */
done = advance_listio_ptrs(
- c_op->u.read.mem_offsets,
- c_op->u.read.mem_sizes,
- c_op->u.read.mem_count,
+ c_op->work.u.read.mem_offsets,
+ c_op->work.u.read.mem_sizes,
+ c_op->work.u.read.mem_count,
&mem_index,
- c_op->u.read.obj_offsets,
- c_op->u.read.obj_sizes,
- c_op->u.read.obj_count,
+ c_op->work.u.read.obj_offsets,
+ c_op->work.u.read.obj_sizes,
+ c_op->work.u.read.obj_count,
&obj_index,
copy_amt);
- *c_op->u.read.out_size += copy_amt;
+ *c_op->work.u.read.out_size += copy_amt;
}
}
}
@@ -1054,16 +1113,16 @@ static int write_op_worker(struct gs_op* op)
assert(c_op);
/* only support one object for now */
- assert(c_op->u.write.oid == 1);
+ assert(c_op->work.u.write.oid == 1);
- assert(c_op->u.write.mem_count > 0);
- assert(c_op->u.write.obj_count > 0);
+ assert(c_op->work.u.write.mem_count > 0);
+ assert(c_op->work.u.write.obj_count > 0);
if(global_fd < 0)
{
/* open log file */
sprintf(log_name, "%s/%llu.dat", cosd_log_path,
- llu(c_op->u.write.oid));
+ llu(c_op->work.u.write.oid));
ret = open(log_name, O_RDWR|O_DIRECT|O_EXCL|O_NOATIME,
S_IRUSR|S_IWUSR);
if(ret < 0)
@@ -1089,27 +1148,27 @@ static int write_op_worker(struct gs_op* op)
}
/* find the next chunk that is contiguous in memory and disk */
- mem_ptr = c_op->u.write.mem_offsets[mem_index];
- tmp_update->logical_offset = c_op->u.write.obj_offsets[obj_index];
- tmp_update->size = c_op->u.write.mem_sizes[mem_index];
+ mem_ptr = c_op->work.u.write.mem_offsets[mem_index];
+ tmp_update->logical_offset = c_op->work.u.write.obj_offsets[obj_index];
+ tmp_update->size = c_op->work.u.write.mem_sizes[mem_index];
tmp_update->logical_offset_end = tmp_update->logical_offset +
tmp_update->size;
- tmp_update->flags = c_op->u.write.flags;
- if(tmp_update->size >= c_op->u.write.obj_sizes[obj_index])
+ tmp_update->flags = c_op->work.u.write.flags;
+ if(tmp_update->size >= c_op->work.u.write.obj_sizes[obj_index])
{
/* mem region is bigger than obj region */
- tmp_update->size = c_op->u.write.obj_sizes[obj_index];
+ tmp_update->size = c_op->work.u.write.obj_sizes[obj_index];
}
/* advance pointers */
done = advance_listio_ptrs(
- c_op->u.write.mem_offsets,
- c_op->u.write.mem_sizes,
- c_op->u.write.mem_count,
+ c_op->work.u.write.mem_offsets,
+ c_op->work.u.write.mem_sizes,
+ c_op->work.u.write.mem_count,
&mem_index,
- c_op->u.write.obj_offsets,
- c_op->u.write.obj_sizes,
- c_op->u.write.obj_count,
+ c_op->work.u.write.obj_offsets,
+ c_op->work.u.write.obj_sizes,
+ c_op->work.u.write.obj_count,
&obj_index,
tmp_update->size);
@@ -1129,7 +1188,7 @@ static int write_op_worker(struct gs_op* op)
gs_mutex_lock(&global_log_mutex);
if(global_log_offset < 0)
{
- COSD_INIT_DBT(key, c_op->u.write.oid);
+ COSD_INIT_DBT(key, c_op->work.u.write.oid);
COSD_INIT_DBT(value, global_log_offset);
write_op_txn:
@@ -1212,7 +1271,7 @@ write_op_txn:
/* track this update in the txn accumulator */
gs_mutex_lock(&txn_mutex);
- hash_link = gs_hash_search(txn_table, &c_op->u.write.txn_number);
+ hash_link = gs_hash_search(txn_table, &c_op->work.u.write.txn_number);
if(!hash_link)
{
/* TODO: txn is gone (which could be normal); error handling */
@@ -1223,8 +1282,8 @@ write_op_txn:
txn_acc = gs_hash_get_entry(hash_link, struct txn_accumulator,
hash_link);
/* check that oid and fork match */
- if(txn_acc->oid != c_op->u.write.oid ||
- txn_acc->fork != c_op->u.write.fork)
+ if(txn_acc->oid != c_op->work.u.write.oid ||
+ txn_acc->fork != c_op->work.u.write.fork)
{
/* TODO: graceful error handling; the write operation isn't
* legal in this transaction
@@ -1390,12 +1449,12 @@ static int create_op_worker(struct gs_op* op)
assert(c_op);
/* only support one object for now */
- assert(c_op->u.create.requested_oid == 1);
- *c_op->u.create.out_oid = 1;
+ assert(c_op->work.u.create.requested_oid == 1);
+ *c_op->work.u.create.out_oid = 1;
/* create a log file */
sprintf(log_name, "%s/%llu.dat", cosd_log_path,
- llu(c_op->u.create.requested_oid));
+ llu(c_op->work.u.create.requested_oid));
ret = open(log_name, O_RDWR|O_CREAT|O_DIRECT|O_EXCL|O_NOATIME,
S_IRUSR|S_IWUSR);
if(ret < 0)
@@ -1416,7 +1475,7 @@ static int create_op_worker(struct gs_op* op)
/* set initial version of 1 */
val = 1;
- COSD_INIT_DBT(key, c_op->u.create.requested_oid);
+ COSD_INIT_DBT(key, c_op->work.u.create.requested_oid);
COSD_INIT_DBT(value, val);
ret = ver_dbp->put(ver_dbp, txn, &key, &value, 0);
@@ -1447,6 +1506,54 @@ static int create_op_worker(struct gs_op* op)
return(1);
}
+static int cosd_write_set_work(
+ struct cosd_work* work,
+ uint64_t oid,
+ uint64_t fork,
+ uint64_t txn_number,
+ char** mem_offsets,
+ int64_t* mem_sizes,
+ int mem_count,
+ int64_t* obj_offsets,
+ int64_t* obj_sizes,
+ int obj_count,
+ int flags)
+{
+ work->u.write.oid = oid;
+ work->u.write.fork = fork;
+ work->u.write.txn_number = txn_number;
+ work->u.write.mem_count = mem_count;
+ work->u.write.obj_count = obj_count;
+ work->u.write.flags = flags;
+
+ /* copy arrays so that we can modify them internally */
+ /* TODO: error handling */
+ work->u.write.mem_offsets = malloc(mem_count*sizeof(*mem_offsets));
+ assert(work->u.write.mem_offsets);
+ memcpy(work->u.write.mem_offsets, mem_offsets,
+ mem_count*sizeof(*mem_offsets));
+
+ work->u.write.mem_sizes = malloc(mem_count*sizeof(*mem_sizes));
+ assert(work->u.write.mem_sizes);
+ memcpy(work->u.write.mem_sizes, mem_sizes,
+ mem_count*sizeof(*mem_sizes));
+
+ work->u.write.obj_offsets = malloc(obj_count*sizeof(*obj_offsets));
+ assert(work->u.write.obj_offsets);
+ memcpy(work->u.write.obj_offsets, obj_offsets,
+ obj_count*sizeof(*obj_offsets));
+
+ work->u.write.obj_sizes = malloc(obj_count*sizeof(*obj_sizes));
+ assert(work->u.write.obj_sizes);
+ memcpy(work->u.write.obj_sizes, obj_sizes,
+ obj_count*sizeof(*obj_sizes));
+
+ work->op_worker = write_op_worker;
+ work->cleanup_fn = write_op_cleanup;
+
+ return(0);
+}
+
gs_ret_t gs_cosd_write_post(
uint64_t oid,
uint64_t fork,
@@ -1466,47 +1573,64 @@ gs_ret_t gs_cosd_write_post(
{
struct gs_op *op;
struct cosd_op *c_op;
+ int ret;
op = gs_opcache_get(cosd_opcache);
gs_op_fill(op, callback, user_ptr, hints, ctx);
c_op = gs_op_entry(op, struct cosd_op, op);
c_op->op_id = gs_id_gen(gs_cosd_resource_id, (uint64_t)(op->cache_id));
- c_op->u.write.oid = oid;
- c_op->u.write.fork = fork;
- c_op->u.write.txn_number = txn_number;
- c_op->u.write.mem_count = mem_count;
- c_op->u.write.obj_count = obj_count;
- c_op->u.write.flags = flags;
- /* copy arrays so that we can modify them internally */
- /* TODO: error handling */
- c_op->u.write.mem_offsets = malloc(mem_count*sizeof(*mem_offsets));
- assert(c_op->u.write.mem_offsets);
- memcpy(c_op->u.write.mem_offsets, mem_offsets,
- mem_count*sizeof(*mem_offsets));
+ if(flags & COSD_FLAG_AUTO_TXN)
+ {
+ /* txn open never blocks; just call it directly */
+ ret = gs_cosd_txn_open(oid, fork, txn_number);
+ if(ret < 0)
+ {
+ return(ret);
+ }
- c_op->u.write.mem_sizes = malloc(mem_count*sizeof(*mem_sizes));
- assert(c_op->u.write.mem_sizes);
- memcpy(c_op->u.write.mem_sizes, mem_sizes,
- mem_count*sizeof(*mem_sizes));
+ /* allocate array to describe the write and txn close operations
+ * that we want to bundle together
+ */
+ c_op->work_array = malloc(sizeof(*c_op->work_array) * 2);
+ /* TODO: error handling */
+ assert(c_op->work_array);
+ c_op->work_array_count = 2;
- c_op->u.write.obj_offsets = malloc(obj_count*sizeof(*obj_offsets));
- assert(c_op->u.write.obj_offsets);
- memcpy(c_op->u.write.obj_offsets, obj_offsets,
- obj_count*sizeof(*obj_offsets));
+ /* set up write operation */
+ ret = cosd_write_set_work(&c_op->work_array[0], oid, fork, txn_number,
+ mem_offsets, mem_sizes, mem_count, obj_offsets, obj_sizes,
+ obj_count, flags);
+ if(ret < 0)
+ {
+ free(c_op->work_array);
+ return(ret);
+ }
- c_op->u.write.obj_sizes = malloc(obj_count*sizeof(*obj_sizes));
- assert(c_op->u.write.obj_sizes);
- memcpy(c_op->u.write.obj_sizes, obj_sizes,
- obj_count*sizeof(*obj_sizes));
+ /* set up txn close operation */
+ ret = cosd_txn_close_set_work(&c_op->work_array[1], oid, fork,
+ txn_number);
+ if(ret < 0)
+ {
+ c_op->work_array[0].cleanup_fn(&c_op->work_array[0]);
+ free(c_op->work_array);
+ return(ret);
+ }
+ }
+ else
+ {
+ ret = cosd_write_set_work(&c_op->work, oid, fork, txn_number,
+ mem_offsets, mem_sizes, mem_count, obj_offsets, obj_sizes,
+ obj_count, flags);
+ if(ret < 0)
+ {
+ return(ret);
+ }
+ }
*op_id = c_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = write_op_worker;
- c_op->cleanup_fn = write_op_cleanup;
-
gs_cosd_launch_op(op, gs_cosd_progress_mode);
return 0;
@@ -1552,40 +1676,39 @@ gs_ret_t gs_cosd_read_post(
c_op = gs_op_entry(op, struct cosd_op, op);
c_op->op_id = gs_id_gen(gs_cosd_resource_id, (uint64_t)(op->cache_id));
- c_op->u.read.oid = oid;
- c_op->u.read.fork = fork;
- c_op->u.read.mem_count = mem_count;
- c_op->u.read.obj_count = obj_count;
- c_op->u.read.out_size = out_size;
+ c_op->work.u.read.oid = oid;
+ c_op->work.u.read.fork = fork;
+ c_op->work.u.read.mem_count = mem_count;
+ c_op->work.u.read.obj_count = obj_count;
+ c_op->work.u.read.out_size = out_size;
*out_size = 0;
/* copy arrays so that we can modify them internally */
/* TODO: error handling */
- c_op->u.read.mem_offsets = malloc(mem_count*sizeof(*mem_offsets));
- assert(c_op->u.read.mem_offsets);
- memcpy(c_op->u.read.mem_offsets, mem_offsets,
+ c_op->work.u.read.mem_offsets = malloc(mem_count*sizeof(*mem_offsets));
+ assert(c_op->work.u.read.mem_offsets);
+ memcpy(c_op->work.u.read.mem_offsets, mem_offsets,
mem_count*sizeof(*mem_offsets));
- c_op->u.read.mem_sizes = malloc(mem_count*sizeof(*mem_sizes));
- assert(c_op->u.read.mem_sizes);
- memcpy(c_op->u.read.mem_sizes, mem_sizes,
+ c_op->work.u.read.mem_sizes = malloc(mem_count*sizeof(*mem_sizes));
+ assert(c_op->work.u.read.mem_sizes);
+ memcpy(c_op->work.u.read.mem_sizes, mem_sizes,
mem_count*sizeof(*mem_sizes));
- c_op->u.read.obj_offsets = malloc(obj_count*sizeof(*obj_offsets));
- assert(c_op->u.read.obj_offsets);
- memcpy(c_op->u.read.obj_offsets, obj_offsets,
+ c_op->work.u.read.obj_offsets = malloc(obj_count*sizeof(*obj_offsets));
+ assert(c_op->work.u.read.obj_offsets);
+ memcpy(c_op->work.u.read.obj_offsets, obj_offsets,
obj_count*sizeof(*obj_offsets));
- c_op->u.read.obj_sizes = malloc(obj_count*sizeof(*obj_sizes));
- assert(c_op->u.read.obj_sizes);
- memcpy(c_op->u.read.obj_sizes, obj_sizes,
+ c_op->work.u.read.obj_sizes = malloc(obj_count*sizeof(*obj_sizes));
+ assert(c_op->work.u.read.obj_sizes);
+ memcpy(c_op->work.u.read.obj_sizes, obj_sizes,
obj_count*sizeof(*obj_sizes));
*op_id = c_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = read_op_worker;
- c_op->cleanup_fn = read_op_cleanup;
+ c_op->work.op_worker = read_op_worker;
+ c_op->work.cleanup_fn = read_op_cleanup;
gs_cosd_launch_op(op, gs_cosd_progress_mode);
@@ -1627,9 +1750,8 @@ gs_ret_t gs_cosd_dump_post(
*op_id = c_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = dump_op_worker;
- c_op->cleanup_fn = NULL;
+ c_op->work.op_worker = dump_op_worker;
+ c_op->work.cleanup_fn = NULL;
gs_cosd_launch_op(op, gs_cosd_progress_mode);
@@ -1660,14 +1782,13 @@ gs_ret_t gs_cosd_create_post(
c_op = gs_op_entry(op, struct cosd_op, op);
c_op->op_id = gs_id_gen(gs_cosd_resource_id, (uint64_t)(op->cache_id));
- c_op->u.create.requested_oid = requested_oid;
- c_op->u.create.out_oid = out_oid;
+ c_op->work.u.create.requested_oid = requested_oid;
+ c_op->work.u.create.out_oid = out_oid;
*op_id = c_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = create_op_worker;
- c_op->cleanup_fn = NULL;
+ c_op->work.op_worker = create_op_worker;
+ c_op->work.cleanup_fn = NULL;
gs_cosd_launch_op(op, gs_cosd_progress_mode);
@@ -1724,7 +1845,7 @@ static int get_version_op_worker(struct gs_op* op)
assert(c_op);
/* only support one object for now */
- assert(c_op->u.get_version.oid == 1);
+ assert(c_op->work.u.get_version.oid == 1);
/* do db stuff */
ret = envp->txn_begin(envp, NULL, &txn, 0);
@@ -1736,7 +1857,7 @@ static int get_version_op_worker(struct gs_op* op)
}
/* read current version */
- COSD_INIT_DBT(key, c_op->u.get_version.oid);
+ COSD_INIT_DBT(key, c_op->work.u.get_version.oid);
COSD_INIT_DBT(value, version);
ret = ver_dbp->get(ver_dbp, txn, &key, &value, 0);
@@ -1746,7 +1867,7 @@ static int get_version_op_worker(struct gs_op* op)
assert(0);
}
- *c_op->u.get_version.version = version;
+ *c_op->work.u.get_version.version = version;
ret = txn->commit(txn, 0);
if(ret != 0)
@@ -1778,14 +1899,13 @@ gs_ret_t gs_cosd_get_version_post(
c_op = gs_op_entry(op, struct cosd_op, op);
c_op->op_id = gs_id_gen(gs_cosd_resource_id, (uint64_t)(op->cache_id));
- c_op->u.get_version.oid = oid;
- c_op->u.get_version.version = version;
+ c_op->work.u.get_version.oid = oid;
+ c_op->work.u.get_version.version = version;
*op_id = c_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = get_version_op_worker;
- c_op->cleanup_fn = NULL;
+ c_op->work.op_worker = get_version_op_worker;
+ c_op->work.cleanup_fn = NULL;
gs_cosd_launch_op(op, gs_cosd_progress_mode);
@@ -1835,14 +1955,14 @@ static int txn_close_op_worker(struct gs_op* op)
assert(c_op);
/* only support one object for now */
- assert(c_op->u.txn_close.oid == 1);
+ assert(c_op->work.u.txn_close.oid == 1);
- lmk.oid = c_op->u.txn_close.oid;
- lmk.fork = c_op->u.txn_close.fork;
+ lmk.oid = c_op->work.u.txn_close.oid;
+ lmk.fork = c_op->work.u.txn_close.fork;
/* pull txn accumulator out of hash so no one can touch it */
gs_mutex_lock(&txn_mutex);
- hash_link = gs_hash_search(txn_table, &c_op->u.txn_close.txn_number);
+ hash_link = gs_hash_search(txn_table, &c_op->work.u.txn_close.txn_number);
if(!hash_link)
{
/* TODO: txn is gone (which could be normal); error handling */
@@ -1853,8 +1973,8 @@ static int txn_close_op_worker(struct gs_op* op)
txn_acc = gs_hash_get_entry(hash_link, struct txn_accumulator,
hash_link);
- if(txn_acc->oid != c_op->u.txn_close.oid ||
- txn_acc->fork != c_op->u.txn_close.fork)
+ if(txn_acc->oid != c_op->work.u.txn_close.oid ||
+ txn_acc->fork != c_op->work.u.txn_close.fork)
{
/* TODO: error handling */
/* mismatch between txn open and close */
@@ -1913,8 +2033,8 @@ txn_close_op_retry:
tmp_update = gs_list_get_entry(iterator, struct logical_map_entry,
list_link);
- lmk.oid = c_op->u.txn_close.oid;
- lmk.fork = c_op->u.txn_close.fork;
+ lmk.oid = c_op->work.u.txn_close.oid;
+ lmk.fork = c_op->work.u.txn_close.fork;
lmk.logical_offset_end = tmp_update->logical_offset + 1;
done = 0;
c_get_flag = DB_SET_RANGE;
@@ -1947,8 +2067,8 @@ txn_close_op_retry:
* branch, or if we go past our offset. Ignore the offset if
* flag is set to truncate the whole fork.
*/
- if(lmk.oid != c_op->u.txn_close.oid ||
- lmk.fork != c_op->u.txn_close.fork ||
+ if(lmk.oid != c_op->work.u.txn_close.oid ||
+ lmk.fork != c_op->work.u.txn_close.fork ||
(lme.logical_offset >= tmp_update->logical_offset_end &&
!(tmp_update->flags & COSD_FLAG_TRUNC_WRITE)))
{
@@ -2022,8 +2142,8 @@ txn_close_op_retry:
tmp_entry = gs_list_get_entry(iterator, struct logical_map_entry,
list_link);
lme = *tmp_entry;
- lmk.oid = c_op->u.txn_close.oid;
- lmk.fork = c_op->u.txn_close.fork;
+ lmk.oid = c_op->work.u.txn_close.oid;
+ lmk.fork = c_op->work.u.txn_close.fork;
lmk.logical_offset_end = lme.logical_offset_end;
ret = log_map_dbp->put(log_map_dbp, txn, &key, &value, 0);
if(ret != 0)
@@ -2042,7 +2162,7 @@ txn_close_op_retry:
free(free_ptr);
/* read current version */
- COSD_INIT_DBT(key, c_op->u.txn_close.oid);
+ COSD_INIT_DBT(key, c_op->work.u.txn_close.oid);
COSD_INIT_DBT(value, version);
ret = ver_dbp->get(ver_dbp, txn, &key, &value, DB_RMW);
@@ -2069,7 +2189,7 @@ txn_close_op_retry:
missing_ver = version + 1;
while(missing_ver < txn_acc->txn_number)
{
- mv.oid = c_op->u.txn_close.oid;
+ mv.oid = c_op->work.u.txn_close.oid;
mv.version = missing_ver;
/* record each missing ver in db */
@@ -2111,7 +2231,7 @@ txn_close_op_retry:
memset(&mv_key, 0, sizeof(DBT));
mv_key.data = &mv;
mv_key.size = sizeof(mv);
- mv.oid = c_op->u.txn_close.oid;
+ mv.oid = c_op->work.u.txn_close.oid;
mv.version = txn_acc->txn_number;
/* delete from db db */
@@ -2135,7 +2255,7 @@ txn_close_op_retry:
* relative to txn?
*/
gs_mutex_lock(&global_log_mutex);
- COSD_INIT_DBT(key, c_op->u.txn_close.oid);
+ COSD_INIT_DBT(key, c_op->work.u.txn_close.oid);
COSD_INIT_DBT(value, global_log_offset);
ret = log_offset_dbp->put(log_offset_dbp, txn, &key, &value, 0);
@@ -2187,6 +2307,22 @@ txn_close_op_retry:
return(1);
}
+static int cosd_txn_close_set_work(
+ struct cosd_work* work,
+ uint64_t oid,
+ uint64_t fork,
+ uint64_t txn_number)
+{
+ work->u.txn_close.oid = oid;
+ work->u.txn_close.fork = fork;
+ work->u.txn_close.txn_number = txn_number;
+
+ work->op_worker = txn_close_op_worker;
+ work->cleanup_fn = NULL;
+
+ return(0);
+}
+
gs_ret_t gs_cosd_txn_close_post(
uint64_t oid,
uint64_t fork,
@@ -2199,22 +2335,19 @@ gs_ret_t gs_cosd_txn_close_post(
{
struct gs_op *op;
struct cosd_op *c_op;
+ int ret;
op = gs_opcache_get(cosd_opcache);
gs_op_fill(op, callback, user_ptr, hints, ctx);
c_op = gs_op_entry(op, struct cosd_op, op);
c_op->op_id = gs_id_gen(gs_cosd_resource_id, (uint64_t)(op->cache_id));
- c_op->u.txn_close.oid = oid;
- c_op->u.txn_close.fork = fork;
- c_op->u.txn_close.txn_number = txn_number;
-
- *op_id = c_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = txn_close_op_worker;
- c_op->cleanup_fn = NULL;
+ ret = cosd_txn_close_set_work(&c_op->work, oid, fork, txn_number);
+ if(ret < 0)
+ return(ret);
+ *op_id = c_op->op_id;
gs_cosd_launch_op(op, gs_cosd_progress_mode);
return 0;
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh b/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
index 036a2f5..a16ba06 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
@@ -20,6 +20,7 @@
#include "include/gs.h"
#define COSD_FLAG_TRUNC_WRITE 1 /**< truncate fork on write */
+#define COSD_FLAG_AUTO_TXN 2 /**< automatically wrap write in a transaction */
/** modes of making progress on posted storage operations */
enum progress_mode
diff --git a/code/src/gsl/resources/cosd-prototype/test/cosd1.gs b/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
index 39c782e..c4a466f 100644
--- a/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
+++ b/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
@@ -401,6 +401,27 @@ static __blocking int do_cosd_test(void)
ret = gs_cosd_dump();
assert(ret == 0);
+ /********************************************************/
+
+ printf("writing 512-1024 with auto txn...\n");
+ buffer_offsets[0] = buffer;
+ buffer_szs[0] = 512;
+ obj_offsets[0] = 512;
+ obj_szs[0] = 512;
+ ret = gs_cosd_write(1, 0, (++version), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1, COSD_FLAG_AUTO_TXN);
+ if(ret != 0)
+ {
+ printf("Error writing 512-1024: %d\n", ret);
+ free(buffer);
+ return 1;
+ }
+ printf("DONE\n");
+
+ ret = gs_cosd_dump();
+ assert(ret == 0);
+
+
free(buffer);
return 0;
}
diff --git a/code/src/gsl/resources/storage/gs-storage.c b/code/src/gsl/resources/storage/gs-storage.c
index 74bea89..0ce1509 100644
--- a/code/src/gsl/resources/storage/gs-storage.c
+++ b/code/src/gsl/resources/storage/gs-storage.c
@@ -53,6 +53,7 @@ struct storage_op
} getattr_list;
} u;
+ int (*op_worker)(struct gs_op* op);
gs_op_id_t op_id;
struct gs_op op;
int error_code;
@@ -164,7 +165,7 @@ static void* thread_fn(void* foo)
gs_mutex_unlock(&storage_mutex);
/* spin on op worker */
- while(op->op_worker(op) != 1);
+ while(sto_op->op_worker(op) != 1);
/* done */
gs_opcache_complete_op(storage_opcache, op, sto_op->error_code);
@@ -242,12 +243,10 @@ gs_ret_t gs_storage_remove_post(
sto_op = gs_op_entry(op, struct storage_op, op);
sto_op->op_id = gs_id_gen(gs_storage_resource_id, (uint64_t)(op->cache_id));
sto_op->u.remove.oid = oid;
+ sto_op->op_worker = remove_op_worker;
*op_id = sto_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = remove_op_worker;
-
gs_storage_launch_op(op, gs_storage_progress_mode);
return 0;
@@ -280,12 +279,10 @@ gs_ret_t gs_storage_create_post(
sto_op->op_id = gs_id_gen(gs_storage_resource_id, (uint64_t)(op->cache_id));
sto_op->u.create.requested_oid = requested_oid;
sto_op->u.create.out_oid = out_oid;
+ sto_op->op_worker = create_op_worker;
*op_id = sto_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = create_op_worker;
-
gs_storage_launch_op(op, gs_storage_progress_mode);
return 0;
@@ -326,12 +323,10 @@ gs_ret_t gs_storage_setattr_list_post(
sto_op->u.setattr_list.number_array = number_array;
sto_op->u.setattr_list.val_array = val_array;
sto_op->u.setattr_list.len_array = len_array;
+ sto_op->op_worker = setattr_list_op_worker;
*op_id = sto_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = setattr_list_op_worker;
-
gs_storage_launch_op(op, gs_storage_progress_mode);
return(0);
@@ -376,12 +371,10 @@ gs_ret_t gs_storage_getattr_list_post(
sto_op->u.getattr_list.number_array = number_array;
sto_op->u.getattr_list.val_array = val_array;
sto_op->u.getattr_list.len_array = len_array;
+ sto_op->op_worker = getattr_list_op_worker;
*op_id = sto_op->op_id;
- /* TODO: put this in the fill function if we keep it? */
- op->op_worker = getattr_list_op_worker;
-
gs_storage_launch_op(op, gs_storage_progress_mode);
return(0);
@@ -435,7 +428,7 @@ static int gs_storage_poll(gs_context_t context, int millisecs)
sto_op = gs_op_entry(gop, struct storage_op, op);
- ret = gop->op_worker(gop);
+ ret = sto_op->op_worker(gop);
if(ret == 1)
{
/* done */
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-360-gb752025
by noreply@mcs.anl.gov 29 Jan '10
by noreply@mcs.anl.gov 29 Jan '10
29 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via b7520255a7b588bcbb4eabfafd9499e674338cdb (commit)
via 2ef6b83c6bb1d95cc50792f987c1f486daeca1e4 (commit)
from 431259e14c1e2bdb26e7b65f55bd68b34da1e4c4 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b7520255a7b588bcbb4eabfafd9499e674338cdb
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 29 10:14:53 2010 -0500
test case for COSD_FLAG_TRUNC_WRITE
commit 2ef6b83c6bb1d95cc50792f987c1f486daeca1e4
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 29 10:09:06 2010 -0500
untested support for truncate flag on write
the COSD_FLAG_TRUNC_WRITE can be used to mimic "put" semantics by
eliminating all previous data from the fork being written to, regardless
of size
-----------------------------------------------------------------------
Summary of changes:
.../gsl/resources/cosd-prototype/cosd-prototype.c | 33 ++++++--
.../resources/cosd-prototype/cosd-prototype.gsh | 5 +-
.../cosd-prototype/test/cosd-bench-concurrent.gs | 3 +-
.../src/gsl/resources/cosd-prototype/test/cosd1.gs | 88 ++++++++++++++------
4 files changed, 94 insertions(+), 35 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
index 744b1a2..54b8c8b 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
@@ -147,6 +147,7 @@ struct logical_map_entry
int64_t logical_offset_end; /* end of logical region */
int64_t log_offset; /* offset into log */
uint64_t version; /* version number */
+ int flags; /* record of what flags were used at write time */
struct gs_list_link list_link;
};
@@ -181,6 +182,7 @@ struct cosd_op
int64_t* obj_offsets;
int64_t* obj_sizes;
int obj_count;
+ int flags;
} write;
struct read_op{
uint64_t oid;
@@ -1092,6 +1094,7 @@ static int write_op_worker(struct gs_op* op)
tmp_update->size = c_op->u.write.mem_sizes[mem_index];
tmp_update->logical_offset_end = tmp_update->logical_offset +
tmp_update->size;
+ tmp_update->flags = c_op->u.write.flags;
if(tmp_update->size >= c_op->u.write.obj_sizes[obj_index])
{
/* mem region is bigger than obj region */
@@ -1454,6 +1457,7 @@ gs_ret_t gs_cosd_write_post(
int64_t* obj_offsets,
int64_t* obj_sizes,
int obj_count,
+ int flags,
void (*callback)(void *ptr, int ret),
void *user_ptr,
gs_hints_t hints,
@@ -1473,6 +1477,7 @@ gs_ret_t gs_cosd_write_post(
c_op->u.write.txn_number = txn_number;
c_op->u.write.mem_count = mem_count;
c_op->u.write.obj_count = obj_count;
+ c_op->u.write.flags = flags;
/* copy arrays so that we can modify them internally */
/* TODO: error handling */
@@ -1516,6 +1521,7 @@ gs_ret_t (* gs_cosd_write)(
int64_t* obj_offsets,
int64_t* obj_sizes,
int obj_count,
+ int flags,
void (*callback)(void *ptr, int ret),
void *user_ptr,
gs_hints_t hints,
@@ -1937,25 +1943,33 @@ txn_close_op_retry:
assert(0);
}
+ /* stop if we run into the next oid, if we run into the next
+ * branch, or if we go past our offset. Ignore the offset if
+ * flag is set to truncate the whole fork.
+ */
if(lmk.oid != c_op->u.txn_close.oid ||
lmk.fork != c_op->u.txn_close.fork ||
- lme.logical_offset >= tmp_update->logical_offset_end)
+ (lme.logical_offset >= tmp_update->logical_offset_end &&
+ !(tmp_update->flags & COSD_FLAG_TRUNC_WRITE)))
{
/* no more overlapping regions in this this object/fork */
done = 1;
break;
}
- /* store this in a linked list */
- tmp_entry = malloc(sizeof(*tmp_entry));
- if(!tmp_entry)
+ if(!(tmp_update->flags & COSD_FLAG_TRUNC_WRITE))
{
- /* TODO: err handling */
- assert(0);
+ /* store this in a linked list */
+ tmp_entry = malloc(sizeof(*tmp_entry));
+ if(!tmp_entry)
+ {
+ /* TODO: err handling */
+ assert(0);
+ }
+ *tmp_entry = lme;
+ gs_list_add(&tmp_entry->list_link, &on_disk_entries);
+ on_disk_count++;
}
- *tmp_entry = lme;
- gs_list_add(&tmp_entry->list_link, &on_disk_entries);
- on_disk_count++;
c_get_flag = DB_NEXT;
/* TODO: worth optimizing? We can instead calculate exactly
@@ -1978,6 +1992,7 @@ txn_close_op_retry:
}
}
}
+
ret = dbc_p->c_close(dbc_p);
if(ret != 0)
{
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh b/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
index d1139a7..036a2f5 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
@@ -19,6 +19,8 @@
#include "include/gs.h"
+#define COSD_FLAG_TRUNC_WRITE 1 /**< truncate fork on write */
+
/** modes of making progress on posted storage operations */
enum progress_mode
{
@@ -112,7 +114,8 @@ __blocking int gs_cosd_write(
int mem_count, /**< memory region count */
int64_t* obj_offsets, /**< object region offsets */
int64_t* obj_sizes, /**< object region sizes */
- int obj_count /**< object region count */
+ int obj_count, /**< object region count */
+ int flags /**< optional flags */
);
diff --git a/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs b/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
index 0bc8815..dafa470 100644
--- a/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
+++ b/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
@@ -120,7 +120,8 @@ static __blocking int do_cosd_test(void)
}
b_ret = gs_cosd_write(1, 0, b_version, &buffer,
- &tmp_op->size, 1, &tmp_op->offset, &tmp_op->size, 1);
+ &tmp_op->size, 1, &tmp_op->offset,
+ &tmp_op->size, 1, 0);
if(b_ret < 0)
{
/* TODO: error handling */
diff --git a/code/src/gsl/resources/cosd-prototype/test/cosd1.gs b/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
index 3d37bc8..39c782e 100644
--- a/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
+++ b/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
@@ -65,7 +65,7 @@ static __blocking int do_cosd_test(void)
assert(ret == 0);
/********************************************************/
printf("opening txn...\n");
- ret = gs_cosd_txn_open(1, 0, (version+1));
+ ret = gs_cosd_txn_open(1, 0, (++version));
if(ret != 0)
{
printf("Error opening txn 1: %d\n", ret);
@@ -79,8 +79,8 @@ static __blocking int do_cosd_test(void)
buffer_szs[0] = 1024;
obj_offsets[0] = 0;
obj_szs[0] = 1024;
- ret = gs_cosd_write(1, 0, (version+1), buffer_offsets, buffer_szs, 1,
- obj_offsets, obj_szs, 1);
+ ret = gs_cosd_write(1, 0, (version), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1, 0);
if(ret != 0)
{
printf("Error writing 0-1024: %d\n", ret);
@@ -90,7 +90,7 @@ static __blocking int do_cosd_test(void)
printf("DONE\n");
printf("closing txn...\n");
- ret = gs_cosd_txn_close(1, 0, (version+1));
+ ret = gs_cosd_txn_close(1, 0, (version));
if(ret != 0)
{
printf("Error closing txn 1: %d\n", ret);
@@ -103,7 +103,8 @@ static __blocking int do_cosd_test(void)
assert(ret == 0);
/********************************************************/
printf("opening txn...\n");
- ret = gs_cosd_txn_open(1, 0, (version+3));
+ version = version+2;
+ ret = gs_cosd_txn_open(1, 0, (version));
if(ret != 0)
{
printf("Error opening txn 1: %d\n", ret);
@@ -123,8 +124,8 @@ static __blocking int do_cosd_test(void)
obj_offsets[1] = 2000;
obj_szs[0] = 100;
obj_szs[1] = 924;
- ret = gs_cosd_write(1, 0, (version+3), buffer_offsets, buffer_szs, 3,
- obj_offsets, obj_szs, 2);
+ ret = gs_cosd_write(1, 0, (version), buffer_offsets, buffer_szs, 3,
+ obj_offsets, obj_szs, 2, 0);
if(ret != 0)
{
printf("Error writing with listio: %d\n", ret);
@@ -134,7 +135,7 @@ static __blocking int do_cosd_test(void)
printf("DONE\n");
printf("closing txn...\n");
- ret = gs_cosd_txn_close(1, 0, (version+3));
+ ret = gs_cosd_txn_close(1, 0, (version));
if(ret != 0)
{
printf("Error closing txn 1: %d\n", ret);
@@ -147,7 +148,7 @@ static __blocking int do_cosd_test(void)
assert(ret == 0);
/********************************************************/
printf("opening txn...\n");
- ret = gs_cosd_txn_open(1, 0, (version+2));
+ ret = gs_cosd_txn_open(1, 0, (version-1));
if(ret != 0)
{
printf("Error opening txn 1: %d\n", ret);
@@ -161,8 +162,8 @@ static __blocking int do_cosd_test(void)
buffer_szs[0] = 4096;
obj_offsets[0] = 200;
obj_szs[0] = 4096;
- ret = gs_cosd_write(1, 0, (version+2), buffer_offsets, buffer_szs, 1,
- obj_offsets, obj_szs, 1);
+ ret = gs_cosd_write(1, 0, (version-1), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1, 0);
if(ret != 0)
{
printf("Error writing with listio: %d\n", ret);
@@ -172,7 +173,7 @@ static __blocking int do_cosd_test(void)
printf("DONE\n");
printf("closing txn...\n");
- ret = gs_cosd_txn_close(1, 0, (version+2));
+ ret = gs_cosd_txn_close(1, 0, (version-1));
if(ret != 0)
{
printf("Error closing txn 1: %d\n", ret);
@@ -238,7 +239,7 @@ static __blocking int do_cosd_test(void)
/********************************************************/
printf("opening txn...\n");
- ret = gs_cosd_txn_open(1, 0, (version+4));
+ ret = gs_cosd_txn_open(1, 0, (++version));
if(ret != 0)
{
printf("Error opening txn 1: %d\n", ret);
@@ -253,8 +254,8 @@ static __blocking int do_cosd_test(void)
sprintf(buffer, "Hello world.");
obj_offsets[0] = 10024;
obj_szs[0] = 13;
- ret = gs_cosd_write(1, 0, (version+4), buffer_offsets, buffer_szs, 1,
- obj_offsets, obj_szs, 1);
+ ret = gs_cosd_write(1, 0, (version), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1, 0);
if(ret != 0)
{
printf("Error writing 10024-10037: %d\n", ret);
@@ -264,7 +265,7 @@ static __blocking int do_cosd_test(void)
printf("DONE\n");
printf("closing txn...\n");
- ret = gs_cosd_txn_close(1, 0, (version+4));
+ ret = gs_cosd_txn_close(1, 0, (version));
if(ret != 0)
{
printf("Error closing txn: %d\n", ret);
@@ -301,7 +302,7 @@ static __blocking int do_cosd_test(void)
/********************************************************/
printf("writing to two forks...\n");
- ret = gs_cosd_txn_open(1, 1, (version+10));
+ ret = gs_cosd_txn_open(1, 1, (++version));
assert(ret == 0);
buffer_offsets[0] = buffer;
@@ -309,14 +310,14 @@ static __blocking int do_cosd_test(void)
sprintf(buffer, "fork1");
obj_offsets[0] = 0;
obj_szs[0] = 6;
- ret = gs_cosd_write(1, 1, (version+10), buffer_offsets, buffer_szs, 1,
- obj_offsets, obj_szs, 1);
+ ret = gs_cosd_write(1, 1, (version), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1, 0);
assert(ret == 0);
- ret = gs_cosd_txn_close(1, 1, (version+10));
+ ret = gs_cosd_txn_close(1, 1, (version));
assert(ret == 0);
- ret = gs_cosd_txn_open(1, 2, (version+11));
+ ret = gs_cosd_txn_open(1, 2, (++version));
assert(ret == 0);
buffer_offsets[0] = buffer;
@@ -324,11 +325,11 @@ static __blocking int do_cosd_test(void)
sprintf(buffer, "fork2");
obj_offsets[0] = 0;
obj_szs[0] = 6;
- ret = gs_cosd_write(1, 2, (version+11), buffer_offsets, buffer_szs, 1,
- obj_offsets, obj_szs, 1);
+ ret = gs_cosd_write(1, 2, (version), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1, 0);
assert(ret == 0);
- ret = gs_cosd_txn_close(1, 2, (version+11));
+ ret = gs_cosd_txn_close(1, 2, (version));
assert(ret == 0);
printf("DONE\n");
@@ -361,6 +362,45 @@ static __blocking int do_cosd_test(void)
ret = gs_cosd_dump();
assert(ret == 0);
+ /********************************************************/
+ printf("opening txn...\n");
+ ret = gs_cosd_txn_open(1, 0, (++version));
+ if(ret != 0)
+ {
+ printf("Error opening txn 1: %d\n", ret);
+ free(buffer);
+ return 1;
+ }
+ printf("DONE\n");
+
+ printf("writing 0-1024 with truncate flag...\n");
+ buffer_offsets[0] = buffer;
+ buffer_szs[0] = 1024;
+ obj_offsets[0] = 0;
+ obj_szs[0] = 1024;
+ ret = gs_cosd_write(1, 0, (version), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1, COSD_FLAG_TRUNC_WRITE);
+ if(ret != 0)
+ {
+ printf("Error writing 0-1024: %d\n", ret);
+ free(buffer);
+ return 1;
+ }
+ printf("DONE\n");
+
+ printf("closing txn...\n");
+ ret = gs_cosd_txn_close(1, 0, (version));
+ if(ret != 0)
+ {
+ printf("Error closing txn 1: %d\n", ret);
+ free(buffer);
+ return 1;
+ }
+ printf("DONE\n");
+
+ ret = gs_cosd_dump();
+ assert(ret == 0);
+
free(buffer);
return 0;
}
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-358-g431259e
by noreply@mcs.anl.gov 26 Jan '10
by noreply@mcs.anl.gov 26 Jan '10
26 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 431259e14c1e2bdb26e7b65f55bd68b34da1e4c4 (commit)
via 2eb6298282397fa4c6082d4ad5e9c830049e7578 (commit)
via b4f46b240171c47f2499267e1c180b7f3ad25efa (commit)
via 66292d4df664a46071d1b28fb2efa9b02dffee9e (commit)
via 6c7078562853bcaf02ced603974a64aefa39c573 (commit)
via 0a008105d7bdd07c749065ada88543fadc1ed13b (commit)
from da579c5b15032a01474c41b4f1cf6e928677e689 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 431259e14c1e2bdb26e7b65f55bd68b34da1e4c4
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Jan 26 18:07:20 2010 -0600
EOL fixes.
commit 2eb6298282397fa4c6082d4ad5e9c830049e7578
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Jan 26 18:06:09 2010 -0600
New tests show difference between load from fault and from repair.
commit b4f46b240171c47f2499267e1c180b7f3ad25efa
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Jan 26 18:04:57 2010 -0600
Better analysis of rebuild loads.
commit 66292d4df664a46071d1b28fb2efa9b02dffee9e
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Jan 26 13:43:16 2010 -0600
Analysis of rebuild load due separately to the fault or the rejoin.
commit 6c7078562853bcaf02ced603974a64aefa39c573
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Jan 26 13:42:15 2010 -0600
Minor fix for new package layout.
commit 0a008105d7bdd07c749065ada88543fadc1ed13b
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Jan 26 10:46:32 2010 -0600
Minors.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/build.xml | 4 +-
sim/gobs/src/gobs/sim/Cause.java | 28 +++++
sim/gobs/src/gobs/sim/Copy.java | 9 +-
sim/gobs/src/gobs/sim/File.java | 38 ++++++-
sim/gobs/src/gobs/sim/FileFactory.java | 13 ++-
sim/gobs/src/gobs/sim/Metric.java | 9 ++-
sim/gobs/src/gobs/sim/Node.java | 10 +-
sim/gobs/src/gobs/sim/PDSIFiles.java | 17 ++--
sim/gobs/src/gobs/sim/RandomFiles.java | 4 +-
sim/gobs/src/gobs/sim/Rebuild.java | 110 +++++++++++++++++----
sim/gobs/src/gobs/sim/Repair.java | 15 +++
sim/gobs/src/gobs/sim/Replicated.java | 3 +-
sim/gobs/src/gobs/sim/Simulator.java | 58 ++++++++----
sim/gobs/src/gobs/sim/SingleObject.java | 2 +-
sim/gobs/src/gobs/sweep/ParallelSweep.java | 4 +-
sim/gobs/src/gobs/sweep/Sweep.java | 4 +-
sim/gobs/src/gobs/sweep/x/Decluster01P.java | 3 +-
sim/gobs/src/gobs/sweep/x/Rebuild02.java | 86 +++++++++++++----
sim/gobs/src/gobs/test/TestELHS.java | 4 +-
sim/gobs/src/gobs/test/TestFileFactory.java | 4 +-
sim/gobs/sweeps/rb02-small.cfg | 20 +++--
sim/gobs/sweeps/rb02-small.zsh | 2 +-
sim/gobs/sweeps/{rb02-small.cfg => rb02.cfg} | 40 ++------
sim/gobs/sweeps/rb02.zsh | 9 ++
sim/gobs/{sweeps/rb02-small.cfg => wiki/rb02.cfg} | 40 ++------
sim/gobs/wiki/rb02.zsh | 9 ++
26 files changed, 381 insertions(+), 164 deletions(-)
create mode 100644 sim/gobs/src/gobs/sim/Cause.java
copy sim/gobs/sweeps/{rb02-small.cfg => rb02.cfg} (59%)
create mode 100755 sim/gobs/sweeps/rb02.zsh
copy sim/gobs/{sweeps/rb02-small.cfg => wiki/rb02.cfg} (59%)
create mode 100755 sim/gobs/wiki/rb02.zsh
Diff of changes:
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index 1687d38..1e26510 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -15,7 +15,7 @@
dir="prereqs"
includes="*.jar" />
<pathconvert refid="jars" property="jars" />
- <property name="classpath" value=".:${jars}" />
+ <property name="classpath" value="./src:${jars}" />
<target name="all"
depends="compile" />
@@ -134,7 +134,7 @@
<fileset dir="src/gobs/sweep/x">
<filename name="*.class" />
</fileset>
- <fileset dir="gobs/util">
+ <fileset dir="src/gobs/util">
<filename name="*.class" />
</fileset>
</delete>
diff --git a/sim/gobs/src/gobs/sim/Cause.java b/sim/gobs/src/gobs/sim/Cause.java
new file mode 100644
index 0000000..7a07d5b
--- /dev/null
+++ b/sim/gobs/src/gobs/sim/Cause.java
@@ -0,0 +1,28 @@
+
+package gobs.sim;
+
+/**
+ The direct cause for a Copy.
+*/
+public enum Cause
+{
+ /**
+ This Copy was caused by a fault.
+ */
+ FAULT,
+
+ /**
+ This Copy was caused by a repair.
+ */
+ REPAIR,
+
+ /**
+ This Copy was caused by a validation check.
+ */
+ VALIDATION,
+
+ /**
+ Query for Copies caused by FAULT or REPAIR.
+ */
+ ANY
+}
diff --git a/sim/gobs/src/gobs/sim/Copy.java b/sim/gobs/src/gobs/sim/Copy.java
index 0d7210f..6e3c6e7 100644
--- a/sim/gobs/src/gobs/sim/Copy.java
+++ b/sim/gobs/src/gobs/sim/Copy.java
@@ -14,16 +14,18 @@ class Copy
Node destination;
boolean complete = false;
double start = 0;
+ Cause cause;
Progress progress;
static DecimalFormat df = new DecimalFormat("0.00");
- Copy(Simulator simulator,
+ Copy(Simulator simulator, Cause cause,
Gob object, Node source, Node destination)
{
super(simulator);
assert (source != null);
+ this.cause = cause;
this.object = object;
this.source = source;
this.destination = destination;
@@ -43,10 +45,7 @@ class Copy
System.out.println("start: " + log());
}
else if (progress == Progress.RUNNING)
- {
- if (simulator.bool("print.rebuilds"))
- System.out.println("restart: " + log());
- }
+ simulator.print("rebuilds", "restart: " + log());
else if (progress == Progress.DONE)
Tools.bail("Copy.startAt(): Copy is DONE: " + log());
}
diff --git a/sim/gobs/src/gobs/sim/File.java b/sim/gobs/src/gobs/sim/File.java
index daa4836..569d84f 100644
--- a/sim/gobs/src/gobs/sim/File.java
+++ b/sim/gobs/src/gobs/sim/File.java
@@ -20,7 +20,7 @@ public class File
static int unique = 0;
- Collection<Gob> objects;
+ Collection<Gob> objects = null;
File(BigInteger size, BigInteger strip, int width, int replicas)
{
@@ -56,14 +56,40 @@ public class File
public String toString(Simulator simulator)
{
- StringBuilder sb =
- new StringBuilder(100+objects.size()*10);
- sb.append("file[").append(id).append("]: ");
- for (Gob object : objects)
- sb.append(object.toString(simulator)).append(" ");
+ int n = 0;
+ if (objects != null)
+ n = objects.size();
+ StringBuilder sb = new StringBuilder(100+n*16);
+ sb.append("file[").append(id).append("]");
+ sb.append("(").append(""+toString(size)+" @ "+replicas);
+ if (objects != null)
+ {
+ sb.append(": ");
+ for (Gob object : objects)
+ {
+ String s = object.toString(simulator);
+ sb.append(s).append(" ");
+ }
+ }
return sb.toString();
}
+ public String toString()
+ {
+ return toString(Simulator.current);
+ }
+
+ static String toString(BigInteger b)
+ {
+ if (b.compareTo(FileFactory.GB) > 0)
+ return "" + b.divide(FileFactory.GB) + "GB";
+ else if (b.compareTo(FileFactory.MB) > 0)
+ return "" + b.divide(FileFactory.MB) + "MB";
+ else if (b.compareTo(FileFactory.KB) > 0)
+ return "" + b.divide(FileFactory.KB) + "KB";
+ return "" + b + "B";
+ }
+
/**
Debugging only.
*/
diff --git a/sim/gobs/src/gobs/sim/FileFactory.java b/sim/gobs/src/gobs/sim/FileFactory.java
index 0451e8d..04f144c 100644
--- a/sim/gobs/src/gobs/sim/FileFactory.java
+++ b/sim/gobs/src/gobs/sim/FileFactory.java
@@ -1,6 +1,7 @@
package gobs.sim;
+import java.math.BigInteger;
import static java.lang.Math.*;
/**
@@ -16,21 +17,25 @@ public abstract class FileFactory
/**
A tebibyte.
*/
- public static double TB = pow(1024, 4);
+ public static double tb = pow(1024, 4);
/**
A gibibyte.
*/
- public static double GB = pow(1024, 3);
+ public static double gb = pow(1024, 3);
/**
A mebibyte.
*/
- public static double MB = pow(1024, 2);
+ public static double mb = pow(1024, 2);
/**
A kibibyte.
*/
- public static double KB = 1024.0;
+ public static double kb = 1024.0;
+ public static BigInteger KB = new BigInteger("1024");
+ public static BigInteger MB = KB.multiply(KB);
+ public static BigInteger GB = MB.multiply(KB);
+ public static BigInteger TB = GB.multiply(KB);
}
diff --git a/sim/gobs/src/gobs/sim/Metric.java b/sim/gobs/src/gobs/sim/Metric.java
index 7908c51..3fa38d4 100644
--- a/sim/gobs/src/gobs/sim/Metric.java
+++ b/sim/gobs/src/gobs/sim/Metric.java
@@ -51,7 +51,12 @@ public abstract class Metric
*/
Copy regimen(SingleObject object, List<Node> system)
{
- System.out.println("regimen: " + object);
+ if (simulator.enabled("regimen.skip"))
+ {
+ simulator.print("rebuilds", "regimen: skip");
+ return null;
+ }
+ simulator.print("rebuilds", "regimen: " + object);
Sites sites = sites(object, system);
SecondaryObject secondary;
// The node that should have the primary in the current system
@@ -182,7 +187,7 @@ public abstract class Metric
source == null)
Tools.bail("regimen(): could not handle: " + object);
- return new Copy(simulator, payload, source, destination);
+ return new Copy(simulator, Cause.FAULT, payload, source, destination);
}
void logCopy(Copy copy)
diff --git a/sim/gobs/src/gobs/sim/Node.java b/sim/gobs/src/gobs/sim/Node.java
index 228e3c7..d43dcda 100644
--- a/sim/gobs/src/gobs/sim/Node.java
+++ b/sim/gobs/src/gobs/sim/Node.java
@@ -96,18 +96,18 @@ public class Node
After a Repair, remove all objects.
@return A Set of Copies to be performed to restore this Node.
*/
- Set<Copy> reboot()
+ Set<Copy> reboot(Repair repair)
{
simulator.nodes.add(this);
replaceDisk();
status = Status.UP;
- return rejoin();
+ return rejoin(repair);
}
/**
Rejoin the cluster.
*/
- Set<Copy> rejoin()
+ Set<Copy> rejoin(Repair repair)
{
// Ensure no Object is being copied twice simultaneously
Set<BigInteger> ids = new HashSet<BigInteger>();
@@ -130,9 +130,11 @@ public class Node
System.out.println("sites: " + sites);
source = simulator.scanObject(object);
}
- Copy copy = new Copy(simulator, object, source, this);
+ Copy copy = new Copy(simulator, Cause.REPAIR,
+ object, source, this);
System.out.println("rejoin: " + copy);
copies.add(copy);
+ repair.add(copy);
}
}
}
diff --git a/sim/gobs/src/gobs/sim/PDSIFiles.java b/sim/gobs/src/gobs/sim/PDSIFiles.java
index 474ff71..7e2e31c 100644
--- a/sim/gobs/src/gobs/sim/PDSIFiles.java
+++ b/sim/gobs/src/gobs/sim/PDSIFiles.java
@@ -75,7 +75,7 @@ public class PDSIFiles
*/
public PDSIFiles(Simulator simulator)
{
- this(simulator, parse(simulator.string("PDSIFilesPoints")));
+ this(simulator, parse(simulator.string("file.pdsi.points")));
}
/**
@@ -102,6 +102,9 @@ public class PDSIFiles
{
result[i][0] = entry.getKey();
result[i][1] = entry.getValue();
+ if (result[i][1] == 0.0)
+ throw new IllegalArgumentException
+ ("PDSIFiles: Cannot interpolate 0!");
i++;
}
return result;
@@ -120,13 +123,13 @@ public class PDSIFiles
{
String t = m.group();
if (t.compareToIgnoreCase("K") == 0)
- s = KB;
+ s = kb;
else if (t.compareToIgnoreCase("M") == 0)
- s = MB;
+ s = mb;
else if (t.compareToIgnoreCase("G") == 0)
- s = GB;
+ s = gb;
else if (t.compareToIgnoreCase("T") == 0)
- s = TB;
+ s = tb;
v = value.substring(0, value.length()-1);
}
double d = Double.parseDouble(v);
@@ -193,10 +196,10 @@ public class PDSIFiles
int width;
BigInteger strip;
int replicas;
- if (size.compareTo(BigInteger.valueOf((long) MB)) > 0)
+ if (size.compareTo(BigInteger.valueOf((long) mb)) > 0)
{
width = simulator.nodes.size();
- strip = BigInteger.valueOf(round(4*MB));
+ strip = BigInteger.valueOf(round(4*mb));
replicas = 2;
}
else
diff --git a/sim/gobs/src/gobs/sim/RandomFiles.java b/sim/gobs/src/gobs/sim/RandomFiles.java
index 0df5c71..a411c2b 100644
--- a/sim/gobs/src/gobs/sim/RandomFiles.java
+++ b/sim/gobs/src/gobs/sim/RandomFiles.java
@@ -35,8 +35,8 @@ class RandomFiles
static
{
- long mb = Math.round(Math.floor(MB));
- fourMB = BigInteger.valueOf(2).multiply(BigInteger.valueOf(mb));
+ long mbl = Math.round(Math.floor(mb));
+ fourMB = BigInteger.valueOf(2).multiply(BigInteger.valueOf(mbl));
}
RandomFiles(Simulator simulator)
diff --git a/sim/gobs/src/gobs/sim/Rebuild.java b/sim/gobs/src/gobs/sim/Rebuild.java
index f703fb9..ed98ae8 100644
--- a/sim/gobs/src/gobs/sim/Rebuild.java
+++ b/sim/gobs/src/gobs/sim/Rebuild.java
@@ -17,6 +17,7 @@ public class Rebuild
/**
Historical schedule of Events.
*/
+ @Deprecated
NavigableSet<Event> schedule = null;
/**
@@ -44,18 +45,29 @@ public class Rebuild
Queue<Copy> queue = new ArrayDeque<Copy>();
/**
+ The repair in response to this Rebuild.
+ */
+ Repair repair;
+
+ /**
The fault that will occur after this Rebuild has started.
May or may not interrupt this Rebuild.
*/
Fault fault;
/**
+ Copies caused by this Rebuild.
+ */
+ List<Copy> entries = new ArrayList();
+
+ /**
@param fault The fault that may interrupt this Rebuild.
*/
Rebuild(Simulator simulator, Fault fault, Repair repair)
{
this.simulator = simulator;
this.fault = fault;
+ this.repair = repair;
simulator.inflight.add(fault);
simulator.inflight.add(repair);
}
@@ -69,9 +81,9 @@ public class Rebuild
double rebuild(List<Copy> work)
{
start = simulator.time();
- schedule = new TreeSet<Event>();
enqueue(simulator.todo);
add(work);
+ entries.addAll(work);
while (! (queue.isEmpty() && simulator.inflight.isEmpty()))
{
Copy copy = select(queue);
@@ -88,6 +100,7 @@ public class Rebuild
}
}
finish = simulator.time();
+ simulator.print("rebuilds", "REBUILD_TIME: " + (finish-start));
return finish;
}
@@ -98,7 +111,6 @@ public class Rebuild
{
simulator.todo.remove(copy);
copy.startAt(time);
- schedule.add(copy);
simulator.busy.add(copy.source);
simulator.busy.add(copy.destination);
Tools.check(simulator.inflight.add(copy),
@@ -222,8 +234,8 @@ public class Rebuild
if (! node.contains(object.id))
{
Copy copy = simulator.placer.regimen(object);
- assert(copy != null);
- result.add(copy);
+ if (copy != null)
+ result.add(copy);
}
return result;
}
@@ -261,7 +273,7 @@ public class Rebuild
if (simulator.bool("print.rebuilds"))
System.out.println(repair);
Node node = repair.node;
- Set<Copy> copies = node.reboot();
+ Set<Copy> copies = node.reboot(repair);
for (Copy copy : copies)
{
add(copy);
@@ -284,6 +296,8 @@ public class Rebuild
boolean enqueue(Copy copy)
{
+ if (copy == null)
+ Tools.bail("Should not enqueue null Copy!");
for (Iterator<Copy> it = queue.iterator(); it.hasNext(); )
{
Copy c = it.next();
@@ -309,17 +323,47 @@ public class Rebuild
/**
Compute the load from this Rebuild at absolute simulated time t.
*/
- public int loadAt(double t)
+ public int loadAt(double t, Cause cause)
{
- int result = 0;
- NavigableSet<Event> view =
- schedule.tailSet(new Event(simulator, t), false);
- for (Iterator<Event> it = view.iterator(); it.hasNext(); )
- {
- Copy copy = (Copy) it.next();
- if (copy.start <= t)
- result++;
- }
+ List<Copy> list = snapshotAt(t, cause);
+ int result = list.size();
+ return result;
+ }
+
+ /**
+ Print snapshot of activity at time t.
+ */
+ public void printAt(double t, Cause cause)
+ {
+ List<Copy> list = snapshotAt(t, cause);
+ for (Copy copy : list)
+ System.out.println(copy);
+ System.out.println("");
+ }
+
+ /**
+ Return a list of Copies in flight at time t.
+ @param t time
+ @return The list.
+ */
+ public List<Copy> snapshotAt(double t, Cause cause)
+ {
+ List<Copy> result = new ArrayList<Copy>();
+
+ if (cause == Cause.ANY ||
+ cause == Cause.FAULT)
+ for (Copy copy : entries)
+ if (copy.start <= t &&
+ copy.finish > t)
+ result.add(copy);
+
+ if (cause == Cause.ANY ||
+ cause == Cause.REPAIR)
+ for (Copy copy : repair.entries)
+ if (copy.start <= t &&
+ copy.finish > t)
+ result.add(copy);
+
return result;
}
@@ -329,15 +373,45 @@ public class Rebuild
*/
public int loadOffset(double t)
{
- return loadAt(t+start);
+ return loadOffset(t+start, Cause.ANY);
}
/**
- Simulated time from start to finish for this Rebuild.
+ Compute the load from this Rebuild at simulated time t relative
+ to the start of this Rebuild.
+ */
+ public int loadOffset(double t, Cause cause)
+ {
+ return loadAt(t+start, cause);
+ }
+
+ public void printOffset(double t, Cause cause)
+ {
+ printAt(t+start, cause);
+ }
+
+ /**
+ Simulated time at which this Rebuild started.
+ */
+ public double start()
+ {
+ return start;
+ }
+
+ /**
+ Simulated time until all associated Copies
+ (entries and Repair.entries) are complete.
*/
public double length()
{
- return finish-start;
+ double result = 0.0;
+ for (Copy copy : entries)
+ if (copy.finish > result)
+ result = copy.finish;
+ for (Copy copy : repair.entries)
+ if (copy.finish > result)
+ result = copy.finish;
+ return result;
}
/**
diff --git a/sim/gobs/src/gobs/sim/Repair.java b/sim/gobs/src/gobs/sim/Repair.java
index 09ddff3..fca9017 100644
--- a/sim/gobs/src/gobs/sim/Repair.java
+++ b/sim/gobs/src/gobs/sim/Repair.java
@@ -1,11 +1,16 @@
package gobs.sim;
+import java.util.*;
+
class Repair
extends Event
{
+ Rebuild rebuild = null;
Node node;
+ List<Copy> entries = new ArrayList<Copy>();
+
Repair(Simulator simulator, Node node, double time)
{
super(simulator);
@@ -24,4 +29,14 @@ class Repair
{
return log();
}
+
+ public void setRebuild(Rebuild rebuild)
+ {
+ this.rebuild = rebuild;
+ }
+
+ public void add(Copy copy)
+ {
+ entries.add(copy);
+ }
}
diff --git a/sim/gobs/src/gobs/sim/Replicated.java b/sim/gobs/src/gobs/sim/Replicated.java
index 7771ad1..67693f7 100644
--- a/sim/gobs/src/gobs/sim/Replicated.java
+++ b/sim/gobs/src/gobs/sim/Replicated.java
@@ -30,8 +30,7 @@ public abstract class Replicated
/**
Generate an object set for a file.
*/
- public Collection<Gob>
- allocateFile(File file, List<Node> nodes)
+ public Collection<Gob> allocateFile(File file, List<Node> nodes)
{
ArrayList<Gob> result =
new ArrayList<Gob>(file.width);
diff --git a/sim/gobs/src/gobs/sim/Simulator.java b/sim/gobs/src/gobs/sim/Simulator.java
index 500feb9..690579e 100644
--- a/sim/gobs/src/gobs/sim/Simulator.java
+++ b/sim/gobs/src/gobs/sim/Simulator.java
@@ -90,13 +90,12 @@ public class Simulator
/**
Rebuild rate in bytes/sec.
*/
- static long rebuildRate = 1;
+ static double rebuildRate = 0;
/**
Rebuild rate in bytes/sec.
*/
- private static BigInteger bigRebuildRate =
- new BigInteger(""+rebuildRate);
+ private static BigInteger bigRebuildRate = null;
/**
The Set of Nodes that are currently making copies.
@@ -249,6 +248,9 @@ public class Simulator
reads = integer("reads");
writes = integer("writes");
+ rebuildRate = decimal("rebuild.rate");
+ bigRebuildRate = BigInteger.valueOf((long) rebuildRate);
+
setupTermination();
setupExponentials();
}
@@ -282,19 +284,26 @@ public class Simulator
void setupFileFactory()
{
- String factoryName = properties.getProperty("impl.filefactory");
- if (factoryName == null)
- bail("No impl.filefactory given!");
- else if (factoryName.equals("PlainFiles"))
- factory = new PlainFiles(this);
- else if (factoryName.equals("TraceFiles"))
- factory = new TraceFiles(this);
- else if (factoryName.equals("RandomFiles"))
- factory = new RandomFiles(this);
- else if (factoryName.equals("PDSIFiles"))
- factory = new PDSIFiles(this);
- else
- bail("Bad filefactory name: " + factoryName);
+ try
+ {
+ String factoryName = properties.getProperty("impl.filefactory");
+ if (factoryName == null)
+ bail("No impl.filefactory given!");
+ else if (factoryName.equals("PlainFiles"))
+ factory = new PlainFiles(this);
+ else if (factoryName.equals("TraceFiles"))
+ factory = new TraceFiles(this);
+ else if (factoryName.equals("RandomFiles"))
+ factory = new RandomFiles(this);
+ else if (factoryName.equals("PDSIFiles"))
+ factory = new PDSIFiles(this);
+ else
+ bail("Bad filefactory name: " + factoryName);
+ }
+ catch (IllegalArgumentException e)
+ {
+ Tools.bail("Error setting up FileFactory:\n" + e.getMessage());
+ }
}
void setupPlacement()
@@ -546,6 +555,7 @@ public class Simulator
Fault fault = new Fault(this);
Repair repair = new Repair(this, failed, time);
Rebuild rebuild = new Rebuild(this, fault, repair);
+ repair.setRebuild(rebuild);
currentRebuild = rebuild;
return rebuild;
}
@@ -886,7 +896,7 @@ public class Simulator
{
int traffic = 0;
for (Rebuild rebuild : rebuilds)
- traffic += rebuild.loadAt(d);
+ traffic += rebuild.loadAt(d, Cause.ANY);
intervals.add(d);
sample.add(traffic);
d += interval;
@@ -962,6 +972,7 @@ public class Simulator
void printFiles()
{
+ System.out.println("FILES:");
for (File f : files)
{
System.out.println(f.toString(this));
@@ -1004,7 +1015,7 @@ public class Simulator
}
/**
- Allow subordinate classes to check properties.
+ Allow subordinate classes to check for optional properties.
@return true if property name exists.
*/
public boolean has(String name)
@@ -1067,6 +1078,16 @@ public class Simulator
}
/**
+ Return true if optional property name is set to true.
+ */
+ public boolean enabled(String name)
+ {
+ if (has(name))
+ return bool(name);
+ return false;
+ }
+
+ /**
Print msg iff property print.category is true.
*/
public void print(String category, String msg)
@@ -1074,4 +1095,5 @@ public class Simulator
if (bool("print."+category))
System.out.println(msg);
}
+
}
diff --git a/sim/gobs/src/gobs/sim/SingleObject.java b/sim/gobs/src/gobs/sim/SingleObject.java
index b438a48..e94ad43 100644
--- a/sim/gobs/src/gobs/sim/SingleObject.java
+++ b/sim/gobs/src/gobs/sim/SingleObject.java
@@ -33,7 +33,7 @@ public class SingleObject
public String toString(Simulator simulator)
{
- return name(simulator) + "(" + size + ")";
+ return name(simulator) + "(" + File.toString(size) + ")";
}
public String toString()
diff --git a/sim/gobs/src/gobs/sweep/ParallelSweep.java b/sim/gobs/src/gobs/sweep/ParallelSweep.java
index b698c12..c7a22a2 100644
--- a/sim/gobs/src/gobs/sweep/ParallelSweep.java
+++ b/sim/gobs/src/gobs/sweep/ParallelSweep.java
@@ -15,7 +15,7 @@ import gobs.util.*;
* Experiments that subclass this class
* */
-class ParallelSweep
+public class ParallelSweep
extends Sweep
{
int cores = -1;
@@ -32,7 +32,7 @@ class ParallelSweep
this.cores = Tools.integer(this.properties, "cores");
}
- ParallelSweep(String[] args)
+ public ParallelSweep(String[] args)
{
super(args);
this.cores = Tools.integer(this.properties, "cores");
diff --git a/sim/gobs/src/gobs/sweep/Sweep.java b/sim/gobs/src/gobs/sweep/Sweep.java
index cb7da80..6e06477 100644
--- a/sim/gobs/src/gobs/sweep/Sweep.java
+++ b/sim/gobs/src/gobs/sweep/Sweep.java
@@ -54,7 +54,7 @@ public class Sweep
{
for (int i = 0; i < repeats; i++)
{
- System.out.println("execute");
+ System.out.println("\nEXECUTE:");
properties.setProperty("unique", new Integer(i).toString());
properties.setProperty(xname, v);
Simulator simulator = new Simulator(properties);
@@ -102,7 +102,7 @@ public class Sweep
{
String tag = name1+"="+value1+";"+name2+"="+value2+
";unique="+unique;
- System.out.println("execute: " + tag);
+ System.out.println("\nEXECUTE: " + tag);
properties.setProperty("tag", tag);
properties.setProperty("unique", new Integer(unique).toString());
properties.setProperty(name1, value1);
diff --git a/sim/gobs/src/gobs/sweep/x/Decluster01P.java b/sim/gobs/src/gobs/sweep/x/Decluster01P.java
index 4a17d80..ed6afe7 100644
--- a/sim/gobs/src/gobs/sweep/x/Decluster01P.java
+++ b/sim/gobs/src/gobs/sweep/x/Decluster01P.java
@@ -1,11 +1,12 @@
-package gobs.sweep;
+package gobs.sweep.x;
import java.util.*;
import org.jfree.data.xy.XYSeries;
import gobs.plot.SimplePlot;
+import gobs.sweep.*;
import gobs.util.*;
/**
diff --git a/sim/gobs/src/gobs/sweep/x/Rebuild02.java b/sim/gobs/src/gobs/sweep/x/Rebuild02.java
index f2d98d9..0bdbc36 100644
--- a/sim/gobs/src/gobs/sweep/x/Rebuild02.java
+++ b/sim/gobs/src/gobs/sweep/x/Rebuild02.java
@@ -3,6 +3,7 @@ package gobs.sweep.x;
import java.util.*;
+import org.jfree.data.xy.XYDataItem;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
@@ -41,24 +42,38 @@ class Rebuild02
final XYSeriesCollection collection = new XYSeriesCollection();
- properties.setProperty("impl.placement", "Nearest");
- Sweep pSweep = new Sweep(properties);
- pSweep.repeats = Tools.integer(properties, "repeats");
- pSweep.execute("nodes", values);
-
List<XYSeries> allSeries = new ArrayList<XYSeries>();
- List<XYSeries> pSeries = plots(pSweep, "PAST", "nodes",
+ properties.setProperty("impl.placement", "Nearest");
+ properties.setProperty("regimen.skip", "false");
+ Sweep pySweep = new Sweep(properties);
+ pySweep.repeats = Tools.integer(properties, "repeats");
+ pySweep.execute("nodes", values);
+ List<XYSeries> pySeries = plots(pySweep, "PAST-Y", "nodes",
values, interval);
- allSeries.addAll(pSeries);
+ allSeries.addAll(pySeries);
+
+ properties.setProperty("impl.placement", "Nearest");
+ properties.setProperty("regimen.skip", "true");
+ Sweep pnSweep = new Sweep(properties);
+ pnSweep.repeats = Tools.integer(properties, "repeats");
+ pnSweep.execute("nodes", values);
+ List<XYSeries> pnSeries = plots(pnSweep, "PAST-N", "nodes",
+ values, interval);
+ allSeries.addAll(pnSeries);
/*
properties.setProperty("impl.placement", "Kademlia");
- ArraySweep kSweep = new ArraySweep(properties);
+ Sweep kSweep = new Sweep(properties);
kSweep.repeats = Tools.integer(properties, "repeats");
- kSweep.execute("Kademlia", "nodes", values, "distribution");
- allSeries.addAll(kSweep.collection);
+ kSweep.execute("nodes", values);
+ List<XYSeries> kSeries = plots(kSweep, "Kademlia", "nodes",
+ values, interval);
+ allSeries.addAll(kSeries);
+ */
+
+ /*
properties.setProperty("impl.placement", "VertexGroups");
ArraySweep vgSweep = new ArraySweep(properties);
vgSweep.repeats = Tools.integer(properties, "repeats");
@@ -88,32 +103,37 @@ class Rebuild02
XYSeries series = new XYSeries(label + " N=" + v);
List<Rebuild> rebuilds = new ArrayList<Rebuild>();
for (Simulator simulator : sweep.sims.values())
- {
if (Tools.string(simulator.properties, xname).equals(v))
- {
rebuilds.addAll(simulator.rebuilds);
- }
- }
- loadsToSeries(series, rebuilds, interval);
+ loadsToSeries(rebuilds, interval, series);
results.add(series);
}
+ truncate(results);
return results;
}
- static void loadsToSeries(XYSeries series, List<Rebuild> rebuilds,
- double interval)
+ /**
+ Store in series.
+ */
+ static void loadsToSeries(List<Rebuild> rebuilds, double interval,
+ XYSeries series)
{
+ int count;
double longest = longestRebuild(rebuilds);
double d = 0.0;
while (d <= longest)
{
double total = 0.0;
for (Rebuild rebuild : rebuilds)
- total += rebuild.loadOffset(d);
+ {
+ // rebuild.printOffset(d, Cause.ANY);
+ total += rebuild.loadOffset(d, Cause.ANY);
+ }
double sample = total/rebuilds.size();
series.add(d, sample);
d += interval;
}
+ series.add(d, 0.0);
}
static double longestRebuild(List<Rebuild> rebuilds)
@@ -124,4 +144,34 @@ class Rebuild02
max = rebuild.length();
return max;
}
+
+ static int longest(List<XYSeries> series)
+ {
+ int max = 0;
+ for (XYSeries s : series)
+ if (s.getItemCount() > max)
+ max = s.getItemCount();
+ return max;
+ }
+
+ static void truncate(List<XYSeries> series)
+ {
+ for (XYSeries s : series)
+ truncate(s);
+ }
+
+ static void truncate(XYSeries series)
+ {
+ int p;
+ int q = series.getItemCount()-1;
+ for (p = q; p >= 0; p--)
+ {
+ XYDataItem item = series.getDataItem(p);
+ Number y = item.getY();
+ if (y.doubleValue() != 0.0)
+ break;
+ }
+ if (p+2 < q)
+ series.delete(p+2, q);
+ }
}
diff --git a/sim/gobs/src/gobs/test/TestELHS.java b/sim/gobs/src/gobs/test/TestELHS.java
index 70c86ec..c02b6c0 100644
--- a/sim/gobs/src/gobs/test/TestELHS.java
+++ b/sim/gobs/src/gobs/test/TestELHS.java
@@ -22,9 +22,9 @@ class TestELHS
for (int i = 0; i < n; i++)
{
- List<Gob> list = new ArrayList<gobs.sim.Object>();
+ List<Gob> list = new ArrayList<Gob>();
for (int j = 0; j < n; j++)
- list.add(new SingleObject(new BigInteger("" + j), 0, 0));
+ list.add(new SingleObject(new BigInteger("" + j), BigInteger.ZERO, 0));
if (set.containsAny(list))
System.out.println("containsAny!");
set.addAll(list);
diff --git a/sim/gobs/src/gobs/test/TestFileFactory.java b/sim/gobs/src/gobs/test/TestFileFactory.java
index d426826..b184b4b 100644
--- a/sim/gobs/src/gobs/test/TestFileFactory.java
+++ b/sim/gobs/src/gobs/test/TestFileFactory.java
@@ -1,6 +1,7 @@
package gobs.test;
+import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.*;
@@ -73,8 +74,9 @@ class TestFileFactory
XYSeries series = new XYSeries("file sizes");
while (files.size() > 0)
{
+ BigInteger bigS = BigInteger.valueOf((long) s);
while (files.size() > 0 &&
- files.peek().size < s)
+ files.peek().size.compareTo(bigS) < 0)
{
files.poll();
y++;
diff --git a/sim/gobs/sweeps/rb02-small.cfg b/sim/gobs/sweeps/rb02-small.cfg
index 061f52e..06d6ee5 100644
--- a/sim/gobs/sweeps/rb02-small.cfg
+++ b/sim/gobs/sweeps/rb02-small.cfg
@@ -8,7 +8,9 @@ include = rb_output.cfg
# Statistics:
# Rebuild traffic over time analysis:
-plot.traffic.interval = 100
+plot.traffic.interval = 10
+
+regimen.skip = true
### Parameters for GOBS Simulator run
@@ -20,17 +22,19 @@ B = 16
nodes.min = 12
nodes.max = 16
# Step through nodes: See AbstractSweep.values()
-nodes.step = literal_20,30,40
+nodes.step = literal_10
# Number of files:
-files = 6
+files = 3
# Number of faults:
-faults = 2
+faults = 3
# Number of accesses:
reads = 0
writes = 0
-mttf = 500
-mttr = 400
+rebuild.rate = 1000
+
+mttf = 100
+mttr = 50
### Choose a PlacementScheme implementation:
@@ -52,9 +56,9 @@ impl.nodefactory = SimpleNodes
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
# File size:
-file.size = 140
+file.size = 10000
# Strip size:
-file.strip = 4
+file.strip = 10
# File/object replicas:
file.replicas = 3
# Number of objects per file:
diff --git a/sim/gobs/sweeps/rb02-small.zsh b/sim/gobs/sweeps/rb02-small.zsh
index 4a3bdce..ca3b646 100755
--- a/sim/gobs/sweeps/rb02-small.zsh
+++ b/sim/gobs/sweeps/rb02-small.zsh
@@ -5,5 +5,5 @@ CP=${CLASSPATH}:./src
SEED="seed=829"
{
java -cp ${CP} gobs.sweep.x.Rebuild02 \
- -n 10 -p sweeps rb02-small.cfg ${SEED} -o rb02-small.eps
+ -n 1 -p sweeps rb02-small.cfg ${SEED} -o rb02-small.eps
} >& rb02-small.out
diff --git a/sim/gobs/sweeps/rb02-small.cfg b/sim/gobs/sweeps/rb02.cfg
similarity index 59%
copy from sim/gobs/sweeps/rb02-small.cfg
copy to sim/gobs/sweeps/rb02.cfg
index 061f52e..e5164c7 100644
--- a/sim/gobs/sweeps/rb02-small.cfg
+++ b/sim/gobs/sweeps/rb02.cfg
@@ -10,6 +10,8 @@ include = rb_output.cfg
# Rebuild traffic over time analysis:
plot.traffic.interval = 100
+regimen.skip = true
+
### Parameters for GOBS Simulator run
### General parameters:
@@ -20,17 +22,19 @@ B = 16
nodes.min = 12
nodes.max = 16
# Step through nodes: See AbstractSweep.values()
-nodes.step = literal_20,30,40
+nodes.step = literal_20
# Number of files:
-files = 6
+files = 10
# Number of faults:
-faults = 2
+faults = 3
# Number of accesses:
reads = 0
writes = 0
+# Rebuild transfer rate:
+rebuild.rate = 1000
-mttf = 500
-mttr = 400
+mttf = 2000
+mttr = 800
### Choose a PlacementScheme implementation:
@@ -50,28 +54,6 @@ impl.nodefactory = SimpleNodes
### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
-impl.filefactory = PlainFiles
+impl.filefactory = PDSIFiles
# File size:
-file.size = 140
-# Strip size:
-file.strip = 4
-# File/object replicas:
-file.replicas = 3
-# Number of objects per file:
-file.width = 3
-
-# FileFactory implementation TraceFiles
-#impl.filefactory = TraceFiles
-# Trace filename:
-#filetrace = traces/test01.trace
-
-# FileFactory implementation RandomFiles
-#impl.filefactory = RandomFiles
-# Max size of big files:
-#filebigmax = 100
-# Min size of big files:
-#filebigmin = 50
-# Max size of small files:
-#filesmallmax = 20
-# Min size of small files:
-#filesmallmin = 0
+file.pdsi.points = 0.01,1;0.2,1024;1.0,1M
diff --git a/sim/gobs/sweeps/rb02.zsh b/sim/gobs/sweeps/rb02.zsh
new file mode 100755
index 0000000..ccd55b5
--- /dev/null
+++ b/sim/gobs/sweeps/rb02.zsh
@@ -0,0 +1,9 @@
+#!/bin/zsh
+
+CP=${CLASSPATH}:./src
+
+SEED="seed=821"
+{
+ java -cp ${CP} gobs.sweep.x.Rebuild02 \
+ -n 100 -p sweeps rb02.cfg ${SEED} -o rb02.eps
+} >& rb02.out
diff --git a/sim/gobs/sweeps/rb02-small.cfg b/sim/gobs/wiki/rb02.cfg
similarity index 59%
copy from sim/gobs/sweeps/rb02-small.cfg
copy to sim/gobs/wiki/rb02.cfg
index 061f52e..e5164c7 100644
--- a/sim/gobs/sweeps/rb02-small.cfg
+++ b/sim/gobs/wiki/rb02.cfg
@@ -10,6 +10,8 @@ include = rb_output.cfg
# Rebuild traffic over time analysis:
plot.traffic.interval = 100
+regimen.skip = true
+
### Parameters for GOBS Simulator run
### General parameters:
@@ -20,17 +22,19 @@ B = 16
nodes.min = 12
nodes.max = 16
# Step through nodes: See AbstractSweep.values()
-nodes.step = literal_20,30,40
+nodes.step = literal_20
# Number of files:
-files = 6
+files = 10
# Number of faults:
-faults = 2
+faults = 3
# Number of accesses:
reads = 0
writes = 0
+# Rebuild transfer rate:
+rebuild.rate = 1000
-mttf = 500
-mttr = 400
+mttf = 2000
+mttr = 800
### Choose a PlacementScheme implementation:
@@ -50,28 +54,6 @@ impl.nodefactory = SimpleNodes
### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
-impl.filefactory = PlainFiles
+impl.filefactory = PDSIFiles
# File size:
-file.size = 140
-# Strip size:
-file.strip = 4
-# File/object replicas:
-file.replicas = 3
-# Number of objects per file:
-file.width = 3
-
-# FileFactory implementation TraceFiles
-#impl.filefactory = TraceFiles
-# Trace filename:
-#filetrace = traces/test01.trace
-
-# FileFactory implementation RandomFiles
-#impl.filefactory = RandomFiles
-# Max size of big files:
-#filebigmax = 100
-# Min size of big files:
-#filebigmin = 50
-# Max size of small files:
-#filesmallmax = 20
-# Min size of small files:
-#filesmallmin = 0
+file.pdsi.points = 0.01,1;0.2,1024;1.0,1M
diff --git a/sim/gobs/wiki/rb02.zsh b/sim/gobs/wiki/rb02.zsh
new file mode 100755
index 0000000..ccd55b5
--- /dev/null
+++ b/sim/gobs/wiki/rb02.zsh
@@ -0,0 +1,9 @@
+#!/bin/zsh
+
+CP=${CLASSPATH}:./src
+
+SEED="seed=821"
+{
+ java -cp ${CP} gobs.sweep.x.Rebuild02 \
+ -n 100 -p sweeps rb02.cfg ${SEED} -o rb02.eps
+} >& rb02.out
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-352-gda579c5
by noreply@mcs.anl.gov 25 Jan '10
by noreply@mcs.anl.gov 25 Jan '10
25 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via da579c5b15032a01474c41b4f1cf6e928677e689 (commit)
via f199f304a7d6c4cd98e9da70efcda8dca4392e51 (commit)
from ea8b0bb3b42b0e561acd10645dec25d8e3289717 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit da579c5b15032a01474c41b4f1cf6e928677e689
Merge: f199f304a7d6c4cd98e9da70efcda8dca4392e51 ea8b0bb3b42b0e561acd10645dec25d8e3289717
Author: slang <slang(a)anlextwls002-177.wl.anl-external.org>
Date: Mon Jan 25 17:14:53 2010 -0600
Merge branch 'master' of login3.mcs.anl.gov:~dkimpe/git/grayskull
commit f199f304a7d6c4cd98e9da70efcda8dca4392e51
Author: slang <slang(a)anlextwls002-177.wl.anl-external.org>
Date: Mon Jan 25 17:14:47 2010 -0600
updated with security
-----------------------------------------------------------------------
Summary of changes:
wiki/proto-timeline.svg | 25 +++++++++++++++++++++----
1 files changed, 21 insertions(+), 4 deletions(-)
Diff of changes:
diff --git a/wiki/proto-timeline.svg b/wiki/proto-timeline.svg
index fe85792..f430cdb 100644
--- a/wiki/proto-timeline.svg
+++ b/wiki/proto-timeline.svg
@@ -45,9 +45,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="2.8"
- inkscape:cx="455.43918"
- inkscape:cy="341.03079"
+ inkscape:zoom="1.4"
+ inkscape:cx="469.72489"
+ inkscape:cy="269.60222"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
@@ -74,7 +74,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -650,5 +650,22 @@
d="m 721.68792,444.21882 c 0,20.20305 0,40.91733 0,40.91733"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
+ <flowRoot
+ transform="translate(205.94988,-189.17456)"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ id="flowRoot2990"
+ xml:space="preserve"><flowRegion
+ id="flowRegion2992"><rect
+ style="font-size:12px"
+ y="523.5473"
+ x="96.974648"
+ height="53.069939"
+ width="65.667931"
+ id="rect2994" /></flowRegion><flowPara
+ id="flowPara2996">Security</flowPara></flowRoot> <path
+ sodipodi:nodetypes="cc"
+ id="path2998"
+ d="m 327.67322,353.14738 c 0,20.20305 -0.71429,128.77448 -0.71429,128.77448"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</svg>
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-350-gea8b0bb
by noreply@mcs.anl.gov 25 Jan '10
by noreply@mcs.anl.gov 25 Jan '10
25 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via ea8b0bb3b42b0e561acd10645dec25d8e3289717 (commit)
via 1e6b04d8431b5b398de394f588a601aa8675d04e (commit)
via 1966f34ec1ed02c8ce5855926457b841cace3431 (commit)
via e40a1183206cbca96fcb1643c864ab2f42c67f02 (commit)
via 2325db175bc917b9d6006c6ec1a45a0d14d2f4c6 (commit)
via 2266a5646d37fe7d9968e4a8628f1bf250bd4549 (commit)
from 92f52b1c1f976f32bbb840b79663eee632df5bf7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit ea8b0bb3b42b0e561acd10645dec25d8e3289717
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Jan 25 17:11:24 2010 -0600
EOL fixes.
commit 1e6b04d8431b5b398de394f588a601aa8675d04e
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Jan 25 17:10:29 2010 -0600
Moving files for Eclipse-friendly format.
commit 1966f34ec1ed02c8ce5855926457b841cace3431
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Jan 25 17:10:18 2010 -0600
Wrapper for rb02-small test.
commit e40a1183206cbca96fcb1643c864ab2f42c67f02
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Jan 25 17:09:52 2010 -0600
Eclipse settings files.
commit 2325db175bc917b9d6006c6ec1a45a0d14d2f4c6
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Jan 25 17:08:32 2010 -0600
Moving files for Eclipse-friendly format.
commit 2266a5646d37fe7d9968e4a8628f1bf250bd4549
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Jan 25 15:14:39 2010 -0600
Fix execute bit.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/.classpath | 12 +
sim/gobs/.project | 17 ++
sim/gobs/.settings/org.eclipse.jdt.core.prefs | 260 ++++++++++++++++++++
sim/gobs/.settings/org.eclipse.jdt.ui.prefs | 4 +
sim/gobs/build.xml | 24 +-
sim/gobs/{ => src}/gobs/plot/AsciiPlot.java | 0
sim/gobs/{ => src}/gobs/plot/LogPlot.java | 0
sim/gobs/{ => src}/gobs/plot/MultiLogXPlot.java | 0
sim/gobs/{ => src}/gobs/plot/MultiplePlot.java | 0
sim/gobs/{ => src}/gobs/plot/Plot.java | 0
sim/gobs/{ => src}/gobs/plot/SimplePlot.java | 0
sim/gobs/{ => src}/gobs/sim/Addressable.java | 2 +
sim/gobs/{ => src}/gobs/sim/Copy.java | 0
sim/gobs/{ => src}/gobs/sim/Event.java | 0
sim/gobs/{ => src}/gobs/sim/Fault.java | 0
sim/gobs/{ => src}/gobs/sim/File.java | 0
sim/gobs/{ => src}/gobs/sim/FileFactory.java | 0
.../{ => src}/gobs/sim/FileSizeComparator.java | 0
sim/gobs/{ => src}/gobs/sim/Gob.java | 0
sim/gobs/{ => src}/gobs/sim/KClosest.java | 0
sim/gobs/{ => src}/gobs/sim/Kademlia.java | 0
sim/gobs/{ => src}/gobs/sim/LayoutScheme.java | 0
sim/gobs/{ => src}/gobs/sim/Metric.java | 0
sim/gobs/{ => src}/gobs/sim/Nearest.java | 0
sim/gobs/{ => src}/gobs/sim/Node.java | 0
sim/gobs/{ => src}/gobs/sim/NodeFactory.java | 0
sim/gobs/{ => src}/gobs/sim/Object.java | 0
sim/gobs/{ => src}/gobs/sim/ObjectStrip.java | 0
sim/gobs/{ => src}/gobs/sim/PDSIFiles.java | 0
sim/gobs/{ => src}/gobs/sim/ParallelRUSH.java | 0
sim/gobs/{ => src}/gobs/sim/Placement.java | 0
sim/gobs/{ => src}/gobs/sim/PlainFiles.java | 0
sim/gobs/{ => src}/gobs/sim/PrimaryObject.java | 0
sim/gobs/{ => src}/gobs/sim/PrimaryStrip.java | 0
sim/gobs/{ => src}/gobs/sim/Progress.java | 0
sim/gobs/{ => src}/gobs/sim/RUSHp.java | 0
sim/gobs/{ => src}/gobs/sim/RandomFiles.java | 0
sim/gobs/{ => src}/gobs/sim/RandomNodes.java | 0
sim/gobs/{ => src}/gobs/sim/Rebuild.java | 0
sim/gobs/{ => src}/gobs/sim/Repair.java | 0
sim/gobs/{ => src}/gobs/sim/ReplicaSource.java | 0
sim/gobs/{ => src}/gobs/sim/Replicated.java | 0
sim/gobs/{ => src}/gobs/sim/SecondaryObject.java | 0
sim/gobs/{ => src}/gobs/sim/SecondaryStrip.java | 0
sim/gobs/{ => src}/gobs/sim/SimpleNodes.java | 0
sim/gobs/{ => src}/gobs/sim/Simulator.java | 0
sim/gobs/{ => src}/gobs/sim/SingleObject.java | 0
sim/gobs/{ => src}/gobs/sim/Sites.java | 0
sim/gobs/{ => src}/gobs/sim/Statistics.java | 0
sim/gobs/{ => src}/gobs/sim/Status.java | 0
sim/gobs/{ => src}/gobs/sim/Termination.java | 0
sim/gobs/{ => src}/gobs/sim/TraceFiles.java | 0
sim/gobs/{ => src}/gobs/sim/VertexGroups.java | 0
sim/gobs/{ => src}/gobs/sweep/AbstractSweep.java | 0
sim/gobs/{ => src}/gobs/sweep/ArraySweep.java | 0
sim/gobs/{ => src}/gobs/sweep/ParallelSweep.java | 0
sim/gobs/{ => src}/gobs/sweep/Sweep.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Affected01.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Balance01.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Balance02.java | 0
sim/gobs/{ => src}/gobs/sweep/x/DataLoss01.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Decluster01.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Decluster01P.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Decluster02.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Decluster03.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Decluster04.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Parallelism01.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Rebuild01.java | 0
sim/gobs/{ => src}/gobs/sweep/x/Rebuild02.java | 0
sim/gobs/{ => src}/gobs/test/TestELHS.java | 0
sim/gobs/{ => src}/gobs/test/TestExponential.java | 0
sim/gobs/{ => src}/gobs/test/TestFileFactory.java | 0
sim/gobs/{ => src}/gobs/util/Bits.java | 0
.../{ => src}/gobs/util/BoundedSortedValues.java | 0
.../{ => src}/gobs/util/EnhancedLinkedHashSet.java | 0
sim/gobs/{ => src}/gobs/util/LineReader.java | 0
sim/gobs/{ => src}/gobs/util/MapSorter.java | 0
sim/gobs/{ => src}/gobs/util/Stats.java | 0
sim/gobs/{ => src}/gobs/util/Tools.java | 0
sim/gobs/sweeps/rb02-small.cfg | 3 +-
sim/gobs/sweeps/rb02-small.zsh | 9 +
81 files changed, 318 insertions(+), 13 deletions(-)
create mode 100644 sim/gobs/.classpath
create mode 100644 sim/gobs/.project
create mode 100644 sim/gobs/.settings/org.eclipse.jdt.core.prefs
create mode 100644 sim/gobs/.settings/org.eclipse.jdt.ui.prefs
rename sim/gobs/{ => src}/gobs/plot/AsciiPlot.java (100%)
rename sim/gobs/{ => src}/gobs/plot/LogPlot.java (100%)
rename sim/gobs/{ => src}/gobs/plot/MultiLogXPlot.java (100%)
rename sim/gobs/{ => src}/gobs/plot/MultiplePlot.java (100%)
rename sim/gobs/{ => src}/gobs/plot/Plot.java (100%)
rename sim/gobs/{ => src}/gobs/plot/SimplePlot.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Addressable.java (97%)
rename sim/gobs/{ => src}/gobs/sim/Copy.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Event.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Fault.java (100%)
rename sim/gobs/{ => src}/gobs/sim/File.java (100%)
rename sim/gobs/{ => src}/gobs/sim/FileFactory.java (100%)
rename sim/gobs/{ => src}/gobs/sim/FileSizeComparator.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Gob.java (100%)
rename sim/gobs/{ => src}/gobs/sim/KClosest.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Kademlia.java (100%)
rename sim/gobs/{ => src}/gobs/sim/LayoutScheme.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Metric.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Nearest.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Node.java (100%)
rename sim/gobs/{ => src}/gobs/sim/NodeFactory.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Object.java (100%)
rename sim/gobs/{ => src}/gobs/sim/ObjectStrip.java (100%)
rename sim/gobs/{ => src}/gobs/sim/PDSIFiles.java (100%)
rename sim/gobs/{ => src}/gobs/sim/ParallelRUSH.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Placement.java (100%)
rename sim/gobs/{ => src}/gobs/sim/PlainFiles.java (100%)
rename sim/gobs/{ => src}/gobs/sim/PrimaryObject.java (100%)
rename sim/gobs/{ => src}/gobs/sim/PrimaryStrip.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Progress.java (100%)
rename sim/gobs/{ => src}/gobs/sim/RUSHp.java (100%)
rename sim/gobs/{ => src}/gobs/sim/RandomFiles.java (100%)
rename sim/gobs/{ => src}/gobs/sim/RandomNodes.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Rebuild.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Repair.java (100%)
rename sim/gobs/{ => src}/gobs/sim/ReplicaSource.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Replicated.java (100%)
rename sim/gobs/{ => src}/gobs/sim/SecondaryObject.java (100%)
rename sim/gobs/{ => src}/gobs/sim/SecondaryStrip.java (100%)
rename sim/gobs/{ => src}/gobs/sim/SimpleNodes.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Simulator.java (100%)
rename sim/gobs/{ => src}/gobs/sim/SingleObject.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Sites.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Statistics.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Status.java (100%)
rename sim/gobs/{ => src}/gobs/sim/Termination.java (100%)
rename sim/gobs/{ => src}/gobs/sim/TraceFiles.java (100%)
rename sim/gobs/{ => src}/gobs/sim/VertexGroups.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/AbstractSweep.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/ArraySweep.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/ParallelSweep.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/Sweep.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Affected01.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Balance01.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Balance02.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/DataLoss01.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Decluster01.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Decluster01P.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Decluster02.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Decluster03.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Decluster04.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Parallelism01.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Rebuild01.java (100%)
rename sim/gobs/{ => src}/gobs/sweep/x/Rebuild02.java (100%)
rename sim/gobs/{ => src}/gobs/test/TestELHS.java (100%)
rename sim/gobs/{ => src}/gobs/test/TestExponential.java (100%)
rename sim/gobs/{ => src}/gobs/test/TestFileFactory.java (100%)
rename sim/gobs/{ => src}/gobs/util/Bits.java (100%)
rename sim/gobs/{ => src}/gobs/util/BoundedSortedValues.java (100%)
rename sim/gobs/{ => src}/gobs/util/EnhancedLinkedHashSet.java (100%)
rename sim/gobs/{ => src}/gobs/util/LineReader.java (100%)
rename sim/gobs/{ => src}/gobs/util/MapSorter.java (100%)
rename sim/gobs/{ => src}/gobs/util/Stats.java (100%)
rename sim/gobs/{ => src}/gobs/util/Tools.java (100%)
create mode 100755 sim/gobs/sweeps/rb02-small.zsh
mode change 100755 => 100644 sim/gobs/wiki/dl01-small.eps
Diff of changes:
diff --git a/sim/gobs/.classpath b/sim/gobs/.classpath
new file mode 100644
index 0000000..c885b2b
--- /dev/null
+++ b/sim/gobs/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="lib" path="prereqs/colt.jar"/>
+ <classpathentry kind="lib" path="prereqs/commons-io-1.4.jar"/>
+ <classpathentry kind="lib" path="prereqs/jcommon-1.0.16.jar"/>
+ <classpathentry kind="lib" path="prereqs/jfreechart-1.0.13.jar"/>
+ <classpathentry kind="lib" path="prereqs/junit.jar"/>
+ <classpathentry kind="lib" path="prereqs/xmlgraphics-commons-1.4svn.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="output" path="src"/>
+</classpath>
diff --git a/sim/gobs/.project b/sim/gobs/.project
new file mode 100644
index 0000000..ad55d20
--- /dev/null
+++ b/sim/gobs/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>gobs</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/sim/gobs/.settings/org.eclipse.jdt.core.prefs b/sim/gobs/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..fca1777
--- /dev/null
+++ b/sim/gobs/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,260 @@
+#Mon Jan 25 16:21:43 CST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=true
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=1
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=70
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=2
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=70
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
diff --git a/sim/gobs/.settings/org.eclipse.jdt.ui.prefs b/sim/gobs/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..4fb9712
--- /dev/null
+++ b/sim/gobs/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,4 @@
+#Mon Jan 25 16:21:43 CST 2010
+eclipse.preferences.version=1
+formatter_profile=_GOBS_Preferences
+formatter_settings_version=11
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index 1599575..1687d38 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -28,13 +28,13 @@
<jar destfile="GOBS.jar"
manifest="manifest.mf">
<zipfileset dir="."
- includes="gobs/*/*.class" />
+ includes="src/gobs/*/*.class" />
</jar>
</target>
<target name="compile_sim"
depends="compile_plot,compile_util">
- <javac srcdir="gobs/sim"
+ <javac srcdir="src/gobs/sim"
classpath="${classpath}"
listfiles="${lf}"
debug="true"
@@ -45,7 +45,7 @@
<target name="compile_plot"
depends="compile_util">
- <javac srcdir="gobs/plot"
+ <javac srcdir="src/gobs/plot"
classpath="${classpath}"
listfiles="${lf}"
debug="true"
@@ -57,7 +57,7 @@
<target name="compile_sweep"
depends="compile_util">
- <javac srcdir="gobs/sweep"
+ <javac srcdir="src/gobs/sweep"
classpath="${classpath}"
listfiles="${lf}"
debug="true"
@@ -67,7 +67,7 @@
</target>
<target name="compile_util">
- <javac srcdir="gobs/util"
+ <javac srcdir="src/gobs/util"
classpath="."
listfiles="${lf}"
debug="true"
@@ -78,7 +78,7 @@
<target name="compile_test"
depends="compile">
- <javac srcdir="gobs/test"
+ <javac srcdir="src/gobs/test"
classpath="${classpath}"
listfiles="${lf}"
debug="true"
@@ -97,7 +97,7 @@
doctitle="GOBS Docs"
windowtitle="GOBS">
<fileset dir="."
- includes="**/*.java"/>
+ includes="src/**/*.java"/>
<link href="http://java.sun.com/javase/6/docs/api" />
<link href="http://www.jfree.org/jfreechart/api/javadoc" />
<link href="http://acs.lbl.gov/~hoschek/colt/api" />
@@ -111,7 +111,7 @@
<target name="clean_sim">
<delete>
- <fileset dir="gobs/sim">
+ <fileset dir="src/gobs/sim">
<filename name="*.class" />
</fileset>
</delete>
@@ -122,16 +122,16 @@
<fileset dir=".">
<filename name="GOBS.jar" />
</fileset>
- <fileset dir="gobs/sim">
+ <fileset dir="src/gobs/sim">
<filename name="*.class" />
</fileset>
- <fileset dir="gobs/plot">
+ <fileset dir="src/gobs/plot">
<filename name="*.class" />
</fileset>
- <fileset dir="gobs/sweep">
+ <fileset dir="src/gobs/sweep">
<filename name="*.class" />
</fileset>
- <fileset dir="gobs/sweep/x">
+ <fileset dir="src/gobs/sweep/x">
<filename name="*.class" />
</fileset>
<fileset dir="gobs/util">
diff --git a/sim/gobs/gobs/plot/AsciiPlot.java b/sim/gobs/src/gobs/plot/AsciiPlot.java
similarity index 100%
rename from sim/gobs/gobs/plot/AsciiPlot.java
rename to sim/gobs/src/gobs/plot/AsciiPlot.java
diff --git a/sim/gobs/gobs/plot/LogPlot.java b/sim/gobs/src/gobs/plot/LogPlot.java
similarity index 100%
rename from sim/gobs/gobs/plot/LogPlot.java
rename to sim/gobs/src/gobs/plot/LogPlot.java
diff --git a/sim/gobs/gobs/plot/MultiLogXPlot.java b/sim/gobs/src/gobs/plot/MultiLogXPlot.java
similarity index 100%
rename from sim/gobs/gobs/plot/MultiLogXPlot.java
rename to sim/gobs/src/gobs/plot/MultiLogXPlot.java
diff --git a/sim/gobs/gobs/plot/MultiplePlot.java b/sim/gobs/src/gobs/plot/MultiplePlot.java
similarity index 100%
rename from sim/gobs/gobs/plot/MultiplePlot.java
rename to sim/gobs/src/gobs/plot/MultiplePlot.java
diff --git a/sim/gobs/gobs/plot/Plot.java b/sim/gobs/src/gobs/plot/Plot.java
similarity index 100%
rename from sim/gobs/gobs/plot/Plot.java
rename to sim/gobs/src/gobs/plot/Plot.java
diff --git a/sim/gobs/gobs/plot/SimplePlot.java b/sim/gobs/src/gobs/plot/SimplePlot.java
similarity index 100%
rename from sim/gobs/gobs/plot/SimplePlot.java
rename to sim/gobs/src/gobs/plot/SimplePlot.java
diff --git a/sim/gobs/gobs/sim/Addressable.java b/sim/gobs/src/gobs/sim/Addressable.java
similarity index 97%
rename from sim/gobs/gobs/sim/Addressable.java
rename to sim/gobs/src/gobs/sim/Addressable.java
index b6a6e61..ac86eee 100644
--- a/sim/gobs/gobs/sim/Addressable.java
+++ b/sim/gobs/src/gobs/sim/Addressable.java
@@ -106,6 +106,8 @@ class Addressable
String name(Simulator simulator)
{
+ if (simulator == null)
+ return id.toString();
if (simulator.display == Display.BITS)
return bitString(simulator.B);
else
diff --git a/sim/gobs/gobs/sim/Copy.java b/sim/gobs/src/gobs/sim/Copy.java
similarity index 100%
rename from sim/gobs/gobs/sim/Copy.java
rename to sim/gobs/src/gobs/sim/Copy.java
diff --git a/sim/gobs/gobs/sim/Event.java b/sim/gobs/src/gobs/sim/Event.java
similarity index 100%
rename from sim/gobs/gobs/sim/Event.java
rename to sim/gobs/src/gobs/sim/Event.java
diff --git a/sim/gobs/gobs/sim/Fault.java b/sim/gobs/src/gobs/sim/Fault.java
similarity index 100%
rename from sim/gobs/gobs/sim/Fault.java
rename to sim/gobs/src/gobs/sim/Fault.java
diff --git a/sim/gobs/gobs/sim/File.java b/sim/gobs/src/gobs/sim/File.java
similarity index 100%
rename from sim/gobs/gobs/sim/File.java
rename to sim/gobs/src/gobs/sim/File.java
diff --git a/sim/gobs/gobs/sim/FileFactory.java b/sim/gobs/src/gobs/sim/FileFactory.java
similarity index 100%
rename from sim/gobs/gobs/sim/FileFactory.java
rename to sim/gobs/src/gobs/sim/FileFactory.java
diff --git a/sim/gobs/gobs/sim/FileSizeComparator.java b/sim/gobs/src/gobs/sim/FileSizeComparator.java
similarity index 100%
rename from sim/gobs/gobs/sim/FileSizeComparator.java
rename to sim/gobs/src/gobs/sim/FileSizeComparator.java
diff --git a/sim/gobs/gobs/sim/Gob.java b/sim/gobs/src/gobs/sim/Gob.java
similarity index 100%
rename from sim/gobs/gobs/sim/Gob.java
rename to sim/gobs/src/gobs/sim/Gob.java
diff --git a/sim/gobs/gobs/sim/KClosest.java b/sim/gobs/src/gobs/sim/KClosest.java
similarity index 100%
rename from sim/gobs/gobs/sim/KClosest.java
rename to sim/gobs/src/gobs/sim/KClosest.java
diff --git a/sim/gobs/gobs/sim/Kademlia.java b/sim/gobs/src/gobs/sim/Kademlia.java
similarity index 100%
rename from sim/gobs/gobs/sim/Kademlia.java
rename to sim/gobs/src/gobs/sim/Kademlia.java
diff --git a/sim/gobs/gobs/sim/LayoutScheme.java b/sim/gobs/src/gobs/sim/LayoutScheme.java
similarity index 100%
rename from sim/gobs/gobs/sim/LayoutScheme.java
rename to sim/gobs/src/gobs/sim/LayoutScheme.java
diff --git a/sim/gobs/gobs/sim/Metric.java b/sim/gobs/src/gobs/sim/Metric.java
similarity index 100%
rename from sim/gobs/gobs/sim/Metric.java
rename to sim/gobs/src/gobs/sim/Metric.java
diff --git a/sim/gobs/gobs/sim/Nearest.java b/sim/gobs/src/gobs/sim/Nearest.java
similarity index 100%
rename from sim/gobs/gobs/sim/Nearest.java
rename to sim/gobs/src/gobs/sim/Nearest.java
diff --git a/sim/gobs/gobs/sim/Node.java b/sim/gobs/src/gobs/sim/Node.java
similarity index 100%
rename from sim/gobs/gobs/sim/Node.java
rename to sim/gobs/src/gobs/sim/Node.java
diff --git a/sim/gobs/gobs/sim/NodeFactory.java b/sim/gobs/src/gobs/sim/NodeFactory.java
similarity index 100%
rename from sim/gobs/gobs/sim/NodeFactory.java
rename to sim/gobs/src/gobs/sim/NodeFactory.java
diff --git a/sim/gobs/gobs/sim/Object.java b/sim/gobs/src/gobs/sim/Object.java
similarity index 100%
rename from sim/gobs/gobs/sim/Object.java
rename to sim/gobs/src/gobs/sim/Object.java
diff --git a/sim/gobs/gobs/sim/ObjectStrip.java b/sim/gobs/src/gobs/sim/ObjectStrip.java
similarity index 100%
rename from sim/gobs/gobs/sim/ObjectStrip.java
rename to sim/gobs/src/gobs/sim/ObjectStrip.java
diff --git a/sim/gobs/gobs/sim/PDSIFiles.java b/sim/gobs/src/gobs/sim/PDSIFiles.java
similarity index 100%
rename from sim/gobs/gobs/sim/PDSIFiles.java
rename to sim/gobs/src/gobs/sim/PDSIFiles.java
diff --git a/sim/gobs/gobs/sim/ParallelRUSH.java b/sim/gobs/src/gobs/sim/ParallelRUSH.java
similarity index 100%
rename from sim/gobs/gobs/sim/ParallelRUSH.java
rename to sim/gobs/src/gobs/sim/ParallelRUSH.java
diff --git a/sim/gobs/gobs/sim/Placement.java b/sim/gobs/src/gobs/sim/Placement.java
similarity index 100%
rename from sim/gobs/gobs/sim/Placement.java
rename to sim/gobs/src/gobs/sim/Placement.java
diff --git a/sim/gobs/gobs/sim/PlainFiles.java b/sim/gobs/src/gobs/sim/PlainFiles.java
similarity index 100%
rename from sim/gobs/gobs/sim/PlainFiles.java
rename to sim/gobs/src/gobs/sim/PlainFiles.java
diff --git a/sim/gobs/gobs/sim/PrimaryObject.java b/sim/gobs/src/gobs/sim/PrimaryObject.java
similarity index 100%
rename from sim/gobs/gobs/sim/PrimaryObject.java
rename to sim/gobs/src/gobs/sim/PrimaryObject.java
diff --git a/sim/gobs/gobs/sim/PrimaryStrip.java b/sim/gobs/src/gobs/sim/PrimaryStrip.java
similarity index 100%
rename from sim/gobs/gobs/sim/PrimaryStrip.java
rename to sim/gobs/src/gobs/sim/PrimaryStrip.java
diff --git a/sim/gobs/gobs/sim/Progress.java b/sim/gobs/src/gobs/sim/Progress.java
similarity index 100%
rename from sim/gobs/gobs/sim/Progress.java
rename to sim/gobs/src/gobs/sim/Progress.java
diff --git a/sim/gobs/gobs/sim/RUSHp.java b/sim/gobs/src/gobs/sim/RUSHp.java
similarity index 100%
rename from sim/gobs/gobs/sim/RUSHp.java
rename to sim/gobs/src/gobs/sim/RUSHp.java
diff --git a/sim/gobs/gobs/sim/RandomFiles.java b/sim/gobs/src/gobs/sim/RandomFiles.java
similarity index 100%
rename from sim/gobs/gobs/sim/RandomFiles.java
rename to sim/gobs/src/gobs/sim/RandomFiles.java
diff --git a/sim/gobs/gobs/sim/RandomNodes.java b/sim/gobs/src/gobs/sim/RandomNodes.java
similarity index 100%
rename from sim/gobs/gobs/sim/RandomNodes.java
rename to sim/gobs/src/gobs/sim/RandomNodes.java
diff --git a/sim/gobs/gobs/sim/Rebuild.java b/sim/gobs/src/gobs/sim/Rebuild.java
similarity index 100%
rename from sim/gobs/gobs/sim/Rebuild.java
rename to sim/gobs/src/gobs/sim/Rebuild.java
diff --git a/sim/gobs/gobs/sim/Repair.java b/sim/gobs/src/gobs/sim/Repair.java
similarity index 100%
rename from sim/gobs/gobs/sim/Repair.java
rename to sim/gobs/src/gobs/sim/Repair.java
diff --git a/sim/gobs/gobs/sim/ReplicaSource.java b/sim/gobs/src/gobs/sim/ReplicaSource.java
similarity index 100%
rename from sim/gobs/gobs/sim/ReplicaSource.java
rename to sim/gobs/src/gobs/sim/ReplicaSource.java
diff --git a/sim/gobs/gobs/sim/Replicated.java b/sim/gobs/src/gobs/sim/Replicated.java
similarity index 100%
rename from sim/gobs/gobs/sim/Replicated.java
rename to sim/gobs/src/gobs/sim/Replicated.java
diff --git a/sim/gobs/gobs/sim/SecondaryObject.java b/sim/gobs/src/gobs/sim/SecondaryObject.java
similarity index 100%
rename from sim/gobs/gobs/sim/SecondaryObject.java
rename to sim/gobs/src/gobs/sim/SecondaryObject.java
diff --git a/sim/gobs/gobs/sim/SecondaryStrip.java b/sim/gobs/src/gobs/sim/SecondaryStrip.java
similarity index 100%
rename from sim/gobs/gobs/sim/SecondaryStrip.java
rename to sim/gobs/src/gobs/sim/SecondaryStrip.java
diff --git a/sim/gobs/gobs/sim/SimpleNodes.java b/sim/gobs/src/gobs/sim/SimpleNodes.java
similarity index 100%
rename from sim/gobs/gobs/sim/SimpleNodes.java
rename to sim/gobs/src/gobs/sim/SimpleNodes.java
diff --git a/sim/gobs/gobs/sim/Simulator.java b/sim/gobs/src/gobs/sim/Simulator.java
similarity index 100%
rename from sim/gobs/gobs/sim/Simulator.java
rename to sim/gobs/src/gobs/sim/Simulator.java
diff --git a/sim/gobs/gobs/sim/SingleObject.java b/sim/gobs/src/gobs/sim/SingleObject.java
similarity index 100%
rename from sim/gobs/gobs/sim/SingleObject.java
rename to sim/gobs/src/gobs/sim/SingleObject.java
diff --git a/sim/gobs/gobs/sim/Sites.java b/sim/gobs/src/gobs/sim/Sites.java
similarity index 100%
rename from sim/gobs/gobs/sim/Sites.java
rename to sim/gobs/src/gobs/sim/Sites.java
diff --git a/sim/gobs/gobs/sim/Statistics.java b/sim/gobs/src/gobs/sim/Statistics.java
similarity index 100%
rename from sim/gobs/gobs/sim/Statistics.java
rename to sim/gobs/src/gobs/sim/Statistics.java
diff --git a/sim/gobs/gobs/sim/Status.java b/sim/gobs/src/gobs/sim/Status.java
similarity index 100%
rename from sim/gobs/gobs/sim/Status.java
rename to sim/gobs/src/gobs/sim/Status.java
diff --git a/sim/gobs/gobs/sim/Termination.java b/sim/gobs/src/gobs/sim/Termination.java
similarity index 100%
rename from sim/gobs/gobs/sim/Termination.java
rename to sim/gobs/src/gobs/sim/Termination.java
diff --git a/sim/gobs/gobs/sim/TraceFiles.java b/sim/gobs/src/gobs/sim/TraceFiles.java
similarity index 100%
rename from sim/gobs/gobs/sim/TraceFiles.java
rename to sim/gobs/src/gobs/sim/TraceFiles.java
diff --git a/sim/gobs/gobs/sim/VertexGroups.java b/sim/gobs/src/gobs/sim/VertexGroups.java
similarity index 100%
rename from sim/gobs/gobs/sim/VertexGroups.java
rename to sim/gobs/src/gobs/sim/VertexGroups.java
diff --git a/sim/gobs/gobs/sweep/AbstractSweep.java b/sim/gobs/src/gobs/sweep/AbstractSweep.java
similarity index 100%
rename from sim/gobs/gobs/sweep/AbstractSweep.java
rename to sim/gobs/src/gobs/sweep/AbstractSweep.java
diff --git a/sim/gobs/gobs/sweep/ArraySweep.java b/sim/gobs/src/gobs/sweep/ArraySweep.java
similarity index 100%
rename from sim/gobs/gobs/sweep/ArraySweep.java
rename to sim/gobs/src/gobs/sweep/ArraySweep.java
diff --git a/sim/gobs/gobs/sweep/ParallelSweep.java b/sim/gobs/src/gobs/sweep/ParallelSweep.java
similarity index 100%
rename from sim/gobs/gobs/sweep/ParallelSweep.java
rename to sim/gobs/src/gobs/sweep/ParallelSweep.java
diff --git a/sim/gobs/gobs/sweep/Sweep.java b/sim/gobs/src/gobs/sweep/Sweep.java
similarity index 100%
rename from sim/gobs/gobs/sweep/Sweep.java
rename to sim/gobs/src/gobs/sweep/Sweep.java
diff --git a/sim/gobs/gobs/sweep/x/Affected01.java b/sim/gobs/src/gobs/sweep/x/Affected01.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Affected01.java
rename to sim/gobs/src/gobs/sweep/x/Affected01.java
diff --git a/sim/gobs/gobs/sweep/x/Balance01.java b/sim/gobs/src/gobs/sweep/x/Balance01.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Balance01.java
rename to sim/gobs/src/gobs/sweep/x/Balance01.java
diff --git a/sim/gobs/gobs/sweep/x/Balance02.java b/sim/gobs/src/gobs/sweep/x/Balance02.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Balance02.java
rename to sim/gobs/src/gobs/sweep/x/Balance02.java
diff --git a/sim/gobs/gobs/sweep/x/DataLoss01.java b/sim/gobs/src/gobs/sweep/x/DataLoss01.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/DataLoss01.java
rename to sim/gobs/src/gobs/sweep/x/DataLoss01.java
diff --git a/sim/gobs/gobs/sweep/x/Decluster01.java b/sim/gobs/src/gobs/sweep/x/Decluster01.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Decluster01.java
rename to sim/gobs/src/gobs/sweep/x/Decluster01.java
diff --git a/sim/gobs/gobs/sweep/x/Decluster01P.java b/sim/gobs/src/gobs/sweep/x/Decluster01P.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Decluster01P.java
rename to sim/gobs/src/gobs/sweep/x/Decluster01P.java
diff --git a/sim/gobs/gobs/sweep/x/Decluster02.java b/sim/gobs/src/gobs/sweep/x/Decluster02.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Decluster02.java
rename to sim/gobs/src/gobs/sweep/x/Decluster02.java
diff --git a/sim/gobs/gobs/sweep/x/Decluster03.java b/sim/gobs/src/gobs/sweep/x/Decluster03.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Decluster03.java
rename to sim/gobs/src/gobs/sweep/x/Decluster03.java
diff --git a/sim/gobs/gobs/sweep/x/Decluster04.java b/sim/gobs/src/gobs/sweep/x/Decluster04.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Decluster04.java
rename to sim/gobs/src/gobs/sweep/x/Decluster04.java
diff --git a/sim/gobs/gobs/sweep/x/Parallelism01.java b/sim/gobs/src/gobs/sweep/x/Parallelism01.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Parallelism01.java
rename to sim/gobs/src/gobs/sweep/x/Parallelism01.java
diff --git a/sim/gobs/gobs/sweep/x/Rebuild01.java b/sim/gobs/src/gobs/sweep/x/Rebuild01.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Rebuild01.java
rename to sim/gobs/src/gobs/sweep/x/Rebuild01.java
diff --git a/sim/gobs/gobs/sweep/x/Rebuild02.java b/sim/gobs/src/gobs/sweep/x/Rebuild02.java
similarity index 100%
rename from sim/gobs/gobs/sweep/x/Rebuild02.java
rename to sim/gobs/src/gobs/sweep/x/Rebuild02.java
diff --git a/sim/gobs/gobs/test/TestELHS.java b/sim/gobs/src/gobs/test/TestELHS.java
similarity index 100%
rename from sim/gobs/gobs/test/TestELHS.java
rename to sim/gobs/src/gobs/test/TestELHS.java
diff --git a/sim/gobs/gobs/test/TestExponential.java b/sim/gobs/src/gobs/test/TestExponential.java
similarity index 100%
rename from sim/gobs/gobs/test/TestExponential.java
rename to sim/gobs/src/gobs/test/TestExponential.java
diff --git a/sim/gobs/gobs/test/TestFileFactory.java b/sim/gobs/src/gobs/test/TestFileFactory.java
similarity index 100%
rename from sim/gobs/gobs/test/TestFileFactory.java
rename to sim/gobs/src/gobs/test/TestFileFactory.java
diff --git a/sim/gobs/gobs/util/Bits.java b/sim/gobs/src/gobs/util/Bits.java
similarity index 100%
rename from sim/gobs/gobs/util/Bits.java
rename to sim/gobs/src/gobs/util/Bits.java
diff --git a/sim/gobs/gobs/util/BoundedSortedValues.java b/sim/gobs/src/gobs/util/BoundedSortedValues.java
similarity index 100%
rename from sim/gobs/gobs/util/BoundedSortedValues.java
rename to sim/gobs/src/gobs/util/BoundedSortedValues.java
diff --git a/sim/gobs/gobs/util/EnhancedLinkedHashSet.java b/sim/gobs/src/gobs/util/EnhancedLinkedHashSet.java
similarity index 100%
rename from sim/gobs/gobs/util/EnhancedLinkedHashSet.java
rename to sim/gobs/src/gobs/util/EnhancedLinkedHashSet.java
diff --git a/sim/gobs/gobs/util/LineReader.java b/sim/gobs/src/gobs/util/LineReader.java
similarity index 100%
rename from sim/gobs/gobs/util/LineReader.java
rename to sim/gobs/src/gobs/util/LineReader.java
diff --git a/sim/gobs/gobs/util/MapSorter.java b/sim/gobs/src/gobs/util/MapSorter.java
similarity index 100%
rename from sim/gobs/gobs/util/MapSorter.java
rename to sim/gobs/src/gobs/util/MapSorter.java
diff --git a/sim/gobs/gobs/util/Stats.java b/sim/gobs/src/gobs/util/Stats.java
similarity index 100%
rename from sim/gobs/gobs/util/Stats.java
rename to sim/gobs/src/gobs/util/Stats.java
diff --git a/sim/gobs/gobs/util/Tools.java b/sim/gobs/src/gobs/util/Tools.java
similarity index 100%
rename from sim/gobs/gobs/util/Tools.java
rename to sim/gobs/src/gobs/util/Tools.java
diff --git a/sim/gobs/sweeps/rb02-small.cfg b/sim/gobs/sweeps/rb02-small.cfg
index d5ff9bb..061f52e 100644
--- a/sim/gobs/sweeps/rb02-small.cfg
+++ b/sim/gobs/sweeps/rb02-small.cfg
@@ -8,7 +8,7 @@ include = rb_output.cfg
# Statistics:
# Rebuild traffic over time analysis:
-plot.traffic.interval = 10
+plot.traffic.interval = 100
### Parameters for GOBS Simulator run
@@ -30,6 +30,7 @@ reads = 0
writes = 0
mttf = 500
+mttr = 400
### Choose a PlacementScheme implementation:
diff --git a/sim/gobs/sweeps/rb02-small.zsh b/sim/gobs/sweeps/rb02-small.zsh
new file mode 100755
index 0000000..4a3bdce
--- /dev/null
+++ b/sim/gobs/sweeps/rb02-small.zsh
@@ -0,0 +1,9 @@
+#!/bin/zsh
+
+CP=${CLASSPATH}:./src
+
+SEED="seed=829"
+{
+ java -cp ${CP} gobs.sweep.x.Rebuild02 \
+ -n 10 -p sweeps rb02-small.cfg ${SEED} -o rb02-small.eps
+} >& rb02-small.out
diff --git a/sim/gobs/wiki/dl01-small.eps b/sim/gobs/wiki/dl01-small.eps
old mode 100755
new mode 100644
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-344-g92f52b1
by noreply@mcs.anl.gov 25 Jan '10
by noreply@mcs.anl.gov 25 Jan '10
25 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 92f52b1c1f976f32bbb840b79663eee632df5bf7 (commit)
via 541c46832392a0bf5fb3ccc226dc087fd04d5fce (commit)
via d48d6c759dd05733f20f61a0addcee5030f8b582 (commit)
via 7523daea4f5c0044f78b4b70f3cb4a54e597c9e0 (commit)
from 1fd44a5fe15728eb9abea7283a6fe05b528acf32 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 92f52b1c1f976f32bbb840b79663eee632df5bf7
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Mon Jan 25 14:36:01 2010 -0500
fix segfault in opcache
commit 541c46832392a0bf5fb3ccc226dc087fd04d5fce
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Mon Jan 25 14:34:34 2010 -0500
bug fix in db cursors
commit d48d6c759dd05733f20f61a0addcee5030f8b582
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Mon Jan 25 14:26:39 2010 -0500
basic test cases for I/O to forks
Added cosd1 test case for fork reads and writes, also uncovered a few bugs
in existing cursor logic
commit 7523daea4f5c0044f78b4b70f3cb4a54e597c9e0
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Mon Jan 25 11:36:47 2010 -0500
add object level forks to COSD prototype
-----------------------------------------------------------------------
Summary of changes:
code/src/gsl/common/gs-opcache.c | 2 +-
.../gsl/resources/cosd-prototype/cosd-prototype.c | 110 ++++++++++++++------
.../resources/cosd-prototype/cosd-prototype.gsh | 4 +
.../cosd-prototype/test/cosd-bench-concurrent.gs | 8 +-
.../src/gsl/resources/cosd-prototype/test/cosd1.gs | 94 ++++++++++++++---
5 files changed, 167 insertions(+), 51 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/common/gs-opcache.c b/code/src/gsl/common/gs-opcache.c
index b734829..63ab731 100644
--- a/code/src/gsl/common/gs-opcache.c
+++ b/code/src/gsl/common/gs-opcache.c
@@ -73,8 +73,8 @@ int gs_opcache_destroy(gs_opcache_t cache)
{
free(cache->array[i]);
}
- free(cache);
gs_mutex_unlock(&cache->mutex);
+ free(cache);
return 0;
}
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
index b90cf4f..744b1a2 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
@@ -126,6 +126,8 @@ static unsigned long deadlock_counter = 0;
/* uniquely identifies each active txn (in memory) */
struct txn_accumulator
{
+ uint64_t oid;
+ uint64_t fork;
/* txn identifier */
uint64_t txn_number;
/* list of updates included in this txn */
@@ -151,6 +153,7 @@ struct logical_map_entry
struct logical_map_key
{
uint64_t oid;
+ uint64_t fork;
int64_t logical_offset_end;
};
@@ -170,6 +173,7 @@ struct cosd_op
} create;
struct write_op{
uint64_t oid;
+ uint64_t fork;
uint64_t txn_number;
char** mem_offsets;
int64_t* mem_sizes;
@@ -180,6 +184,7 @@ struct cosd_op
} write;
struct read_op{
uint64_t oid;
+ uint64_t fork;
char** mem_offsets;
int64_t* mem_sizes;
int mem_count;
@@ -190,33 +195,13 @@ struct cosd_op
} read;
struct txn_close_op{
uint64_t oid;
+ uint64_t fork;
uint64_t txn_number;
} txn_close;
struct get_version_op{
uint64_t oid;
uint64_t *version;
} get_version;
-#if 0
- struct remove_op{
- uint64_t oid;
- } remove;
- struct setattr_list_op{
- uint64_t oid;
- int count;
- const uint32_t* page_array;
- const uint32_t* number_array;
- const void** val_array;
- const int* len_array;
- } setattr_list;
- struct getattr_list_op{
- uint64_t oid;
- int count;
- const uint32_t* page_array;
- const uint32_t* number_array;
- void** val_array;
- int* len_array;
- } getattr_list;
-#endif
} u;
gs_op_id_t op_id;
struct gs_op op;
@@ -740,6 +725,7 @@ static int read_op_worker(struct gs_op* op)
/* only support one object for now */
assert(c_op->u.read.oid == 1);
lmk.oid = c_op->u.read.oid;
+ lmk.fork = c_op->u.read.fork;
assert(c_op->u.read.mem_count > 0);
assert(c_op->u.read.obj_count > 0);
@@ -854,22 +840,34 @@ read_op_retry:
assert(0);
}
- if(lme.logical_offset > c_op->u.read.obj_offsets[obj_index])
+ if(lmk.oid != c_op->u.read.oid || lmk.fork != c_op->u.read.fork ||
+ lme.logical_offset > c_op->u.read.obj_offsets[obj_index])
{
int64_t amt_to_zero;
int64_t amt_left;
/* figure out how big this hole is */
- if(c_op->u.read.obj_sizes[obj_index] > (lme.logical_offset -
+ if(lmk.oid == c_op->u.read.oid &&
+ lmk.fork == c_op->u.read.fork &&
+ c_op->u.read.obj_sizes[obj_index] > (lme.logical_offset -
c_op->u.read.obj_offsets[obj_index]))
{
+ /* zero up to the next region in the log */
amt_to_zero = lme.logical_offset -
c_op->u.read.obj_offsets[obj_index];
}
- else
+ else if(lmk.oid == c_op->u.read.oid &&
+ lmk.fork == c_op->u.read.fork)
{
+ /* zero this whole buffer */
amt_to_zero = c_op->u.read.obj_sizes[obj_index];
}
+ else
+ {
+ /* EOF */
+ done = 1;
+ break;
+ }
/* cycle through memory regions and zero appropriately */
amt_left = amt_to_zero;
@@ -881,7 +879,8 @@ read_op_retry:
this_region = c_op->u.read.mem_sizes[mem_index];
else
this_region = amt_left;
-
+
+ assert(this_region > 0);
memset(c_op->u.read.mem_offsets[mem_index], 0, this_region);
amt_left -= this_region;
@@ -969,6 +968,7 @@ read_op_retry:
scratch_buffer_size = (((lme.size / DIRECT_ALIGN + 2) * DIRECT_ALIGN));
+ assert(scratch_buffer_size > 0);
ret = posix_memalign(&scratch_buffer, DIRECT_ALIGN,
scratch_buffer_size);
/* TODO: error handling */
@@ -1219,6 +1219,17 @@ write_op_txn:
}
txn_acc = gs_hash_get_entry(hash_link, struct txn_accumulator,
hash_link);
+ /* check that oid and fork match */
+ if(txn_acc->oid != c_op->u.write.oid ||
+ txn_acc->fork != c_op->u.write.fork)
+ {
+ /* TODO: graceful error handling; the write operation isn't
+ * legal in this transaction
+ */
+ c_op->error_code = -1;
+ gs_mutex_unlock(&txn_mutex);
+ return(1);
+ }
tmp_update->version = txn_acc->txn_number;
gs_list_add(&tmp_update->list_link, &txn_acc->update_list);
txn_acc->update_list_count++;
@@ -1320,12 +1331,17 @@ static int dump_op_worker(struct gs_op* op)
printf(" logical map:\n");
printf(" ------------------------------------------\n");
lmk.oid = vk;
+ lmk.fork = 0;
lmk.logical_offset_end = 0;
c_get_flag = DB_SET_RANGE;
while((ret = log_map_dbcp->c_get(log_map_dbcp,
&log_map_key, &log_map_value, c_get_flag)) == 0)
{
- printf("logical_off: %lld, logical_end: %lld, size: %lld, log_off: %lld, ver: %llu\n",
+ /* stop iterating if we go past the oid */
+ if(lmk.oid != vk)
+ break;
+ printf("fork: %llu, logical_off: %lld, logical_end: %lld, size: %lld, log_off: %lld, ver: %llu\n",
+ llu(lmk.fork),
lld(lmv.logical_offset), lld(lmv.logical_offset_end),
lld(lmv.size), lld(lmv.log_offset), llu(lmv.version));
c_get_flag = DB_NEXT;
@@ -1430,6 +1446,7 @@ static int create_op_worker(struct gs_op* op)
gs_ret_t gs_cosd_write_post(
uint64_t oid,
+ uint64_t fork,
uint64_t txn_number,
char** mem_offsets,
int64_t* mem_sizes,
@@ -1452,6 +1469,7 @@ gs_ret_t gs_cosd_write_post(
c_op = gs_op_entry(op, struct cosd_op, op);
c_op->op_id = gs_id_gen(gs_cosd_resource_id, (uint64_t)(op->cache_id));
c_op->u.write.oid = oid;
+ c_op->u.write.fork = fork;
c_op->u.write.txn_number = txn_number;
c_op->u.write.mem_count = mem_count;
c_op->u.write.obj_count = obj_count;
@@ -1490,6 +1508,7 @@ gs_ret_t gs_cosd_write_post(
}
gs_ret_t (* gs_cosd_write)(
uint64_t oid,
+ uint64_t fork,
uint64_t txn_number,
char** mem_offsets,
int64_t* mem_sizes,
@@ -1505,6 +1524,7 @@ gs_ret_t (* gs_cosd_write)(
gs_ret_t gs_cosd_read_post(
uint64_t oid,
+ uint64_t fork,
char** mem_offsets,
int64_t* mem_sizes,
int mem_count,
@@ -1527,6 +1547,7 @@ gs_ret_t gs_cosd_read_post(
c_op = gs_op_entry(op, struct cosd_op, op);
c_op->op_id = gs_id_gen(gs_cosd_resource_id, (uint64_t)(op->cache_id));
c_op->u.read.oid = oid;
+ c_op->u.read.fork = fork;
c_op->u.read.mem_count = mem_count;
c_op->u.read.obj_count = obj_count;
c_op->u.read.out_size = out_size;
@@ -1566,6 +1587,7 @@ gs_ret_t gs_cosd_read_post(
}
gs_ret_t (* gs_cosd_read)(
uint64_t oid,
+ uint64_t fork,
char** mem_offsets,
int64_t* mem_sizes,
int mem_count,
@@ -1654,7 +1676,7 @@ gs_ret_t (* gs_cosd_create)(
gs_context_t ctx,
gs_op_id_t *op_id) = gs_cosd_create_post;
-int gs_cosd_txn_open(uint64_t oid, uint64_t txn_number)
+int gs_cosd_txn_open(uint64_t oid, uint64_t fork, uint64_t txn_number)
{
struct txn_accumulator *txn_acc;
@@ -1665,6 +1687,8 @@ int gs_cosd_txn_open(uint64_t oid, uint64_t txn_number)
}
memset(txn_acc, 0, sizeof(*txn_acc));
+ txn_acc->oid = oid;
+ txn_acc->fork = fork;
txn_acc->txn_number = txn_number;
INIT_GS_LIST_HEAD(&txn_acc->update_list);
@@ -1808,6 +1832,7 @@ static int txn_close_op_worker(struct gs_op* op)
assert(c_op->u.txn_close.oid == 1);
lmk.oid = c_op->u.txn_close.oid;
+ lmk.fork = c_op->u.txn_close.fork;
/* pull txn accumulator out of hash so no one can touch it */
gs_mutex_lock(&txn_mutex);
@@ -1821,6 +1846,15 @@ static int txn_close_op_worker(struct gs_op* op)
}
txn_acc = gs_hash_get_entry(hash_link, struct txn_accumulator,
hash_link);
+
+ if(txn_acc->oid != c_op->u.txn_close.oid ||
+ txn_acc->fork != c_op->u.txn_close.fork)
+ {
+ /* TODO: error handling */
+ /* mismatch between txn open and close */
+ assert(0);
+ }
+
gs_list_del(&txn_acc->hash_link);
gs_mutex_unlock(&txn_mutex);
@@ -1873,8 +1907,11 @@ txn_close_op_retry:
tmp_update = gs_list_get_entry(iterator, struct logical_map_entry,
list_link);
+ lmk.oid = c_op->u.txn_close.oid;
+ lmk.fork = c_op->u.txn_close.fork;
lmk.logical_offset_end = tmp_update->logical_offset + 1;
done = 0;
+ c_get_flag = DB_SET_RANGE;
while(!done)
{
/* get each potentially overlapping on disk region */
@@ -1899,10 +1936,12 @@ txn_close_op_retry:
/* TODO: err handling */
assert(0);
}
-
- if(lme.logical_offset >= tmp_update->logical_offset_end)
+
+ if(lmk.oid != c_op->u.txn_close.oid ||
+ lmk.fork != c_op->u.txn_close.fork ||
+ lme.logical_offset >= tmp_update->logical_offset_end)
{
- /* run out of overlapping regions */
+ /* no more overlapping regions in this this object/fork */
done = 1;
break;
}
@@ -1968,6 +2007,8 @@ txn_close_op_retry:
tmp_entry = gs_list_get_entry(iterator, struct logical_map_entry,
list_link);
lme = *tmp_entry;
+ lmk.oid = c_op->u.txn_close.oid;
+ lmk.fork = c_op->u.txn_close.fork;
lmk.logical_offset_end = lme.logical_offset_end;
ret = log_map_dbp->put(log_map_dbp, txn, &key, &value, 0);
if(ret != 0)
@@ -2133,6 +2174,7 @@ txn_close_op_retry:
gs_ret_t gs_cosd_txn_close_post(
uint64_t oid,
+ uint64_t fork,
uint64_t txn_number,
void (*callback)(void *ptr, int ret),
void *user_ptr,
@@ -2149,6 +2191,7 @@ gs_ret_t gs_cosd_txn_close_post(
c_op = gs_op_entry(op, struct cosd_op, op);
c_op->op_id = gs_id_gen(gs_cosd_resource_id, (uint64_t)(op->cache_id));
c_op->u.txn_close.oid = oid;
+ c_op->u.txn_close.fork = fork;
c_op->u.txn_close.txn_number = txn_number;
*op_id = c_op->op_id;
@@ -2163,6 +2206,7 @@ gs_ret_t gs_cosd_txn_close_post(
}
gs_ret_t (* gs_cosd_txn_close)(
uint64_t oid,
+ uint64_t fork,
uint64_t txn_number,
void (*callback)(void *ptr, int ret),
void *user_ptr,
@@ -2401,6 +2445,12 @@ static int compare_log_map_key(DB * dbp, const DBT * a, const DBT * b)
if(lmk_a->oid < lmk_b->oid)
return(-1);
+ /* then fork */
+ if(lmk_a->fork > lmk_b->fork)
+ return(1);
+ if(lmk_a->fork < lmk_b->fork)
+ return(-1);
+
/* then ending offset within oid */
if(lmk_a->logical_offset_end > lmk_b->logical_offset_end)
return(1);
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh b/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
index a0f5169..d1139a7 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
@@ -68,6 +68,7 @@ __blocking int gs_cosd_get_version(
*/
int gs_cosd_txn_open(
uint64_t oid, /**< object to operate on */
+ uint64_t fork, /**< fork to operate on */
uint64_t txn_number /**< caller-assigned txn identifier */
);
@@ -77,6 +78,7 @@ int gs_cosd_txn_open(
*/
__blocking int gs_cosd_txn_close(
uint64_t oid, /**< object to operate on */
+ uint64_t fork, /**< fork to operate on */
uint64_t txn_number /**< caller-assigned txn identifier */
);
@@ -86,6 +88,7 @@ __blocking int gs_cosd_txn_close(
*/
__blocking int gs_cosd_read(
uint64_t oid, /**< object to operate on */
+ uint64_t fork, /**< object fork to operate on */
char** mem_offsets, /**< memory region pointers */
int64_t* mem_sizes, /**< memory region sizes */
int mem_count, /**< memory region count */
@@ -102,6 +105,7 @@ __blocking int gs_cosd_read(
*/
__blocking int gs_cosd_write(
uint64_t oid, /**< object to operate on */
+ uint64_t fork, /**< fork identifier */
uint64_t txn_number, /**< txn identifier */
char** mem_offsets, /**< memory region pointers */
int64_t* mem_sizes, /**< memory region sizes */
diff --git a/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs b/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
index 403cfc1..0bc8815 100644
--- a/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
+++ b/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
@@ -112,14 +112,14 @@ static __blocking int do_cosd_test(void)
if(tmp_op->type == WRITE)
{
- ret = gs_cosd_txn_open(1, b_version);
+ ret = gs_cosd_txn_open(1, 0, b_version);
if(ret != 0)
{
/* TODO: err handling */
assert(0);
}
- b_ret = gs_cosd_write(1, b_version, &buffer,
+ b_ret = gs_cosd_write(1, 0, b_version, &buffer,
&tmp_op->size, 1, &tmp_op->offset, &tmp_op->size, 1);
if(b_ret < 0)
{
@@ -127,7 +127,7 @@ static __blocking int do_cosd_test(void)
assert(0);
}
- ret = gs_cosd_txn_close(1, b_version);
+ ret = gs_cosd_txn_close(1, 0, b_version);
if(ret != 0)
{
/* TODO: error handling */
@@ -138,7 +138,7 @@ static __blocking int do_cosd_test(void)
{
assert(tmp_op->type == READ);
- b_ret = gs_cosd_read(1, &buffer, &tmp_op->size, 1,
+ b_ret = gs_cosd_read(1, 0, &buffer, &tmp_op->size, 1,
&tmp_op->offset, &tmp_op->size, 1, &out_size);
if(b_ret < 0)
{
diff --git a/code/src/gsl/resources/cosd-prototype/test/cosd1.gs b/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
index b9e8e51..3d37bc8 100644
--- a/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
+++ b/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
@@ -65,7 +65,7 @@ static __blocking int do_cosd_test(void)
assert(ret == 0);
/********************************************************/
printf("opening txn...\n");
- ret = gs_cosd_txn_open(1, (version+1));
+ ret = gs_cosd_txn_open(1, 0, (version+1));
if(ret != 0)
{
printf("Error opening txn 1: %d\n", ret);
@@ -79,7 +79,7 @@ static __blocking int do_cosd_test(void)
buffer_szs[0] = 1024;
obj_offsets[0] = 0;
obj_szs[0] = 1024;
- ret = gs_cosd_write(1, (version+1), buffer_offsets, buffer_szs, 1,
+ ret = gs_cosd_write(1, 0, (version+1), buffer_offsets, buffer_szs, 1,
obj_offsets, obj_szs, 1);
if(ret != 0)
{
@@ -90,7 +90,7 @@ static __blocking int do_cosd_test(void)
printf("DONE\n");
printf("closing txn...\n");
- ret = gs_cosd_txn_close(1, (version+1));
+ ret = gs_cosd_txn_close(1, 0, (version+1));
if(ret != 0)
{
printf("Error closing txn 1: %d\n", ret);
@@ -103,7 +103,7 @@ static __blocking int do_cosd_test(void)
assert(ret == 0);
/********************************************************/
printf("opening txn...\n");
- ret = gs_cosd_txn_open(1, (version+3));
+ ret = gs_cosd_txn_open(1, 0, (version+3));
if(ret != 0)
{
printf("Error opening txn 1: %d\n", ret);
@@ -123,7 +123,7 @@ static __blocking int do_cosd_test(void)
obj_offsets[1] = 2000;
obj_szs[0] = 100;
obj_szs[1] = 924;
- ret = gs_cosd_write(1, (version+3), buffer_offsets, buffer_szs, 3,
+ ret = gs_cosd_write(1, 0, (version+3), buffer_offsets, buffer_szs, 3,
obj_offsets, obj_szs, 2);
if(ret != 0)
{
@@ -134,7 +134,7 @@ static __blocking int do_cosd_test(void)
printf("DONE\n");
printf("closing txn...\n");
- ret = gs_cosd_txn_close(1, (version+3));
+ ret = gs_cosd_txn_close(1, 0, (version+3));
if(ret != 0)
{
printf("Error closing txn 1: %d\n", ret);
@@ -147,7 +147,7 @@ static __blocking int do_cosd_test(void)
assert(ret == 0);
/********************************************************/
printf("opening txn...\n");
- ret = gs_cosd_txn_open(1, (version+2));
+ ret = gs_cosd_txn_open(1, 0, (version+2));
if(ret != 0)
{
printf("Error opening txn 1: %d\n", ret);
@@ -161,7 +161,7 @@ static __blocking int do_cosd_test(void)
buffer_szs[0] = 4096;
obj_offsets[0] = 200;
obj_szs[0] = 4096;
- ret = gs_cosd_write(1, (version+2), buffer_offsets, buffer_szs, 1,
+ ret = gs_cosd_write(1, 0, (version+2), buffer_offsets, buffer_szs, 1,
obj_offsets, obj_szs, 1);
if(ret != 0)
{
@@ -172,7 +172,7 @@ static __blocking int do_cosd_test(void)
printf("DONE\n");
printf("closing txn...\n");
- ret = gs_cosd_txn_close(1, (version+2));
+ ret = gs_cosd_txn_close(1, 0, (version+2));
if(ret != 0)
{
printf("Error closing txn 1: %d\n", ret);
@@ -190,7 +190,7 @@ static __blocking int do_cosd_test(void)
buffer_szs[0] = 512;
obj_offsets[0] = 1024;
obj_szs[0] = 512;
- ret = gs_cosd_read(1, buffer_offsets, buffer_szs, 1, obj_offsets,
+ ret = gs_cosd_read(1, 0, buffer_offsets, buffer_szs, 1, obj_offsets,
obj_szs, 1, &out_size);
assert(out_size == 512);
if(ret != 0)
@@ -207,7 +207,7 @@ static __blocking int do_cosd_test(void)
buffer_szs[0] = 512;
obj_offsets[0] = 51200;
obj_szs[0] = 512;
- ret = gs_cosd_read(1, buffer_offsets, buffer_szs, 1, obj_offsets,
+ ret = gs_cosd_read(1, 0, buffer_offsets, buffer_szs, 1, obj_offsets,
obj_szs, 1, &out_size);
if(ret != 0 || out_size != 0)
{
@@ -225,7 +225,7 @@ static __blocking int do_cosd_test(void)
buffer_szs[1] = 12;
obj_offsets[0] = 13;
obj_szs[0] = 1524;
- ret = gs_cosd_read(1, buffer_offsets, buffer_szs, 2, obj_offsets,
+ ret = gs_cosd_read(1, 0, buffer_offsets, buffer_szs, 2, obj_offsets,
obj_szs, 1, &out_size);
if(ret != 0)
{
@@ -238,7 +238,7 @@ static __blocking int do_cosd_test(void)
/********************************************************/
printf("opening txn...\n");
- ret = gs_cosd_txn_open(1, (version+4));
+ ret = gs_cosd_txn_open(1, 0, (version+4));
if(ret != 0)
{
printf("Error opening txn 1: %d\n", ret);
@@ -253,7 +253,7 @@ static __blocking int do_cosd_test(void)
sprintf(buffer, "Hello world.");
obj_offsets[0] = 10024;
obj_szs[0] = 13;
- ret = gs_cosd_write(1, (version+4), buffer_offsets, buffer_szs, 1,
+ ret = gs_cosd_write(1, 0, (version+4), buffer_offsets, buffer_szs, 1,
obj_offsets, obj_szs, 1);
if(ret != 0)
{
@@ -264,7 +264,7 @@ static __blocking int do_cosd_test(void)
printf("DONE\n");
printf("closing txn...\n");
- ret = gs_cosd_txn_close(1, (version+4));
+ ret = gs_cosd_txn_close(1, 0, (version+4));
if(ret != 0)
{
printf("Error closing txn: %d\n", ret);
@@ -282,7 +282,7 @@ static __blocking int do_cosd_test(void)
buffer_szs[0] = 512;
obj_offsets[0] = 9525;
obj_szs[0] = 512;
- ret = gs_cosd_read(1, buffer_offsets, buffer_szs, 1, obj_offsets,
+ ret = gs_cosd_read(1, 0, buffer_offsets, buffer_szs, 1, obj_offsets,
obj_szs, 1, &out_size);
if(ret != 0)
{
@@ -299,6 +299,68 @@ static __blocking int do_cosd_test(void)
printf("buffer: %s\n", &buffer[499]);
+ /********************************************************/
+ printf("writing to two forks...\n");
+ ret = gs_cosd_txn_open(1, 1, (version+10));
+ assert(ret == 0);
+
+ buffer_offsets[0] = buffer;
+ buffer_szs[0] = 6;
+ sprintf(buffer, "fork1");
+ obj_offsets[0] = 0;
+ obj_szs[0] = 6;
+ ret = gs_cosd_write(1, 1, (version+10), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1);
+ assert(ret == 0);
+
+ ret = gs_cosd_txn_close(1, 1, (version+10));
+ assert(ret == 0);
+
+ ret = gs_cosd_txn_open(1, 2, (version+11));
+ assert(ret == 0);
+
+ buffer_offsets[0] = buffer;
+ buffer_szs[0] = 6;
+ sprintf(buffer, "fork2");
+ obj_offsets[0] = 0;
+ obj_szs[0] = 6;
+ ret = gs_cosd_write(1, 2, (version+11), buffer_offsets, buffer_szs, 1,
+ obj_offsets, obj_szs, 1);
+ assert(ret == 0);
+
+ ret = gs_cosd_txn_close(1, 2, (version+11));
+ assert(ret == 0);
+
+ printf("DONE\n");
+ printf("reading from first fork...\n");
+
+ buffer_offsets[0] = buffer;
+ buffer_szs[0] = 512;
+ obj_offsets[0] = 0;
+ obj_szs[0] = 512;
+ ret = gs_cosd_read(1, 1, buffer_offsets, buffer_szs, 1, obj_offsets,
+ obj_szs, 1, &out_size);
+ assert(ret == 0 && out_size == 6);
+
+ printf("DONE\n");
+ printf("reading from second fork...\n");
+
+ buffer_offsets[0] = &buffer[256];
+ buffer_szs[0] = 256;
+ obj_offsets[0] = 0;
+ obj_szs[0] = 256;
+ ret = gs_cosd_read(1, 2, buffer_offsets, buffer_szs, 1, obj_offsets,
+ obj_szs, 1, &out_size);
+ assert(ret == 0 && out_size == 6);
+
+ printf("buffer from fork 1: %s, buffer from fork 2: %s\n",
+ buffer, &buffer[256]);
+
+ printf("DONE\n");
+
+ ret = gs_cosd_dump();
+ assert(ret == 0);
+
free(buffer);
return 0;
}
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-340-g1fd44a5
by noreply@mcs.anl.gov 25 Jan '10
by noreply@mcs.anl.gov 25 Jan '10
25 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 1fd44a5fe15728eb9abea7283a6fe05b528acf32 (commit)
from b97d60d9cc53418967bb7283a7bff5949143695a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 1fd44a5fe15728eb9abea7283a6fe05b528acf32
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Jan 22 16:34:27 2010 -0600
changed read semantics for EOF
Reads that hit EOF now return a successful error code and indicate the
number of bytes read in an "out_size" pointer.
-----------------------------------------------------------------------
Summary of changes:
.../gsl/resources/cosd-prototype/cosd-prototype.c | 29 +++++++++++++-------
.../resources/cosd-prototype/cosd-prototype.gsh | 5 ++-
.../cosd-prototype/test/cosd-bench-concurrent.gs | 5 +++-
.../src/gsl/resources/cosd-prototype/test/cosd1.gs | 16 +++++++----
4 files changed, 36 insertions(+), 19 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
index f5f1315..b90cf4f 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
@@ -186,6 +186,7 @@ struct cosd_op
int64_t* obj_offsets;
int64_t* obj_sizes;
int obj_count;
+ int64_t* out_size;
} read;
struct txn_close_op{
uint64_t oid;
@@ -804,13 +805,12 @@ read_op_retry:
ret = dbc_p->c_get(dbc_p, &key, &value, DB_SET_RANGE);
if(ret == DB_NOTFOUND)
{
- /* Hit EOF. The COSD will report this as an error, at least until
- * we find a reason to make the semantics different
- */
- /* TODO: log this */
- c_op->error_code = -EINVAL;
+ /* hit EOF; return success at our current position */
+ done = 1;
+ /* TODO: check error codes? */
+ c_op->error_code = 0;
dbc_p->c_close(dbc_p);
- txn->abort(txn);
+ txn->commit(txn, 0);
if(scratch_buffer)
free(scratch_buffer);
return(1);
@@ -895,6 +895,7 @@ read_op_retry:
c_op->u.read.obj_count,
&obj_index,
this_region);
+ *c_op->u.read.out_size += this_region;
/* keep going; there might be more data after the hole */
continue;
@@ -931,10 +932,11 @@ read_op_retry:
((unsigned long)c_op->u.read.mem_offsets[mem_index]) % DIRECT_ALIGN == 0 &&
c_op->u.read.mem_sizes[mem_index] >= lme.size)
{
- ret = pread(global_fd, c_op->u.read.mem_offsets[mem_index],
+ int64_t pread_ret;
+ pread_ret = pread(global_fd, c_op->u.read.mem_offsets[mem_index],
lme.size, lme.log_offset);
/* TODO: error handling */
- assert(ret == lme.size);
+ assert(pread_ret == lme.size);
/* advance pointers */
done = advance_listio_ptrs(
@@ -947,10 +949,12 @@ read_op_retry:
c_op->u.read.obj_count,
&obj_index,
lme.size);
+ *c_op->u.read.out_size += lme.size;
}
else
{
int64_t scratch_offset;
+ int64_t pread_ret;
char* copy_ptr = NULL;
int copy_remaining = 0;
int copy_amt = 0;
@@ -981,10 +985,10 @@ read_op_retry:
scratch_size = (scratch_size/DIRECT_ALIGN + 1) * DIRECT_ALIGN;
/* read data */
- ret = pread(global_fd, scratch_buffer, scratch_size,
+ pread_ret = pread(global_fd, scratch_buffer, scratch_size,
scratch_offset);
/* TODO: error handling */
- assert(ret == scratch_size);
+ assert(pread_ret == scratch_size);
/* loop over copy into mem buffers until done */
copy_ptr = scratch_buffer;
@@ -1012,6 +1016,7 @@ read_op_retry:
c_op->u.read.obj_count,
&obj_index,
copy_amt);
+ *c_op->u.read.out_size += copy_amt;
}
}
}
@@ -1506,6 +1511,7 @@ gs_ret_t gs_cosd_read_post(
int64_t* obj_offsets,
int64_t* obj_sizes,
int obj_count,
+ int64_t *out_size,
void (*callback)(void *ptr, int ret),
void *user_ptr,
gs_hints_t hints,
@@ -1523,6 +1529,8 @@ gs_ret_t gs_cosd_read_post(
c_op->u.read.oid = oid;
c_op->u.read.mem_count = mem_count;
c_op->u.read.obj_count = obj_count;
+ c_op->u.read.out_size = out_size;
+ *out_size = 0;
/* copy arrays so that we can modify them internally */
/* TODO: error handling */
@@ -1564,6 +1572,7 @@ gs_ret_t (* gs_cosd_read)(
int64_t* obj_offsets,
int64_t* obj_sizes,
int obj_count,
+ int64_t *out_size,
void (*callback)(void *ptr, int ret),
void *user_ptr,
gs_hints_t hints,
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh b/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
index 7a5745f..a0f5169 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.gsh
@@ -82,7 +82,7 @@ __blocking int gs_cosd_txn_close(
/**
* Reads data from an object
- * \return 0 on success, -errno on failure or EOF
+ * \return 0 on success, -errno on failure
*/
__blocking int gs_cosd_read(
uint64_t oid, /**< object to operate on */
@@ -91,7 +91,8 @@ __blocking int gs_cosd_read(
int mem_count, /**< memory region count */
int64_t* obj_offsets, /**< object region offsets */
int64_t* obj_sizes, /**< object region sizes */
- int obj_count /**< object region count */
+ int obj_count, /**< object region count */
+ int64_t* out_size /**< amount read */
);
diff --git a/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs b/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
index 4f3c289..403cfc1 100644
--- a/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
+++ b/code/src/gsl/resources/cosd-prototype/test/cosd-bench-concurrent.gs
@@ -84,6 +84,7 @@ static __blocking int do_cosd_test(void)
pprivate uint64_t b_version;
pprivate struct bench_op* tmp_op;
pprivate int b_ret;
+ pprivate int64_t out_size;
/* TODO: make buffer size configurable, and check that
* nothing in workload desc is bigger than this
*/
@@ -138,12 +139,14 @@ static __blocking int do_cosd_test(void)
assert(tmp_op->type == READ);
b_ret = gs_cosd_read(1, &buffer, &tmp_op->size, 1,
- &tmp_op->offset, &tmp_op->size, 1);
+ &tmp_op->offset, &tmp_op->size, 1, &out_size);
if(b_ret < 0)
{
/* TODO: error handling */
assert(0);
}
+ /* TODO: short read detection */
+ assert(out_size == tmp_op->size);
}
gs_mutex_lock(&op_list_mutex);
diff --git a/code/src/gsl/resources/cosd-prototype/test/cosd1.gs b/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
index 8bb4eb6..b9e8e51 100644
--- a/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
+++ b/code/src/gsl/resources/cosd-prototype/test/cosd1.gs
@@ -33,6 +33,7 @@ static __blocking int do_cosd_test(void)
uint64_t out_oid1;
uint64_t version;
+ int64_t out_size;
int i;
@@ -190,7 +191,8 @@ static __blocking int do_cosd_test(void)
obj_offsets[0] = 1024;
obj_szs[0] = 512;
ret = gs_cosd_read(1, buffer_offsets, buffer_szs, 1, obj_offsets,
- obj_szs, 1);
+ obj_szs, 1, &out_size);
+ assert(out_size == 512);
if(ret != 0)
{
printf("Error reading aligned buffer: %d\n", ret);
@@ -206,10 +208,10 @@ static __blocking int do_cosd_test(void)
obj_offsets[0] = 51200;
obj_szs[0] = 512;
ret = gs_cosd_read(1, buffer_offsets, buffer_szs, 1, obj_offsets,
- obj_szs, 1);
- if(ret != -EINVAL)
+ obj_szs, 1, &out_size);
+ if(ret != 0 || out_size != 0)
{
- printf("Error: wrong error code from EOF read: %d\n", ret);
+ printf("Error: bad error code our out size from EOF read: %d, %lld\n", ret, lld(out_size));
free(buffer);
return(-1);
}
@@ -224,13 +226,14 @@ static __blocking int do_cosd_test(void)
obj_offsets[0] = 13;
obj_szs[0] = 1524;
ret = gs_cosd_read(1, buffer_offsets, buffer_szs, 2, obj_offsets,
- obj_szs, 1);
+ obj_szs, 1, &out_size);
if(ret != 0)
{
printf("Error: could not read unaligned buffers: %d\n", ret);
free(buffer);
return(-1);
}
+ assert(out_size == 1524);
printf("DONE\n");
/********************************************************/
@@ -280,13 +283,14 @@ static __blocking int do_cosd_test(void)
obj_offsets[0] = 9525;
obj_szs[0] = 512;
ret = gs_cosd_read(1, buffer_offsets, buffer_szs, 1, obj_offsets,
- obj_szs, 1);
+ obj_szs, 1, &out_size);
if(ret != 0)
{
printf("Error on read with hole: %d\n", ret);
free(buffer);
return(-1);
}
+ assert(out_size == 512);
printf("DONE\n");
/* confirm buffer contents */
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-339-gb97d60d
by noreply@mcs.anl.gov 21 Jan '10
by noreply@mcs.anl.gov 21 Jan '10
21 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via b97d60d9cc53418967bb7283a7bff5949143695a (commit)
from 9c04f278b6eae4fa5f8e0e4e3c13a6747e164f05 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b97d60d9cc53418967bb7283a7bff5949143695a
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Thu Jan 21 15:32:27 2010 -0600
posix locking enabled by default for all code
- turn on __GS_POSIX_LOCKING__
- redefine some gs_ locking functions as static inlines so that they are
safe for use in places where we can't run the preprocessor
- fix misc. places where INITIALIZER's were used on run time variables rather
than static declarations
-----------------------------------------------------------------------
Summary of changes:
code/src/gsl/Makefile.in | 1 +
code/src/gsl/common/gs-opcache.c | 2 +-
code/src/gsl/include/gs.h | 16 +++++++++++++---
code/src/gsl/parser/gs-blocking-parser.lhs | 2 +-
.../gsl/resources/cosd-prototype/cosd-prototype.c | 4 ----
code/src/gsl/resources/mpi/gs-mpi.c | 4 ++--
code/src/gsl/resources/scheduling/gs-sched.gsh | 3 ++-
code/src/gsl/resources/storage/gs-storage.c | 4 ----
8 files changed, 20 insertions(+), 16 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/Makefile.in b/code/src/gsl/Makefile.in
index a94c1a7..2698a92 100644
--- a/code/src/gsl/Makefile.in
+++ b/code/src/gsl/Makefile.in
@@ -59,6 +59,7 @@ STRICT_CFLAGS = @STRICT_CFLAGS@
CFLAGS= -I$(srcdir)/include -I. -I$(srcdir) @CFLAGS@ @CPPFLAGS@
CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
+CFLAGS += -D__GS_POSIX_LOCKING__
CWARNS=
ifneq (,$(STRICT_CFLAGS))
CWARNS += -Wcast-align -Wbad-function-cast
diff --git a/code/src/gsl/common/gs-opcache.c b/code/src/gsl/common/gs-opcache.c
index ab827c1..b734829 100644
--- a/code/src/gsl/common/gs-opcache.c
+++ b/code/src/gsl/common/gs-opcache.c
@@ -38,7 +38,7 @@ int gs_opcache_init(int typesize, int member_offset, int init_size, gs_opcache_t
c->typesize = typesize;
c->member_offset = member_offset;
c->count = 0;
- c->mutex = GS_MUTEX_INITIALIZER;
+ gs_mutex_init(&c->mutex, NULL);
GS_OPLIST_INIT(&(c->free_list));
*cache = c;
return 0;
diff --git a/code/src/gsl/include/gs.h b/code/src/gsl/include/gs.h
index 338fa18..1a144c9 100644
--- a/code/src/gsl/include/gs.h
+++ b/code/src/gsl/include/gs.h
@@ -39,9 +39,18 @@ uint64_t gs_id_lookup(gs_op_id_t id, int *resource_id);
typedef pthread_mutex_t gs_mutex_t;
typedef pthread_mutexattr_t gs_mutexattr_t;
-#define gs_mutex_lock(__mut) pthread_mutex_lock(__mut)
-#define gs_mutex_unlock(__mut) pthread_mutex_unlock(__mut)
-#define gs_mutex_init(__mut, __attr) pthread_mutex_init(__mut, __attr)
+/* NOTE: using function calls rather than #defines here to allow this
+ * function to be called within code generated by the gs-parser -PHC
+ */
+static inline int gs_mutex_lock(gs_mutex_t *__mut)
+ {return pthread_mutex_lock(__mut);}
+static inline int gs_mutex_unlock(gs_mutex_t *__mut)
+ {return pthread_mutex_unlock(__mut);}
+static inline int gs_mutex_init(gs_mutex_t *__mut, gs_mutexattr_t *__attr)
+ {return pthread_mutex_init(__mut, __attr); }
+static inline int gs_mutex_destroy(gs_mutex_t *__mut)
+ {return pthread_mutex_destroy(__mut); }
+
#define GS_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
#define GS_COND_INITIALIZER PTHREAD_COND_INITIALIZER
@@ -61,6 +70,7 @@ typedef int gs_mutexattr_t;
static inline int gs_mutex_lock(gs_mutex_t *__mut) { return 0; }
static inline int gs_mutex_unlock(gs_mutex_t *__mut) { return 0; }
static inline int gs_mutex_init(gs_mutex_t *__mut, gs_mutexattr_t *__attr) {return 0; }
+static inline int gs_mutex_destroy(gs_mutex_t *__mut) {return 0; }
#define GS_MUTEX_INITIALIZER 0
typedef int gs_cond_t;
diff --git a/code/src/gsl/parser/gs-blocking-parser.lhs b/code/src/gsl/parser/gs-blocking-parser.lhs
index 3dcec71..78014a2 100644
--- a/code/src/gsl/parser/gs-blocking-parser.lhs
+++ b/code/src/gsl/parser/gs-blocking-parser.lhs
@@ -92,7 +92,7 @@ either from a pbreak, or from an external cancel call of the entire blocking fun
> \ "++prefix++"->completed = 0; \
> \ "++prefix++"->allposted = 0; \
> \ "++prefix++"->hit_pbreak = 0; \
-> \ "++prefix++"->mutex = 0; \
+> \ gs_mutex_init(&"++prefix++"->mutex, (void *)0); \
> \ "++prefix++"->parent = (void *)0; \
> \ "++prefix++"->children.next = &("++prefix++"->children); \
> \ "++prefix++"->children.prev = &("++prefix++"->children); \
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
index 1a91734..f5f1315 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
@@ -46,10 +46,6 @@
#endif
#endif
-/* TODO: figure out how to toggle something like this at run time; we don't
- * need locking if initialized in polling mode
- */
-#define __GS_POSIX_LOCKING__
#include "include/gs.h"
#include "include/gs-op.h"
#include "include/gs-oplist.h"
diff --git a/code/src/gsl/resources/mpi/gs-mpi.c b/code/src/gsl/resources/mpi/gs-mpi.c
index 4ac9cf2..d561bb9 100644
--- a/code/src/gsl/resources/mpi/gs-mpi.c
+++ b/code/src/gsl/resources/mpi/gs-mpi.c
@@ -475,7 +475,7 @@ static int gs_mpi_context_register(gs_context_t context)
ctx->array_size = MPI_TESTCOUNT_MAXSIZE;
ctx->array_count = 0;
- ctx->array_mutex = GS_MUTEX_INITIALIZER;
+ gs_mutex_init(&ctx->array_mutex, NULL);
ret = GS_OPCACHE_INIT(struct mpi_op, op, ctx->array_size, &ctx->opcache);
if(ret != 0)
@@ -485,7 +485,7 @@ static int gs_mpi_context_register(gs_context_t context)
}
GS_OPLIST_INIT((&ctx->oplist));
- ctx->oplist_mutex = GS_MUTEX_INITIALIZER;
+ gs_mutex_init(&ctx->oplist_mutex, NULL);
ctx->reqarray = malloc(sizeof(*ctx->reqarray) * ctx->array_size);
if(!ctx->reqarray)
{
diff --git a/code/src/gsl/resources/scheduling/gs-sched.gsh b/code/src/gsl/resources/scheduling/gs-sched.gsh
index 70e80bf..dc98ac7 100644
--- a/code/src/gsl/resources/scheduling/gs-sched.gsh
+++ b/code/src/gsl/resources/scheduling/gs-sched.gsh
@@ -40,7 +40,8 @@ typedef struct gs_sched
#define gs_sched_reset(_sched) \
do { \
GS_OPLIST_INIT(&(_sched)->opqueue); \
- (_sched)->lock = GS_MUTEX_INITIALIZER; \
+ gs_mutex_destroy(&((_sched)->lock)); \
+ gs_mutex_init(&((_sched)->lock), NULL); \
(_sched)->trigger = NULL; \
} while(0)
diff --git a/code/src/gsl/resources/storage/gs-storage.c b/code/src/gsl/resources/storage/gs-storage.c
index 5ff79a7..74bea89 100644
--- a/code/src/gsl/resources/storage/gs-storage.c
+++ b/code/src/gsl/resources/storage/gs-storage.c
@@ -5,10 +5,6 @@
#include <pthread.h>
#include <stdio.h>
-/* TODO: figure out how to toggle something like this at run time; we don't
- * need locking if initialized in polling mode
- */
-#define __GS_POSIX_LOCKING__
#include "include/gs.h"
#include "include/gs-op.h"
#include "include/gs-oplist.h"
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-338-g9c04f27
by noreply@mcs.anl.gov 19 Jan '10
by noreply@mcs.anl.gov 19 Jan '10
19 Jan '10
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 9c04f278b6eae4fa5f8e0e4e3c13a6747e164f05 (commit)
from 7daaa16944c40afc5d4953831c6ce3176c01114d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 9c04f278b6eae4fa5f8e0e4e3c13a6747e164f05
Author: slang <slang(a)anlextwls002-177.wl.anl-external.org>
Date: Tue Jan 19 18:31:03 2010 -0600
add protocol timeline
-----------------------------------------------------------------------
Summary of changes:
wiki/proto-timeline.pdf | Bin 16286 -> 16768 bytes
wiki/proto-timeline.svg | 42 ++++++++++++++++++++++++++++++++++++++----
2 files changed, 38 insertions(+), 4 deletions(-)
Diff of changes:
diff --git a/wiki/proto-timeline.pdf b/wiki/proto-timeline.pdf
index ee265ae..513233b 100644
Binary files a/wiki/proto-timeline.pdf and b/wiki/proto-timeline.pdf differ
diff --git a/wiki/proto-timeline.svg b/wiki/proto-timeline.svg
index 416d62a..fe85792 100644
--- a/wiki/proto-timeline.svg
+++ b/wiki/proto-timeline.svg
@@ -14,7 +14,7 @@
id="svg2"
version="1.1"
inkscape:version="0.47pre4 r22446"
- sodipodi:docname="New document 1">
+ sodipodi:docname="proto-timeline.svg">
<defs
id="defs4">
<marker
@@ -45,9 +45,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="0.49497475"
- inkscape:cx="516.28252"
- inkscape:cy="172.16602"
+ inkscape:zoom="2.8"
+ inkscape:cx="455.43918"
+ inkscape:cy="341.03079"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
@@ -616,5 +616,39 @@
d="m 173.15991,492.07595 c 0,20.20305 0,60.91734 0,60.91734"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
+ <flowRoot
+ transform="translate(386.91136,-192.85623)"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ id="flowRoot4774"
+ xml:space="preserve"><flowRegion
+ id="flowRegion4776"><rect
+ style="font-size:12px"
+ y="523.5473"
+ x="96.974648"
+ height="37.608025"
+ width="77.981995"
+ id="rect4778" /></flowRegion><flowPara
+ id="flowPara4780">Lossy MPI Resource</flowPara></flowRoot> <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 503.47363,361.36168 c 0,20.20305 0,118.77447 0,118.77447"
+ id="path4782" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4784"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ transform="translate(607.26851,-96.784801)"><flowRegion
+ id="flowRegion4786"><rect
+ id="rect4788"
+ width="77.981995"
+ height="37.608025"
+ x="96.974648"
+ y="523.5473"
+ style="font-size:12px" /></flowRegion><flowPara
+ id="flowPara4790">FS API</flowPara></flowRoot> <path
+ id="path4792"
+ d="m 721.68792,444.21882 c 0,20.20305 0,40.91733 0,40.91733"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
</g>
</svg>
hooks/post-receive
--
Grayskull Repository
1
0