This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "".
The branch, master has been updated
via 3ed215670ea20409e6bab053220deedc27b78e30 (commit)
from 1331d3f05cdb3a2f1f60d8ae94c77cc409b2e8f5 (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 3ed215670ea20409e6bab053220deedc27b78e30
Author: John Jenkins <jenkins(a)mcs.anl.gov>
Date: Wed Sep 24 13:50:23 2014 -0500
rep-factor configurable; default rf made more consistent
via zeroconf option triton_rosd_default_replication_factor.
asg_write and triton-cp now defer to the system default instead of using their
own (asg's wasn't configurable to begin with).
triton-touch requires a rep-factor argument - this may be made optional in the
future
-----------------------------------------------------------------------
Summary of changes:
code/scripts/simple-mgmt/generate-config.sh | 9 ++++-
code/src/admin-tools/triton-cp.ae | 2 +-
code/src/admin-tools/triton-mkdat.ae | 47 +++++++++++++++++----------
code/src/asg/asg-internal.ae | 11 ++++++-
code/src/replicated-osd/rosd-create.ae | 17 ++++++---
code/src/replicated-osd/rosd-internal.hae | 6 ++--
code/src/replicated-osd/rosd-remove.ae | 2 +-
code/src/replicated-osd/rosd-write.ae | 2 +-
code/src/replicated-osd/rosd.ae | 5 +++
code/src/replicated-osd/rosd.hae | 1 +
code/src/zeroconf/zeroconf.c | 6 +++-
code/tests/asg/test-asg-simple.sh | 4 +-
code/tests/test-util.sh | 5 +++
13 files changed, 83 insertions(+), 34 deletions(-)
Diff of changes:
diff --git a/code/scripts/simple-mgmt/generate-config.sh b/code/scripts/simple-mgmt/generate-config.sh
index d944e8c..54635e0 100755
--- a/code/scripts/simple-mgmt/generate-config.sh
+++ b/code/scripts/simple-mgmt/generate-config.sh
@@ -35,6 +35,8 @@ usage: $app [-h] [-f <hostfile> ] [-p <protocol>]
-s <directory> : Directory to place triton server data/metadata files
in (expected to exist on each host)
(default: /tmp)
+ -r <replication factor> : replication factor to use
+ (default: 1)
This script generates a configuration file to standard out.
EOF
@@ -59,8 +61,10 @@ g_tdir=/tmp
g_output=
# directory of this script
g_scriptdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+# replication factor
+g_repfactor=1
-while getopts :hf:p:c:n:m:s: flag; do
+while getopts :hf:p:c:n:m:s:r: flag; do
case $flag in
h) usage
;;
@@ -76,6 +80,8 @@ while getopts :hf:p:c:n:m:s: flag; do
;;
s) g_tdir=$OPTARG
;;
+ r) g_repfactor=$OPTARG
+ ;;
?) echo "unknown parameter"
usage
;;
@@ -127,6 +133,7 @@ triton_debug_masks = $g_mask
triton_debug_file = $g_tdir/triton-server-%TRITON_SERVER_NAME%-log
triton_tosd_db_path = $g_tdir/triton-server-%TRITON_SERVER_NAME%-meta
triton_tosd_data_path = $g_tdir/triton-server-%TRITON_SERVER_NAME%-data
+triton_rosd_default_replication_factor = $g_repfactor
EOF
)
fi
diff --git a/code/src/admin-tools/triton-cp.ae b/code/src/admin-tools/triton-cp.ae
index 745c6cd..16c486b 100644
--- a/code/src/admin-tools/triton-cp.ae
+++ b/code/src/admin-tools/triton-cp.ae
@@ -50,7 +50,7 @@ static __blocking int tc_read(struct obj_ref* ref, char* buffer, int size);
static __blocking int tc_write(struct obj_ref* ref, const char* buffer, int size);
static __blocking int transfer(struct obj_ref *src, struct obj_ref *dest, char* buffer, int size);
-int replication_factor = 1;
+int replication_factor = 0;
__blocking int aesop_main(int argc, char **argv)
{
diff --git a/code/src/admin-tools/triton-mkdat.ae b/code/src/admin-tools/triton-mkdat.ae
index 82889e5..14d1fe0 100644
--- a/code/src/admin-tools/triton-mkdat.ae
+++ b/code/src/admin-tools/triton-mkdat.ae
@@ -19,6 +19,8 @@ static const char * usage_str =
" -h, --help - print this message and exit\n"
" -o, --num-objects N - create N objects\n"
" (default - N=1)\n"
+" -r, --replication-factor R - use a replication factor of R for each object\n"
+" (default - R=1)\n"
" -f, --num-forks F - create F forks per object\n"
" (default - F=1)\n"
" -w, --writes-per-fork W - perform W writes for each fork\n"
@@ -41,6 +43,7 @@ enum object_dist {
struct opt_vals{
int64_t num_objects;
+ uint32_t replication_factor;
int64_t num_forks;
int64_t writes_per_fork;
int64_t size_per_write;
@@ -50,14 +53,15 @@ struct opt_vals{
};
static const struct option long_opts[] = {
- {"help", no_argument, 0, 0},
- {"num-objects", required_argument, 0, 0},
- {"num-forks", required_argument, 0, 0},
- {"num-records", required_argument, 0, 0},
- {"writes-per-fork", required_argument, 0, 0},
- {"size-per-record", required_argument, 0, 0},
- {"record-fill", no_argument, 0, 0},
- {"object-dist", required_argument, 0, 0},
+ {"help", no_argument, 0, 0},
+ {"num-objects", required_argument, 0, 0},
+ {"replication-factor", required_argument, 0, 0},
+ {"num-forks", required_argument, 0, 0},
+ {"num-records", required_argument, 0, 0},
+ {"writes-per-fork", required_argument, 0, 0},
+ {"size-per-record", required_argument, 0, 0},
+ {"record-fill", no_argument, 0, 0},
+ {"object-dist", required_argument, 0, 0},
{NULL, 0, NULL, 0}
};
@@ -67,6 +71,7 @@ static struct opt_vals opts = {
1,
1,
1,
+ 1,
0,
SEQ,
NULL
@@ -138,8 +143,7 @@ __blocking int aesop_main(int argc, char **argv){
else {
assert(0);
}
- /* create the object (TODO: promote replication factor to an opt */
- tret = remote_triton_rpc_rosd_create(oid, 1, 0);
+ tret = remote_triton_rpc_rosd_create(oid, opts.replication_factor, 0);
if (triton_error_equal(tret, TRITON_ERR_EXIST)){
char * str = triton_uint128_to_string(oid);
fprintf(stderr, "Object %s exists, need to delete manually for "
@@ -221,7 +225,7 @@ static int parse_args(int argc, char **argv){
int ret;
for (;;) {
- c = getopt_long(argc, argv, "ho:f:w:s:Fd:", long_opts, &longindex);
+ c = getopt_long(argc, argv, "ho:r:f:w:s:Fd:", long_opts, &longindex);
if (c == -1)
break;
if (c == 0) {
@@ -230,12 +234,13 @@ static int parse_args(int argc, char **argv){
switch(longindex) {
case 0: c = 'h'; break;
case 1: c = 'o'; break;
- case 2: c = 'f'; break;
- case 3: c = 'r'; break;
- case 4: c = 'w'; break;
- case 5: c = 's'; break;
- case 6: c = 'F'; break;
- case 7: c = 'd'; break;
+ case 2: c = 'r'; break;
+ case 3: c = 'f'; break;
+ case 4: c = 'r'; break;
+ case 5: c = 'w'; break;
+ case 6: c = 's'; break;
+ case 7: c = 'F'; break;
+ case 8: c = 'd'; break;
default: c = '?'; break;
}
}
@@ -248,6 +253,14 @@ static int parse_args(int argc, char **argv){
ret = get_ll_suff("num-objects", optarg, &opts.num_objects);
if (ret) return 1;
break;
+ case 'r': ;
+ /* TODO: don't be lazy */
+ int64_t tmp;
+ ret = get_ll_suff("replication-factor", optarg,
+ &tmp);
+ if (ret) return 1;
+ opts.replication_factor = (uint32_t) tmp;
+ break;
case 'f':
ret = get_ll_suff("num-forks", optarg, &opts.num_forks);
if (ret) return 1;
diff --git a/code/src/asg/asg-internal.ae b/code/src/asg/asg-internal.ae
index ac70daf..59d05ab 100644
--- a/code/src/asg/asg-internal.ae
+++ b/code/src/asg/asg-internal.ae
@@ -101,7 +101,7 @@ __blocking int asg_i_write (
printf("data: %s, has %d lengh with new version: %ld with flag:%d\n", data, recordlen, (uint64_t)new_version, flags);
*/
- tret = remote_triton_rpc_rosd_create(oid, 1, 0);
+ tret = remote_triton_rpc_rosd_create(oid, 0, 0);
if(triton_is_error(tret) && !triton_error_equal(TRITON_ERR_EXIST, tret))
{
triton_error_print(tret, "remote_triton_rpc_rosd_create");
@@ -458,3 +458,12 @@ __blocking int asg_i_probe_fork (
return(rc);
}
+
+/*
+ * Local variables:
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ *
+ * vim: ft=c ts=8 sts=4 sw=4 expandtab
+ */
diff --git a/code/src/replicated-osd/rosd-create.ae b/code/src/replicated-osd/rosd-create.ae
index e8aab64..1ef724c 100644
--- a/code/src/replicated-osd/rosd-create.ae
+++ b/code/src/replicated-osd/rosd-create.ae
@@ -180,18 +180,23 @@ static __blocking triton_ret_t rosd_create_do_work(
triton_ret_t local_tret;
triton_ret_t remote_tret = TRITON_SUCCESS;
triton_ret_t tret;
+ uint32_t actual_rep_factor;
/* right now only chained replication is supported */
assert(!(flags & ROSD_FLAG_FANOUT));
flags |= ROSD_FLAG_CHAIN;
+ /* a 0 in replication_factor indicates deference to the default */
+ actual_rep_factor = (replication_factor) ?
+ replication_factor : rosd_default_replication_factor;
+
/* forward request while simultaneously performing local work */
pwait
{
pprivate char* oid_str;
pbranch
{
- if(my_position < replication_factor -1)
+ if(my_position < actual_rep_factor -1)
{
oid_str = triton_uint128_to_string(oid);
triton_debug(triton_dbg_rosd,
@@ -200,8 +205,7 @@ static __blocking triton_ret_t rosd_create_do_work(
if (oid_str) free(oid_str);
remote_tret = __remote_triton_rpc_rosd_create(next_addr, oid,
- replication_factor,
- flags, my_position+1);
+ actual_rep_factor, flags, my_position+1);
}
}
pbranch
@@ -210,11 +214,12 @@ static __blocking triton_ret_t rosd_create_do_work(
triton_debug(triton_dbg_rosd, "ROSD local create of oid %s on %d'th server.\n", oid_str, my_position);
if (oid_str) free(oid_str);
/* perform local operation */
- local_tret = rosd_create_local_storage(oid, replication_factor, niid);
+ local_tret = rosd_create_local_storage(oid, actual_rep_factor,
+ niid);
}
}
- if(my_position < replication_factor -1)
+ if(my_position < actual_rep_factor -1)
tret = interpret_errors(local_tret, remote_tret, my_position,
is_usage_error_create, from_client_flag);
else
@@ -281,7 +286,7 @@ static __blocking triton_ret_t rosd_create_local_storage(
return triton_error_wrap(tret, self, "tosd_create failed");
}
- if(replication_factor != DEFAULT_REPLICATION)
+ if(replication_factor != rosd_default_replication_factor)
{
/* store replication factor directly in a data fork */
diff --git a/code/src/replicated-osd/rosd-internal.hae b/code/src/replicated-osd/rosd-internal.hae
index 07726aa..3c3068a 100644
--- a/code/src/replicated-osd/rosd-internal.hae
+++ b/code/src/replicated-osd/rosd-internal.hae
@@ -8,9 +8,9 @@
#include "src/replicated-osd/rosd.hae"
-/* TODO: need a way to configure and/or reserve these values */
-/* default replication level for objects */
-#define DEFAULT_REPLICATION 3
+/* default replication level for objects (set via zeroconf) */
+extern uint32_t rosd_default_replication_factor;
+
/* default fork used to store replication factor in object */
#define REP_FACTOR_FORK UINT64_MAX
diff --git a/code/src/replicated-osd/rosd-remove.ae b/code/src/replicated-osd/rosd-remove.ae
index 45b10d6..21f6897 100644
--- a/code/src/replicated-osd/rosd-remove.ae
+++ b/code/src/replicated-osd/rosd-remove.ae
@@ -153,7 +153,7 @@ static __blocking triton_ret_t triton_rpc_rosd_remove(hg_handle_t handle)
{
if (out_size == 0)
{
- in.replication_factor = DEFAULT_REPLICATION;
+ in.replication_factor = rosd_default_replication_factor;
}
else
{
diff --git a/code/src/replicated-osd/rosd-write.ae b/code/src/replicated-osd/rosd-write.ae
index a53529b..3cb0c34 100644
--- a/code/src/replicated-osd/rosd-write.ae
+++ b/code/src/replicated-osd/rosd-write.ae
@@ -364,7 +364,7 @@ static __blocking triton_ret_t triton_rpc_rosd_write(hg_handle_t handle)
if(out_size != sizeof(in.replication_factor))
{
assert(out_size == 0);
- in.replication_factor = DEFAULT_REPLICATION;
+ in.replication_factor = rosd_default_replication_factor;
}
/* TODO: check flags to make sure this isn't an explicit conditional */
diff --git a/code/src/replicated-osd/rosd.ae b/code/src/replicated-osd/rosd.ae
index 2f68f76..8137d81 100644
--- a/code/src/replicated-osd/rosd.ae
+++ b/code/src/replicated-osd/rosd.ae
@@ -28,6 +28,7 @@ static int64_t rosd_read_max_allocation = -1;
static int64_t rosd_write_max_allocation = -1;
static int64_t rosd_read_buffer_size = -1;
static int64_t rosd_write_buffer_size = -1;
+uint32_t rosd_default_replication_factor = -1;
int64_t rosd_read_xfer_pipeline_depth = -1;
int64_t rosd_write_xfer_pipeline_depth = -1;
@@ -44,6 +45,8 @@ static triton_ret_t rosd_param_updater(const char* key, const char *value)
if(ret != 1 || ival < 1)
return(TRITON_ERR_INVAL);
+ if(!strcmp(key, "triton_rosd_default_replication_factor"))
+ rosd_default_replication_factor = (uint32_t) ival;
if(!strcmp(key, "triton_rosd_read_buffer_size"))
rosd_read_buffer_size = ival;
else if(!strcmp(key, "triton_rosd_write_buffer_size"))
@@ -71,6 +74,8 @@ triton_ret_t triton_rosd_svr_init(void)
if(!module_refcount)
{
+ triton_zeroconf_register_callback(
+ "triton_rosd_default_replication_factor", rosd_param_updater);
triton_zeroconf_register_callback("triton_rosd_read_buffer_size",
rosd_param_updater);
triton_zeroconf_register_callback("triton_rosd_write_buffer_size",
diff --git a/code/src/replicated-osd/rosd.hae b/code/src/replicated-osd/rosd.hae
index 4fffa45..9bcf708 100644
--- a/code/src/replicated-osd/rosd.hae
+++ b/code/src/replicated-osd/rosd.hae
@@ -26,6 +26,7 @@ void triton_rosd_svr_finalize(void);
void triton_rpc_rosd_register(void);
+/* if replicas == 0, then use the system default replication factor */
__blocking triton_ret_t remote_triton_rpc_rosd_create(
uint128_t oid,
uint32_t replicas,
diff --git a/code/src/zeroconf/zeroconf.c b/code/src/zeroconf/zeroconf.c
index de38d06..dbd8583 100644
--- a/code/src/zeroconf/zeroconf.c
+++ b/code/src/zeroconf/zeroconf.c
@@ -94,6 +94,11 @@ struct zeroconf_entry zeroconf_array[] =
},
/* ROSD */
{
+ CFG_STR("triton_rosd_default_replication_factor", "3", CFGF_NONE),
+ "Default object replication factor (1 -> no replication)",
+ NULL,
+ },
+ {
CFG_STR("triton_rosd_read_max_allocation", "536870912", CFGF_NONE),
"Maximum memory to commit to ROSD read operations",
NULL,
@@ -123,7 +128,6 @@ struct zeroconf_entry zeroconf_array[] =
"Maximum depth of per-operation write pipeline",
NULL,
},
-
/* end sentinal; don't move this from final array position */
{
CFG_END(),
diff --git a/code/tests/asg/test-asg-simple.sh b/code/tests/asg/test-asg-simple.sh
index 1857bf2..18af42f 100755
--- a/code/tests/asg/test-asg-simple.sh
+++ b/code/tests/asg/test-asg-simple.sh
@@ -6,8 +6,8 @@ if [ -z $srcdir ]; then
fi
source $srcdir/tests/test-util.sh
-# start 1 server with 5 second wait, 60s timeout
-test_start_servers 1 5 60
+# start 1 server with 5 second wait, 60s timeout, rep factor 1
+test_start_servers 1 5 60 1
# actual test case
#####################
diff --git a/code/tests/test-util.sh b/code/tests/test-util.sh
index a9a201c..834039a 100644
--- a/code/tests/test-util.sh
+++ b/code/tests/test-util.sh
@@ -43,6 +43,10 @@ function test_gen_conf ()
echo "triton_tosd_db_path = ${TMPBASE}/triton-server-%TRITON_SERVER_NAME%-meta" >> ${TMPBASE}/triton-$pid.conf
echo "triton_tosd_data_path = ${TMPBASE}/triton-server-%TRITON_SERVER_NAME%-data" >> ${TMPBASE}/triton-$pid.conf
echo "triton_debug_masks = \"all\"" >> ${TMPBASE}/triton-$pid.conf
+ if [[ $repfactor -gt 0 ]] ; then
+ echo "triton_rosd_default_replication_factor = $repfactor" \
+ >> ${TMPBASE}/triton-$pid.conf
+ fi
}
@@ -51,6 +55,7 @@ function test_start_servers ()
nservers=${1:-4}
startwait=${2:-15}
maxtime=${3:-120}s
+ repfactor=${4:-0}
pid=$$
startport=3344
endport=`expr 3344 + $nservers - 1`
hooks/post-receive
--