branch, master, updated. c96d8f72dcc4b8389660aa2eff5fc751fdefa5ff
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 c96d8f72dcc4b8389660aa2eff5fc751fdefa5ff (commit) via 0ea358186cf82382db065be36f9e4db94004923d (commit) via 7774b2be1ec13b51538c8b3f147dbdc1783b0f38 (commit) from ead3b1d16bd55e6b4b1bad0294c52bc32fe86f6a (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 c96d8f72dcc4b8389660aa2eff5fc751fdefa5ff Author: Phil Carns <[email protected]> Date: Fri Aug 24 11:47:02 2012 -0400 switch versioning_rmw to use generic rmw commit 0ea358186cf82382db065be36f9e4db94004923d Author: Phil Carns <[email protected]> Date: Fri Aug 24 11:37:37 2012 -0400 update locking routine to do single block rmw commit 7774b2be1ec13b51538c8b3f147dbdc1783b0f38 Author: Phil Carns <[email protected]> Date: Fri Aug 24 11:14:36 2012 -0400 stub rmw benchmark based on phist ----------------------------------------------------------------------- Summary of changes: code/configure.ac | 1 + .../README | 31 +-- .../block-rmw-client.ae} | 206 ++++---------------- .../block-rmw-server.ae} | 20 +-- .../block-rmw.ae} | 40 ++--- .../block-rmw.hae} | 9 +- .../examples/block-read-modify-write/module.mk.in | 12 ++ 7 files changed, 76 insertions(+), 243 deletions(-) copy code/src/examples/{parallel-histogram => block-read-modify-write}/README (52%) copy code/src/examples/{parallel-histogram/phist-client.ae => block-read-modify-write/block-rmw-client.ae} (77%) copy code/src/examples/{parallel-histogram/phist-server.ae => block-read-modify-write/block-rmw-server.ae} (80%) copy code/src/examples/{parallel-histogram/phist.ae => block-read-modify-write/block-rmw.ae} (86%) copy code/src/examples/{parallel-histogram/phist.hae => block-read-modify-write/block-rmw.hae} (87%) create mode 100644 code/src/examples/block-read-modify-write/module.mk.in Diff of changes: diff --git a/code/configure.ac b/code/configure.ac index fa6e5e5..0933f1e 100644 --- a/code/configure.ac +++ b/code/configure.ac @@ -429,4 +429,5 @@ doc/resilience/resilience-book.txt doc/resilience/prototype-2012-07/module.mk src/asg/module.mk src/examples/parallel-histogram/module.mk +src/examples/block-read-modify-write/module.mk ]) diff --git a/code/src/examples/parallel-histogram/README b/code/src/examples/block-read-modify-write/README similarity index 52% copy from code/src/examples/parallel-histogram/README copy to code/src/examples/block-read-modify-write/README index 448d567..64ddfa4 100644 --- a/code/src/examples/parallel-histogram/README +++ b/code/src/examples/block-read-modify-write/README @@ -1,13 +1,11 @@ -== Parallel Histogram +== Block read modify write === Introduction -The parallel histogram example is setup as an MPI program which divides into -clients and servers. When run, the program executes the random workload -specified and records the number of operations over each sampling period. -When the program exists, the report for the timing information is dumped -to standard output. + +This program performs simple read/modify/write updates to portions of +objects. === Build -make src/examples/parallel-histogram/phist +make src/examples/block-read-modify-write/block-rmw === Run ==== Parameters @@ -15,25 +13,16 @@ make src/examples/parallel-histogram/phist --nserver <n> number of MPI ranks to assign as servers, remaing become clients. --datapoints <n> number of bin updates by each client. --sample <n> interval in seconds to sample updates/s. ---mode <n> test mode: 0 = Locking, 1 = Conditional, 2 = Atomic +--mode <n> test mode: 0 = Locking, 1 = Conditional --objects <n> number objects per server, with bins divided evenly among them. Zero means to use a separate object for each bin. ---fault-delay <n> number of seconds to wait before injecting a fault ---fault-type <n> type of fault to inject: - 0: change status of first server to TRITON_STATUS_UNREACHABLE - 1: inject send failures at a rate of 5% on first server - 2: inject 100% send failures on first server, then mark it as unreachable - 2 seconds later ---replication <n> replication factor (defaults to 1) --timeout-ms <n> timeout in milliseconds for RPC operations (defaults to 1000) -==== Locking / 1 bin per object -This example runs with 1024 locks protecting the bucks and half the MPI ranks -are clients and half are servers. There is 1 bin per object. +==== Locking, one object per server, one fork per bin + +mpiexec -n 4 ./block-rmw --nservers 2 --objects 1 --datapoints 100 --mode 0 --path /tmp/rmw --sample 10 --nlocks 2 --bins 100 --zoohost localhost --concurrency 2 --dist 0 --timeout-ms 5000 -PROC=16 -TOSD=/tmp/data -mpirun -np $PROC ./phist --nservers $(($PROC/2)) --objects 0 --datapoints 1000 --sample 10 --nlocks 1024 --mode 0 --path $TOSD +Change the --mode argument from 0 to 1 to switch to conditional writes. == Zookeeper === Installation diff --git a/code/src/examples/parallel-histogram/phist-client.ae b/code/src/examples/block-read-modify-write/block-rmw-client.ae similarity index 77% copy from code/src/examples/parallel-histogram/phist-client.ae copy to code/src/examples/block-read-modify-write/block-rmw-client.ae index 04d5046..7afe887 100644 --- a/code/src/examples/parallel-histogram/phist-client.ae +++ b/code/src/examples/block-read-modify-write/block-rmw-client.ae @@ -16,7 +16,7 @@ #include "src/common/triton-error.h" #include "src/common/triton-bootstrap.hae" #include "src/replicated-osd/rosd-client.hae" -#include "phist.hae" +#include "block-rmw.hae" #include "src/replicated-osd/rosd-utils.h" #include "src/state/status.hae" #include "src/state/state.hae" @@ -30,14 +30,15 @@ #define FILE_MAX_VALUES 10000 static __blocking void locking_rmw(uint128_t oid, uint64_t fork, - uint64_t value, int rep_factor, + int rep_factor, + char* buffer, int block_size, int create_flag, zkr_lock_mutex_t *lock, double *tlock, double *tupdate); static __blocking void versioning_rmw(uint128_t oid, uint64_t fork, - uint64_t value, int rep_factor, + int rep_factor, + char* buffer, int block_size, int create_flag, double *tlock, double *tupdate); -static void atomic_update(uint128_t oid, uint64_t fork, uint64_t value); static void zk_clean_node(zhandle_t *zh, const char *path); static __blocking void workload (parameters_t *params, int rank, @@ -62,36 +63,6 @@ static void zwatcher(zhandle_t *zh, return; } -/* NOTE: If we set the failure status on the actual failed server, then the - * update won't get propagated to any other servers (because the failed - * servers network is down). We instead send the update to a different - * server to propagate. - */ -static __blocking triton_ret_t status_set_other(triton_node_t failed_svr, triton_node_t status_svr) -{ - triton_ret_t tret; - triton_addr_t addr; - struct state_client_update_req req; - triton_string_t key; - triton_string_t value; - - tret = triton_map_lookup_node(status_svr, &addr); - if(tret != TRITON_SUCCESS) - return(tret); - - triton_string_init(&key, "triton.status"); - triton_string_init(&value, "TRITON_STATUS_UNREACHABLE"); - - aer_init_struct_state_client_update_req(&req, &failed_svr, &key, &value); - tret = remote_state_client_update(AER_DEFAULT_CTX, addr, &req, NULL); - aer_destroy_struct_state_client_update_req(&req); - - triton_string_destroy(&key); - triton_string_destroy(&value); - - return(tret); -} - __blocking triton_ret_t client_main (int nservers, int nclients, void *data, @@ -119,7 +90,6 @@ __blocking triton_ret_t client_main (int nservers, uint128_t oid; char timeout[64]; triton_addr_t svr_addr; - double fault_time; zhandle_t *zk; zkr_lock_mutex_t *zkmutex; @@ -142,18 +112,12 @@ __blocking triton_ret_t client_main (int nservers, ret = triton_zeroconf_set("triton.traffic_cop.static_timeout", timeout); triton_error_assert(ret); - /* set up fault injection network method */ - ret = triton_zeroconf_set("aesop.remote.default_net", "fault"); - triton_error_assert(ret); - ret = triton_zeroconf_set("triton.net.fault_injector.base_method", "triton.net.mpi"); - triton_error_assert(ret); - ret = triton_init("triton.client"); triton_error_assert(ret); ret = aesop_branch_threader_init(); triton_error_assert(ret); - ret = triton_attach("fault://0"); + ret = triton_attach("mpi://0"); triton_error_assert(ret); if (params->mode == MODE_LOCKING) @@ -235,7 +199,7 @@ __blocking triton_ret_t client_main (int nservers, { oid.l = nodes[i].l; oid.u = nodes[i].u + j + 10000; - ret = client_rosd_create(oid, params->rep_factor, 0); + ret = client_rosd_create(oid, 1, 0); triton_error_assert(ret); } } @@ -244,67 +208,9 @@ __blocking triton_ret_t client_main (int nservers, s = MPI_Wtime(); MPI_Barrier(client_comm); - pwait - { - pbranch - { - triton_ret_t pret; - - if(client_rank == 0 && params->fault_delay > 0) - { - pret = triton_timer(params->fault_delay * 1000); - if(pret == TRITON_SUCCESS) - { - fault_time = MPI_Wtime(); - if(params->fault_type == 0) - { - printf("%f: Client 0 injecting failure type 0 (setting server 0 status to TRITON_STATUS_UNREACHABLE)\n", fault_time); - pret = triton_status_set(nodes[0], TRITON_STATUS_UNREACHABLE); - triton_error_assert(pret); - } - else if(params->fault_type == 1) - { - printf("%f: Client 0 injecting failure type 1 (injecting network send error rate of 5 percent on server 0)\n", fault_time); - printf("WARNING: this test case is likely to fail; see #224.\n"); - pret = triton_map_lookup_node(nodes[0], &svr_addr); - triton_error_assert(pret); - pret = client_triton_inject_send_failures(svr_addr, - 100, INT32_MAX, 5); - triton_error_assert(pret); - } - else if(params->fault_type == 2) - { - printf("Client 0 injecting failure type 2 (total network failure on server 0, followed in 2 seconds by marking it with TRITON_STATUS_UNREACHABLE)\n"); - pret = triton_map_lookup_node(nodes[0], &svr_addr); - triton_error_assert(pret); - pret = client_triton_inject_send_failures(svr_addr, - 100, INT32_MAX, 100); - triton_error_assert(pret); - - pret = triton_timer(2000); - triton_error_assert(pret); - pret = status_set_other(nodes[0], nodes[1]); - triton_error_assert(pret); - } - else - { - assert(0); - } - } - else - { - fprintf(stderr, "WARNING: no fault injected; test did not run long enough.\n"); - } - } - } - pbranch - { - workload(params, client_rank, nclients, nservers, &samples, - value_count, value, zkmutex, &rates, ×, nodes, - &timing1, &timing2); - aesop_cancel_branches_wait(); - } - } + workload(params, client_rank, nclients, nservers, &samples, + value_count, value, zkmutex, &rates, ×, nodes, + &timing1, &timing2); MPI_Barrier(client_comm); e = MPI_Wtime(); @@ -468,11 +374,14 @@ static __blocking void workload (parameters_t *params, pprivate uint64_t fork; pprivate uint64_t bin; pprivate uint128_t oid; + pprivate char* buffer; for (pb_id = 0; pb_id < params->concurrency; ++pb_id) { pbranch { + buffer = malloc(params->block_size); + assert(buffer); rc1 = pthread_mutex_lock(&mutex); assert(rc1 == 0); @@ -582,8 +491,8 @@ static __blocking void workload (parameters_t *params, tlock = 0; //printf("oid=%ld, fork=%ld, v=%ld, lock=%d lockp=%d\n", // oid.u, fork, v, lock, lock+(pb_id*params->nlocks)); - locking_rmw(oid, fork, v, - params->rep_factor, + locking_rmw(oid, fork, + 1, buffer, params->block_size, params->objects_per_server, &zkmutex[lock+(pb_id*params->nlocks)], &tlock, &tupdate); @@ -593,17 +502,12 @@ static __blocking void workload (parameters_t *params, { tupdate = 0; tlock = 0; - versioning_rmw(oid, fork, v, - params->rep_factor, + versioning_rmw(oid, fork, + 1, buffer, params->block_size, params->objects_per_server, &tlock, &tupdate); break; } - case MODE_ATOMIC: - { - atomic_update(oid, fork, v); - break; - } } rc1 = pthread_mutex_lock(&mutex); @@ -667,8 +571,9 @@ static __blocking int ae_zoo_lock(zkr_lock_mutex_t *lock) static __blocking void locking_rmw(uint128_t bin, uint64_t subbin, - uint64_t value, int rep_factor, + char* buffer, + int block_size, int create_flag, zkr_lock_mutex_t *lock, double *tlock, @@ -681,19 +586,19 @@ static __blocking void locking_rmw(uint128_t bin, uint64_t fork; int64_t offset; int64_t size; - uint64_t bin_value = 0; uint32_t flags; int read; int rc; int i; double e,s; int rank; + int *value; MPI_Comm_rank(MPI_COMM_WORLD, &rank); oid = bin; fork = subbin; offset = 0; - size = sizeof(bin_value); + size = block_size; flags = 0; read = 0; @@ -713,17 +618,9 @@ static __blocking void locking_rmw(uint128_t bin, ret = client_rosd_read(oid, fork, size, offset, flags, &resp); if (ret == TRITON_SUCCESS) { - if (resp.buffer.size == sizeof(bin_value)) - { - memcpy(&bin_value, resp.buffer.buffer, sizeof(bin_value)); - } - else if (resp.buffer.size == 0) - { - bin_value = 0; - } - else + if (resp.buffer.size == 0) { - assert(0); + memset(buffer, 0, block_size); } aer_destroy_struct_rosd_read_resp(&resp); read = 1; @@ -751,9 +648,10 @@ static __blocking void locking_rmw(uint128_t bin, } } - bin_value += 1; + value = (int*)buffer; + *value = (*value)+1; - triton_buffer_init(&buf, &bin_value, sizeof(bin_value)); + triton_buffer_init(&buf, buffer, block_size); ret = client_rosd_write(oid, fork, buf, offset, 0, flags); if(ret != TRITON_SUCCESS) @@ -763,16 +661,6 @@ static __blocking void locking_rmw(uint128_t bin, assert(0); } - triton_buffer_init(&buf, &value, sizeof(value)); - offset = bin_value * sizeof(value); - - ret = client_rosd_write(oid, fork, buf, offset, 0, flags); - if(ret != TRITON_SUCCESS) - { - fprintf(stderr, "client_rosd_write() failure on rank %d\n", rank); - triton_error_print(ret, "client_rosd_write"); - assert(0); - } e = MPI_Wtime(); *tupdate += (e-s); @@ -789,8 +677,9 @@ static __blocking void locking_rmw(uint128_t bin, static __blocking void versioning_rmw(uint128_t bin, uint64_t subbin, - uint64_t value, int rep_factor, + char* buffer, + int block_size, int create_flag, double *tlock, double *tupdate) @@ -810,6 +699,7 @@ static __blocking void versioning_rmw(uint128_t bin, int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); uint64_t version; + int *value; oid = bin; fork = subbin; @@ -820,7 +710,7 @@ static __blocking void versioning_rmw(uint128_t bin, do { offset = 0; - size = sizeof(bin_value); + size = block_size; read = 0; while(!read) { @@ -829,17 +719,9 @@ static __blocking void versioning_rmw(uint128_t bin, { version = resp.version; version++; - if (resp.buffer.size == sizeof(bin_value)) - { - memcpy(&bin_value, resp.buffer.buffer, sizeof(bin_value)); - } - else if (resp.buffer.size == 0) + if (resp.buffer.size == 0) { - bin_value = 0; - } - else - { - assert(0); + memset(buffer, 0, block_size); } aer_destroy_struct_rosd_read_resp(&resp); read = 1; @@ -868,9 +750,10 @@ static __blocking void versioning_rmw(uint128_t bin, } } - bin_value += 1; + value = (int*)buffer; + *value = (*value)+1; - triton_buffer_init(&buf, &bin_value, sizeof(bin_value)); + triton_buffer_init(&buf, &buffer, block_size); ret = client_rosd_write(oid, fork, buf, offset, version, ROSD_FLAG_COND_WRITE); if(ret != TRITON_SUCCESS && !triton_error_equal(ret, TRITON_ERR_CONDITIONAL)) @@ -879,20 +762,6 @@ static __blocking void versioning_rmw(uint128_t bin, triton_error_print(ret, "client_rosd_write"); assert(0); } - - if(ret == TRITON_SUCCESS) - { - triton_buffer_init(&buf, &value, sizeof(value)); - offset = bin_value * sizeof(value); - - ret = client_rosd_write(oid, fork, buf, offset, 0, 0); - if(ret != TRITON_SUCCESS) - { - fprintf(stderr, "client_rosd_write() failure on rank %d\n", rank); - triton_error_print(ret, "client_rosd_write"); - assert(0); - } - } }while(triton_error_equal(ret, TRITON_ERR_CONDITIONAL)); e = MPI_Wtime(); @@ -902,11 +771,6 @@ static __blocking void versioning_rmw(uint128_t bin, return; } -static void atomic_update(uint128_t bin, uint64_t subbin, uint64_t value) -{ - return; -} - // delete path and child nodes static void zk_clean_node(zhandle_t *zh, const char *path) { diff --git a/code/src/examples/parallel-histogram/phist-server.ae b/code/src/examples/block-read-modify-write/block-rmw-server.ae similarity index 80% copy from code/src/examples/parallel-histogram/phist-server.ae copy to code/src/examples/block-read-modify-write/block-rmw-server.ae index 56387d6..d162297 100644 --- a/code/src/examples/parallel-histogram/phist-server.ae +++ b/code/src/examples/block-read-modify-write/block-rmw-server.ae @@ -20,7 +20,7 @@ #include "src/state/status.hae" #include "src/common/traffic-cop.hae" #include "src/rebuild/rb_module.h" -#include "phist.hae" +#include "block-rmw.hae" __blocking triton_ret_t server_main (int nservers, int nclients, @@ -32,7 +32,6 @@ __blocking triton_ret_t server_main (int nservers, parameters_t *params; char path[PATH_MAX]; char timeout[64]; - char rep[64]; int rc; printf("server startup: s=%d c=%d data=%p\n", nservers, nclients, data); @@ -71,8 +70,7 @@ __blocking triton_ret_t server_main (int nservers, triton_error_assert(ret); /* set default replication factor for servers */ - sprintf(rep, "%d", params->rep_factor); - ret = triton_zeroconf_set("triton.rosd.default_replication", rep); + ret = triton_zeroconf_set("triton.rosd.default_replication", "1"); triton_error_assert(ret); /* Set static timeouts */ @@ -80,20 +78,6 @@ __blocking triton_ret_t server_main (int nservers, ret = triton_zeroconf_set("triton.traffic_cop.static_timeout", timeout); triton_error_assert(ret); - /* set up fault injection network method */ - ret = triton_zeroconf_set("aesop.remote.default_net", "fault"); - triton_error_assert(ret); - ret = triton_zeroconf_set("triton.net.fault_injector.base_method", "triton.net.mpi"); - triton_error_assert(ret); - /* TODO: Really the fakess component should use MPI directly rather than - * the fault method (fakess itself is not intended to be fault - * tolerant). The problem is that fakess relies on the default - * mapping table which will be set to use fault addresses, causing - * a mismatch if fakess tries to use MPI. - */ - ret = triton_zeroconf_set("triton.fakess.method", "fault"); - triton_error_assert(ret); - ret = triton_init("triton.server"); triton_error_assert(ret); diff --git a/code/src/examples/parallel-histogram/phist.ae b/code/src/examples/block-read-modify-write/block-rmw.ae similarity index 86% copy from code/src/examples/parallel-histogram/phist.ae copy to code/src/examples/block-read-modify-write/block-rmw.ae index 7549ebc..4ec3518 100644 --- a/code/src/examples/parallel-histogram/phist.ae +++ b/code/src/examples/block-read-modify-write/block-rmw.ae @@ -7,7 +7,7 @@ #include "src/aesop/aesop.h" #include "src/common/triton-error.h" #include "src/remote/client-server-exec.hae" -#include "phist.hae" +#include "block-rmw.hae" #define POLL_TIMEOUT 1000 @@ -25,13 +25,11 @@ static void parse_args (int argc, int *nlocks, char *file, int *nbins, - int *fault_delay, - int *fault_type, - int *rep_factor, char *zoohost, int *concurrency, int *dist, - int *timeout_ms) + int *timeout_ms, + int *block_size) { static struct option long_options[] = { {"nservers", 1, NULL, 0 }, @@ -43,13 +41,11 @@ static void parse_args (int argc, {"nlocks", 1, NULL, 0 }, {"file", 1, NULL, 0 }, {"bins", 1, NULL, 0 }, - {"fault-delay", 1, NULL, 0}, - {"fault-type", 1, NULL, 0}, - {"replication", 1, NULL, 0}, {"zoohost", 1, NULL, 0}, {"concurrency", 1, NULL, 0}, {"dist", 1, NULL, 0}, {"timeout-ms", 1, NULL, 0}, + {"block-size", 1, NULL, 0}, { NULL, 0, NULL, 0 } }; int long_index; @@ -96,25 +92,19 @@ static void parse_args (int argc, *nbins = atoi(optarg); break; case 9: - *fault_delay = atoi(optarg); + strncpy(zoohost, optarg, PATH_MAX); break; case 10: - *fault_type = atoi(optarg); + *concurrency = atoi(optarg); break; case 11: - *rep_factor = atoi(optarg); + *dist = atoi(optarg); break; case 12: - strncpy(zoohost, optarg, PATH_MAX); + *timeout_ms = atoi(optarg); break; case 13: - *concurrency = atoi(optarg); - break; - case 14: - *dist = atoi(optarg); - break; - case 15: - *timeout_ms = atoi(optarg); + *block_size = atoi(optarg); break; default: assert(0); @@ -155,8 +145,8 @@ int main (int argc, char **argv) main_ret = TRITON_ERR_UNKNOWN; memset(¶ms, 0, sizeof(params)); - params.rep_factor = 1; params.timeout_ms = 1000; + params.block_size = 4096; parse_args(argc, argv, @@ -169,13 +159,11 @@ int main (int argc, char **argv) ¶ms.nlocks, params.file, ¶ms.nbins, - ¶ms.fault_delay, - ¶ms.fault_type, - ¶ms.rep_factor, params.zoohost, ¶ms.concurrency, ¶ms.dist, - ¶ms.timeout_ms); + ¶ms.timeout_ms, + ¶ms.block_size); rc = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); assert(rc == MPI_SUCCESS); @@ -192,11 +180,9 @@ int main (int argc, char **argv) printf(" points: %d\n", params.datapoints); printf(" mode: %d\n", params.mode); printf(" sample: %d\n", params.sample); - printf("fault delay: %d\n", params.fault_delay); - printf("fault type: %d\n", params.fault_type); - printf("replication factor: %d\n", params.rep_factor); printf("concurrency: %d\n", params.concurrency); printf("timeout (ms): %d\n", params.timeout_ms); + printf("block size (bytes): %d\n", params.block_size); } ae_hints_init(&hints); diff --git a/code/src/examples/parallel-histogram/phist.hae b/code/src/examples/block-read-modify-write/block-rmw.hae similarity index 87% copy from code/src/examples/parallel-histogram/phist.hae copy to code/src/examples/block-read-modify-write/block-rmw.hae index 87d1009..9690be9 100644 --- a/code/src/examples/parallel-histogram/phist.hae +++ b/code/src/examples/block-read-modify-write/block-rmw.hae @@ -1,11 +1,10 @@ -#ifndef __PHIST_HAE__ -#define __PHIST_HAE__ +#ifndef __BLOCK_RMW_HAE__ +#define __BLOCK_RMW_HAE__ #include <limits.h> #define MODE_LOCKING 0 #define MODE_VERSIONING 1 -#define MODE_ATOMIC 2 typedef struct parameters_s { @@ -18,12 +17,10 @@ typedef struct parameters_s char path[PATH_MAX]; char file[PATH_MAX]; char zoohost[PATH_MAX]; - int fault_delay; - int fault_type; - int rep_factor; int concurrency; int dist; int timeout_ms; + int block_size; } parameters_t; __blocking triton_ret_t client_main (int nservers, diff --git a/code/src/examples/block-read-modify-write/module.mk.in b/code/src/examples/block-read-modify-write/module.mk.in new file mode 100644 index 0000000..88ce458 --- /dev/null +++ b/code/src/examples/block-read-modify-write/module.mk.in @@ -0,0 +1,12 @@ +DIR := src/examples/block-read-modify-write + +AESOP_HDR += $(DIR)/block-rmw.hae + +AETESTSRC += $(DIR)/block-rmw.ae + +AETESTSUPPORTSRC += $(DIR)/block-rmw-server.ae +AETESTSUPPORTSRC += $(DIR)/block-rmw-client.ae + +MODCFLAGS_$(DIR)/block-rmw-client := -I/usr/include/zookeeper +MODLDFLAGS_$(DIR)/block-rmw := -lzookeeper_mt -lzoolock +MODLINKWITH_$(DIR)/block-rmw := $(DIR)/block-rmw-server.o $(DIR)/block-rmw-client.o hooks/post-receive --
participants (1)
-
noreply@mcs.anl.gov