From 4658813fcb5bd93ce3f5a579d9469abd8ea9be76 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Tue, 16 May 2023 15:35:20 -0700 Subject: [PATCH 01/46] Add wrapper for fopen64 Signed-off-by: Chen Wang --- client/check_fns/unifyfs_list.txt | 1 + client/src/gotcha_map_unifyfs_list.c | 4 +++ client/src/unifyfs-stdio.c | 41 ++++++++++++++++++++++------ client/src/unifyfs-stdio.h | 1 + configure.ac | 1 + 5 files changed, 39 insertions(+), 9 deletions(-) diff --git a/client/check_fns/unifyfs_list.txt b/client/check_fns/unifyfs_list.txt index 83693605a..961556a90 100644 --- a/client/check_fns/unifyfs_list.txt +++ b/client/check_fns/unifyfs_list.txt @@ -36,6 +36,7 @@ void* UNIFYFS_WRAP(mmap64)(void *addr, size_t length, int prot, int flags, int f int UNIFYFS_WRAP(__fxstat)(int vers, int fd, struct stat *buf) int UNIFYFS_WRAP(close)(int fd) FILE* UNIFYFS_WRAP(fopen)(const char *path, const char *mode) +FILE* UNIFYFS_WRAP(fopen64)(const char *path, const char *mode) FILE* UNIFYFS_WRAP(freopen)(const char *path, const char *mode, FILE *stream) int UNIFYFS_WRAP(setvbuf)(FILE* stream, char* buf, int type, size_t size) void* UNIFYFS_WRAP(setbuf)(FILE* stream, char* buf) diff --git a/client/src/gotcha_map_unifyfs_list.c b/client/src/gotcha_map_unifyfs_list.c index 44a34831f..1d41205cd 100644 --- a/client/src/gotcha_map_unifyfs_list.c +++ b/client/src/gotcha_map_unifyfs_list.c @@ -222,6 +222,9 @@ UNIFYFS_DEF(seekdir, void, UNIFYFS_DEF(fopen, FILE*, (const char* path, const char* mode), (path, mode)) +UNIFYFS_DEF(fopen64, FILE*, + (const char* path, const char* mode), + (path, mode)) UNIFYFS_DEF(freopen, FILE*, (const char* path, const char* mode, FILE* stream), (path, mode, stream)) @@ -413,6 +416,7 @@ struct gotcha_binding_t unifyfs_wrappers[] = { { "scandir", UNIFYFS_WRAP(scandir), &wrappee_handle_scandir }, { "seekdir", UNIFYFS_WRAP(seekdir), &wrappee_handle_seekdir }, { "fopen", UNIFYFS_WRAP(fopen), &wrappee_handle_fopen }, + { "fopen64", UNIFYFS_WRAP(fopen64), &wrappee_handle_fopen64 }, { "freopen", UNIFYFS_WRAP(freopen), &wrappee_handle_freopen }, { "setvbuf", UNIFYFS_WRAP(setvbuf), &wrappee_handle_setvbuf }, { "setbuf", UNIFYFS_WRAP(setbuf), &wrappee_handle_setbuf }, diff --git a/client/src/unifyfs-stdio.c b/client/src/unifyfs-stdio.c index e401c6076..ffa5b29ea 100644 --- a/client/src/unifyfs-stdio.c +++ b/client/src/unifyfs-stdio.c @@ -271,6 +271,7 @@ static int unifyfs_fopen_parse_mode( */ static int unifyfs_fopen(const char* path, const char* mode, + int from_fopen64, FILE** outstream) { /* assume that we'll fail */ @@ -290,6 +291,8 @@ static int unifyfs_fopen(const char* path, int open_rc = -1; int fid; off_t pos; + /* if called from fopen64(), add O_LARGEFILE flag when creating file */ + int large_file_flag = from_fopen64 ? O_LARGEFILE : 0; if (read) { /* read shall fail if file does not already exist, unifyfs_fid_open * returns ENOENT if file does not exist w/o O_CREAT @@ -309,26 +312,26 @@ static int unifyfs_fopen(const char* path, * (read/write) */ open_rc = unifyfs_fid_open(posix_client, path, - O_RDWR | O_CREAT | O_TRUNC, - perms, &fid, &pos); + O_RDWR | O_CREAT | O_TRUNC | + large_file_flag, perms, &fid, &pos); } else { /* w ==> truncate to zero length or create file for writing */ open_rc = unifyfs_fid_open(posix_client, path, - O_WRONLY | O_CREAT | O_TRUNC, - perms, &fid, &pos); + O_WRONLY | O_CREAT | O_TRUNC | + large_file_flag, perms, &fid, &pos); } } else if (append) { /* force all writes to end of file when append is set */ if (plus) { /* a+ ==> append, open or create file for update, initial file * position for reading should be at start */ - open_rc = unifyfs_fid_open(posix_client, path, O_RDWR | O_CREAT, - perms, &fid, &pos); + open_rc = unifyfs_fid_open(posix_client, path, O_RDWR | O_CREAT | + large_file_flag, perms, &fid, &pos); } else { /* a ==> append, open or create file for writing, at end of file */ open_rc = unifyfs_fid_open(posix_client, path, - O_WRONLY | O_CREAT | O_APPEND, - perms, &fid, &pos); + O_WRONLY | O_CREAT | O_APPEND | + large_file_flag, perms, &fid, &pos); } } @@ -984,7 +987,7 @@ FILE* UNIFYFS_WRAP(fopen)(const char* path, const char* mode) char upath[UNIFYFS_MAX_FILENAME]; if (unifyfs_intercept_path(path, upath)) { FILE* stream; - int rc = unifyfs_fopen(upath, mode, &stream); + int rc = unifyfs_fopen(upath, mode, 0, &stream); if (rc != UNIFYFS_SUCCESS) { errno = unifyfs_rc_errno(rc); return NULL; @@ -998,6 +1001,26 @@ FILE* UNIFYFS_WRAP(fopen)(const char* path, const char* mode) } } +FILE* UNIFYFS_WRAP(fopen64)(const char* path, const char* mode) +{ + /* check whether we should intercept this path */ + char upath[UNIFYFS_MAX_FILENAME]; + if (unifyfs_intercept_path(path, upath)) { + FILE* stream; + int rc = unifyfs_fopen(upath, mode, 1, &stream); + if (rc != UNIFYFS_SUCCESS) { + errno = unifyfs_rc_errno(rc); + return NULL; + } + errno = 0; + return stream; + } else { + MAP_OR_FAIL(fopen64); + FILE* ret = UNIFYFS_REAL(fopen64)(path, mode); + return ret; + } +} + FILE* UNIFYFS_WRAP(freopen)(const char* path, const char* mode, FILE* stream) { /* check whether we should intercept this path */ diff --git a/client/src/unifyfs-stdio.h b/client/src/unifyfs-stdio.h index de455a27a..a49ca2cee 100644 --- a/client/src/unifyfs-stdio.h +++ b/client/src/unifyfs-stdio.h @@ -51,6 +51,7 @@ UNIFYFS_DECL(fclose, int, (FILE* stream)); UNIFYFS_DECL(fflush, int, (FILE* stream)); UNIFYFS_DECL(fopen, FILE*, (const char* path, const char* mode)); +UNIFYFS_DECL(fopen64, FILE*, (const char* path, const char* mode)); UNIFYFS_DECL(freopen, FILE*, (const char* path, const char* mode, FILE* stream)); UNIFYFS_DECL(setbuf, void, (FILE* stream, char* buf)); diff --git a/configure.ac b/configure.ac index 9c09bd368..5a9ba927a 100755 --- a/configure.ac +++ b/configure.ac @@ -292,6 +292,7 @@ LINK_WRAPPERS+=",-wrap,rmdir" LINK_WRAPPERS+=",-wrap,fclose" LINK_WRAPPERS+=",-wrap,fflush" LINK_WRAPPERS+=",-wrap,fopen" +LINK_WRAPPERS+=",-wrap,fopen64" LINK_WRAPPERS+=",-wrap,freopen" LINK_WRAPPERS+=",-wrap,setbuf" LINK_WRAPPERS+=",-wrap,setvbuf" From 12df216d06d442acec861d196b8564f9259d9f19 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Tue, 17 Jan 2023 10:59:55 -0500 Subject: [PATCH 02/46] Add new broadcast RPC call Add a new broadcast RPC that requests all servers to return metadata for the files they own. This is just the initial commit and RPC is not fully functional yet. --- common/src/unifyfs_server_rpcs.h | 17 +- server/src/margo_server.c | 4 + server/src/margo_server.h | 1 + server/src/unifyfs_group_rpc.c | 233 +++++++++++++++++++++++++++ server/src/unifyfs_group_rpc.h | 10 ++ server/src/unifyfs_request_manager.c | 19 +++ server/src/unifyfs_service_manager.c | 80 +++++++++ 7 files changed, 363 insertions(+), 1 deletion(-) diff --git a/common/src/unifyfs_server_rpcs.h b/common/src/unifyfs_server_rpcs.h index 69e71ab86..a7a66b057 100644 --- a/common/src/unifyfs_server_rpcs.h +++ b/common/src/unifyfs_server_rpcs.h @@ -49,7 +49,8 @@ typedef enum { UNIFYFS_SERVER_BCAST_RPC_LAMINATE, UNIFYFS_SERVER_BCAST_RPC_TRANSFER, UNIFYFS_SERVER_BCAST_RPC_TRUNCATE, - UNIFYFS_SERVER_BCAST_RPC_UNLINK + UNIFYFS_SERVER_BCAST_RPC_UNLINK, + UNIFYFS_SERVER_BCAST_RPC_METAGET } server_rpc_e; /* structure to track server-to-server rpc request state */ @@ -241,6 +242,20 @@ MERCURY_GEN_PROC(unlink_bcast_out_t, ((int32_t)(ret))) DECLARE_MARGO_RPC_HANDLER(unlink_bcast_rpc) +/* Broadcast request for metadata to all servers */ +/* Sends a request to all servers to reply with a the metadata for + * all files that they own. */ +MERCURY_GEN_PROC(metaget_all_bcast_in_t, + ((int32_t)(root))) +/* TODO: Not sure what "root" is, but every RPC seems to have it... */ +MERCURY_GEN_PROC(metaget_all_bcast_out_t, + ((int32_t)(num_files)) + ((hg_bulk_t)(file_meta)) + ((int32_t)(ret))) +/* TODO: the bulk data is an array of file metadata structs from the replying + * server(s). Do we need to include a rank or pid or some other means + * of identifying the particular server? */ +DECLARE_MARGO_RPC_HANDLER(metaget_all_bcast_rpc) #ifdef __cplusplus } // extern "C" diff --git a/server/src/margo_server.c b/server/src/margo_server.c index f2b709fde..9a7858b87 100644 --- a/server/src/margo_server.c +++ b/server/src/margo_server.c @@ -245,6 +245,10 @@ static void register_server_server_rpcs(margo_instance_id mid) unifyfs_node_local_extents_get_in_t, unifyfs_node_local_extents_get_out_t, unifyfs_node_local_extents_get_rpc); + unifyfsd_rpc_context->rpcs.metaget_all_bcast_id = + MARGO_REGISTER(mid, "metaget_all_bcast_rpc", + metaget_all_bcast_in_t, metaget_all_bcast_out_t, + metaget_all_bcast_rpc); } /* setup_local_target - Initializes the client-server margo target */ diff --git a/server/src/margo_server.h b/server/src/margo_server.h index 9117d6342..e2bfae4f3 100644 --- a/server/src/margo_server.h +++ b/server/src/margo_server.h @@ -50,6 +50,7 @@ typedef struct ServerRpcIds { hg_id_t truncate_bcast_id; hg_id_t unlink_bcast_id; hg_id_t node_local_extents_get_id; + hg_id_t metaget_all_bcast_id; /* client-server rpcs */ hg_id_t client_heartbeat_id; diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index a8dbd6d4e..68d4b3e94 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -138,6 +138,37 @@ static int get_child_response(coll_request* coll_req, } break; } + case UNIFYFS_SERVER_BCAST_RPC_METAGET: { + // NOTE: This case is different. It's currently the only + // case that actually returns more than just a single error + // code up the tree. + LOGWARN( + "Handling of child responses for " + "UNIFYFS_SERVER_BCAST_RPC_METAGET is almost certainly " + "incorrect and shouldn't be trusted!"); + metaget_all_bcast_out_t* cmabo = + (metaget_all_bcast_out_t*) out; + metaget_all_bcast_out_t* mabo = + (metaget_all_bcast_out_t*) output; + child_ret = cmabo->ret; + if ((NULL != mabo) && (child_ret != UNIFYFS_SUCCESS)) { + mabo->ret = child_ret; + } + if ((NULL != cmabo) && (NULL != mabo)) { + mabo->num_files += cmabo->num_files; + } else { + /* One or both of the output structures is missing. + * (This shouldn't ever happen.) */ + LOGERR( + "Missing required output structs when handling " + "UNIFYFS_SERVER_BCAST_RPC_METAGET child responses!"); + LOGERR("Parent output struct: 0x%lX", (uint64_t)mabo); + LOGERR("Child output struct: 0x%lX", (uint64_t)cmabo); + mabo->ret = UNIFYFS_ERROR_BADCONFIG; + // TODO: Is BADCONFIG the proper error to use? + } + break; + } default: child_ret = UNIFYFS_FAILURE; LOGERR("invalid collective request type %d", @@ -460,12 +491,56 @@ void collective_set_local_retval(coll_request* coll_req, int val) ubo->ret = val; break; } + case UNIFYFS_SERVER_BCAST_RPC_METAGET: { + metaget_all_bcast_out_t* mabo = (metaget_all_bcast_out_t*) output; + mabo->ret = val; + } default: LOGERR("invalid collective request type %d", coll_req->req_type); break; } } +/* TODO: We need a function that will combine the results from + * each process of a collective into a single array. + * This function will probably have to be structured like + * collective_set_local_retval() above. That is, how it handles + * the data argument will probably have to depend on the request + * type. */ +// NOTE: Trying to make this function work for any broadcast collective +// may not really be a good idea. It might be better to have a +// specific "collective_gather_resuts_XXXXX" functions for each +// request type that needs one. (Right now, only the metaget_all +// broadcast needs to return bulk data.) +void collective_gather_results(coll_request* coll_req, void* data) +{ + LOGDBG("BCAST_RPC: collective(%p) gather results", coll_req); + LOGERR("BCAST_RPC: %s NOT IMPLEMENTED YET!", __func__); + + void* output = coll_req->output; + if (NULL == output) { + return; + } + + switch (coll_req->req_type) { + case UNIFYFS_SERVER_BCAST_RPC_METAGET: { + metaget_all_bcast_out_t* mabo = (metaget_all_bcast_out_t*) output; + // TODO: Sanity check mabo and throw a huge error if it's NULL + + // Increment the number of files by the value passed in + unsigned int num_files = *(unsigned int*)data; + LOGDBG("BCAST_RPC (collective gather for " + "UNIFYFS_SERVER_BCAST_RPC_METAGET): Number of files: %d", + num_files); + mabo->num_files += num_files; + break; + } + default: + LOGERR("Invalid collective request type %d", coll_req->req_type); + break; + } +} + /* finish collective process by waiting for any child responses and * sending parent response (if applicable) */ int collective_finish(coll_request* coll_req) @@ -1350,3 +1425,161 @@ int unifyfs_invoke_broadcast_unlink(int gfid) } return ret; } + +/************************************************************************* + * Broadcast metaget all request + *************************************************************************/ + +/* metaget all broacast rpc handler */ +static void metaget_all_bcast_rpc(hg_handle_t handle) +{ + LOGDBG("BCAST_RPC: metaget_all handler"); + + /* assume we'll succeed */ + int ret = UNIFYFS_SUCCESS; + + coll_request* coll = NULL; + server_rpc_req_t* req = calloc(1, sizeof(*req)); + metaget_all_bcast_in_t* in = calloc(1, sizeof(*in)); + metaget_all_bcast_out_t* out = calloc(1, sizeof(*out)); + if ((NULL == req) || (NULL == in) || (NULL == out)) { + ret = ENOMEM; + } else { + /* get input params */ + LOGDBG("BCAST_RPC: getting input params"); + hg_return_t hret = margo_get_input(handle, in); + if (hret != HG_SUCCESS) { + LOGERR("margo_get_input() failed - %s", HG_Error_to_string(hret)); + ret = UNIFYFS_ERROR_MARGO; + } else { + LOGDBG("BCAST_RPC: creating collective"); + hg_id_t op_hgid = unifyfsd_rpc_context->rpcs.metaget_all_bcast_id; + server_rpc_e rpc = UNIFYFS_SERVER_BCAST_RPC_METAGET; + coll = collective_create(rpc, handle, op_hgid, (int)(in->root), + (void*)in, (void*)out, sizeof(*out), + HG_BULK_NULL, HG_BULK_NULL, NULL); + if (NULL == coll) { + ret = ENOMEM; + } else { + LOGDBG("BCAST_RPC: forwarding collective"); + ret = collective_forward(coll); + if (ret == UNIFYFS_SUCCESS) { + req->req_type = rpc; + req->coll = coll; + req->handle = handle; + req->input = (void*) in; + req->bulk_buf = NULL; + req->bulk_sz = 0; + ret = sm_submit_service_request(req); + if (ret != UNIFYFS_SUCCESS) { + LOGERR("failed to submit coll request to svcmgr"); + } + } + } + } + } + + if (ret != UNIFYFS_SUCCESS) { + /* report failure back to caller */ + metaget_all_bcast_out_t mgabo; + mgabo.ret = (int32_t)ret; + hg_return_t hret = margo_respond(handle, &mgabo); + if (hret != HG_SUCCESS) { + LOGERR("margo_respond() failed - %s", HG_Error_to_string(hret)); + } + + if (NULL != coll) { + collective_cleanup(coll); + } else { + margo_destroy(handle); + } + } + + LOGDBG("BCAST_RPC: exiting metaget_all handler"); + +} + +DEFINE_MARGO_RPC_HANDLER(metaget_all_bcast_rpc) + +/* Execute broadcast tree for a metaget_all operation*/ +int unifyfs_invoke_broadcast_metaget_all(void) +{ + int ret = UNIFYFS_SUCCESS; + LOGDBG("BCAST_RPC: starting metaget_all broadcast"); + + coll_request* coll = NULL; + metaget_all_bcast_in_t* in = calloc(1, sizeof(*in)); + metaget_all_bcast_out_t* out = calloc(1, sizeof(*out)); + if (NULL == in) { + ret = ENOMEM; + } else { + /* get input params */ + in->root = (int32_t) glb_pmi_rank; + + hg_id_t op_hgid = unifyfsd_rpc_context->rpcs.metaget_all_bcast_id; + server_rpc_e rpc = UNIFYFS_SERVER_BCAST_RPC_METAGET; + coll = collective_create(rpc, HG_HANDLE_NULL, op_hgid, + glb_pmi_rank, (void*)in, + (void*)out, sizeof(metaget_all_bcast_out_t), + HG_BULK_NULL, HG_BULK_NULL, NULL); + /* Note: We are passing in HG_HANDLE_NULL for the response handle + * because we are the root of the tree and there's nobody for us to + * respond to. */ + + if (NULL == coll) { + ret = ENOMEM; + } else { + ret = collective_forward(coll); + if (ret == UNIFYFS_SUCCESS) { + /* We don't want the progress rpc to clean up for us because + * we need to get the output data */ + coll->auto_cleanup = 0; + + ABT_mutex_lock(coll->child_resp_valid_mut); + /* Have to lock the mutex before the bcast_progress_rpc call + * so that we're sure to be waiting on the condition + * variable before the progress thread gets to the point + * where it signals the CV. */ + // TODO: Do we have any "smart" mutexes that will automatically + // unlock? Or is that just a C++ thing? + ret = invoke_bcast_progress_rpc(coll); + + if (UNIFYFS_SUCCESS == ret) { + // Wait for all the child responses to come back + ABT_cond_wait(coll->child_resp_valid, + coll->child_resp_valid_mut); + ABT_mutex_unlock(coll->child_resp_valid_mut); + + // Now we can get the data from the output struct + // TODO: implement this!!! + if (sizeof(metaget_all_bcast_out_t) != coll->output_sz) { + LOGERR("Unexpected size for collective output struct. " + "Expected %d but value was %d", + sizeof(metaget_all_bcast_out_t), + coll->output_sz); + } + // TODO: This is a hack! I just want to see if I can + // access the output struct... + metaget_all_bcast_out_t* results = calloc(1, sizeof(*out)); + memcpy(results, coll->output, sizeof(*results)); + LOGINFO("Total number of files returned from children: %d", + results->num_files); + LOGINFO("Return code from children: %d", results->ret); + free(results); + + // Done with the collective struct and can now clean + // everything up. + collective_cleanup(coll); + } else { + /* invoke_bcast_progress_rpc() returned an error. + * There's probably no recovery possible, so unlock the + * mutex and clean up the collective struct. */ + ABT_mutex_unlock(coll->child_resp_valid_mut); + collective_cleanup(coll); + } + } + } + } + return ret; +} + diff --git a/server/src/unifyfs_group_rpc.h b/server/src/unifyfs_group_rpc.h index 70fba7b18..d43e5dc2a 100644 --- a/server/src/unifyfs_group_rpc.h +++ b/server/src/unifyfs_group_rpc.h @@ -59,6 +59,10 @@ typedef struct coll_request { /* set collective output return value to local result value */ void collective_set_local_retval(coll_request* coll_req, int val); +/* Combine the results from each process of a collective into a + * single array. */ +void collective_gather_results(coll_request* coll_req, void* data); + /* finish collective process by waiting for any child responses and * sending parent response (if applicable) */ int collective_finish(coll_request* coll_req); @@ -144,5 +148,11 @@ int unifyfs_invoke_broadcast_truncate(int gfid, */ int unifyfs_invoke_broadcast_unlink(int gfid); +/** + * @brief Fetch metadata for all files on all servers + * + * @return success|failure + */ +int unifyfs_invoke_broadcast_metaget_all(void); #endif // UNIFYFS_GROUP_RPC_H diff --git a/server/src/unifyfs_request_manager.c b/server/src/unifyfs_request_manager.c index 708d2df73..cf5a43665 100644 --- a/server/src/unifyfs_request_manager.c +++ b/server/src/unifyfs_request_manager.c @@ -1554,9 +1554,19 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, { int ret = UNIFYFS_SUCCESS; + int bcast_ret = UNIFYFS_SUCCESS; int* gfid_list; int num_gfids; + /* Submit a broadcast metaget_all request and wait for it to complete. + * That way, our gfid list will contain all the files that UnifyFS knows + * about. + * Storing its return code in a separate variable. If we get an error + * from the broadcast, we'll continue to process the gfids request, + * and the client can print a warning about the results being + * incomplete. */ + bcast_ret = unifyfs_invoke_broadcast_metaget_all(); + ret = unifyfs_fops_get_gfids(&gfid_list, &num_gfids); if (ret != UNIFYFS_SUCCESS) { LOGERR("unifyfs_fops_get_gfids() failed"); @@ -1590,6 +1600,15 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, margo_bulk_free(out.bulk_gfids); free(gfid_list); + if (bcast_ret != UNIFYFS_SUCCESS) { + /* TODO: What do we do here?? We can log a warning of course, + * but we need to make sure the fact that the results are + * incomplete is conveyed back to the client. + */ + LOGWARN("unifyfs_invoke_broadcast_metaget_all() returned %d. " + "GFID list is likely incomplete.", bcast_ret); + } + return ret; diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index 001a163eb..99fdcc618 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -27,6 +27,10 @@ * Please read https://github.com/llnl/burstfs/LICENSE for full license text. */ +// TODO: any reason including these is a bad idea?? +#include "unifyfs_inode.h" +#include "unifyfs_inode_tree.h" + #include "unifyfs_global.h" #include "unifyfs_group_rpc.h" #include "unifyfs_p2p_rpc.h" @@ -1320,6 +1324,79 @@ static int process_unlink_bcast_rpc(server_rpc_req_t* req) return ret; } +static int process_metaget_bcast_rpc(server_rpc_req_t* req) +{ + int ret = UNIFYFS_SUCCESS; + + /* TODO: IMPLEMENT ME! */ + LOGERR("%s not yet implemented", __func__); + + /* Iterate through the global_inode_tree and copy all the file + * attr structs for the files this server owns */ + + // TODO: Should we move this block of code over to unifyfs_inode.c? + // If we did, we wouldn't need to include the *inode*.h headers + // in this file. + unsigned int num_files = 0; + int attr_list_size = 64; + unifyfs_file_attr_t* attr_list = + malloc(sizeof(unifyfs_file_attr_t) * attr_list_size); + if (!attr_list) { + return ENOMEM; + // TODO: Umm... if we return here, we never call + // invoke_bcast_progress_rpc(). Is that a problem? + } + + unifyfs_inode_tree_rdlock(global_inode_tree); + { + struct unifyfs_inode* node = + unifyfs_inode_tree_iter(global_inode_tree, NULL); + while (node) { + if (num_files == attr_list_size) { + attr_list_size *= 2; // Double the list size each time + attr_list = realloc(attr_list, + sizeof(unifyfs_file_attr_t)*attr_list_size); + if (!attr_list) { + unifyfs_inode_tree_unlock(global_inode_tree); + return ENOMEM; + // TODO: Umm... if we return here, we never call + // invoke_bcast_progress_rpc(). Is that a problem? + } + } + + /* We only want to copy file attrs that we're the owner of */ + int owner_rank = hash_gfid_to_server(node->attr.gfid); + if (owner_rank == glb_pmi_rank) { + memcpy(&attr_list[num_files++], &node->attr, + sizeof(unifyfs_file_attr_t)); + } + node = unifyfs_inode_tree_iter(global_inode_tree, node); + } + } + unifyfs_inode_tree_unlock(global_inode_tree); + + + /* Now, how do we send this array back to the caller?!? */ + + + /* As an experiment, try setting an error code as the return + * value for the collective. Want to see how it's actually + * handled when it gets back to the caller...*/ + collective_set_local_retval(req->coll, UNIFYFS_ERROR_NYI); + + /* Another experiment: this function implements a SUM + * operation on the num_files value in the output struct. */ + collective_gather_results(req->coll, &num_files); + + + /* create a ULT to finish broadcast operation */ + ret = invoke_bcast_progress_rpc(req->coll); + return ret; + + /* TODO: How do I actually return bulk data to the caller?!? */ + +} + static int process_service_requests(void) { /* assume we'll succeed */ @@ -1401,6 +1478,9 @@ static int process_service_requests(void) case UNIFYFS_SERVER_BCAST_RPC_UNLINK: rret = process_unlink_bcast_rpc(req); break; + case UNIFYFS_SERVER_BCAST_RPC_METAGET: + rret = process_metaget_bcast_rpc(req); + break; default: LOGERR("unsupported server rpc request type %d", req->req_type); rret = UNIFYFS_ERROR_NYI; From b053fbefe299bfda22eef7d5c299e8ed87c83b62 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Fri, 10 Mar 2023 16:16:01 -0500 Subject: [PATCH 03/46] More work on the metaget_all broadcast RPC Continuing the work on the metaget_all broadcast RPC. It's now functional, but there's still a handful of "ToDo" comments that need to be addressed. --- common/src/unifyfs_server_rpcs.h | 10 +- server/src/unifyfs_group_rpc.c | 456 +++++++++++++++++++++------ server/src/unifyfs_group_rpc.h | 13 +- server/src/unifyfs_request_manager.c | 56 +++- server/src/unifyfs_service_manager.c | 114 ++++++- 5 files changed, 504 insertions(+), 145 deletions(-) diff --git a/common/src/unifyfs_server_rpcs.h b/common/src/unifyfs_server_rpcs.h index a7a66b057..485721e74 100644 --- a/common/src/unifyfs_server_rpcs.h +++ b/common/src/unifyfs_server_rpcs.h @@ -251,10 +251,14 @@ MERCURY_GEN_PROC(metaget_all_bcast_in_t, MERCURY_GEN_PROC(metaget_all_bcast_out_t, ((int32_t)(num_files)) ((hg_bulk_t)(file_meta)) + ((hg_string_t)(filenames)) ((int32_t)(ret))) -/* TODO: the bulk data is an array of file metadata structs from the replying - * server(s). Do we need to include a rank or pid or some other means - * of identifying the particular server? */ +/* file_meta will be an array of unifyfs_file_attr_t structs. Since + * these structs store the filename in separately allocated memory, we'll + * have to send all the filenames separately from the array of structs. + * That's what filenames is for: we'll concatenate all the filenames into + * a single hg_string_t, send that and then recreate correct + * unifyfs_file_attr_t structs at the receiving end. */ DECLARE_MARGO_RPC_HANDLER(metaget_all_bcast_rpc) #ifdef __cplusplus diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index 68d4b3e94..155d5846e 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -66,6 +66,175 @@ static int forward_child_request(void* input_ptr, return ret; } +/* Helper function for the UNIFYFS_SERVER_BCAST_RPC_METAGET case in + * get_child_response(). Handles merging the output from a child + * with that from the parent. */ +// TODO: where should this function live permanently? +static int merge_metaget_all_bcast_outputs( + metaget_all_bcast_out_t* p_out, + metaget_all_bcast_out_t* c_out, + hg_handle_t p_hdl, + hg_handle_t c_hdl) +{ + int ret = UNIFYFS_SUCCESS; + hg_return_t hret = HG_SUCCESS; + hg_return_t bulk_create_hret = HG_SUCCESS; + + int32_t parent_num_files = p_out->num_files; + int32_t child_num_files = c_out->num_files; + + // Pull the bulk data (the list of file_attr structs) over + hg_bulk_t local_bulk; + hg_size_t child_buf_size = child_num_files * sizeof(unifyfs_file_attr_t); + unifyfs_file_attr_t* child_attr_list = + calloc(child_num_files, sizeof(unifyfs_file_attr_t)); + // TODO: error checking!! + + // Figure out some margo-specific info that we need for the transfer + const struct hg_info* info = margo_get_info(c_hdl); + hg_addr_t server_addr = info->addr; + + /****************************************************************/ + // TODO: What is the correct mid to use here? The one returned by + // margo_ht_handle_get_instance(c_hdl) gives us an HG_INVALID_ARG + // error when we call margo_bulk_create()... + + // address of the bulk data on the server side + //margo_instance_id mid = margo_hg_handle_get_instance(c_hdl); + margo_instance_id mid = unifyfsd_rpc_context->svr_mid; + /****************************************************************/ + + + // If the number of child files is 0, don't bother with the bulk + // transfer - it will just fail with HG_INVALID_ARG + if (child_num_files) { + hg_size_t segment_sizes[1] = { child_buf_size }; + void* segment_ptrs[1] = { (void*)child_attr_list }; + bulk_create_hret = + margo_bulk_create(mid, 1, segment_ptrs, segment_sizes, + HG_BULK_WRITE_ONLY, &local_bulk); + if (HG_SUCCESS != bulk_create_hret) { + LOGERR("margo_bulk_create() failed - %s", + HG_Error_to_string(bulk_create_hret)); + return UNIFYFS_ERROR_MARGO; + // TODO: Umm... is returning here a problem?? + } + + hret = margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, + c_out->file_meta, 0, local_bulk, 0, + child_buf_size); + if (HG_SUCCESS != hret) { + LOGERR("margo_bulk_transfer() failed - %s", + HG_Error_to_string(hret)); + return UNIFYFS_ERROR_MARGO; + // TODO: Umm... is returning here a problem?? + } + + margo_bulk_free(local_bulk); + } + + // OK, file attr's from the child (assuming there were any files) are now + // stored in child_attr_list + + // Now get the bulk data from the parent (assuming there is any) + unifyfs_file_attr_t* parent_attr_list = + calloc(parent_num_files + child_num_files, + sizeof(unifyfs_file_attr_t)); + // Note: deliberatly allocating enough space for the child file attrs, + // since we're going to be copying them in anyway. + // TODO: error checking!! + + if (p_out->file_meta) { + hg_size_t parent_buf_size = + parent_num_files * sizeof(unifyfs_file_attr_t); + + // Figure out some margo-specific info that we need for the transfer + info = margo_get_info(p_hdl); + server_addr = info->addr; + // address of the bulk data on the server side + mid = margo_hg_handle_get_instance(p_hdl); + + hg_size_t segment_sizes[1] = { parent_buf_size }; + void* segment_ptrs[1] = { (void*)parent_attr_list }; + bulk_create_hret = + margo_bulk_create(mid, 1, segment_ptrs, segment_sizes, + HG_BULK_WRITE_ONLY, &local_bulk); + if (HG_SUCCESS != bulk_create_hret) { + LOGERR("margo_bulk_create() failed - %s", + HG_Error_to_string(bulk_create_hret)); + return UNIFYFS_ERROR_MARGO; + // TODO: Umm... is returning here a problem?? + } + + hret = + margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, + p_out->file_meta, 0, local_bulk, 0, + parent_buf_size); + if (HG_SUCCESS != hret) { + LOGERR("margo_bulk_transfer() failed - %s", + HG_Error_to_string(hret)); + return UNIFYFS_ERROR_MARGO; + // TODO: Umm... is returning here a problem?? + } + margo_bulk_free(local_bulk); + + // Since we're going to be making a new one below, delete + // the parent's bulk object, too. + margo_bulk_free(p_out->file_meta); + } + + /* Now we need to append the child file attrs to the parent file attrs, + * create a new hg_bulk and replace the old parent bulk with the new one. + * First, though, append the child filenames string to the parent's, and + * update the string offsets stored in the child file attrs' filename + * members. + * Lastly, update the num_files value */ + + uint64_t parent_filenames_len = p_out->filenames?strlen(p_out->filenames):0; + uint64_t child_filenames_len = c_out->filenames?strlen(c_out->filenames):0; + + char* new_filenames = calloc(parent_filenames_len + child_filenames_len +1, + sizeof(char)); + // TODO: check for errors! + if (p_out->filenames) { + strcpy(new_filenames, p_out->filenames); + } + if (c_out->filenames) { + strcat(new_filenames, c_out->filenames); + } + free(p_out->filenames); + p_out->filenames = new_filenames; + + // Now update all the offset values in the child_attr_list + for (unsigned int i = 0; i < child_num_files; i++) { + uint64_t new_offset = (uint64_t)child_attr_list[i].filename + + parent_filenames_len; + child_attr_list[i].filename = (char*)new_offset; + } + + // Now we can append the child list to the paren list + memcpy(&parent_attr_list[parent_num_files], child_attr_list, + child_buf_size); + + p_out->num_files += child_num_files; + + size_t parent_buf_size = + (parent_num_files + child_num_files) * sizeof(unifyfs_file_attr_t); + hg_size_t segment_sizes[1] = { parent_buf_size }; + void* segment_ptrs[1] = { (void*)parent_attr_list }; + hret = margo_bulk_create(unifyfsd_rpc_context->svr_mid, 1, + segment_ptrs, segment_sizes, + HG_BULK_READ_ONLY, &p_out->file_meta); + if (hret != HG_SUCCESS) { + LOGERR("margo_bulk_create() failed - %s", HG_Error_to_string(hret)); + return UNIFYFS_ERROR_MARGO; + // TODO: Umm... is returning here a problem?? + } + + return ret; + +} + static int get_child_response(coll_request* coll_req, hg_handle_t chdl) { @@ -155,7 +324,10 @@ static int get_child_response(coll_request* coll_req, mabo->ret = child_ret; } if ((NULL != cmabo) && (NULL != mabo)) { - mabo->num_files += cmabo->num_files; + merge_metaget_all_bcast_outputs( + mabo, cmabo, coll_req->progress_hdl, chdl); + // TODO: I'm not sure coll_req->progress_hdl is the + // correct thing to use here. } else { /* One or both of the output structures is missing. * (This shouldn't ever happen.) */ @@ -501,46 +673,6 @@ void collective_set_local_retval(coll_request* coll_req, int val) } } -/* TODO: We need a function that will combine the results from - * each process of a collective into a single array. - * This function will probably have to be structured like - * collective_set_local_retval() above. That is, how it handles - * the data argument will probably have to depend on the request - * type. */ -// NOTE: Trying to make this function work for any broadcast collective -// may not really be a good idea. It might be better to have a -// specific "collective_gather_resuts_XXXXX" functions for each -// request type that needs one. (Right now, only the metaget_all -// broadcast needs to return bulk data.) -void collective_gather_results(coll_request* coll_req, void* data) -{ - LOGDBG("BCAST_RPC: collective(%p) gather results", coll_req); - LOGERR("BCAST_RPC: %s NOT IMPLEMENTED YET!", __func__); - - void* output = coll_req->output; - if (NULL == output) { - return; - } - - switch (coll_req->req_type) { - case UNIFYFS_SERVER_BCAST_RPC_METAGET: { - metaget_all_bcast_out_t* mabo = (metaget_all_bcast_out_t*) output; - // TODO: Sanity check mabo and throw a huge error if it's NULL - - // Increment the number of files by the value passed in - unsigned int num_files = *(unsigned int*)data; - LOGDBG("BCAST_RPC (collective gather for " - "UNIFYFS_SERVER_BCAST_RPC_METAGET): Number of files: %d", - num_files); - mabo->num_files += num_files; - break; - } - default: - LOGERR("Invalid collective request type %d", coll_req->req_type); - break; - } -} - /* finish collective process by waiting for any child responses and * sending parent response (if applicable) */ int collective_finish(coll_request* coll_req) @@ -1502,84 +1634,198 @@ static void metaget_all_bcast_rpc(hg_handle_t handle) DEFINE_MARGO_RPC_HANDLER(metaget_all_bcast_rpc) /* Execute broadcast tree for a metaget_all operation*/ -int unifyfs_invoke_broadcast_metaget_all(void) +/* Upon success, file_attrs will hold data that has been allocated with + * malloc() and must be freed by the caller with free(). In the event of an + * error, the caller must *NOT* free the pointer. */ +int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, + int* num_file_attrs) { int ret = UNIFYFS_SUCCESS; + LOGDBG("BCAST_RPC: starting metaget_all broadcast"); coll_request* coll = NULL; + unifyfs_file_attr_t* attr_list = NULL; metaget_all_bcast_in_t* in = calloc(1, sizeof(*in)); metaget_all_bcast_out_t* out = calloc(1, sizeof(*out)); - if (NULL == in) { + if ((NULL == in) || (NULL == out)) { ret = ENOMEM; - } else { - /* get input params */ - in->root = (int32_t) glb_pmi_rank; + goto Exit; + } - hg_id_t op_hgid = unifyfsd_rpc_context->rpcs.metaget_all_bcast_id; - server_rpc_e rpc = UNIFYFS_SERVER_BCAST_RPC_METAGET; - coll = collective_create(rpc, HG_HANDLE_NULL, op_hgid, - glb_pmi_rank, (void*)in, - (void*)out, sizeof(metaget_all_bcast_out_t), - HG_BULK_NULL, HG_BULK_NULL, NULL); - /* Note: We are passing in HG_HANDLE_NULL for the response handle - * because we are the root of the tree and there's nobody for us to - * respond to. */ + /* get input params */ + in->root = (int32_t) glb_pmi_rank; - if (NULL == coll) { - ret = ENOMEM; + hg_id_t op_hgid = unifyfsd_rpc_context->rpcs.metaget_all_bcast_id; + server_rpc_e rpc = UNIFYFS_SERVER_BCAST_RPC_METAGET; + coll = collective_create(rpc, HG_HANDLE_NULL, op_hgid, + glb_pmi_rank, (void*)in, + (void*)out, sizeof(metaget_all_bcast_out_t), + HG_BULK_NULL, HG_BULK_NULL, NULL); + /* Note: We are passing in HG_HANDLE_NULL for the response handle + * because we are the root of the tree and there's nobody for us to + * respond to. */ + + if (NULL == coll) { + ret = ENOMEM; + goto Exit; + } + + ret = collective_forward(coll); + if (UNIFYFS_SUCCESS != ret) { + goto Exit; + } + + /* We don't want the progress rpc to clean up for us because + * we need to get the output data */ + coll->auto_cleanup = 0; + + ABT_mutex_lock(coll->child_resp_valid_mut); + /* Have to lock the mutex before the bcast_progress_rpc call + * so that we're sure to be waiting on the condition + * variable before the progress thread gets to the point + * where it signals the CV. */ + + ret = invoke_bcast_progress_rpc(coll); + if (UNIFYFS_SUCCESS != ret) { + LOGERR("invoke_bcast_progress_rpc() failed with error %d", ret); + goto Exit; + } + + // Wait for all the child responses to come back + ABT_cond_wait(coll->child_resp_valid, + coll->child_resp_valid_mut); + ABT_mutex_unlock(coll->child_resp_valid_mut); + // Now we can get the data from the output struct + + if (sizeof(metaget_all_bcast_out_t) != coll->output_sz) { + LOGERR("Unexpected size for collective output struct. " + "Expected %d but value was %d", + sizeof(metaget_all_bcast_out_t), + coll->output_sz); + } + + // Pull the bulk data (the list of file_attr structs) over + metaget_all_bcast_out_t* results = (metaget_all_bcast_out_t*)coll->output; + hg_bulk_t local_bulk; + hg_size_t buf_size = results->num_files * sizeof(unifyfs_file_attr_t); + attr_list = calloc(results->num_files, sizeof(unifyfs_file_attr_t)); + if (NULL == attr_list) { + ret = ENOMEM; + goto Exit; + } + + // Figure out some margo-specific info that we need for the transfer + const struct hg_info* info = margo_get_info(coll->progress_hdl); + hg_addr_t server_addr = info->addr; + // address of the bulk data on the server side + margo_instance_id mid = margo_hg_handle_get_instance(coll->progress_hdl); + + hg_return_t bulk_create_hret = + margo_bulk_create(mid, 1, (void**)&attr_list, &buf_size, + HG_BULK_WRITE_ONLY, &local_bulk); + if (HG_SUCCESS != bulk_create_hret) { + LOGERR("margo_bulk_create() failed - %s", + HG_Error_to_string(bulk_create_hret)); + ret = UNIFYFS_ERROR_MARGO; + goto Exit; + } + + hg_return_t bulk_transfer_hret = + margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, results->file_meta, + 0, local_bulk, 0, buf_size); + if (HG_SUCCESS != bulk_transfer_hret) { + LOGERR("margo_bulk_transfer() failed - %s", + HG_Error_to_string(bulk_transfer_hret)); + ret = UNIFYFS_ERROR_MARGO; + goto Exit; + } + + // At this point, attr_list should have the file_attr_t + // structs from all the other servers. However, we still + // need to assign the filename values for each struct. + + for (unsigned int i = 0; i < results->num_files; i++) { + // Remember that we abused the filename pointer to + // actually hold an offset into the filenames string + // that we sent separately + uint64_t start_offset = (uint64_t)attr_list[i].filename; + uint64_t name_len; + if (i < (results->num_files-1)) { + name_len = ((uint64_t)attr_list[i+1].filename) - start_offset; } else { - ret = collective_forward(coll); - if (ret == UNIFYFS_SUCCESS) { - /* We don't want the progress rpc to clean up for us because - * we need to get the output data */ - coll->auto_cleanup = 0; - - ABT_mutex_lock(coll->child_resp_valid_mut); - /* Have to lock the mutex before the bcast_progress_rpc call - * so that we're sure to be waiting on the condition - * variable before the progress thread gets to the point - * where it signals the CV. */ - // TODO: Do we have any "smart" mutexes that will automatically - // unlock? Or is that just a C++ thing? - ret = invoke_bcast_progress_rpc(coll); + // length is calculated differently for the last file in file_attrs + name_len = strlen(&results->filenames[start_offset]); + } + attr_list[i].filename = + strndup(&results->filenames[start_offset], name_len); + if (NULL == attr_list[i].filename) { + ret = ENOMEM; + LOGERR("strdup() failed processing filename"); + // If we're actually getting ENOMEM from strdup(), the error log + // is probably also going to fail... + goto Exit; + /* Technically, attr_list probably contains valid data and we + * could try to return a partial list. If we did, though, then + * we'd have ensure we checked for NULL before dereferencing the + * filename pointer *EVERYWHERE* else. Additionally, if we've + * really run out of memory, then other things are probably going + * to start failing pretty quickly. In short, trying to salvage + * this situation isn't worth the hassle. */ + } + } - if (UNIFYFS_SUCCESS == ret) { - // Wait for all the child responses to come back - ABT_cond_wait(coll->child_resp_valid, - coll->child_resp_valid_mut); - ABT_mutex_unlock(coll->child_resp_valid_mut); - - // Now we can get the data from the output struct - // TODO: implement this!!! - if (sizeof(metaget_all_bcast_out_t) != coll->output_sz) { - LOGERR("Unexpected size for collective output struct. " - "Expected %d but value was %d", - sizeof(metaget_all_bcast_out_t), - coll->output_sz); - } - // TODO: This is a hack! I just want to see if I can - // access the output struct... - metaget_all_bcast_out_t* results = calloc(1, sizeof(*out)); - memcpy(results, coll->output, sizeof(*results)); - LOGINFO("Total number of files returned from children: %d", - results->num_files); - LOGINFO("Return code from children: %d", results->ret); - free(results); - - // Done with the collective struct and can now clean - // everything up. - collective_cleanup(coll); - } else { - /* invoke_bcast_progress_rpc() returned an error. - * There's probably no recovery possible, so unlock the - * mutex and clean up the collective struct. */ - ABT_mutex_unlock(coll->child_resp_valid_mut); - collective_cleanup(coll); - } + LOGINFO("Total number of files returned from children: %d", + results->num_files); + LOGINFO("Return code from children: %d", results->ret); + + // Make the results visible to the caller + *file_attrs = attr_list; + *num_file_attrs = results->num_files; + +Exit: + // If we hit an error somewhere, then there's a bunch of clean-up + // that we need to do... + if (UNIFYFS_SUCCESS != ret) { + if (HG_SUCCESS == bulk_transfer_hret) { + // We made it past the bulk transfer before failing, which means + // we probably called strdup() on a bunch of filename strings. + // Have to free all of those... + for (unsigned int i = 0; i < results->num_files; i++) { + free(attr_list[i].filename); } } + // If there's been an error, we won't be returning the attr_list + // pointer to the caller, so make sure it's freed. + free(attr_list); + + if (coll) { + // If we have a collective struct, then there's some more + // clean-up to do + + // Depending on where any errors occurred above, the mutex + // might have been left in a locked state. Argobots doesn't + // provide a way to test this, so we'll do a trylock() followed + // by an unlock to ensure it's unlocked. + ABT_mutex_trylock(coll->child_resp_valid_mut); + ABT_mutex_unlock(coll->child_resp_valid_mut); + + collective_cleanup(coll); + } else { + // If we never got as far as creating the collective, then just + // free the input and output structs. (These were all initialized + // to NULL, so it's safe to call free() on them even if we never + // actually got around to allocating them.) + free(in); + free(out); + } } + + if (HG_SUCCESS != bulk_create_hret) { + // If we successfully created the bulk, then we need to free it + // (regardless of the overall success of the function). + margo_bulk_free(local_bulk); + } + return ret; } - diff --git a/server/src/unifyfs_group_rpc.h b/server/src/unifyfs_group_rpc.h index d43e5dc2a..ec6976ebe 100644 --- a/server/src/unifyfs_group_rpc.h +++ b/server/src/unifyfs_group_rpc.h @@ -59,10 +59,6 @@ typedef struct coll_request { /* set collective output return value to local result value */ void collective_set_local_retval(coll_request* coll_req, int val); -/* Combine the results from each process of a collective into a - * single array. */ -void collective_gather_results(coll_request* coll_req, void* data); - /* finish collective process by waiting for any child responses and * sending parent response (if applicable) */ int collective_finish(coll_request* coll_req); @@ -151,8 +147,15 @@ int unifyfs_invoke_broadcast_unlink(int gfid); /** * @brief Fetch metadata for all files on all servers * + * @param file_attrs list of file metadata + * @param num_file_attrs number of files in the list + * * @return success|failure */ -int unifyfs_invoke_broadcast_metaget_all(void); +/* Upon success, file_attrs will hold data that has been allocated with + * malloc() and must be freed by the caller with free(). In the event of an + * error, the caller must *NOT* free the pointer. */ +int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, + int* num_file_attrs); #endif // UNIFYFS_GROUP_RPC_H diff --git a/server/src/unifyfs_request_manager.c b/server/src/unifyfs_request_manager.c index cf5a43665..ce9a5473c 100644 --- a/server/src/unifyfs_request_manager.c +++ b/server/src/unifyfs_request_manager.c @@ -1556,20 +1556,46 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, int ret = UNIFYFS_SUCCESS; int bcast_ret = UNIFYFS_SUCCESS; int* gfid_list; + unifyfs_file_attr_t* remote_file_attrs; int num_gfids; + int num_file_attrs; - /* Submit a broadcast metaget_all request and wait for it to complete. - * That way, our gfid list will contain all the files that UnifyFS knows - * about. - * Storing its return code in a separate variable. If we get an error - * from the broadcast, we'll continue to process the gfids request, - * and the client can print a warning about the results being - * incomplete. */ - bcast_ret = unifyfs_invoke_broadcast_metaget_all(); + /* Submit a broadcast metaget_all request and wait for it to complete. */ + // TODO: This is actually horribly wasteful: we're fetching all the + // metadata for all files, but then just save the gfids and issue a + // separate request for each gfid. + // Now that we have all the metadata from remote servers, we + // need to completely re-work how the the unifyfs-ls util works. + // TODO: Also, it would be nice if could let the broadcast complete in the + // backgound, but it's probably not a big deal. + + bcast_ret = unifyfs_invoke_broadcast_metaget_all(&remote_file_attrs, + &num_file_attrs); + if (UNIFYFS_SUCCESS != bcast_ret) { + LOGERR("unifyfs_invoke_broadcast_metaget_all() failed"); + // make sure we have a sane value even if the broadcast fails + num_file_attrs = 0; + } ret = unifyfs_fops_get_gfids(&gfid_list, &num_gfids); - if (ret != UNIFYFS_SUCCESS) { + if (UNIFYFS_SUCCESS != ret) { LOGERR("unifyfs_fops_get_gfids() failed"); + num_gfids = 0; + } + + // Package all the gfids up into one list + int* new_gfid_list = calloc(num_gfids + num_file_attrs, sizeof(int)); + // TODO: error checking! + memcpy(new_gfid_list, gfid_list, num_gfids*sizeof(int)); + for (unsigned int i = 0; i < num_file_attrs; i++) { + new_gfid_list[num_gfids+i] = remote_file_attrs[i].gfid; + } + + free(gfid_list); + + if (UNIFYFS_SUCCESS == bcast_ret) { + // Only free the pointer if the broadcast was successful + free(remote_file_attrs); } /* send rpc response */ @@ -1577,19 +1603,19 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, unifyfs_get_gfids_out_t out; /* initialize bulk handle for the gfid_list */ - hg_size_t segment_sizes[1] = { num_gfids * sizeof(int) }; - void* segment_ptrs[1] = { (void*)gfid_list }; + hg_size_t segment_sizes[1] = { (num_gfids + num_file_attrs) * sizeof(int) }; + void* segment_ptrs[1] = { (void*)new_gfid_list }; hg_return_t hret = margo_bulk_create(unifyfsd_rpc_context->shm_mid, 1, segment_ptrs, segment_sizes, HG_BULK_READ_ONLY, &out.bulk_gfids); /* Note: unifyfsd_rpc_context defined in margo_server.h */ if (hret != HG_SUCCESS) { - free(gfid_list); + free(new_gfid_list); return UNIFYFS_ERROR_MARGO; } out.ret = (int32_t) ret; - out.num_gfids = num_gfids; + out.num_gfids = num_gfids + num_file_attrs; hret = margo_respond(req->handle, &out); if (hret != HG_SUCCESS) { LOGERR("margo_respond() failed"); @@ -1598,7 +1624,7 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, /* cleanup req */ margo_destroy(req->handle); margo_bulk_free(out.bulk_gfids); - free(gfid_list); + free(new_gfid_list); if (bcast_ret != UNIFYFS_SUCCESS) { /* TODO: What do we do here?? We can log a warning of course, @@ -1610,8 +1636,6 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, } return ret; - - } /* iterate over list of chunk reads and send responses */ diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index 99fdcc618..5cf760a7a 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -1327,8 +1327,8 @@ static int process_unlink_bcast_rpc(server_rpc_req_t* req) static int process_metaget_bcast_rpc(server_rpc_req_t* req) { int ret = UNIFYFS_SUCCESS; - - /* TODO: IMPLEMENT ME! */ + /* TODO: Error handling is incomplete and is likely to return from + * the function without freeing allocated memory!! */ LOGERR("%s not yet implemented", __func__); /* Iterate through the global_inode_tree and copy all the file @@ -1337,7 +1337,22 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) // TODO: Should we move this block of code over to unifyfs_inode.c? // If we did, we wouldn't need to include the *inode*.h headers // in this file. + + /* The file names in the unifyfs_file_attr_t have to pointers to separately + * allocated memory, and thus have to be handled specially. We'll copy + * the filenames into a separate char[] that we append to the array of + * unifyfs_file_attr_t structs. We use this variable to keep track of + * how big that buffer needs to be. */ + uint64_t total_name_len = 0; + // Note: 64 bits because it's going to get cast to a char* and must + // therefore be the same size as a pointer. + char* concatenated_names = NULL; + unsigned int concatenated_names_size = 4 * 1024 * 1024; + // Pick the initial size such that most of the time we'll never + // need to re-allocate it. + unsigned int num_files = 0; + int attr_list_size = 64; unifyfs_file_attr_t* attr_list = malloc(sizeof(unifyfs_file_attr_t) * attr_list_size); @@ -1347,6 +1362,13 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) // invoke_bcast_progress_rpc(). Is that a problem? } + concatenated_names = calloc(concatenated_names_size, sizeof(char)); + if (!concatenated_names) { + return ENOMEM; + // TODO: Umm... if we return here, we never call + // invoke_bcast_progress_rpc(). Is that a problem? + } + unifyfs_inode_tree_rdlock(global_inode_tree); { struct unifyfs_inode* node = @@ -1367,34 +1389,94 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) /* We only want to copy file attrs that we're the owner of */ int owner_rank = hash_gfid_to_server(node->attr.gfid); if (owner_rank == glb_pmi_rank) { - memcpy(&attr_list[num_files++], &node->attr, + memcpy(&attr_list[num_files], &node->attr, sizeof(unifyfs_file_attr_t)); + + /* filename is a pointer. Since sending pointers over the + * network is useless, we're going to abuse this value by + * using it to store the offset into the separate char array + * that will hold the filenames. + * We only need the offset of the START of the filename. The + * end of the filename is assumed to be 1 character before the + * start of the next filename (or the end of the string if + * this is the last file). */ + attr_list[num_files].filename = (char*)total_name_len; + total_name_len += strlen(node->attr.filename); + + if (concatenated_names_size <= total_name_len) { + // Need more memory for our concatenated file names + concatenated_names_size *= 2; // Double the size + concatenated_names = + realloc(concatenated_names, + sizeof(char)*concatenated_names_size); + if (!concatenated_names) { + unifyfs_inode_tree_unlock(global_inode_tree); + return ENOMEM; + // TODO: Umm... if we return here, we never call + // invoke_bcast_progress_rpc(). Is that a problem? + } + } + + strcat(concatenated_names, node->attr.filename); + num_files++; } node = unifyfs_inode_tree_iter(global_inode_tree, node); } } unifyfs_inode_tree_unlock(global_inode_tree); + coll_request* coll = (coll_request*)req->coll; + // Do a couple of sanity checks + if (UNIFYFS_SERVER_BCAST_RPC_METAGET != coll->req_type) { + LOGERR("invalid collective request type %d", + coll->req_type); + return UNIFYFS_ERROR_MARGO; + // TODO: Umm... is returning here a problem?? + } + if (sizeof(metaget_all_bcast_out_t) != coll->output_sz) { + LOGERR("Unexpected size for collective output struct. " + "Expected %d but value was %d", + sizeof(metaget_all_bcast_out_t), + coll->output_sz); + return UNIFYFS_ERROR_MARGO; + // TODO: Umm... is returning here a problem?? + } - /* Now, how do we send this array back to the caller?!? */ - - - /* As an experiment, try setting an error code as the return - * value for the collective. Want to see how it's actually - * handled when it gets back to the caller...*/ - collective_set_local_retval(req->coll, UNIFYFS_ERROR_NYI); + // If there are any files, then setup the bulk transfer + if (num_files) { + hg_size_t buf_size = num_files * sizeof(unifyfs_file_attr_t); + hg_bulk_t file_attrs_bulk; + hg_return_t hret = + margo_bulk_create(unifyfsd_rpc_context->svr_mid, 1, + (void**)&attr_list, &buf_size, + HG_BULK_READ_ONLY, &file_attrs_bulk); + if (hret != HG_SUCCESS) { + LOGERR("margo_bulk_create() failed - %s", HG_Error_to_string(hret)); + return UNIFYFS_ERROR_MARGO; + // TODO: Umm... is returning here a problem?? + } - /* Another experiment: this function implements a SUM - * operation on the num_files value in the output struct. */ - collective_gather_results(req->coll, &num_files); + /* set the output params */ + metaget_all_bcast_out_t* mabo = (metaget_all_bcast_out_t*)coll->output; + mabo->file_meta = file_attrs_bulk; + mabo->num_files = num_files; + mabo->filenames = concatenated_names; + } else { + /* There's no files to transfer - set output params appropriately */ + metaget_all_bcast_out_t* mabo = (metaget_all_bcast_out_t*)coll->output; + mabo->file_meta = HG_BULK_NULL; + mabo->num_files = 0; + mabo->filenames = NULL; + } + // TODO: Does it make sense to call + // collective_set_local_retval(req->coll, ret) ?? + // If so, we should probably do that here. /* create a ULT to finish broadcast operation */ ret = invoke_bcast_progress_rpc(req->coll); - return ret; - - /* TODO: How do I actually return bulk data to the caller?!? */ + return ret; } static int process_service_requests(void) From 9fbb970e08b757228bab8fd29b40e4a57d038b64 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Tue, 14 Mar 2023 16:20:13 -0400 Subject: [PATCH 04/46] Clean up error handling for process_metaget_bcast_rpc() Fix up the error handling and remove TODO comments from process_metaget_bcast_rpc(). --- server/src/unifyfs_service_manager.c | 45 ++++++++++++---------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index 5cf760a7a..9eab94b00 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -1326,11 +1326,6 @@ static int process_unlink_bcast_rpc(server_rpc_req_t* req) static int process_metaget_bcast_rpc(server_rpc_req_t* req) { - int ret = UNIFYFS_SUCCESS; - /* TODO: Error handling is incomplete and is likely to return from - * the function without freeing allocated memory!! */ - LOGERR("%s not yet implemented", __func__); - /* Iterate through the global_inode_tree and copy all the file * attr structs for the files this server owns */ @@ -1340,11 +1335,12 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) /* The file names in the unifyfs_file_attr_t have to pointers to separately * allocated memory, and thus have to be handled specially. We'll copy - * the filenames into a separate char[] that we append to the array of - * unifyfs_file_attr_t structs. We use this variable to keep track of - * how big that buffer needs to be. */ + * the filenames into a separate char[] that will be sent as an hg_string_t + * seprate from the bulk transfer of the unifyfs_file_attr_t structs. We + * use this variable to keep track of how big that buffer needs to be. + */ uint64_t total_name_len = 0; - // Note: 64 bits because it's going to get cast to a char* and must + // Note: It's 64 bits because it's going to get cast to a char* and must // therefore be the same size as a pointer. char* concatenated_names = NULL; unsigned int concatenated_names_size = 4 * 1024 * 1024; @@ -1358,15 +1354,12 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) malloc(sizeof(unifyfs_file_attr_t) * attr_list_size); if (!attr_list) { return ENOMEM; - // TODO: Umm... if we return here, we never call - // invoke_bcast_progress_rpc(). Is that a problem? } concatenated_names = calloc(concatenated_names_size, sizeof(char)); if (!concatenated_names) { + free(attr_list); return ENOMEM; - // TODO: Umm... if we return here, we never call - // invoke_bcast_progress_rpc(). Is that a problem? } unifyfs_inode_tree_rdlock(global_inode_tree); @@ -1380,9 +1373,9 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) sizeof(unifyfs_file_attr_t)*attr_list_size); if (!attr_list) { unifyfs_inode_tree_unlock(global_inode_tree); + free(attr_list); + free(concatenated_names); return ENOMEM; - // TODO: Umm... if we return here, we never call - // invoke_bcast_progress_rpc(). Is that a problem? } } @@ -1411,9 +1404,9 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) sizeof(char)*concatenated_names_size); if (!concatenated_names) { unifyfs_inode_tree_unlock(global_inode_tree); + free(attr_list); + free(concatenated_names); return ENOMEM; - // TODO: Umm... if we return here, we never call - // invoke_bcast_progress_rpc(). Is that a problem? } } @@ -1430,16 +1423,18 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) if (UNIFYFS_SERVER_BCAST_RPC_METAGET != coll->req_type) { LOGERR("invalid collective request type %d", coll->req_type); + free(attr_list); + free(concatenated_names); return UNIFYFS_ERROR_MARGO; - // TODO: Umm... is returning here a problem?? } if (sizeof(metaget_all_bcast_out_t) != coll->output_sz) { LOGERR("Unexpected size for collective output struct. " "Expected %d but value was %d", sizeof(metaget_all_bcast_out_t), coll->output_sz); + free(attr_list); + free(concatenated_names); return UNIFYFS_ERROR_MARGO; - // TODO: Umm... is returning here a problem?? } // If there are any files, then setup the bulk transfer @@ -1452,8 +1447,10 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) HG_BULK_READ_ONLY, &file_attrs_bulk); if (hret != HG_SUCCESS) { LOGERR("margo_bulk_create() failed - %s", HG_Error_to_string(hret)); + free(attr_list); + free(concatenated_names); + collective_set_local_retval(req->coll, UNIFYFS_ERROR_MARGO); return UNIFYFS_ERROR_MARGO; - // TODO: Umm... is returning here a problem?? } /* set the output params */ @@ -1469,14 +1466,10 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) mabo->filenames = NULL; } - // TODO: Does it make sense to call - // collective_set_local_retval(req->coll, ret) ?? - // If so, we should probably do that here. + collective_set_local_retval(req->coll, UNIFYFS_SUCCESS); /* create a ULT to finish broadcast operation */ - ret = invoke_bcast_progress_rpc(req->coll); - - return ret; + return invoke_bcast_progress_rpc(req->coll); } static int process_service_requests(void) From 7bf895514c227afc45abd4c0d6be408e39837ad9 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Fri, 31 Mar 2023 16:17:25 -0400 Subject: [PATCH 05/46] Error handling and bug fixes for the metaget_all RPC Implement proper error handling for some of the functions related to the metaget_all_bcast RPC. Also fix a few bugs found during testing. --- server/src/unifyfs_group_rpc.c | 338 ++++++++++++++++----------- server/src/unifyfs_service_manager.c | 19 +- 2 files changed, 210 insertions(+), 147 deletions(-) diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index 155d5846e..a90bd2c89 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -69,7 +69,6 @@ static int forward_child_request(void* input_ptr, /* Helper function for the UNIFYFS_SERVER_BCAST_RPC_METAGET case in * get_child_response(). Handles merging the output from a child * with that from the parent. */ -// TODO: where should this function live permanently? static int merge_metaget_all_bcast_outputs( metaget_all_bcast_out_t* p_out, metaget_all_bcast_out_t* c_out, @@ -82,32 +81,45 @@ static int merge_metaget_all_bcast_outputs( int32_t parent_num_files = p_out->num_files; int32_t child_num_files = c_out->num_files; - - // Pull the bulk data (the list of file_attr structs) over - hg_bulk_t local_bulk; hg_size_t child_buf_size = child_num_files * sizeof(unifyfs_file_attr_t); - unifyfs_file_attr_t* child_attr_list = - calloc(child_num_files, sizeof(unifyfs_file_attr_t)); - // TODO: error checking!! - - // Figure out some margo-specific info that we need for the transfer - const struct hg_info* info = margo_get_info(c_hdl); - hg_addr_t server_addr = info->addr; - - /****************************************************************/ - // TODO: What is the correct mid to use here? The one returned by - // margo_ht_handle_get_instance(c_hdl) gives us an HG_INVALID_ARG - // error when we call margo_bulk_create()... - // address of the bulk data on the server side - //margo_instance_id mid = margo_hg_handle_get_instance(c_hdl); - margo_instance_id mid = unifyfsd_rpc_context->svr_mid; - /****************************************************************/ + /* Quick optimization: If there's no files for the child or + * parent, we can exit now. (In fact, trying to perform a bulk transfer + * of size 0 will fail, so if we don't bail now, we'd just have to have + * more checks for this case down below.) */ + if ((0 == parent_num_files) && (0 == child_num_files)) { + return UNIFYFS_SUCCESS; + } + // Some variables we'll need for the bulk transfer(s) + unifyfs_file_attr_t* child_attr_list = NULL; + hg_bulk_t local_bulk; + const struct hg_info* info = NULL; + hg_addr_t server_addr; + margo_instance_id mid; // If the number of child files is 0, don't bother with the bulk // transfer - it will just fail with HG_INVALID_ARG if (child_num_files) { + + // Pull the bulk data (the list of file_attr structs) over + child_attr_list = calloc(child_num_files, sizeof(unifyfs_file_attr_t)); + if (!child_attr_list) { + return ENOMEM; + } + + // Figure out some margo-specific info that we need for the transfer + info = margo_get_info(c_hdl); + server_addr = info->addr; + + /****************************************************************/ + // TODO: What is the correct mid to use here? + + // address of the bulk data on the server side + //mid = margo_hg_handle_get_instance(c_hdl); + mid = unifyfsd_rpc_context->svr_mid; + /****************************************************************/ + hg_size_t segment_sizes[1] = { child_buf_size }; void* segment_ptrs[1] = { (void*)child_attr_list }; bulk_create_hret = @@ -116,8 +128,8 @@ static int merge_metaget_all_bcast_outputs( if (HG_SUCCESS != bulk_create_hret) { LOGERR("margo_bulk_create() failed - %s", HG_Error_to_string(bulk_create_hret)); + free(child_attr_list); return UNIFYFS_ERROR_MARGO; - // TODO: Umm... is returning here a problem?? } hret = margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, @@ -126,29 +138,36 @@ static int merge_metaget_all_bcast_outputs( if (HG_SUCCESS != hret) { LOGERR("margo_bulk_transfer() failed - %s", HG_Error_to_string(hret)); + margo_bulk_free(local_bulk); + free(child_attr_list); return UNIFYFS_ERROR_MARGO; - // TODO: Umm... is returning here a problem?? } margo_bulk_free(local_bulk); } - // OK, file attr's from the child (assuming there were any files) are now - // stored in child_attr_list + /* OK, file attrs from the child (assuming there were any files) are now + * stored in child_attr_list. And if there were 0 files, then + * child_attr_list is NULL. */ // Now get the bulk data from the parent (assuming there is any) unifyfs_file_attr_t* parent_attr_list = calloc(parent_num_files + child_num_files, sizeof(unifyfs_file_attr_t)); - // Note: deliberatly allocating enough space for the child file attrs, - // since we're going to be copying them in anyway. - // TODO: error checking!! + /* Note: Deliberately allocating enough space for the child file attrs, + * since we're going to be copying them in anyway. */ + if (!parent_attr_list) { + free(child_attr_list); + return ENOMEM; + } - if (p_out->file_meta) { + if (parent_num_files) { hg_size_t parent_buf_size = parent_num_files * sizeof(unifyfs_file_attr_t); // Figure out some margo-specific info that we need for the transfer + // TODO: I'm still not sure this is the proper way to get the Margo + // instance ID info = margo_get_info(p_hdl); server_addr = info->addr; // address of the bulk data on the server side @@ -159,43 +178,48 @@ static int merge_metaget_all_bcast_outputs( bulk_create_hret = margo_bulk_create(mid, 1, segment_ptrs, segment_sizes, HG_BULK_WRITE_ONLY, &local_bulk); + if (HG_SUCCESS != bulk_create_hret) { LOGERR("margo_bulk_create() failed - %s", HG_Error_to_string(bulk_create_hret)); + free(parent_attr_list); + free(child_attr_list); return UNIFYFS_ERROR_MARGO; - // TODO: Umm... is returning here a problem?? } - hret = - margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, - p_out->file_meta, 0, local_bulk, 0, - parent_buf_size); + hret = margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, + p_out->file_meta, 0, local_bulk, 0, + parent_buf_size); if (HG_SUCCESS != hret) { LOGERR("margo_bulk_transfer() failed - %s", HG_Error_to_string(hret)); + margo_bulk_free(local_bulk); + free(parent_attr_list); + free(child_attr_list); return UNIFYFS_ERROR_MARGO; - // TODO: Umm... is returning here a problem?? } margo_bulk_free(local_bulk); - - // Since we're going to be making a new one below, delete - // the parent's bulk object, too. - margo_bulk_free(p_out->file_meta); } - /* Now we need to append the child file attrs to the parent file attrs, - * create a new hg_bulk and replace the old parent bulk with the new one. - * First, though, append the child filenames string to the parent's, and - * update the string offsets stored in the child file attrs' filename - * members. - * Lastly, update the num_files value */ + /* OK, file attrs from the parent (assuming there were any files) are now + * stored in parent_attr_list. And parent_attr_list is actually big + * enough to hold all the file attrs from the parent and child. + * + * The next step is to append the child filenames string to the parent's, + * and update the string offsets stored in the child file attrs' filename + * members. */ uint64_t parent_filenames_len = p_out->filenames?strlen(p_out->filenames):0; uint64_t child_filenames_len = c_out->filenames?strlen(c_out->filenames):0; char* new_filenames = calloc(parent_filenames_len + child_filenames_len +1, sizeof(char)); - // TODO: check for errors! + if (!new_filenames) { + free(parent_attr_list); + free(child_attr_list); + return ENOMEM; + } + if (p_out->filenames) { strcpy(new_filenames, p_out->filenames); } @@ -212,27 +236,39 @@ static int merge_metaget_all_bcast_outputs( child_attr_list[i].filename = (char*)new_offset; } - // Now we can append the child list to the paren list + /* Now we need to append the child file attrs to the parent file attrs, + * create a new hg_bulk and replace the old parent bulk with the new one. + */ memcpy(&parent_attr_list[parent_num_files], child_attr_list, child_buf_size); - p_out->num_files += child_num_files; - size_t parent_buf_size = (parent_num_files + child_num_files) * sizeof(unifyfs_file_attr_t); hg_size_t segment_sizes[1] = { parent_buf_size }; void* segment_ptrs[1] = { (void*)parent_attr_list }; + + // Save the parent's old bulk so that we can restore it if the + // bulk create fails, or free it if the create succeeds + hg_bulk_t parent_old_bulk = p_out->file_meta; + hret = margo_bulk_create(unifyfsd_rpc_context->svr_mid, 1, segment_ptrs, segment_sizes, HG_BULK_READ_ONLY, &p_out->file_meta); if (hret != HG_SUCCESS) { LOGERR("margo_bulk_create() failed - %s", HG_Error_to_string(hret)); + p_out->file_meta = parent_old_bulk; + free(parent_attr_list); + free(child_attr_list); return UNIFYFS_ERROR_MARGO; // TODO: Umm... is returning here a problem?? } - return ret; + margo_bulk_free(parent_old_bulk); + + /* Lastly, update the num_files value */ + p_out->num_files += child_num_files; + return ret; } static int get_child_response(coll_request* coll_req, @@ -311,10 +347,6 @@ static int get_child_response(coll_request* coll_req, // NOTE: This case is different. It's currently the only // case that actually returns more than just a single error // code up the tree. - LOGWARN( - "Handling of child responses for " - "UNIFYFS_SERVER_BCAST_RPC_METAGET is almost certainly " - "incorrect and shouldn't be trusted!"); metaget_all_bcast_out_t* cmabo = (metaget_all_bcast_out_t*) out; metaget_all_bcast_out_t* mabo = @@ -337,7 +369,6 @@ static int get_child_response(coll_request* coll_req, LOGERR("Parent output struct: 0x%lX", (uint64_t)mabo); LOGERR("Child output struct: 0x%lX", (uint64_t)cmabo); mabo->ret = UNIFYFS_ERROR_BADCONFIG; - // TODO: Is BADCONFIG the proper error to use? } break; } @@ -764,6 +795,16 @@ static void bcast_progress_rpc(hg_handle_t handle) int32_t ret = UNIFYFS_SUCCESS; coll_request* coll = NULL; + bool cleanup_collective = ((NULL != coll) && (coll->auto_cleanup)); + /* We have to check the auto_cleanup variable now because in the case + * where auto_cleanup is false, another thread will be freeing the + * collective. And once the memory is freed, we can't read the + * auto_cleanup variable. + * + * There's a condition variable that's signaled by collective_finish(), + * and the memory won't be freed until some time after that happens, so + * it's safe to check the variable up here. */ + bcast_progress_in_t in; hg_return_t hret = margo_get_input(handle, &in); if (hret != HG_SUCCESS) { @@ -788,7 +829,7 @@ static void bcast_progress_rpc(hg_handle_t handle) LOGERR("margo_respond() failed - %s", HG_Error_to_string(hret)); } - if ((NULL != coll) && (coll->auto_cleanup)) { + if (cleanup_collective) { collective_cleanup(coll); } @@ -1636,11 +1677,21 @@ DEFINE_MARGO_RPC_HANDLER(metaget_all_bcast_rpc) /* Execute broadcast tree for a metaget_all operation*/ /* Upon success, file_attrs will hold data that has been allocated with * malloc() and must be freed by the caller with free(). In the event of an - * error, the caller must *NOT* free the pointer. */ + * error, the caller must *NOT* free the pointer. + * + * Note that 0 files is still considered a successful result. In that case, + * num_file_attrs will point to 0 and *file_attrs will point to NULL. */ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, int* num_file_attrs) { int ret = UNIFYFS_SUCCESS; + hg_return_t bulk_create_hret = HG_NOMEM; + hg_return_t bulk_transfer_hret = HG_OTHER_ERROR; + /* Have to assume the bulk create and bulk transfer operations failed or + * else we might try to clean up non-existent data down in the clean-up + * section. */ + + hg_bulk_t local_bulk; LOGDBG("BCAST_RPC: starting metaget_all broadcast"); @@ -1707,71 +1758,78 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, // Pull the bulk data (the list of file_attr structs) over metaget_all_bcast_out_t* results = (metaget_all_bcast_out_t*)coll->output; - hg_bulk_t local_bulk; - hg_size_t buf_size = results->num_files * sizeof(unifyfs_file_attr_t); - attr_list = calloc(results->num_files, sizeof(unifyfs_file_attr_t)); - if (NULL == attr_list) { - ret = ENOMEM; - goto Exit; - } - - // Figure out some margo-specific info that we need for the transfer - const struct hg_info* info = margo_get_info(coll->progress_hdl); - hg_addr_t server_addr = info->addr; - // address of the bulk data on the server side - margo_instance_id mid = margo_hg_handle_get_instance(coll->progress_hdl); - hg_return_t bulk_create_hret = - margo_bulk_create(mid, 1, (void**)&attr_list, &buf_size, - HG_BULK_WRITE_ONLY, &local_bulk); - if (HG_SUCCESS != bulk_create_hret) { - LOGERR("margo_bulk_create() failed - %s", - HG_Error_to_string(bulk_create_hret)); - ret = UNIFYFS_ERROR_MARGO; - goto Exit; - } + /* Now check the number of files - if it's 0, then we don't need to + * bother with the bulk tranfser. (In fact, if we were to try, we'd + * get an error.) */ - hg_return_t bulk_transfer_hret = - margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, results->file_meta, - 0, local_bulk, 0, buf_size); - if (HG_SUCCESS != bulk_transfer_hret) { - LOGERR("margo_bulk_transfer() failed - %s", - HG_Error_to_string(bulk_transfer_hret)); - ret = UNIFYFS_ERROR_MARGO; - goto Exit; - } + if (results->num_files) { + hg_size_t buf_size = results->num_files * sizeof(unifyfs_file_attr_t); + attr_list = calloc(results->num_files, sizeof(unifyfs_file_attr_t)); + if (NULL == attr_list) { + ret = ENOMEM; + goto Exit; + } - // At this point, attr_list should have the file_attr_t - // structs from all the other servers. However, we still - // need to assign the filename values for each struct. + // Figure out some margo-specific info that we need for the transfer + const struct hg_info* info = margo_get_info(coll->progress_hdl); + hg_addr_t server_addr = info->addr; + // address of the bulk data on the server side + margo_instance_id mid = + margo_hg_handle_get_instance(coll->progress_hdl); - for (unsigned int i = 0; i < results->num_files; i++) { - // Remember that we abused the filename pointer to - // actually hold an offset into the filenames string - // that we sent separately - uint64_t start_offset = (uint64_t)attr_list[i].filename; - uint64_t name_len; - if (i < (results->num_files-1)) { - name_len = ((uint64_t)attr_list[i+1].filename) - start_offset; - } else { - // length is calculated differently for the last file in file_attrs - name_len = strlen(&results->filenames[start_offset]); + bulk_create_hret = + margo_bulk_create(mid, 1, (void**)&attr_list, &buf_size, + HG_BULK_WRITE_ONLY, &local_bulk); + if (HG_SUCCESS != bulk_create_hret) { + LOGERR("margo_bulk_create() failed - %s", + HG_Error_to_string(bulk_create_hret)); + ret = UNIFYFS_ERROR_MARGO; + goto Exit; } - attr_list[i].filename = - strndup(&results->filenames[start_offset], name_len); - if (NULL == attr_list[i].filename) { - ret = ENOMEM; - LOGERR("strdup() failed processing filename"); - // If we're actually getting ENOMEM from strdup(), the error log - // is probably also going to fail... + + bulk_transfer_hret = + margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, + results->file_meta, 0, local_bulk, 0, buf_size); + if (HG_SUCCESS != bulk_transfer_hret) { + LOGERR("margo_bulk_transfer() failed - %s", + HG_Error_to_string(bulk_transfer_hret)); + ret = UNIFYFS_ERROR_MARGO; goto Exit; - /* Technically, attr_list probably contains valid data and we - * could try to return a partial list. If we did, though, then - * we'd have ensure we checked for NULL before dereferencing the - * filename pointer *EVERYWHERE* else. Additionally, if we've - * really run out of memory, then other things are probably going - * to start failing pretty quickly. In short, trying to salvage - * this situation isn't worth the hassle. */ + } + + /* At this point, attr_list should have the file_attr_t structs from + * all the other servers. However, we still need to assign the + * filename values for each struct. */ + + for (unsigned int i = 0; i < results->num_files; i++) { + /* Remember that we abused the filename pointer to actually hold + * an offset into the filenames string that we sent separately */ + uint64_t start_offset = (uint64_t)attr_list[i].filename; + uint64_t name_len; + if (i < (results->num_files-1)) { + name_len = ((uint64_t)attr_list[i+1].filename) - start_offset; + } else { + /* length is calculated differently for the last file in + * file_attrs */ + name_len = strlen(&results->filenames[start_offset]); + } + attr_list[i].filename = + strndup(&results->filenames[start_offset], name_len); + if (NULL == attr_list[i].filename) { + ret = ENOMEM; + LOGERR("strdup() failed processing filename"); + /* If we're actually getting ENOMEM from strdup(), the error + * log is probably also going to fail... */ + goto Exit; + /* Technically, attr_list probably contains valid data and we + * could try to return a partial list. If we did, though, then + * we'd have ensure we checked for NULL before dereferencing + * the filename pointer *EVERYWHERE* else. Additionally, if + * we've really run out of memory, then other things are + * probably going to start failing pretty quickly. In short, + * trying to salvage this situation isn't worth the hassle. */ + } } } @@ -1784,48 +1842,52 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, *num_file_attrs = results->num_files; Exit: - // If we hit an error somewhere, then there's a bunch of clean-up - // that we need to do... + /* If we hit an error somewhere, then there's a bunch of clean-up + * that we need to do... */ if (UNIFYFS_SUCCESS != ret) { if (HG_SUCCESS == bulk_transfer_hret) { - // We made it past the bulk transfer before failing, which means - // we probably called strdup() on a bunch of filename strings. - // Have to free all of those... + /* We made it past the bulk transfer before failing, which means + * we probably called strdup() on a bunch of filename strings. + * Have to free all of those... */ for (unsigned int i = 0; i < results->num_files; i++) { free(attr_list[i].filename); } } - // If there's been an error, we won't be returning the attr_list - // pointer to the caller, so make sure it's freed. + /* If there's been an error, we won't be returning the attr_list + * pointer to the caller, so make sure it's freed. */ free(attr_list); if (coll) { - // If we have a collective struct, then there's some more - // clean-up to do - - // Depending on where any errors occurred above, the mutex - // might have been left in a locked state. Argobots doesn't - // provide a way to test this, so we'll do a trylock() followed - // by an unlock to ensure it's unlocked. + /* If we have a collective struct, then there's some more + * clean-up to do: + * + * Depending on where any errors occurred above, the mutex + * might have been left in a locked state. Argobots doesn't + * provide a way to test this, so we'll do a trylock() followed + * by an unlock to ensure it's unlocked. */ ABT_mutex_trylock(coll->child_resp_valid_mut); ABT_mutex_unlock(coll->child_resp_valid_mut); - - collective_cleanup(coll); } else { - // If we never got as far as creating the collective, then just - // free the input and output structs. (These were all initialized - // to NULL, so it's safe to call free() on them even if we never - // actually got around to allocating them.) + /* If we never got as far as creating the collective, then just + * free the input and output structs. (These were all initialized + * to NULL, so it's safe to call free() on them even if we never + * actually got around to allocating them.) */ free(in); free(out); } } - if (HG_SUCCESS != bulk_create_hret) { - // If we successfully created the bulk, then we need to free it - // (regardless of the overall success of the function). + if (HG_SUCCESS == bulk_create_hret) { + /* If we successfully created the bulk, then we need to free it + * (regardless of the overall success of the function). */ margo_bulk_free(local_bulk); } + if (coll) { + /* If we successfully created the collective, then we need to + * clean it up. */ + collective_cleanup(coll); + } + return ret; } diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index 9eab94b00..9527b3d99 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -1329,23 +1329,19 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) /* Iterate through the global_inode_tree and copy all the file * attr structs for the files this server owns */ - // TODO: Should we move this block of code over to unifyfs_inode.c? - // If we did, we wouldn't need to include the *inode*.h headers - // in this file. - - /* The file names in the unifyfs_file_attr_t have to pointers to separately + /* The file names in the unifyfs_file_attr_t are pointers to separately * allocated memory, and thus have to be handled specially. We'll copy * the filenames into a separate char[] that will be sent as an hg_string_t * seprate from the bulk transfer of the unifyfs_file_attr_t structs. We * use this variable to keep track of how big that buffer needs to be. */ uint64_t total_name_len = 0; - // Note: It's 64 bits because it's going to get cast to a char* and must - // therefore be the same size as a pointer. + /* Note: It's 64 bits because it's going to get cast to a char* and must + * therefore be the same size as a pointer. */ char* concatenated_names = NULL; unsigned int concatenated_names_size = 4 * 1024 * 1024; - // Pick the initial size such that most of the time we'll never - // need to re-allocate it. + /* Pick the initial size such that most of the time we'll never need + * to re-allocate it. */ unsigned int num_files = 0; @@ -1464,6 +1460,11 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) mabo->file_meta = HG_BULK_NULL; mabo->num_files = 0; mabo->filenames = NULL; + + /* Also need to free attr_list and concatenated_names since they're + * not actually being used */ + free(attr_list); + free(concatenated_names); } collective_set_local_retval(req->coll, UNIFYFS_SUCCESS); From b72d7fa3405bc903021d84ea389baebc93f0df34 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Thu, 13 Apr 2023 15:02:46 -0400 Subject: [PATCH 06/46] Fix memory leak, update comments We weren't deleting the child_attr_list array after we were done with it. --- server/src/unifyfs_group_rpc.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index a90bd2c89..0a625f230 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -111,14 +111,8 @@ static int merge_metaget_all_bcast_outputs( // Figure out some margo-specific info that we need for the transfer info = margo_get_info(c_hdl); server_addr = info->addr; - - /****************************************************************/ - // TODO: What is the correct mid to use here? - // address of the bulk data on the server side - //mid = margo_hg_handle_get_instance(c_hdl); - mid = unifyfsd_rpc_context->svr_mid; - /****************************************************************/ + mid = margo_hg_handle_get_instance(c_hdl); hg_size_t segment_sizes[1] = { child_buf_size }; void* segment_ptrs[1] = { (void*)child_attr_list }; @@ -166,8 +160,6 @@ static int merge_metaget_all_bcast_outputs( parent_num_files * sizeof(unifyfs_file_attr_t); // Figure out some margo-specific info that we need for the transfer - // TODO: I'm still not sure this is the proper way to get the Margo - // instance ID info = margo_get_info(p_hdl); server_addr = info->addr; // address of the bulk data on the server side @@ -187,6 +179,9 @@ static int merge_metaget_all_bcast_outputs( return UNIFYFS_ERROR_MARGO; } + // TODO: It seems like we shouldn't have to actually do a margo + // transfer here. This code is running on the parent server, right? + // Can't we just do a memcpy? hret = margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, p_out->file_meta, 0, local_bulk, 0, parent_buf_size); @@ -241,6 +236,7 @@ static int merge_metaget_all_bcast_outputs( */ memcpy(&parent_attr_list[parent_num_files], child_attr_list, child_buf_size); + free(child_attr_list); size_t parent_buf_size = (parent_num_files + child_num_files) * sizeof(unifyfs_file_attr_t); @@ -263,6 +259,12 @@ static int merge_metaget_all_bcast_outputs( // TODO: Umm... is returning here a problem?? } + // TODO: Note that although we did a margo bulk transfer to pull + // the data from the parent, we aren't doing any kind of push back + // to the parent. We do seem to get the correct results, which implies + // that we must be in the same address space as the parent. So again, + // do we really need to do the pull operation above?? + margo_bulk_free(parent_old_bulk); /* Lastly, update the num_files value */ From eb7b305a1cfc0eff93b6b4695def7e77af26132b Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Fri, 5 May 2023 13:51:21 -0400 Subject: [PATCH 07/46] Minor changes to clean up some "TODO" comments --- common/src/unifyfs_server_rpcs.h | 1 - server/src/unifyfs_group_rpc.c | 1 - server/src/unifyfs_request_manager.c | 24 ++++-------------------- 3 files changed, 4 insertions(+), 22 deletions(-) diff --git a/common/src/unifyfs_server_rpcs.h b/common/src/unifyfs_server_rpcs.h index 485721e74..d1ced495a 100644 --- a/common/src/unifyfs_server_rpcs.h +++ b/common/src/unifyfs_server_rpcs.h @@ -247,7 +247,6 @@ DECLARE_MARGO_RPC_HANDLER(unlink_bcast_rpc) * all files that they own. */ MERCURY_GEN_PROC(metaget_all_bcast_in_t, ((int32_t)(root))) -/* TODO: Not sure what "root" is, but every RPC seems to have it... */ MERCURY_GEN_PROC(metaget_all_bcast_out_t, ((int32_t)(num_files)) ((hg_bulk_t)(file_meta)) diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index 0a625f230..103d308aa 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -256,7 +256,6 @@ static int merge_metaget_all_bcast_outputs( free(parent_attr_list); free(child_attr_list); return UNIFYFS_ERROR_MARGO; - // TODO: Umm... is returning here a problem?? } // TODO: Note that although we did a margo bulk transfer to pull diff --git a/server/src/unifyfs_request_manager.c b/server/src/unifyfs_request_manager.c index ce9a5473c..8ea04c05e 100644 --- a/server/src/unifyfs_request_manager.c +++ b/server/src/unifyfs_request_manager.c @@ -1554,7 +1554,6 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, { int ret = UNIFYFS_SUCCESS; - int bcast_ret = UNIFYFS_SUCCESS; int* gfid_list; unifyfs_file_attr_t* remote_file_attrs; int num_gfids; @@ -1569,12 +1568,11 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, // TODO: Also, it would be nice if could let the broadcast complete in the // backgound, but it's probably not a big deal. - bcast_ret = unifyfs_invoke_broadcast_metaget_all(&remote_file_attrs, - &num_file_attrs); - if (UNIFYFS_SUCCESS != bcast_ret) { + ret = unifyfs_invoke_broadcast_metaget_all(&remote_file_attrs, + &num_file_attrs); + if (UNIFYFS_SUCCESS != ret) { LOGERR("unifyfs_invoke_broadcast_metaget_all() failed"); - // make sure we have a sane value even if the broadcast fails - num_file_attrs = 0; + return ret; } ret = unifyfs_fops_get_gfids(&gfid_list, &num_gfids); @@ -1593,11 +1591,6 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, free(gfid_list); - if (UNIFYFS_SUCCESS == bcast_ret) { - // Only free the pointer if the broadcast was successful - free(remote_file_attrs); - } - /* send rpc response */ unifyfs_get_gfids_out_t out; @@ -1626,15 +1619,6 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, margo_bulk_free(out.bulk_gfids); free(new_gfid_list); - if (bcast_ret != UNIFYFS_SUCCESS) { - /* TODO: What do we do here?? We can log a warning of course, - * but we need to make sure the fact that the results are - * incomplete is conveyed back to the client. - */ - LOGWARN("unifyfs_invoke_broadcast_metaget_all() returned %d. " - "GFID list is likely incomplete.", bcast_ret); - } - return ret; } From 53393be7395b203a4421366a250b4c6ec956a79e Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Thu, 11 May 2023 13:28:27 -0400 Subject: [PATCH 08/46] Move the tree-walk out of process_metaget_bcast_rpc Move the tree-walk code out of the process_metaget_bcast_rpc function and into its own function in unifyfs_inode.c Two reasons: 1) we want to keep all the inode manipulation code in one place for convenience and 2) it'll make it easier to re-use that code. --- server/src/unifyfs_inode.c | 78 ++++++++++++++++++++++ server/src/unifyfs_inode.h | 14 ++++ server/src/unifyfs_service_manager.c | 97 ++++++++-------------------- 3 files changed, 120 insertions(+), 69 deletions(-) diff --git a/server/src/unifyfs_inode.c b/server/src/unifyfs_inode.c index a8e8bb107..e371a7ff5 100644 --- a/server/src/unifyfs_inode.c +++ b/server/src/unifyfs_inode.c @@ -21,6 +21,7 @@ #include "unifyfs_inode.h" #include "unifyfs_inode_tree.h" #include "unifyfs_request_manager.h" +#include "unifyfs_p2p_rpc.h" // for hash_gfid_to_server() struct unifyfs_inode_tree _global_inode_tree; struct unifyfs_inode_tree* global_inode_tree = &_global_inode_tree; @@ -779,3 +780,80 @@ int unifyfs_get_gfids(int* num_gfids, int** gfid_list) *gfid_list = _gfid_list; return ret; } + + +int unifyfs_get_owned_files(unsigned int* num_files, + unifyfs_file_attr_t** attr_list) +{ + /* Iterate through the global_inode_tree and copy all the file + * attr structs for the files this server owns. + * Note: the file names in the unifyfs_file_attr_t are pointers to + * separately allocated memory, so they will be created using strdup(). */ + + unsigned int attr_list_size = 64; + unsigned int num_files_int = 0; + unifyfs_file_attr_t* attr_list_int; + /* _int suffix is short for "internal". If everything succeeds, then + * before returning, we'll copy num_files_int to num_files and + * attr_list_int to attr_list. */ + + attr_list_int = malloc(sizeof(unifyfs_file_attr_t) * attr_list_size); + if (!attr_list_int) { + return ENOMEM; + } + + unifyfs_inode_tree_rdlock(global_inode_tree); + { + struct unifyfs_inode* node = + unifyfs_inode_tree_iter(global_inode_tree, NULL); + while (node) { + if (num_files_int == attr_list_size) { + attr_list_size *= 2; // Double the list size each time + attr_list_int = + realloc(attr_list_int, + sizeof(unifyfs_file_attr_t)*attr_list_size); + if (!attr_list_int) { + unifyfs_inode_tree_unlock(global_inode_tree); + free(attr_list_int); + return ENOMEM; + } + } + + /* We only want to copy file attrs that we're the owner of */ + int owner_rank = hash_gfid_to_server(node->attr.gfid); + if (owner_rank == glb_pmi_rank) { + memcpy(&attr_list_int[num_files_int], &node->attr, + sizeof(unifyfs_file_attr_t)); + + /* filename is a pointer to separately allocated memory. + * We need to do a deep copy, so create a new string with + * strdup(). */ + attr_list_int[num_files_int].filename = + strdup(node->attr.filename); + + num_files_int++; + } + node = unifyfs_inode_tree_iter(global_inode_tree, node); + } + } + unifyfs_inode_tree_unlock(global_inode_tree); + + /* realloc() the array list space down to only what we need */ + unifyfs_file_attr_t* attr_list_int2 = realloc( + attr_list_int, num_files_int * sizeof(unifyfs_file_attr_t)); + if (NULL == attr_list_int2) { + /* Don't see how the realloc() call could actually fail since we're + * decreasing the size, but it did. The man page says that in such a + * case, the original pointer is left untouched. That means we can + * still use the original pointer - we'll just be wasting some RAM. + * This isn't a memory leak since the pointer will eventually be + * freed. */ + attr_list_int2 = attr_list_int; + } + + /* We walked the tree with no errors, so update the return parameters + * and return. */ + *attr_list = attr_list_int2; + *num_files = num_files_int; + return UNIFYFS_SUCCESS; +} diff --git a/server/src/unifyfs_inode.h b/server/src/unifyfs_inode.h index afa768e09..f56301529 100644 --- a/server/src/unifyfs_inode.h +++ b/server/src/unifyfs_inode.h @@ -244,5 +244,19 @@ int unifyfs_inode_dump(int gfid); */ int unifyfs_get_gfids(int* num_gfids, int** gfid_list); + +/** + * @brief Walk the tree and return a list file_attr_t structs for all files + * that we own. + * + * Upon success, the caller will be responsible for freeing attr_list. If + * this function returns an error code, then the caller must *NOT* free + * attr_list. + * + * @return 0 on success, errno otherwise + */ +int unifyfs_get_owned_files(unsigned int* num_files, + unifyfs_file_attr_t** attr_list); + #endif /* __UNIFYFS_INODE_H */ diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index 9527b3d99..0ad90aae9 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -27,10 +27,6 @@ * Please read https://github.com/llnl/burstfs/LICENSE for full license text. */ -// TODO: any reason including these is a bad idea?? -#include "unifyfs_inode.h" -#include "unifyfs_inode_tree.h" - #include "unifyfs_global.h" #include "unifyfs_group_rpc.h" #include "unifyfs_p2p_rpc.h" @@ -1335,84 +1331,47 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) * seprate from the bulk transfer of the unifyfs_file_attr_t structs. We * use this variable to keep track of how big that buffer needs to be. */ - uint64_t total_name_len = 0; - /* Note: It's 64 bits because it's going to get cast to a char* and must + uintptr_t total_name_len = 0; + /* Note: Using uintptr_t because this value get cast to a char* and must * therefore be the same size as a pointer. */ char* concatenated_names = NULL; - unsigned int concatenated_names_size = 4 * 1024 * 1024; - /* Pick the initial size such that most of the time we'll never need - * to re-allocate it. */ + size_t concatenated_names_size = 0; unsigned int num_files = 0; + unifyfs_file_attr_t* attr_list; - int attr_list_size = 64; - unifyfs_file_attr_t* attr_list = - malloc(sizeof(unifyfs_file_attr_t) * attr_list_size); - if (!attr_list) { - return ENOMEM; + int ret = unifyfs_get_owned_files(&num_files, &attr_list); + if (UNIFYFS_SUCCESS != ret) { + return ret; } - concatenated_names = calloc(concatenated_names_size, sizeof(char)); + /* Loop through the attr list and calculate the total length + * of all the filenames. We'll need this down below...*/ + for (unsigned int i = 0; i < num_files; i++) { + concatenated_names_size += strlen(attr_list[i].filename); + } + + concatenated_names = calloc(concatenated_names_size+1, sizeof(char)); + // +1 to allow space for the null terminator if (!concatenated_names) { free(attr_list); return ENOMEM; } - unifyfs_inode_tree_rdlock(global_inode_tree); - { - struct unifyfs_inode* node = - unifyfs_inode_tree_iter(global_inode_tree, NULL); - while (node) { - if (num_files == attr_list_size) { - attr_list_size *= 2; // Double the list size each time - attr_list = realloc(attr_list, - sizeof(unifyfs_file_attr_t)*attr_list_size); - if (!attr_list) { - unifyfs_inode_tree_unlock(global_inode_tree); - free(attr_list); - free(concatenated_names); - return ENOMEM; - } - } - - /* We only want to copy file attrs that we're the owner of */ - int owner_rank = hash_gfid_to_server(node->attr.gfid); - if (owner_rank == glb_pmi_rank) { - memcpy(&attr_list[num_files], &node->attr, - sizeof(unifyfs_file_attr_t)); - - /* filename is a pointer. Since sending pointers over the - * network is useless, we're going to abuse this value by - * using it to store the offset into the separate char array - * that will hold the filenames. - * We only need the offset of the START of the filename. The - * end of the filename is assumed to be 1 character before the - * start of the next filename (or the end of the string if - * this is the last file). */ - attr_list[num_files].filename = (char*)total_name_len; - total_name_len += strlen(node->attr.filename); - - if (concatenated_names_size <= total_name_len) { - // Need more memory for our concatenated file names - concatenated_names_size *= 2; // Double the size - concatenated_names = - realloc(concatenated_names, - sizeof(char)*concatenated_names_size); - if (!concatenated_names) { - unifyfs_inode_tree_unlock(global_inode_tree); - free(attr_list); - free(concatenated_names); - return ENOMEM; - } - } - - strcat(concatenated_names, node->attr.filename); - num_files++; - } - node = unifyfs_inode_tree_iter(global_inode_tree, node); - } + /* unifyfs_file_attr_t.filename is a pointer. Since sending pointers over + * the network is useless, we're going to abuse this value by using it to + * store the offset into the separate char array that will hold the + * filenames. + * We only need the offset of the START of the filename. The end of the + * filename is assumed to be 1 character before the start of the next + * filename (or the end of the string if this is the last file). */ + for (unsigned int i = 0; i < num_files; i++) { + size_t filename_len = strlen(attr_list[i].filename); + strcat(concatenated_names, attr_list[i].filename); + free(attr_list[i].filename); + attr_list[i].filename = (char*)total_name_len; + total_name_len += filename_len; } - unifyfs_inode_tree_unlock(global_inode_tree); coll_request* coll = (coll_request*)req->coll; // Do a couple of sanity checks From b01c1fb24ffb0dc444fb9832f90b9d6bb22f9f08 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Thu, 11 May 2023 14:41:08 -0400 Subject: [PATCH 09/46] Rename "Exit" label We decided "Exit" was too generic for a label, so now it's called "Exit_Invoke_BMA". --- server/src/unifyfs_group_rpc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index 103d308aa..08c6e182a 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -1702,7 +1702,7 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, metaget_all_bcast_out_t* out = calloc(1, sizeof(*out)); if ((NULL == in) || (NULL == out)) { ret = ENOMEM; - goto Exit; + goto Exit_Invoke_BMA; } /* get input params */ @@ -1720,12 +1720,12 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, if (NULL == coll) { ret = ENOMEM; - goto Exit; + goto Exit_Invoke_BMA; } ret = collective_forward(coll); if (UNIFYFS_SUCCESS != ret) { - goto Exit; + goto Exit_Invoke_BMA; } /* We don't want the progress rpc to clean up for us because @@ -1741,7 +1741,7 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, ret = invoke_bcast_progress_rpc(coll); if (UNIFYFS_SUCCESS != ret) { LOGERR("invoke_bcast_progress_rpc() failed with error %d", ret); - goto Exit; + goto Exit_Invoke_BMA; } // Wait for all the child responses to come back @@ -1769,7 +1769,7 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, attr_list = calloc(results->num_files, sizeof(unifyfs_file_attr_t)); if (NULL == attr_list) { ret = ENOMEM; - goto Exit; + goto Exit_Invoke_BMA; } // Figure out some margo-specific info that we need for the transfer @@ -1786,7 +1786,7 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, LOGERR("margo_bulk_create() failed - %s", HG_Error_to_string(bulk_create_hret)); ret = UNIFYFS_ERROR_MARGO; - goto Exit; + goto Exit_Invoke_BMA; } bulk_transfer_hret = @@ -1796,7 +1796,7 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, LOGERR("margo_bulk_transfer() failed - %s", HG_Error_to_string(bulk_transfer_hret)); ret = UNIFYFS_ERROR_MARGO; - goto Exit; + goto Exit_Invoke_BMA; } /* At this point, attr_list should have the file_attr_t structs from @@ -1822,7 +1822,7 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, LOGERR("strdup() failed processing filename"); /* If we're actually getting ENOMEM from strdup(), the error * log is probably also going to fail... */ - goto Exit; + goto Exit_Invoke_BMA; /* Technically, attr_list probably contains valid data and we * could try to return a partial list. If we did, though, then * we'd have ensure we checked for NULL before dereferencing @@ -1842,7 +1842,7 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, *file_attrs = attr_list; *num_file_attrs = results->num_files; -Exit: +Exit_Invoke_BMA: /* If we hit an error somewhere, then there's a bunch of clean-up * that we need to do... */ if (UNIFYFS_SUCCESS != ret) { From d011899148141f174c0ca8af129dad4461f60058 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Tue, 16 May 2023 16:11:56 -0400 Subject: [PATCH 10/46] Change metaget_all broadcast RPC to include files owned by the caller Change unifyfs_invoke_broadcast_metaget_all() to also walk the local tree and include file metadata with the results returned from the RPC call. --- server/src/unifyfs_group_rpc.c | 44 ++++++++++++++++++++++++++-- server/src/unifyfs_inode.c | 27 ++++++++++------- server/src/unifyfs_request_manager.c | 21 +++---------- 3 files changed, 63 insertions(+), 29 deletions(-) diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index 08c6e182a..28f8f8dc6 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -1698,6 +1698,10 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, coll_request* coll = NULL; unifyfs_file_attr_t* attr_list = NULL; + unifyfs_file_attr_t* local_file_attrs = NULL; + /* attr_list holds the metadata we received from other server processes + * via the broadcast RPC. local_file_attrs holds metadata for files + * that the current server process owns. */ metaget_all_bcast_in_t* in = calloc(1, sizeof(*in)); metaget_all_bcast_out_t* out = calloc(1, sizeof(*out)); if ((NULL == in) || (NULL == out)) { @@ -1744,6 +1748,15 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, goto Exit_Invoke_BMA; } + /* While the broadcast RPC is running, let's fetch the metadata for + * all the files the server we're currently running as owns. */ + unsigned int num_local_files = 0; + ret = unifyfs_get_owned_files(&num_local_files, &local_file_attrs); + if (UNIFYFS_SUCCESS != ret) { + LOGERR("unifyfs_get_owned_files() failed with error %d", ret); + goto Exit_Invoke_BMA; + } + // Wait for all the child responses to come back ABT_cond_wait(coll->child_resp_valid, coll->child_resp_valid_mut); @@ -1805,7 +1818,8 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, for (unsigned int i = 0; i < results->num_files; i++) { /* Remember that we abused the filename pointer to actually hold - * an offset into the filenames string that we sent separately */ + * an offset into the filenames string that we sent separately. + * (See the comments in process_metaget_bcast_rpc()) */ uint64_t start_offset = (uint64_t)attr_list[i].filename; uint64_t name_len; if (i < (results->num_files-1)) { @@ -1834,13 +1848,33 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, } } + LOGINFO("Total number of files owned by the current server: %d", + num_local_files); LOGINFO("Total number of files returned from children: %d", results->num_files); LOGINFO("Return code from children: %d", results->ret); + /* Need to merge the metadata for the local files with the metadata + * returned by the RPC */ + if (num_local_files) { + size_t new_size = (results->num_files + num_local_files) * + sizeof(unifyfs_file_attr_t); + unifyfs_file_attr_t* merged_attr_list = realloc(attr_list, new_size); + if (merged_attr_list) { + attr_list = merged_attr_list; + } else { + LOGERR("Failed to realloc() file attr list!"); + ret = ENOMEM; + goto Exit_Invoke_BMA; + //TODO: Make sure we clean this up in the event of an error! + } + memcpy(&attr_list[results->num_files], local_file_attrs, + num_local_files * sizeof(unifyfs_file_attr_t)); + } + // Make the results visible to the caller *file_attrs = attr_list; - *num_file_attrs = results->num_files; + *num_file_attrs = results->num_files + num_local_files; Exit_Invoke_BMA: /* If we hit an error somewhere, then there's a bunch of clean-up @@ -1878,6 +1912,12 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, } } + if (local_file_attrs) { + /* If we successfully allocated memory for local_file_attrs, + * then we need to free it. */ + free(local_file_attrs); + } + if (HG_SUCCESS == bulk_create_hret) { /* If we successfully created the bulk, then we need to free it * (regardless of the overall success of the function). */ diff --git a/server/src/unifyfs_inode.c b/server/src/unifyfs_inode.c index e371a7ff5..316b55a51 100644 --- a/server/src/unifyfs_inode.c +++ b/server/src/unifyfs_inode.c @@ -838,21 +838,28 @@ int unifyfs_get_owned_files(unsigned int* num_files, } unifyfs_inode_tree_unlock(global_inode_tree); - /* realloc() the array list space down to only what we need */ + /* realloc() the array list space down to only what we need. + * + * Note that corner cases get a little odd here: + * 1) If num_files_int is 0, this will conveniently free() the list for + * us. The pointer we get back from realloc() will be NULL and that's + * exactly what we should return to the caller. + * 2) If the realloc actually fails (and it's unclear how that could + * happen given that we're reducing the size of the allocation), then + * the original memory will be left untouched and we we can return the + * original pointer. That wastes some space, but the pointer is + * valid and the memory will eventually be freed by the caller. */ unifyfs_file_attr_t* attr_list_int2 = realloc( attr_list_int, num_files_int * sizeof(unifyfs_file_attr_t)); if (NULL == attr_list_int2) { - /* Don't see how the realloc() call could actually fail since we're - * decreasing the size, but it did. The man page says that in such a - * case, the original pointer is left untouched. That means we can - * still use the original pointer - we'll just be wasting some RAM. - * This isn't a memory leak since the pointer will eventually be - * freed. */ - attr_list_int2 = attr_list_int; + if (0 != num_files_int) { + /* realloc() actually failed. Wow. */ + attr_list_int2 = attr_list_int; + } } - /* We walked the tree with no errors, so update the return parameters - * and return. */ + /* If we made it here, then we walked the tree with no errors, so update + * the return parameters and return. */ *attr_list = attr_list_int2; *num_files = num_files_int; return UNIFYFS_SUCCESS; diff --git a/server/src/unifyfs_request_manager.c b/server/src/unifyfs_request_manager.c index 8ea04c05e..243bb8403 100644 --- a/server/src/unifyfs_request_manager.c +++ b/server/src/unifyfs_request_manager.c @@ -1554,9 +1554,7 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, { int ret = UNIFYFS_SUCCESS; - int* gfid_list; unifyfs_file_attr_t* remote_file_attrs; - int num_gfids; int num_file_attrs; /* Submit a broadcast metaget_all request and wait for it to complete. */ @@ -1565,8 +1563,6 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, // separate request for each gfid. // Now that we have all the metadata from remote servers, we // need to completely re-work how the the unifyfs-ls util works. - // TODO: Also, it would be nice if could let the broadcast complete in the - // backgound, but it's probably not a big deal. ret = unifyfs_invoke_broadcast_metaget_all(&remote_file_attrs, &num_file_attrs); @@ -1575,28 +1571,19 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, return ret; } - ret = unifyfs_fops_get_gfids(&gfid_list, &num_gfids); - if (UNIFYFS_SUCCESS != ret) { - LOGERR("unifyfs_fops_get_gfids() failed"); - num_gfids = 0; - } - // Package all the gfids up into one list - int* new_gfid_list = calloc(num_gfids + num_file_attrs, sizeof(int)); + int* new_gfid_list = calloc(num_file_attrs, sizeof(int)); // TODO: error checking! - memcpy(new_gfid_list, gfid_list, num_gfids*sizeof(int)); for (unsigned int i = 0; i < num_file_attrs; i++) { - new_gfid_list[num_gfids+i] = remote_file_attrs[i].gfid; + new_gfid_list[i] = remote_file_attrs[i].gfid; } - free(gfid_list); - /* send rpc response */ unifyfs_get_gfids_out_t out; /* initialize bulk handle for the gfid_list */ - hg_size_t segment_sizes[1] = { (num_gfids + num_file_attrs) * sizeof(int) }; + hg_size_t segment_sizes[1] = { num_file_attrs * sizeof(int) }; void* segment_ptrs[1] = { (void*)new_gfid_list }; hg_return_t hret = margo_bulk_create(unifyfsd_rpc_context->shm_mid, 1, segment_ptrs, segment_sizes, @@ -1608,7 +1595,7 @@ static int process_get_gfids(reqmgr_thrd_t* reqmgr, } out.ret = (int32_t) ret; - out.num_gfids = num_gfids + num_file_attrs; + out.num_gfids = num_file_attrs; hret = margo_respond(req->handle, &out); if (hret != HG_SUCCESS) { LOGERR("margo_respond() failed"); From 33dcbf770b805103efb30a2430385e967511637a Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Fri, 19 May 2023 15:14:40 -0400 Subject: [PATCH 11/46] Fix error handling in git merge_metaget_all_bcast_outputs() Fix a case where we could incorrectly return ENOMEM even though the malloc() succeeded. Also cleaned up several comments. --- server/src/unifyfs_group_rpc.c | 40 ++++++++++++++-------------- server/src/unifyfs_service_manager.c | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index 28f8f8dc6..1298f2ed4 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -111,7 +111,6 @@ static int merge_metaget_all_bcast_outputs( // Figure out some margo-specific info that we need for the transfer info = margo_get_info(c_hdl); server_addr = info->addr; - // address of the bulk data on the server side mid = margo_hg_handle_get_instance(c_hdl); hg_size_t segment_sizes[1] = { child_buf_size }; @@ -145,14 +144,20 @@ static int merge_metaget_all_bcast_outputs( * child_attr_list is NULL. */ // Now get the bulk data from the parent (assuming there is any) - unifyfs_file_attr_t* parent_attr_list = - calloc(parent_num_files + child_num_files, - sizeof(unifyfs_file_attr_t)); - /* Note: Deliberately allocating enough space for the child file attrs, - * since we're going to be copying them in anyway. */ - if (!parent_attr_list) { - free(child_attr_list); - return ENOMEM; + unifyfs_file_attr_t* parent_attr_list = NULL; + if (parent_num_files + child_num_files > 0) { + parent_attr_list = calloc(parent_num_files + child_num_files, + sizeof(unifyfs_file_attr_t)); + /* Note: Deliberately allocating enough space for the child file attrs, + * since we're going to be copying them in anyway. + * Also, we had to check to see if there actually was any need to + * allocate memory because if you pass 0 into calloc(), you'll likely + * get a NULL back, and that would confuse the error checking on the + * next lines. */ + if (!parent_attr_list) { + free(child_attr_list); + return ENOMEM; + } } if (parent_num_files) { @@ -179,9 +184,12 @@ static int merge_metaget_all_bcast_outputs( return UNIFYFS_ERROR_MARGO; } - // TODO: It seems like we shouldn't have to actually do a margo - // transfer here. This code is running on the parent server, right? - // Can't we just do a memcpy? + /* It would be nice if we didn't have to actually do a margo transfer + * here. The data we need exists in our current address space + * somewhere. Unfortunately, we don't know where because that's + * hidden from us by Margo. The best we can do is hope that Margo is + * optimized for this case and this transfer ends up just being a + * mem copy. */ hret = margo_bulk_transfer(mid, HG_BULK_PULL, server_addr, p_out->file_meta, 0, local_bulk, 0, parent_buf_size); @@ -258,12 +266,6 @@ static int merge_metaget_all_bcast_outputs( return UNIFYFS_ERROR_MARGO; } - // TODO: Note that although we did a margo bulk transfer to pull - // the data from the parent, we aren't doing any kind of push back - // to the parent. We do seem to get the correct results, which implies - // that we must be in the same address space as the parent. So again, - // do we really need to do the pull operation above?? - margo_bulk_free(parent_old_bulk); /* Lastly, update the num_files value */ @@ -359,8 +361,6 @@ static int get_child_response(coll_request* coll_req, if ((NULL != cmabo) && (NULL != mabo)) { merge_metaget_all_bcast_outputs( mabo, cmabo, coll_req->progress_hdl, chdl); - // TODO: I'm not sure coll_req->progress_hdl is the - // correct thing to use here. } else { /* One or both of the output structures is missing. * (This shouldn't ever happen.) */ diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index 0ad90aae9..497f58da2 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -1364,7 +1364,7 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) * filenames. * We only need the offset of the START of the filename. The end of the * filename is assumed to be 1 character before the start of the next - * filename (or the end of the string if this is the last file). */ + * filename or - if this is the last file - the end of the string. */ for (unsigned int i = 0; i < num_files; i++) { size_t filename_len = strlen(attr_list[i].filename); strcat(concatenated_names, attr_list[i].filename); From 5ac5da3cd7f38e2e1a3ee4546fa7541b87f85b3a Mon Sep 17 00:00:00 2001 From: CamStan Date: Thu, 18 May 2023 13:32:08 -0700 Subject: [PATCH 12/46] Add UnifyFS Citation sections to docs and readme --- README.md | 5 +++++ docs/overview.rst | 20 ++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 40686898e..4bce48aba 100644 --- a/README.md +++ b/README.md @@ -29,5 +29,10 @@ Status of UnifyFS development branch (dev): [![Read the Docs](https://readthedocs.org/projects/unifyfs/badge/?version=dev)](https://unifyfs.readthedocs.io) +## UnifyFS Citation +We recommend that you use this citation for UnifyFS: + + * Michael Brim, Adam Moody, Seung-Hwan Lim, Ross Miller, Swen Boehm, Cameron Stanavige, Kathryn Mohror, Sarp Oral, “UnifyFS: A User-level Shared File System for Unified Access to Distributed Local Storage,” 37th IEEE International Parallel & Distributed Processing Symposium (IPDPS 2023), St. Petersburg, FL, May 2023. + ## Contribute and Develop If you would like to help, please see our [contributing guidelines](https://unifyfs.readthedocs.io/en/dev/contribute-ways.html). diff --git a/docs/overview.rst b/docs/overview.rst index 8f1c549e1..d8c165302 100644 --- a/docs/overview.rst +++ b/docs/overview.rst @@ -1,6 +1,6 @@ -================ +======== Overview -================ +======== UnifyFS is a user-level file system under active development that supports shared file I/O over distributed storage on HPC systems, @@ -25,10 +25,11 @@ Users must copy files that need to be persisted beyond the lifetime of the job from UnifyFS to a permanent file system. UnifyFS provides an API and a utility to perform these copies. +----- ---------------------------- +----------------- High Level Design ---------------------------- +----------------- .. image:: images/design-high-lvl.png @@ -52,3 +53,14 @@ the job allocation. The UnifyFS server handles the I/O requests from the UnifyFS library. The UnifyFS server uses ECP `Mochi `_ to communicate with user application processes and server processes on other nodes. + +----- + +---------------- +UnifyFS Citation +---------------- + +We recommend that you use this as the primary citation for UnifyFS as well as a +reference for further details on the UnifyFS architecture and semantics: + + Michael Brim, Adam Moody, Seung-Hwan Lim, Ross Miller, Swen Boehm, Cameron Stanavige, Kathryn Mohror, Sarp Oral, “UnifyFS: A User-level Shared File System for Unified Access to Distributed Local Storage,” 37th IEEE International Parallel & Distributed Processing Symposium (IPDPS 2023), St. Petersburg, FL, May 2023. From 33aeb360a37f42a9aec3c6917cefa65e7e01fa69 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Wed, 24 May 2023 10:37:18 -0700 Subject: [PATCH 13/46] Add tests for stat(), lstat() and fstat() Signed-off-by: Chen Wang --- t/Makefile.am | 3 +- t/sharness.d/00-test-env.sh | 3 +- t/sys/stat.c | 124 ++++++++++++++++++++++++++++++++++++ t/sys/sysio_suite.c | 2 + t/sys/sysio_suite.h | 3 + 5 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 t/sys/stat.c diff --git a/t/Makefile.am b/t/Makefile.am index afa3d2c5c..865072fde 100644 --- a/t/Makefile.am +++ b/t/Makefile.am @@ -134,7 +134,8 @@ test_sysio_sources = \ sys/write-read-hole.c \ sys/truncate.c \ sys/unlink.c \ - sys/chdir.c + sys/chdir.c \ + sys/stat.c sys_sysio_gotcha_t_CPPFLAGS = $(test_cppflags) sys_sysio_gotcha_t_LDADD = $(test_gotcha_ldadd) diff --git a/t/sharness.d/00-test-env.sh b/t/sharness.d/00-test-env.sh index a61583511..17880b4d9 100644 --- a/t/sharness.d/00-test-env.sh +++ b/t/sharness.d/00-test-env.sh @@ -25,7 +25,8 @@ export UNIFYFS_TEST_RUN_SCRIPT=$UNIFYFS_BUILD_DIR/t/test_run_env.sh if test -n "$(which jsrun 2>/dev/null)"; then JOB_RUN_COMMAND="jsrun -r1 -n1" elif test -n "$(which srun 2>/dev/null)"; then - JOB_RUN_COMMAND="srun -n1 -N1" + #JOB_RUN_COMMAND="srun -n1 -N1 --overlap" + JOB_RUN_COMMAND="mpiexec -n 1" elif test -n "$(which mpirun 2>/dev/null)"; then JOB_RUN_COMMAND="mpirun -np 1" if [ $UID -eq 0 ]; then diff --git a/t/sys/stat.c b/t/sys/stat.c new file mode 100644 index 000000000..623c07146 --- /dev/null +++ b/t/sys/stat.c @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2019, Lawrence Livermore National Security, LLC. + * Produced at the Lawrence Livermore National Laboratory. + * + * Copyright 2018, UT-Battelle, LLC. + * + * LLNL-CODE-741539 + * All rights reserved. + * + * This is the license for UnifyFS. + * For details, see https://github.com/LLNL/UnifyFS. + * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. + */ + + /* + * Test stat, lstat, fstat, __xstat, __lxstst, __fxstat + */ +#include +#include +#include +#include +#include +#include +#include "t/lib/tap.h" +#include "t/lib/testutil.h" + +int stat_test(char* unifyfs_root) +{ + diag("Starting UNIFYFS_WRAP(stat) tests"); + + char path[64]; + char dir_path[64]; + int err, fd, rc; + struct stat sb = {0}; + + testutil_rand_path(path, sizeof(path), unifyfs_root); + testutil_rand_path(dir_path, sizeof(dir_path), unifyfs_root); + + errno = 0; + rc = stat(path, &sb); + err = errno; + ok(rc == -1 && err == ENOENT, + "%s:%d stat() non-existent file fails (errno=%d): %s", + __FILE__, __LINE__, err, strerror(err)); + + errno = 0; + rc = lstat(path, &sb); + err = errno; + ok(rc == -1 && err == ENOENT, + "%s:%d lstat() non-existent file fails (errno=%d): %s", + __FILE__, __LINE__, err, strerror(err)); + + errno = 0; + fd = creat(path, 0222); + err = errno; + ok(fd != -1 && err == 0, "%s:%d creat(%s) (fd=%d): %s", + __FILE__, __LINE__, path, fd, strerror(err)); + + errno = 0; + rc = fsync(fd); + err = errno; + ok(rc == 0 && err == 0, "%s:%d fsync(): %s", + __FILE__, __LINE__, strerror(err)); + + errno = 0; + rc = close(fd); + err = errno; + ok(rc == 0 && err == 0, "%s:%d close(): %s", + __FILE__, __LINE__, strerror(err)); + + errno = 0; + rc = stat(path, &sb); + err = errno; + ok(rc == 0 && err == 0, "%s:%d stat(): %s", + __FILE__, __LINE__, strerror(err)); + + errno = 0; + rc = lstat(path, &sb); + err = errno; + ok(rc == 0 && err == 0, "%s:%d lstat(): %s", + __FILE__, __LINE__, strerror(err)); + + /* + errno = 0; + rc = fstat(fd, &sb); + err = errno; + ok(rc == 0 && err == 0, "%s:%d fstat(): %s", + __FILE__, __LINE__, strerror(err)); + */ + + errno = 0; + rc = unlink(path); + err = errno; + ok(rc == 0 && err == 0, + "%s:%d unlink() empty file: %s", + __FILE__, __LINE__, strerror(err)); + + errno = 0; + rc = stat(path, &sb); + err = errno; + ok(rc == -1 && err == ENOENT, + "%s:%d stat() after unlink fails (errno=%d): %s", + __FILE__, __LINE__, err, strerror(err)); + + errno = 0; + rc = lstat(path, &sb); + err = errno; + ok(rc == -1 && err == ENOENT, + "%s:%d lstat() after unlink fails (errno=%d): %s", + __FILE__, __LINE__, err, strerror(err)); + + /* + errno = 0; + rc = fstat(fd, &sb); + err = errno; + ok(rc == -1 && err == ENOENT, + "%s:%d fstat() after unlink fails (errno=%d): %s", + __FILE__, __LINE__, err, strerror(err)); + */ + + diag("Finished UNIFYFS_WRAP(stat) tests"); + + return 0; +} diff --git a/t/sys/sysio_suite.c b/t/sys/sysio_suite.c index a2d5bbdbd..3f68d3c6c 100644 --- a/t/sys/sysio_suite.c +++ b/t/sys/sysio_suite.c @@ -107,6 +107,8 @@ int main(int argc, char* argv[]) chdir_test(unifyfs_root); + stat_test(unifyfs_root); + rc = unifyfs_unmount(); ok(rc == 0, "unifyfs_unmount(%s) (rc=%d)", unifyfs_root, rc); diff --git a/t/sys/sysio_suite.h b/t/sys/sysio_suite.h index c4feb98b1..265e09c45 100644 --- a/t/sys/sysio_suite.h +++ b/t/sys/sysio_suite.h @@ -74,4 +74,7 @@ int unlink_test(char* unifyfs_root); int chdir_test(char* unifyfs_root); +/* Test for UNIFYFS_WRAP(stat, lstat, fstat) */ +int stat_test(char* unifyfs_root); + #endif /* SYSIO_SUITE_H */ From b8f75bcad6210d2a340a33c8a1e9314e4d870f40 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Wed, 24 May 2023 12:32:17 -0700 Subject: [PATCH 14/46] Typo fix Signed-off-by: Chen Wang --- t/sys/stat.c | 6 +----- t/sys/unlink.c | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/t/sys/stat.c b/t/sys/stat.c index 623c07146..b507e4a6b 100644 --- a/t/sys/stat.c +++ b/t/sys/stat.c @@ -13,7 +13,7 @@ */ /* - * Test stat, lstat, fstat, __xstat, __lxstst, __fxstat + * Test stat, lstat, and fstat */ #include #include @@ -80,13 +80,11 @@ int stat_test(char* unifyfs_root) ok(rc == 0 && err == 0, "%s:%d lstat(): %s", __FILE__, __LINE__, strerror(err)); - /* errno = 0; rc = fstat(fd, &sb); err = errno; ok(rc == 0 && err == 0, "%s:%d fstat(): %s", __FILE__, __LINE__, strerror(err)); - */ errno = 0; rc = unlink(path); @@ -109,14 +107,12 @@ int stat_test(char* unifyfs_root) "%s:%d lstat() after unlink fails (errno=%d): %s", __FILE__, __LINE__, err, strerror(err)); - /* errno = 0; rc = fstat(fd, &sb); err = errno; ok(rc == -1 && err == ENOENT, "%s:%d fstat() after unlink fails (errno=%d): %s", __FILE__, __LINE__, err, strerror(err)); - */ diag("Finished UNIFYFS_WRAP(stat) tests"); diff --git a/t/sys/unlink.c b/t/sys/unlink.c index 4f68768ef..961e5bb02 100644 --- a/t/sys/unlink.c +++ b/t/sys/unlink.c @@ -156,7 +156,7 @@ static int unlink_after_sync_laminate_test(char* unifyfs_root) int unlink_test(char* unifyfs_root) { - diag("Finished UNIFYFS_WRAP(unlink) tests"); + diag("Starting UNIFYFS_WRAP(unlink) tests"); char path[64]; char dir_path[64]; From 66ed258f449a71ad5e3a807e1fd600bcaab2dba3 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Wed, 24 May 2023 12:35:23 -0700 Subject: [PATCH 15/46] Use --overlap for srun and remove mpiexec that was used for debug purpose Signed-off-by: Chen Wang --- t/sharness.d/00-test-env.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/t/sharness.d/00-test-env.sh b/t/sharness.d/00-test-env.sh index 17880b4d9..bbe56882c 100644 --- a/t/sharness.d/00-test-env.sh +++ b/t/sharness.d/00-test-env.sh @@ -25,8 +25,7 @@ export UNIFYFS_TEST_RUN_SCRIPT=$UNIFYFS_BUILD_DIR/t/test_run_env.sh if test -n "$(which jsrun 2>/dev/null)"; then JOB_RUN_COMMAND="jsrun -r1 -n1" elif test -n "$(which srun 2>/dev/null)"; then - #JOB_RUN_COMMAND="srun -n1 -N1 --overlap" - JOB_RUN_COMMAND="mpiexec -n 1" + JOB_RUN_COMMAND="srun -n1 -N1 --overlap" elif test -n "$(which mpirun 2>/dev/null)"; then JOB_RUN_COMMAND="mpirun -np 1" if [ $UID -eq 0 ]; then From aff6de48c24390a9e091491c896f34a80f754e1d Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Wed, 24 May 2023 14:15:46 -0700 Subject: [PATCH 16/46] Validate fd in fstat and _fxstat Signed-off-by: Chen Wang --- client/src/unifyfs-sysio.c | 10 ++++++++++ t/sys/stat.c | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/client/src/unifyfs-sysio.c b/client/src/unifyfs-sysio.c index 8fa130b07..f9d2154d8 100644 --- a/client/src/unifyfs-sysio.c +++ b/client/src/unifyfs-sysio.c @@ -808,6 +808,11 @@ int UNIFYFS_WRAP(fstat)(int fd, struct stat* buf) /* check whether we should intercept this file descriptor */ if (unifyfs_intercept_fd(&fd)) { int fid = unifyfs_get_fid_from_fd(fd); + /* check if the file is still active (e.g., not closed)*/ + if (fid == -1) { + errno = EBADF; + return -1; + } const char* path = unifyfs_path_from_fid(posix_client, fid); int ret = __stat(path, buf); return ret; @@ -892,6 +897,11 @@ int UNIFYFS_WRAP(__fxstat)(int vers, int fd, struct stat* buf) } int fid = unifyfs_get_fid_from_fd(fd); + /* check if the file is still active (e.g., not closed) */ + if (fid == -1) { + errno = EBADF; + return -1; + } const char* path = unifyfs_path_from_fid(posix_client, fid); int ret = __stat(path, buf); return ret; diff --git a/t/sys/stat.c b/t/sys/stat.c index b507e4a6b..d9fc52f7e 100644 --- a/t/sys/stat.c +++ b/t/sys/stat.c @@ -110,7 +110,7 @@ int stat_test(char* unifyfs_root) errno = 0; rc = fstat(fd, &sb); err = errno; - ok(rc == -1 && err == ENOENT, + ok(rc == -1 && err == EBADF, "%s:%d fstat() after unlink fails (errno=%d): %s", __FILE__, __LINE__, err, strerror(err)); From 442753f11b7d5159c67b9c708a0f8ebacc6d7c11 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Wed, 24 May 2023 15:06:19 -0700 Subject: [PATCH 17/46] fstat after close should fail with EBADF Signed-off-by: Chen Wang --- t/sys/stat.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/t/sys/stat.c b/t/sys/stat.c index d9fc52f7e..153b81d7b 100644 --- a/t/sys/stat.c +++ b/t/sys/stat.c @@ -83,8 +83,9 @@ int stat_test(char* unifyfs_root) errno = 0; rc = fstat(fd, &sb); err = errno; - ok(rc == 0 && err == 0, "%s:%d fstat(): %s", - __FILE__, __LINE__, strerror(err)); + ok(rc == -1 && err == EBADF, + "%s:%d fstat() after close fails (errno=%d): %s", + __FILE__, __LINE__, err, strerror(err)); errno = 0; rc = unlink(path); From 99776d308b51917a105c7013b2a9ef14a5d11b15 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Mon, 12 Jun 2023 11:40:45 -0700 Subject: [PATCH 18/46] Add C and Fortran wrappers for MPI_Init_thread --- client/src/pmpi_wrappers.c | 26 ++++++++++++++++++++++---- client/src/pmpi_wrappers.h | 4 +++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/client/src/pmpi_wrappers.c b/client/src/pmpi_wrappers.c index ebcfef2f8..a2f669f6a 100644 --- a/client/src/pmpi_wrappers.c +++ b/client/src/pmpi_wrappers.c @@ -21,7 +21,7 @@ #include "unifyfs.h" #include "unifyfs_rc.h" -int unifyfs_mpi_init(int* argc, char*** argv) +int unifyfs_mpi_init(int* argc, char*** argv, int required, int* provided) { int rc, ret; int rank; @@ -29,7 +29,7 @@ int unifyfs_mpi_init(int* argc, char*** argv) //fprintf(stderr, "DEBUG: %s - before PMPI_Init()\n", __func__); - ret = PMPI_Init(argc, argv); + ret = PMPI_Init_thread(argc, argv, required, provided); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &world_sz); @@ -53,14 +53,32 @@ int unifyfs_mpi_init(int* argc, char*** argv) int MPI_Init(int* argc, char*** argv) { - return unifyfs_mpi_init(argc, argv); + int provided; + return unifyfs_mpi_init(argc, argv, MPI_THREAD_SINGLE, &provided); } void mpi_init_(MPI_Fint* ierr) { int argc = 0; char** argv = NULL; - int rc = unifyfs_mpi_init(&argc, &argv); + int provided; + int rc = unifyfs_mpi_init(&argc, &argv, MPI_THREAD_SINGLE, &provided); + + if (NULL != ierr) { + *ierr = (MPI_Fint)rc; + } +} + +int MPI_Init_thread(int* argc, char*** argv, int required, int* provided) +{ + return unifyfs_mpi_init(argc, argv, required, provided); +} + +void mpi_init_thread_(int required, int* provided, MPI_Fint* ierr) +{ + int argc = 0; + char** argv = NULL; + int rc = unifyfs_mpi_init(&argc, &argv, required, provided); if (NULL != ierr) { *ierr = (MPI_Fint)rc; diff --git a/client/src/pmpi_wrappers.h b/client/src/pmpi_wrappers.h index d2066dd59..1a94cad29 100644 --- a/client/src/pmpi_wrappers.h +++ b/client/src/pmpi_wrappers.h @@ -18,9 +18,11 @@ #include /* MPI_Init PMPI wrapper */ -int unifyfs_mpi_init(int* argc, char*** argv); +int unifyfs_mpi_init(int* argc, char*** argv, int required, int* provided); int MPI_Init(int* argc, char*** argv); +int MPI_Init_thread(int* argc, char*** argv, int required, int* provided); void mpi_init_(MPI_Fint* ierr); +void mpi_init_thread_(int required, int* provided, MPI_Fint* ierr); /* MPI_Finalize PMPI wrapper */ int unifyfs_mpi_finalize(void); From 5f155eeb4ab9a06868ee09c930f5b89349a1ae96 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Mon, 12 Jun 2023 10:17:35 -0700 Subject: [PATCH 19/46] Add wrappers for stat64 family calls Signed-off-by: Chen Wang --- client/check_fns/unifyfs_list.txt | 7 +- client/src/gotcha_map_unifyfs_list.c | 22 ++++ client/src/unifyfs-sysio.c | 151 ++++++++++++++++++++++++++- client/src/unifyfs-sysio.h | 11 +- common/src/unifyfs_meta.h | 69 ++++++------ configure.ac | 16 +++ 6 files changed, 238 insertions(+), 38 deletions(-) diff --git a/client/check_fns/unifyfs_list.txt b/client/check_fns/unifyfs_list.txt index 961556a90..2e143f51b 100644 --- a/client/check_fns/unifyfs_list.txt +++ b/client/check_fns/unifyfs_list.txt @@ -8,9 +8,15 @@ int UNIFYFS_WRAP(truncate)(const char* path, off_t length) int UNIFYFS_WRAP(unlink)(const char *path) int UNIFYFS_WRAP(remove)(const char *path) int UNIFYFS_WRAP(stat)(const char *path, struct stat *buf) +int UNIFYFS_WRAP(stat64)(const char *path, struct stat64 *buf) int UNIFYFS_WRAP(fstat)(int fd, struct stat *buf) +int UNIFYFS_WRAP(fstat64)(int fd, struct stat64 *buf) int UNIFYFS_WRAP(__xstat)(int vers, const char *path, struct stat *buf) +int UNIFYFS_WRAP(__xstat64)(int vers, const char *path, struct stat64 *buf) +int UNIFYFS_WRAP(__fxstat)(int vers, int fd, struct stat *buf) +int UNIFYFS_WRAP(__fxstat64)(int vers, int fd, struct stat64 *buf) int UNIFYFS_WRAP(__lxstat)(int vers, const char *path, struct stat *buf) +int UNIFYFS_WRAP(__lxstat64)(int vers, const char *path, struct stat64 *buf) int UNIFYFS_WRAP(creat)(const char* path, mode_t mode) int UNIFYFS_WRAP(creat64)(const char* path, mode_t mode) int UNIFYFS_WRAP(open)(const char *path, int flags, ...) @@ -33,7 +39,6 @@ int UNIFYFS_WRAP(flock)(int fd, int operation) void* UNIFYFS_WRAP(mmap)(void *addr, size_t length, int prot, int flags, int fd, off_t offset) int UNIFYFS_WRAP(msync)(void *addr, size_t length, int flags) void* UNIFYFS_WRAP(mmap64)(void *addr, size_t length, int prot, int flags, int fd, off_t offset) -int UNIFYFS_WRAP(__fxstat)(int vers, int fd, struct stat *buf) int UNIFYFS_WRAP(close)(int fd) FILE* UNIFYFS_WRAP(fopen)(const char *path, const char *mode) FILE* UNIFYFS_WRAP(fopen64)(const char *path, const char *mode) diff --git a/client/src/gotcha_map_unifyfs_list.c b/client/src/gotcha_map_unifyfs_list.c index 1d41205cd..338f814b3 100644 --- a/client/src/gotcha_map_unifyfs_list.c +++ b/client/src/gotcha_map_unifyfs_list.c @@ -72,18 +72,33 @@ UNIFYFS_DEF(futimens, int, UNIFYFS_DEF(stat, int, (const char* path, struct stat* buf), (path, buf)) +UNIFYFS_DEF(stat64, int, + (const char* path, struct stat64* buf), + (path, buf)) UNIFYFS_DEF(fstat, int, (int fd, struct stat* buf), (fd, buf)) +UNIFYFS_DEF(fstat64, int, + (int fd, struct stat64* buf), + (fd, buf)) UNIFYFS_DEF(__xstat, int, (int vers, const char* path, struct stat* buf), (vers, path, buf)) +UNIFYFS_DEF(__xstat64, int, + (int vers, const char* path, struct stat64* buf), + (vers, path, buf)) UNIFYFS_DEF(__fxstat, int, (int vers, int fd, struct stat* buf), (vers, fd, buf)) +UNIFYFS_DEF(__fxstat64, int, + (int vers, int fd, struct stat64* buf), + (vers, fd, buf)) UNIFYFS_DEF(__lxstat, int, (int vers, const char* path, struct stat* buf), (vers, path, buf)) +UNIFYFS_DEF(__lxstat64, int, + (int vers, const char* path, struct stat64* buf), + (vers, path, buf)) UNIFYFS_DEF(statfs, int, (const char* path, struct statfs* fsbuf), (path, fsbuf)) @@ -367,11 +382,18 @@ struct gotcha_binding_t unifyfs_wrappers[] = { { "remove", UNIFYFS_WRAP(remove), &wrappee_handle_remove }, { "utimensat", UNIFYFS_WRAP(utimensat), &wrappee_handle_utimensat }, { "futimens", UNIFYFS_WRAP(futimens), &wrappee_handle_futimens }, + { "stat", UNIFYFS_WRAP(stat), &wrappee_handle_stat }, + { "stat64", UNIFYFS_WRAP(stat64), &wrappee_handle_stat64 }, { "fstat", UNIFYFS_WRAP(fstat), &wrappee_handle_fstat }, + { "fstat64", UNIFYFS_WRAP(fstat64), &wrappee_handle_fstat64 }, { "__xstat", UNIFYFS_WRAP(__xstat), &wrappee_handle___xstat }, + { "__xstat64", UNIFYFS_WRAP(__xstat64), &wrappee_handle___xstat64 }, { "__fxstat", UNIFYFS_WRAP(__fxstat), &wrappee_handle___fxstat }, + { "__fxstat64", UNIFYFS_WRAP(__fxstat64), &wrappee_handle___fxstat64 }, { "__lxstat", UNIFYFS_WRAP(__lxstat), &wrappee_handle___lxstat }, + { "__lxstat64", UNIFYFS_WRAP(__lxstat64), &wrappee_handle___lxstat64 }, + { "statfs", UNIFYFS_WRAP(statfs), &wrappee_handle_statfs }, { "fstatfs", UNIFYFS_WRAP(fstatfs), &wrappee_handle_fstatfs }, { "creat", UNIFYFS_WRAP(creat), &wrappee_handle_creat }, diff --git a/client/src/unifyfs-sysio.c b/client/src/unifyfs-sysio.c index f9d2154d8..33a56eb5e 100644 --- a/client/src/unifyfs-sysio.c +++ b/client/src/unifyfs-sysio.c @@ -783,13 +783,63 @@ static int __stat(const char* path, struct stat* buf) /* copy attributes to stat struct */ unifyfs_file_attr_to_stat(&fattr, buf); + errno = 0; return 0; } +static int __stat64(const char* path, struct stat64* buf) +{ + /* check that caller gave us a buffer to write to */ + if (!buf) { + /* forgot buffer for stat */ + LOGDBG("invalid stat buffer"); + errno = EINVAL; + return -1; + } + + /* flush any pending writes if needed */ + int fid = unifyfs_fid_from_path(posix_client, path); + if (fid != -1) { + int sync_rc = unifyfs_fid_sync_extents(posix_client, fid); + if (sync_rc != UNIFYFS_SUCCESS) { + errno = unifyfs_rc_errno(sync_rc); + return -1; + } + } + + /* clear the user buffer */ + memset(buf, 0, sizeof(*buf)); + + /* get global file id for given path */ + int gfid = unifyfs_generate_gfid(path); + + /* get stat information for file */ + unifyfs_file_attr_t fattr; + memset(&fattr, 0, sizeof(fattr)); + int ret = unifyfs_get_meta_with_size(gfid, &fattr); + if (ret != UNIFYFS_SUCCESS) { + errno = unifyfs_rc_errno(ret); + return -1; + } + + /* update local file metadata (if applicable) */ + if (fid != -1) { + unifyfs_fid_update_file_meta(posix_client, fid, &fattr); + } + + /* copy attributes to stat struct */ + unifyfs_file_attr_to_stat(&fattr, buf); + + errno = 0; + return 0; +} + + int UNIFYFS_WRAP(stat)(const char* path, struct stat* buf) { LOGDBG("stat was called for %s", path); + char upath[UNIFYFS_MAX_FILENAME]; if (unifyfs_intercept_path(path, upath)) { int ret = __stat(upath, buf); @@ -801,6 +851,22 @@ int UNIFYFS_WRAP(stat)(const char* path, struct stat* buf) } } +int UNIFYFS_WRAP(stat64)(const char* path, struct stat64* buf) +{ + LOGDBG("stat64 was called for %s", path); + + char upath[UNIFYFS_MAX_FILENAME]; + if (unifyfs_intercept_path(path, upath)) { + int ret = __stat64(upath, buf); + return ret; + } else { + MAP_OR_FAIL(stat64); + int ret = UNIFYFS_REAL(stat64)(path, buf); + return ret; + } + return 0; +} + int UNIFYFS_WRAP(fstat)(int fd, struct stat* buf) { LOGDBG("fstat was called for fd: %d", fd); @@ -808,7 +874,7 @@ int UNIFYFS_WRAP(fstat)(int fd, struct stat* buf) /* check whether we should intercept this file descriptor */ if (unifyfs_intercept_fd(&fd)) { int fid = unifyfs_get_fid_from_fd(fd); - /* check if the file is still active (e.g., not closed)*/ + /* check if the file is still active (e.g., not closed) */ if (fid == -1) { errno = EBADF; return -1; @@ -823,6 +889,23 @@ int UNIFYFS_WRAP(fstat)(int fd, struct stat* buf) } } +int UNIFYFS_WRAP(fstat64)(int fd, struct stat64* buf) +{ + LOGDBG("fstat64 was called for fd: %d", fd); + + /* check whether we should intercept this file descriptor */ + if (unifyfs_intercept_fd(&fd)) { + int fid = unifyfs_get_fid_from_fd(fd); + const char* path = unifyfs_path_from_fid(posix_client, fid); + int ret = __stat64(path, buf); + return ret; + } else { + MAP_OR_FAIL(fstat64); + int ret = UNIFYFS_REAL(fstat64)(fd, buf); + return ret; + } +} + /* * NOTE on __xstat(2), __lxstat(2), and __fxstat(2) * The additional parameter vers shall be 3 or the behavior of these functions @@ -863,6 +946,27 @@ int UNIFYFS_WRAP(__xstat)(int vers, const char* path, struct stat* buf) } #endif +#ifdef HAVE___XSTAT64 +int UNIFYFS_WRAP(__xstat64)(int vers, const char* path, struct stat64* buf) +{ + LOGDBG("xstat64 was called for %s", path); + + char upath[UNIFYFS_MAX_FILENAME]; + if (unifyfs_intercept_path(path, upath)) { + if (vers != _STAT_VER) { + errno = EINVAL; + return -1; + } + int ret = __stat64(upath, buf); + return ret; + } else { + MAP_OR_FAIL(__xstat64); + int ret = UNIFYFS_REAL(__xstat64)(vers, path, buf); + return ret; + } +} +#endif + #ifdef HAVE___LXSTAT int UNIFYFS_WRAP(__lxstat)(int vers, const char* path, struct stat* buf) { @@ -884,6 +988,27 @@ int UNIFYFS_WRAP(__lxstat)(int vers, const char* path, struct stat* buf) } #endif +#ifdef HAVE___LXSTAT64 +int UNIFYFS_WRAP(__lxstat64)(int vers, const char* path, struct stat64* buf) +{ + LOGDBG("lxstat64 was called for %s", path); + + char upath[UNIFYFS_MAX_FILENAME]; + if (unifyfs_intercept_path(path, upath)) { + if (vers != _STAT_VER) { + errno = EINVAL; + return -1; + } + int ret = __stat64(upath, buf); + return ret; + } else { + MAP_OR_FAIL(__lxstat64); + int ret = UNIFYFS_REAL(__lxstat64)(vers, path, buf); + return ret; + } +} +#endif + #ifdef HAVE___FXSTAT int UNIFYFS_WRAP(__fxstat)(int vers, int fd, struct stat* buf) { @@ -913,6 +1038,30 @@ int UNIFYFS_WRAP(__fxstat)(int vers, int fd, struct stat* buf) } #endif +#ifdef HAVE___FXSTAT64 +int UNIFYFS_WRAP(__fxstat64)(int vers, int fd, struct stat64* buf) +{ + LOGDBG("fxstat64 was called for fd %d", fd); + + /* check whether we should intercept this file descriptor */ + if (unifyfs_intercept_fd(&fd)) { + if (vers != _STAT_VER) { + errno = EINVAL; + return -1; + } + + int fid = unifyfs_get_fid_from_fd(fd); + const char* path = unifyfs_path_from_fid(posix_client, fid); + int ret = __stat64(path, buf); + return ret; + } else { + MAP_OR_FAIL(__fxstat64); + int ret = UNIFYFS_REAL(__fxstat64)(vers, fd, buf); + return ret; + } +} +#endif + #ifdef HAVE_SYS_STATFS_H diff --git a/client/src/unifyfs-sysio.h b/client/src/unifyfs-sysio.h index cc4174684..c078c76e7 100644 --- a/client/src/unifyfs-sysio.h +++ b/client/src/unifyfs-sysio.h @@ -58,12 +58,15 @@ /* file and directory operations */ UNIFYFS_DECL(access, int, (const char* pathname, int mode)); UNIFYFS_DECL(chmod, int, (const char* path, mode_t mode)); -UNIFYFS_DECL(__lxstat, int, (int vers, const char* path, struct stat* buf)); UNIFYFS_DECL(remove, int, (const char* path)); UNIFYFS_DECL(rename, int, (const char* oldpath, const char* newpath)); UNIFYFS_DECL(stat, int, (const char* path, struct stat* buf)); -UNIFYFS_DECL(statfs, int, (const char* path, struct statfs* fsbuf)); +UNIFYFS_DECL(stat64, int, (const char* path, struct stat64* buf)); UNIFYFS_DECL(__xstat, int, (int vers, const char* path, struct stat* buf)); +UNIFYFS_DECL(__xstat64, int, (int vers, const char* path, struct stat64* buf)); +UNIFYFS_DECL(__lxstat, int, (int vers, const char* path, struct stat* buf)); +UNIFYFS_DECL(__lxstat64, int, (int vers, const char* path, struct stat64* buf)); +UNIFYFS_DECL(statfs, int, (const char* path, struct statfs* fsbuf)); UNIFYFS_DECL(utimensat, int, (int dirfd, const char* pathname, const struct timespec times[2], int flags)); UNIFYFS_DECL(futimens, int, (int fd, const struct timespec times[2])); @@ -124,8 +127,10 @@ UNIFYFS_DECL(fchdir, int, (int fd)); UNIFYFS_DECL(fchmod, int, (int fd, mode_t mode)); UNIFYFS_DECL(flock, int, (int fd, int operation)); UNIFYFS_DECL(fstat, int, (int fd, struct stat* buf)); -UNIFYFS_DECL(fstatfs, int, (int fd, struct statfs* fsbuf)); +UNIFYFS_DECL(fstat64, int, (int fd, struct stat64* buf)); UNIFYFS_DECL(__fxstat, int, (int vers, int fd, struct stat* buf)); +UNIFYFS_DECL(__fxstat64, int, (int vers, int fd, struct stat64* buf)); +UNIFYFS_DECL(fstatfs, int, (int fd, struct statfs* fsbuf)); UNIFYFS_DECL(posix_fadvise, int, (int fd, off_t offset, off_t len, int advice)); /* diff --git a/common/src/unifyfs_meta.h b/common/src/unifyfs_meta.h index 0c1d35116..9a4386f82 100644 --- a/common/src/unifyfs_meta.h +++ b/common/src/unifyfs_meta.h @@ -263,41 +263,44 @@ int unifyfs_file_attr_update(int attr_op, return 0; } -static inline -void unifyfs_file_attr_to_stat(unifyfs_file_attr_t* fattr, struct stat* sb) -{ - if (fattr && sb) { - debug_print_file_attr(fattr); - - sb->st_dev = UNIFYFS_STAT_DEFAULT_DEV; - sb->st_ino = fattr->gfid; - sb->st_mode = fattr->mode; - sb->st_uid = fattr->uid; - sb->st_gid = fattr->gid; - sb->st_rdev = UNIFYFS_STAT_DEFAULT_DEV; - sb->st_size = fattr->size; - - /* TODO: use cfg.logio_chunk_size here for st_blksize - * and report actual chunks allocated for st_blocks */ - sb->st_blksize = UNIFYFS_STAT_DEFAULT_BLKSIZE; - sb->st_blocks = fattr->size / UNIFYFS_STAT_DEFAULT_BLKSIZE; - if (fattr->size % UNIFYFS_STAT_DEFAULT_BLKSIZE > 0) { - sb->st_blocks += 1; - } - - /* - * Re-purpose st_nlink to tell us if the file is laminated or not. - * That way, if we do eventually make /unifyfs mountable, we can easily - * see with 'ls -l' or stat if the file is laminated or not. - */ - sb->st_nlink = fattr->is_laminated ? 1 : 0; - - sb->st_atim = fattr->atime; - sb->st_mtim = fattr->mtime; - sb->st_ctim = fattr->ctime; - } +/* + * Convert UnifyFS file attr to sturct stat/stat64 + * + * fattr is type of unifyfs_file_attr_t* + * sb is type of struct stat* or struct stat64* + */ +#define unifyfs_file_attr_to_stat(fattr, sb) \ +{ \ + unifyfs_file_attr_t* _fattr = (fattr); \ + if (_fattr && (NULL != (void*)(sb))) { \ + debug_print_file_attr(_fattr); \ + (sb)->st_dev = UNIFYFS_STAT_DEFAULT_DEV; \ + (sb)->st_ino = _fattr->gfid; \ + (sb)->st_mode = _fattr->mode; \ + (sb)->st_uid = _fattr->uid; \ + (sb)->st_gid = _fattr->gid; \ + (sb)->st_rdev = UNIFYFS_STAT_DEFAULT_DEV; \ + (sb)->st_size = _fattr->size; \ + \ + /* TODO: use cfg.logio_chunk_size here for st_blksize */ \ + /* and report actual chunks allocated for st_blocks */ \ + (sb)->st_blksize = UNIFYFS_STAT_DEFAULT_BLKSIZE; \ + (sb)->st_blocks = _fattr->size / UNIFYFS_STAT_DEFAULT_BLKSIZE; \ + if (_fattr->size % UNIFYFS_STAT_DEFAULT_BLKSIZE > 0) { \ + (sb)->st_blocks += 1; \ + } \ + /* Re-purpose st_nlink to tell us if the file is laminated or not. */ \ + /* That way, if we do eventually make /unifyfs mountable, we can */ \ + /* easily see with 'ls -l' or stat if the file is laminated or not.*/ \ + (sb)->st_nlink = _fattr->is_laminated ? 1 : 0; \ + \ + (sb)->st_atim = _fattr->atime; \ + (sb)->st_mtim = _fattr->mtime; \ + (sb)->st_ctim = _fattr->ctime; \ + } \ } + /* given an input mode, mask it with umask and return. * set perms=0 to request all read/write bits */ static inline diff --git a/configure.ac b/configure.ac index 5a9ba927a..ffafecfd2 100755 --- a/configure.ac +++ b/configure.ac @@ -256,7 +256,14 @@ LINK_WRAPPERS+=",-wrap,munmap" # status functions LINK_WRAPPERS+=",-wrap,fstat" +AC_CHECK_FUNCS(fstat64,[ + LINK_WRAPPERS+=",-wrap,fstat64" +],[]) LINK_WRAPPERS+=",-wrap,stat" +AC_CHECK_FUNCS(stat64,[ + LINK_WRAPPERS+=",-wrap,stat64" +],[]) + AC_CHECK_FUNCS(statfs,[ LINK_WRAPPERS+=",-wrap,statfs" ],[]) @@ -267,10 +274,19 @@ AC_CHECK_FUNCS(fstatfs,[ AC_CHECK_FUNCS(__lxstat,[ LINK_WRAPPERS+=",-wrap,__lxstat" ],[]) +AC_CHECK_FUNCS(__lxstat64,[ + LINK_WRAPPERS+=",-wrap,__lxstat64" +],[]) AC_CHECK_FUNCS(__xstat,[ LINK_WRAPPERS+=",-wrap,__xstat" ],[]) +AC_CHECK_FUNCS(__xstat64,[ + LINK_WRAPPERS+=",-wrap,__xstat64" +],[]) AC_CHECK_FUNCS(__fxstat,[ + LINK_WRAPPERS+=",-wrap,__fxstat64" +],[]) +AC_CHECK_FUNCS(__fxstat64,[ LINK_WRAPPERS+=",-wrap,__fxstat" ],[]) From 1650c7006f8ad076200b9a021d1cb2430e4d139d Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Mon, 12 Jun 2023 12:00:31 -0700 Subject: [PATCH 20/46] Wrap the unifyfs_file_attr_to_stat marco in a while loop Signed-off-by: Chen Wang --- common/src/unifyfs_meta.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/src/unifyfs_meta.h b/common/src/unifyfs_meta.h index 9a4386f82..6a9ef2a65 100644 --- a/common/src/unifyfs_meta.h +++ b/common/src/unifyfs_meta.h @@ -263,16 +263,16 @@ int unifyfs_file_attr_update(int attr_op, return 0; } -/* - * Convert UnifyFS file attr to sturct stat/stat64 +/* + * Convert UnifyFS file attr to struct stat/stat64 * * fattr is type of unifyfs_file_attr_t* * sb is type of struct stat* or struct stat64* */ #define unifyfs_file_attr_to_stat(fattr, sb) \ -{ \ +do { \ unifyfs_file_attr_t* _fattr = (fattr); \ - if (_fattr && (NULL != (void*)(sb))) { \ + if (_fattr && (NULL != (void*)(sb))) { \ debug_print_file_attr(_fattr); \ (sb)->st_dev = UNIFYFS_STAT_DEFAULT_DEV; \ (sb)->st_ino = _fattr->gfid; \ @@ -298,7 +298,7 @@ int unifyfs_file_attr_update(int attr_op, (sb)->st_mtim = _fattr->mtime; \ (sb)->st_ctim = _fattr->ctime; \ } \ -} +} while (0) /* given an input mode, mask it with umask and return. From 8163f160353282614dbdaeddc98cb1b2806c61d4 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Mon, 12 Jun 2023 12:26:31 -0700 Subject: [PATCH 21/46] Swap __fxstat64 and __fxstat in configure.ac Signed-off-by: Chen Wang --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index ffafecfd2..f382cdd95 100755 --- a/configure.ac +++ b/configure.ac @@ -284,10 +284,10 @@ AC_CHECK_FUNCS(__xstat64,[ LINK_WRAPPERS+=",-wrap,__xstat64" ],[]) AC_CHECK_FUNCS(__fxstat,[ - LINK_WRAPPERS+=",-wrap,__fxstat64" + LINK_WRAPPERS+=",-wrap,__fxstat" ],[]) AC_CHECK_FUNCS(__fxstat64,[ - LINK_WRAPPERS+=",-wrap,__fxstat" + LINK_WRAPPERS+=",-wrap,__fxstat64" ],[]) AC_CHECK_FUNCS(posix_fadvise, [ From 589bf3afdb738ed26742efa0edcf6110fe3583a9 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Wed, 21 Jun 2023 15:04:21 -0700 Subject: [PATCH 22/46] Call PMPI_Finalize() before we unmount the client Signed-off-by: Chen Wang --- client/src/pmpi_wrappers.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/client/src/pmpi_wrappers.c b/client/src/pmpi_wrappers.c index a2f669f6a..0d8a17b28 100644 --- a/client/src/pmpi_wrappers.c +++ b/client/src/pmpi_wrappers.c @@ -89,11 +89,6 @@ int unifyfs_mpi_finalize(void) { int rc, ret; - rc = unifyfs_unmount(); - if (UNIFYFS_SUCCESS != rc) { - fprintf(stderr, "UNIFYFS ERROR: unifyfs_unmount() failed with '%s'\n", - unifyfs_rc_enum_description((unifyfs_rc)rc)); - } //fprintf(stderr, "DEBUG: %s - before PMPI_Finalize()\n", __func__); @@ -102,6 +97,12 @@ int unifyfs_mpi_finalize(void) //fprintf(stderr, "DEBUG: %s - after PMPI_Finalize(), ret=%d\n", // __func__, ret); + rc = unifyfs_unmount(); + if (UNIFYFS_SUCCESS != rc) { + fprintf(stderr, "UNIFYFS ERROR: unifyfs_unmount() failed with '%s'\n", + unifyfs_rc_enum_description((unifyfs_rc)rc)); + } + return ret; } From c4d97d61d4405b2f222247a1fe1defc285040a6e Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Thu, 22 Jun 2023 18:24:59 -0700 Subject: [PATCH 23/46] avoid missing function prototype from newer C compilers --- client/src/unifyfs-stdio.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/src/unifyfs-stdio.c b/client/src/unifyfs-stdio.c index ffa5b29ea..8b5db6c5e 100644 --- a/client/src/unifyfs-stdio.c +++ b/client/src/unifyfs-stdio.c @@ -3043,9 +3043,10 @@ __svfscanf(unifyfs_stream_t* fp, const char* fmt0, va_list ap) * considered part of the scanset. */ static const u_char* -__sccl(tab, fmt) -char* tab; -const u_char* fmt; +__sccl(char* tab, const u_char* fmt) +//__sccl(tab, fmt) +//char* tab; +//const u_char* fmt; { int c, n, v; From 156ea717300ec3880e24403a694332999d036295 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Thu, 22 Jun 2023 18:26:22 -0700 Subject: [PATCH 24/46] make stat wrappers conditional on symbol existence --- client/src/unifyfs-sysio.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/client/src/unifyfs-sysio.c b/client/src/unifyfs-sysio.c index 33a56eb5e..cd1d3b976 100644 --- a/client/src/unifyfs-sysio.c +++ b/client/src/unifyfs-sysio.c @@ -835,7 +835,6 @@ static int __stat64(const char* path, struct stat64* buf) return 0; } - int UNIFYFS_WRAP(stat)(const char* path, struct stat* buf) { LOGDBG("stat was called for %s", path); @@ -851,6 +850,7 @@ int UNIFYFS_WRAP(stat)(const char* path, struct stat* buf) } } +#ifdef HAVE_STAT64 int UNIFYFS_WRAP(stat64)(const char* path, struct stat64* buf) { LOGDBG("stat64 was called for %s", path); @@ -864,8 +864,8 @@ int UNIFYFS_WRAP(stat64)(const char* path, struct stat64* buf) int ret = UNIFYFS_REAL(stat64)(path, buf); return ret; } - return 0; } +#endif int UNIFYFS_WRAP(fstat)(int fd, struct stat* buf) { @@ -873,12 +873,13 @@ int UNIFYFS_WRAP(fstat)(int fd, struct stat* buf) /* check whether we should intercept this file descriptor */ if (unifyfs_intercept_fd(&fd)) { - int fid = unifyfs_get_fid_from_fd(fd); /* check if the file is still active (e.g., not closed) */ + int fid = unifyfs_get_fid_from_fd(fd); if (fid == -1) { errno = EBADF; return -1; } + const char* path = unifyfs_path_from_fid(posix_client, fid); int ret = __stat(path, buf); return ret; @@ -889,13 +890,20 @@ int UNIFYFS_WRAP(fstat)(int fd, struct stat* buf) } } +#ifdef HAVE_FSTAT64 int UNIFYFS_WRAP(fstat64)(int fd, struct stat64* buf) { LOGDBG("fstat64 was called for fd: %d", fd); /* check whether we should intercept this file descriptor */ if (unifyfs_intercept_fd(&fd)) { + /* check if the file is still active (e.g., not closed) */ int fid = unifyfs_get_fid_from_fd(fd); + if (fid == -1) { + errno = EBADF; + return -1; + } + const char* path = unifyfs_path_from_fid(posix_client, fid); int ret = __stat64(path, buf); return ret; @@ -905,6 +913,7 @@ int UNIFYFS_WRAP(fstat64)(int fd, struct stat64* buf) return ret; } } +#endif /* * NOTE on __xstat(2), __lxstat(2), and __fxstat(2) From 3e6f01d303052db043f24a6aa7d9767d4a70a57b Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Wed, 5 Jul 2023 17:20:52 -0700 Subject: [PATCH 25/46] avoid unused function error when no stat64 variant detected --- client/src/unifyfs-sysio.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/src/unifyfs-sysio.c b/client/src/unifyfs-sysio.c index cd1d3b976..77158b60d 100644 --- a/client/src/unifyfs-sysio.c +++ b/client/src/unifyfs-sysio.c @@ -788,6 +788,11 @@ static int __stat(const char* path, struct stat* buf) return 0; } +#if defined(HAVE_STAT64) || \ + defined(HAVE_FSTAT64) || \ + defined(HAVE___XSTAT64) || \ + defined(HAVE___LXSTAT64) || \ + defined(HAVE___FXSTAT64) static int __stat64(const char* path, struct stat64* buf) { /* check that caller gave us a buffer to write to */ @@ -834,6 +839,7 @@ static int __stat64(const char* path, struct stat64* buf) errno = 0; return 0; } +#endif int UNIFYFS_WRAP(stat)(const char* path, struct stat* buf) { From b273f0e5dd0fd6632ef826f5955251f8b8bad403 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Mon, 26 Jun 2023 18:26:46 -0700 Subject: [PATCH 26/46] doc: better describe need for ncmpi_sync --- docs/limitations.rst | 47 +++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/docs/limitations.rst b/docs/limitations.rst index 424470c39..b30121791 100644 --- a/docs/limitations.rst +++ b/docs/limitations.rst @@ -340,22 +340,22 @@ since it may induce more file flush operations than necessary. PnetCDF Limitations ------------------- PnetCDF applications can utilize UnifyFS, -and in fact, the semantics of the `PnetCDF API`_ align well with UnifyFS constraints. - -PnetCDF parallelizes access to NetCDF files using MPI. -An MPI communicator is passed as an argument when opening a file. -Any collective call in PnetCDF is global across the process group -associated with the communicator used to open the file. +and the semantics of the `PnetCDF API`_ align well with UnifyFS constraints. +PnetCDF uses MPI-IO to read and write files. In addition to any restrictions required when using UnifyFS with PnetCDF, -one should also follow any recommendations regarding UnifyFS and the +one must follow any recommendations regarding UnifyFS and the underlying MPI-IO implementation. Data Consistency **************** -PnetCDF uses MPI-IO to read and write files, -and PnetCDF follows the data consistency model defined by MPI-IO. +PnetCDF parallelizes access to NetCDF files using MPI. +An MPI communicator is passed as an argument when opening a file. +Any collective call in PnetCDF is global across the process group +associated with the communicator used to open the file. + +PnetCDF follows the data consistency model defined by MPI-IO. Specifically, from its documentation about `PnetCDF data consistency`_: .. Note:: @@ -371,7 +371,7 @@ Specifically, from its documentation about `PnetCDF data consistency`_: users can explicitly call ``ncmpi_sync()``. In ``ncmpi_sync()``, ``MPI_File_sync()`` and ``MPI_Barrier()`` are called. -Upon inspection of the PnetCDF implementation, +Upon inspection of the implementation of the PnetCDF v1.12.3 release, the following PnetCDF functions include the following calls:: ncmpio_file_sync @@ -401,11 +401,30 @@ the following PnetCDF functions include the following calls:: If a program must read data written by another process, PnetCDF users must do one of the following when using UnifyFS: -1) Set ``UNIFYFS_CLIENT_WRITE_SYNC=1``, in which case each POSIX +1) Add explicit calls to ``ncmpi_sync()`` after writing and before reading. +2) Set ``UNIFYFS_CLIENT_WRITE_SYNC=1``, in which case each POSIX write operation invokes a flush. -2) Use ``NC_SHARE`` when opening files so that the PnetCDF library invokes +3) Use ``NC_SHARE`` when opening files so that the PnetCDF library invokes ``MPI_File_sync()`` and ``MPI_Barrier()`` calls after its MPI-IO operations. -3) Add explicit calls to ``ncmpi_sync()`` after writing and before reading. + +Of these options, +it is recommended that one add ``ncmpi_sync()`` calls where necessary. +Setting ``UNIFYFS_CLIENT_WRITE_SYNC=1`` is convenient since one does not +need to change the application, but it may have a larger impact on performance. +Opening or creating a file with ``NC_SHARE`` may work for some applications, +but it depends on whether the PnetCDF implementation +internally calls ``MPI_File_sync()`` at all appropriate places, +which is not guaranteed. + +A number of PnetCDF calls invoke write operations on the underlying file. +In addition to the ``ncmpi_put_*`` collection of calls +that write data to variables or attributes, +``ncmpi_enddef`` updates variable definitions, +and it can fill variables with default values. +Users may also explicitly fill variables by calling ``ncmpi_fill_var_rec()``. +One must ensure necessary ``ncmpi_sync()`` calls are placed between +any fill and write operations in case +they happen to write to overlapping regions of a file. Note that ``ncmpi_sync()`` calls ``MPI_File_sync()`` and ``MPI_Barrier()``, but it does not call ``MPI_File_sync()`` again after calling ``MPI_Barrier()``. @@ -427,4 +446,4 @@ as noted above. .. _VerifyIO README: https://github.com/uiuc-hpc/Recorder/tree/pilgrim/tools/verifyio#note-on-the-third-step .. _ROMIO hints file: https://wordpress.cels.anl.gov/romio/2008/09/26/system-hints-hints-via-config-file .. _PnetCDF API: https://parallel-netcdf.github.io/wiki/pnetcdf-api.pdf -.. _PnetCDF data consistency: https://github.com/Parallel-NetCDF/PnetCDF/blob/master/doc/README.consistency +.. _PnetCDF data consistency: https://github.com/Parallel-NetCDF/PnetCDF/blob/e47596438326bfa7b9ed0b3857800d3a0d09ff1a/doc/README.consistency.md From 42d449ef3ad81fda18b5d58304d4bffadb2401ef Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Thu, 13 Jul 2023 14:39:51 -0400 Subject: [PATCH 27/46] Fix warning about too small buffer in write() call Fix a warning about a write() call having too small a buffer for the number of bytes it was supposed to write. Also replaced a pair of literal numbers that were used repeatedly with #defines. Resolves issue #782 --- t/sys/write-read.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/t/sys/write-read.c b/t/sys/write-read.c index 2c63d9c2a..dc5fcee22 100644 --- a/t/sys/write-read.c +++ b/t/sys/write-read.c @@ -360,8 +360,11 @@ int write_pre_existing_file_test(char* unifyfs_root) { diag("Starting write-to-pre-existing-file tests"); +#define TEST_LEN 300 +#define TEST_LEN_SHORT 100 +/* TEST_LEN_SHORT must be less than TEST_LEN */ char path[64]; - char buf[300] = {0}; + char buf[TEST_LEN] = {0}; int fd = -1; int err, rc; size_t global; @@ -374,13 +377,13 @@ int write_pre_existing_file_test(char* unifyfs_root) ok(fd != -1 && err == 0, "%s:%d open(%s) (fd=%d): %s", __FILE__, __LINE__, path, fd, strerror(err)); - /* Write 300 bytes to a file */ + /* Write TEST_LEN bytes to a file */ errno = 0; - rc = (int) write(fd, "a", 300); + rc = (int) write(fd, buf, TEST_LEN); err = errno; - ok(rc == 300 && err == 0, - "%s:%d write() a 300 byte file: %s", - __FILE__, __LINE__, strerror(err)); + ok(rc == TEST_LEN && err == 0, + "%s:%d write() a %d byte file: %s", + __FILE__, __LINE__, TEST_LEN, strerror(err)); errno = 0; rc = close(fd); @@ -388,10 +391,10 @@ int write_pre_existing_file_test(char* unifyfs_root) ok(rc == 0 && err == 0, "%s:%d close() worked: %s", __FILE__, __LINE__, strerror(err)); - /* Check global size is 300 */ + /* Check global size is correct */ testutil_get_size(path, &global); - ok(global == 300, "%s:%d global size of 300 byte file is %zu: %s", - __FILE__, __LINE__, global, strerror(err)); + ok(global == TEST_LEN, "%s:%d global size of %d byte file is %zu: %s", + __FILE__, __LINE__, TEST_LEN, global, strerror(err)); /* Reopen the same file */ errno = 0; @@ -400,13 +403,13 @@ int write_pre_existing_file_test(char* unifyfs_root) ok(fd != -1 && err == 0, "%s:%d open(%s) (fd=%d): %s", __FILE__, __LINE__, path, fd, strerror(err)); - /* Overwrite the first 100 bytes of same file */ + /* Overwrite the first part of same file */ errno = 0; - rc = (int) write(fd, buf, 100); + rc = (int) write(fd, buf, TEST_LEN_SHORT); err = errno; - ok(rc == 100 && err == 0, - "%s:%d overwrite first 100 bytes of same file: %s", - __FILE__, __LINE__, strerror(err)); + ok(rc == TEST_LEN_SHORT && err == 0, + "%s:%d overwrite first %d bytes of same file: %s", + __FILE__, __LINE__, TEST_LEN_SHORT, strerror(err)); errno = 0; rc = close(fd); @@ -414,10 +417,10 @@ int write_pre_existing_file_test(char* unifyfs_root) ok(rc == 0 && err == 0, "%s:%d close() worked: %s", __FILE__, __LINE__, strerror(err)); - /* Check global size is 300 */ + /* Check global size is still correct */ testutil_get_size(path, &global); - ok(global == 300, "%s:%d global size of 300 byte file is %zu: %s", - __FILE__, __LINE__, global, strerror(err)); + ok(global == TEST_LEN, "%s:%d global size of %d byte file is %zu: %s", + __FILE__, __LINE__, TEST_LEN, global, strerror(err)); errno = 0; rc = unlink(path); From de632673d822a71517ffebefea9b227d82c02931 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Fri, 21 Jul 2023 12:46:56 -0700 Subject: [PATCH 28/46] fix: remove potential double free --- server/src/unifyfs_group_rpc.c | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index 1298f2ed4..8d9799229 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -262,7 +262,6 @@ static int merge_metaget_all_bcast_outputs( LOGERR("margo_bulk_create() failed - %s", HG_Error_to_string(hret)); p_out->file_meta = parent_old_bulk; free(parent_attr_list); - free(child_attr_list); return UNIFYFS_ERROR_MARGO; } From c6bccbf8854e9c489c2c854d131c08b956c65afe Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Fri, 28 Jul 2023 13:25:54 -0700 Subject: [PATCH 29/46] Do not assume file must exist after an open call Signed-off-by: Chen Wang --- client/src/unifyfs_fid.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/unifyfs_fid.c b/client/src/unifyfs_fid.c index c9df554df..9ea448ef2 100644 --- a/client/src/unifyfs_fid.c +++ b/client/src/unifyfs_fid.c @@ -553,15 +553,15 @@ int unifyfs_fid_open( } } - /* File should exist at this point, - * update our cache with its metadata. */ + /* Update our cache with its metadata. */ ret = unifyfs_fid_fetch(client, path); if (ret != UNIFYFS_SUCCESS) { - /* Failed to get metadata for a file that should exist. - * Perhaps it was since deleted. We could try to create - * it again and loop through these steps, but for now - * consider this situation to be an error. */ - LOGERR("Failed to get metadata on existing file %s", path); + /* Failed to get metadata. + * Perhaps it was opened without O_CREAT or it + * was since deleted. For the latter, we could + * try to create it again and loop through these + * steps. */ + LOGDBG("Failed to get metadata on file %s", path); return ret; } From 02504011002b255a02c9af5d91d0537f784b327a Mon Sep 17 00:00:00 2001 From: "Michael J. Brim" Date: Fri, 21 Apr 2023 09:41:30 -0400 Subject: [PATCH 30/46] add pending metaget to reduce owner lookups Also: * fix premature heartbeat rpc attempt --- common/src/unifyfs_meta.h | 17 +- server/src/margo_server.c | 4 +- server/src/unifyfs_client_rpc.c | 1 + server/src/unifyfs_global.h | 9 +- server/src/unifyfs_inode.c | 6 +- server/src/unifyfs_p2p_rpc.c | 229 +++++++++++++++++---------- server/src/unifyfs_request_manager.c | 7 + server/src/unifyfs_request_manager.h | 3 + server/src/unifyfs_server.c | 115 +++++++++++++- server/src/unifyfs_service_manager.c | 17 +- 10 files changed, 316 insertions(+), 92 deletions(-) diff --git a/common/src/unifyfs_meta.h b/common/src/unifyfs_meta.h index 6a9ef2a65..8b4a4b836 100644 --- a/common/src/unifyfs_meta.h +++ b/common/src/unifyfs_meta.h @@ -36,6 +36,8 @@ extern "C" { # define UNIFYFS_METADATA_CACHE_SECONDS 5 #endif +/* a valid gfid generated via MD5 hash will never be zero */ +#define INVALID_GFID (0) /* extent slice size used for metadata */ extern size_t meta_slice_sz; @@ -109,6 +111,9 @@ typedef struct { struct timespec atime; struct timespec mtime; struct timespec ctime; + + /* metadata caching timestamp */ + time_t last_update; } unifyfs_file_attr_t; enum { @@ -123,7 +128,7 @@ void unifyfs_file_attr_set_invalid(unifyfs_file_attr_t* attr) { memset(attr, 0, sizeof(*attr)); attr->filename = NULL; - attr->gfid = -1; + attr->gfid = INVALID_GFID; attr->is_laminated = -1; attr->is_shared = -1; attr->mode = (uint32_t) -1; @@ -173,10 +178,18 @@ int unifyfs_file_attr_update(int attr_op, { if (!dst || !src || (attr_op == UNIFYFS_FILE_ATTR_OP_INVALID) - || (dst->gfid != src->gfid)) { + || (src->gfid == INVALID_GFID)) { return EINVAL; } + if (attr_op == UNIFYFS_FILE_ATTR_OP_CREATE) { + dst->gfid = src->gfid; + } + + struct timespec tp = {0}; + clock_gettime(CLOCK_REALTIME, &tp); + dst->last_update = tp.tv_sec; + LOGDBG("updating attributes for gfid=%d", dst->gfid); /* Update fields only with valid values and associated operation. diff --git a/server/src/margo_server.c b/server/src/margo_server.c index 9a7858b87..f6a27f538 100644 --- a/server/src/margo_server.c +++ b/server/src/margo_server.c @@ -606,7 +606,7 @@ static int forward_to_client(hg_handle_t hdl, void* input_ptr) double timeout_msec = margo_client_server_timeout_msec; hg_return_t hret = margo_forward_timed(hdl, input_ptr, timeout_msec); if (hret != HG_SUCCESS) { - LOGERR("margo_forward_timed() failed - %s", HG_Error_to_string(hret)); + LOGWARN("margo_forward_timed() failed - %s", HG_Error_to_string(hret)); return UNIFYFS_ERROR_MARGO; } return UNIFYFS_SUCCESS; @@ -637,7 +637,7 @@ int invoke_client_heartbeat_rpc(int app_id, app_id, client_id); int rc = forward_to_client(handle, &in); if (rc != UNIFYFS_SUCCESS) { - LOGERR("forward of heartbeat rpc to client failed"); + LOGINFO("forward of heartbeat rpc to client failed"); margo_destroy(handle); return rc; } diff --git a/server/src/unifyfs_client_rpc.c b/server/src/unifyfs_client_rpc.c index 07bed2a01..9627b17e4 100644 --- a/server/src/unifyfs_client_rpc.c +++ b/server/src/unifyfs_client_rpc.c @@ -67,6 +67,7 @@ static void create_mountpoint_dir(int app_id, fattr.atime = tp; fattr.mtime = tp; fattr.ctime = tp; + fattr.last_update = tp.tv_sec; /* capture current uid and gid */ fattr.uid = getuid(); diff --git a/server/src/unifyfs_global.h b/server/src/unifyfs_global.h index 1f56705bb..135d20658 100644 --- a/server/src/unifyfs_global.h +++ b/server/src/unifyfs_global.h @@ -141,7 +141,6 @@ typedef struct { struct reqmgr_thrd; - /** * Structure to maintain application client state, including * logio and shared memory contexts, margo rpc address, etc. @@ -200,6 +199,14 @@ unifyfs_rc cleanup_app_client(app_config* app, app_client* clnt); unifyfs_rc add_failed_client(int app_id, int client_id); +/* methods for pending remote metaget() bookkeeping */ +unifyfs_rc add_pending_metaget(int gfid); + +bool check_pending_metaget(int gfid); + +unifyfs_rc clear_pending_metaget(int gfid); + + /* publish the pids of all servers to a shared file */ int unifyfs_publish_server_pids(void); diff --git a/server/src/unifyfs_inode.c b/server/src/unifyfs_inode.c index 316b55a51..f204c9320 100644 --- a/server/src/unifyfs_inode.c +++ b/server/src/unifyfs_inode.c @@ -40,8 +40,10 @@ struct unifyfs_inode* unifyfs_inode_alloc(int gfid, unifyfs_file_attr_t* attr) extent_tree_init(tree); ino->extents = tree; ino->gfid = gfid; - ino->attr = *attr; - ino->attr.filename = strdup(attr->filename); + + unifyfs_file_attr_set_invalid(&(ino->attr)); + unifyfs_file_attr_update(UNIFYFS_FILE_ATTR_OP_CREATE, + &(ino->attr), attr); pthread_rwlock_init(&(ino->rwlock), NULL); ABT_mutex_create(&(ino->abt_sync)); diff --git a/server/src/unifyfs_p2p_rpc.c b/server/src/unifyfs_p2p_rpc.c index 5c918aa9d..846ff16e7 100644 --- a/server/src/unifyfs_p2p_rpc.c +++ b/server/src/unifyfs_p2p_rpc.c @@ -780,64 +780,91 @@ int unifyfs_invoke_metaget_rpc(int gfid, /* use cached attributes if within threshold */ struct timespec tp = {0}; clock_gettime(CLOCK_REALTIME, &tp); - time_t expire = attrs->ctime.tv_sec + UNIFYFS_METADATA_CACHE_SECONDS; + time_t expire = attrs->last_update + UNIFYFS_METADATA_CACHE_SECONDS; if (tp.tv_sec <= expire) { LOGINFO("using cached attributes for gfid=%d", gfid); return UNIFYFS_SUCCESS; } else { - LOGINFO("cached attributes for gfid=%d have expired", gfid); + LOGINFO("cached attributes for gfid=%d have expired " + "(now=%d, expiration=%d)", gfid, tp.tv_sec, expire); } } else if (rc == ENOENT) { - /* metaget above failed with ENOENT, need to create inode */ + /* local metaget gave ENOENT, need to create inode if file exists */ need_local_metadata = 1; } - /* forward request to file owner */ - p2p_request preq; - hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.metaget_id; - rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); - if (rc != UNIFYFS_SUCCESS) { + int ret = UNIFYFS_SUCCESS; + rc = add_pending_metaget(gfid); + if (EEXIST == rc) { + /* wait for pending to finish */ + do { + LOGDBG("waiting for pending metaget gfid=%d", gfid); + usleep(10000); /* sleep 10 ms */ + } while (check_pending_metaget(gfid)); + + /* should have local copy now if file existed */ + rc = sm_get_fileattr(gfid, attrs); return rc; - } + } else { + LOGDBG("added pending metaget gfid=%d", gfid); - /* fill rpc input struct and forward request */ - metaget_in_t in; - in.gfid = (int32_t) gfid; - rc = forward_p2p_request((void*)&in, &preq); - if (rc != UNIFYFS_SUCCESS) { - margo_destroy(preq.handle); - return rc; - } + /* forward request to file owner */ + p2p_request preq; + hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.metaget_id; + rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + if (rc != UNIFYFS_SUCCESS) { + ret = rc; + goto clear_pending_metaget; + } - /* wait for request completion */ - rc = wait_for_p2p_request(&preq); - if (rc != UNIFYFS_SUCCESS) { - margo_destroy(preq.handle); - return rc; - } + /* fill rpc input struct and forward request */ + metaget_in_t in; + in.gfid = (int32_t) gfid; + rc = forward_p2p_request((void*)&in, &preq); + if (rc != UNIFYFS_SUCCESS) { + ret = rc; + goto clear_pending_metaget; + } - /* get the output of the rpc */ - int ret; - metaget_out_t out; - hg_return_t hret = margo_get_output(preq.handle, &out); - if (hret != HG_SUCCESS) { - LOGERR("margo_get_output() failed - %s", HG_Error_to_string(hret)); - ret = UNIFYFS_ERROR_MARGO; - } else { - /* set return value */ - ret = out.ret; - if (ret == UNIFYFS_SUCCESS) { - *attrs = out.attr; - if (out.attr.filename != NULL) { - attrs->filename = strdup(out.attr.filename); - } - if (need_local_metadata) { - sm_set_fileattr(gfid, UNIFYFS_FILE_ATTR_OP_CREATE, attrs); + /* wait for request completion */ + rc = wait_for_p2p_request(&preq); + if (rc != UNIFYFS_SUCCESS) { + ret = rc; + goto clear_pending_metaget; + } + + /* get the output of the rpc */ + metaget_out_t out; + hg_return_t hret = margo_get_output(preq.handle, &out); + if (hret != HG_SUCCESS) { + LOGERR("margo_get_output() failed - %s", HG_Error_to_string(hret)); + ret = UNIFYFS_ERROR_MARGO; + } else { + /* set return value */ + ret = out.ret; + if (ret == UNIFYFS_SUCCESS) { + *attrs = out.attr; + if (out.attr.filename != NULL) { + attrs->filename = strdup(out.attr.filename); + } + if (need_local_metadata) { + sm_set_fileattr(gfid, UNIFYFS_FILE_ATTR_OP_CREATE, attrs); + } else { + sm_set_fileattr(gfid, UNIFYFS_FILE_ATTR_OP_UTIME, attrs); + } } + margo_free_output(preq.handle, &out); } - margo_free_output(preq.handle, &out); + +clear_pending_metaget: + LOGDBG("clearing pending metaget gfid=%d", gfid); + rc = clear_pending_metaget(gfid); + if (rc != UNIFYFS_SUCCESS) { + LOGWARN("failed to clear pending metaget for gfid=%d", gfid); + } + + margo_destroy(preq.handle); } - margo_destroy(preq.handle); return ret; } @@ -908,62 +935,100 @@ int unifyfs_invoke_filesize_rpc(int gfid, if (NULL == filesize) { return EINVAL; } + *filesize = 0; int owner_rank = hash_gfid_to_server(gfid); + int need_local_metadata = 0; - /* do local inode metadata lookup to check for laminated */ unifyfs_file_attr_t attrs; + memset(&attrs, 0, sizeof(attrs)); + + /* do local inode metadata lookup to check for laminated */ int rc = sm_get_fileattr(gfid, &attrs); - if ((rc == UNIFYFS_SUCCESS) && (attrs.is_laminated)) { - /* if laminated, we already have final metadata stored locally */ - *filesize = (size_t) attrs.size; - return UNIFYFS_SUCCESS; - } if (owner_rank == glb_pmi_rank) { *filesize = (size_t) attrs.size; return rc; - } + } else if (rc == UNIFYFS_SUCCESS) { + if (attrs.is_laminated) { + /* if laminated, we already have final metadata stored locally */ + *filesize = (size_t) attrs.size; + return UNIFYFS_SUCCESS; + } - /* forward request to file owner */ - p2p_request preq; - hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.filesize_id; - rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); - if (rc != UNIFYFS_SUCCESS) { - return rc; + /* NOTE: unlike metaget above, we don't use cached metadata + * for explicit file size lookups */ + } else if (rc == ENOENT) { + /* local metaget gave ENOENT, need to create inode if file exists */ + need_local_metadata = 1; } - /* fill rpc input struct and forward request */ - filesize_in_t in; - in.gfid = (int32_t)gfid; - rc = forward_p2p_request((void*)&in, &preq); - if (rc != UNIFYFS_SUCCESS) { - margo_destroy(preq.handle); + int ret = UNIFYFS_SUCCESS; + rc = add_pending_metaget(gfid); + if (EEXIST == rc) { + /* wait for pending to finish */ + do { + usleep(10000); /* sleep 10 ms */ + } while (check_pending_metaget(gfid)); + + /* should have local copy now if file existed */ + rc = sm_get_fileattr(gfid, &attrs); + *filesize = (size_t) attrs.size; return rc; - } + } else { + /* forward request to file owner */ + p2p_request preq; + hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.metaget_id; + rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + if (rc != UNIFYFS_SUCCESS) { + ret = rc; + goto clear_pending_fileattr; + } - /* wait for request completion */ - rc = wait_for_p2p_request(&preq); - if (rc != UNIFYFS_SUCCESS) { - margo_destroy(preq.handle); - return rc; - } + /* fill rpc input struct and forward request */ + metaget_in_t in; + in.gfid = (int32_t) gfid; + rc = forward_p2p_request((void*)&in, &preq); + if (rc != UNIFYFS_SUCCESS) { + ret = rc; + goto clear_pending_fileattr; + } - /* get the output of the rpc */ - int ret; - filesize_out_t out; - hg_return_t hret = margo_get_output(preq.handle, &out); - if (hret != HG_SUCCESS) { - LOGERR("margo_get_output() failed - %s", HG_Error_to_string(hret)); - ret = UNIFYFS_ERROR_MARGO; - } else { - /* set return value */ - ret = out.ret; - if (ret == UNIFYFS_SUCCESS) { - *filesize = (size_t) out.filesize; + /* wait for request completion */ + rc = wait_for_p2p_request(&preq); + if (rc != UNIFYFS_SUCCESS) { + ret = rc; + goto clear_pending_fileattr; } - margo_free_output(preq.handle, &out); + + /* get the output of the rpc */ + metaget_out_t out; + hg_return_t hret = margo_get_output(preq.handle, &out); + if (hret != HG_SUCCESS) { + LOGERR("margo_get_output() failed - %s", HG_Error_to_string(hret)); + ret = UNIFYFS_ERROR_MARGO; + } else { + /* set return value */ + ret = out.ret; + if (ret == UNIFYFS_SUCCESS) { + attrs = out.attr; + *filesize = (size_t) attrs.size; + if (need_local_metadata) { + sm_set_fileattr(gfid, UNIFYFS_FILE_ATTR_OP_CREATE, &attrs); + } else { + sm_set_fileattr(gfid, UNIFYFS_FILE_ATTR_OP_UTIME, &attrs); + } + } + margo_free_output(preq.handle, &out); + } + +clear_pending_fileattr: + rc = clear_pending_metaget(gfid); + if (rc != UNIFYFS_SUCCESS) { + LOGWARN("failed to clear pending metaget for gfid=%d", gfid); + } + + margo_destroy(preq.handle); } - margo_destroy(preq.handle); return ret; } diff --git a/server/src/unifyfs_request_manager.c b/server/src/unifyfs_request_manager.c index 243bb8403..3f1cecf6d 100644 --- a/server/src/unifyfs_request_manager.c +++ b/server/src/unifyfs_request_manager.c @@ -161,6 +161,7 @@ reqmgr_thrd_t* unifyfs_rm_thrd_create(int app_id, int client_id) thrd_ctrl->client_id = client_id; /* initialize flow control flags */ + thrd_ctrl->attached = 0; thrd_ctrl->exit_flag = 0; thrd_ctrl->exited = 0; thrd_ctrl->waiting_for_work = 0; @@ -1072,6 +1073,8 @@ static int process_attach_rpc(reqmgr_thrd_t* reqmgr, in->meta_size); if (ret != UNIFYFS_SUCCESS) { LOGERR("attach_app_client() failed"); + } else { + reqmgr->attached = 1; } } else { LOGERR("client not found (app_id=%d, client_id=%d)", @@ -1710,6 +1713,10 @@ static int rm_heartbeat(reqmgr_thrd_t* reqmgr) int ret = UNIFYFS_SUCCESS; + if (!reqmgr->attached) { + return ret; + } + /* send a heartbeat rpc to associated client every 30 seconds */ time_t now = time(NULL); if (0 == last_check) { diff --git a/server/src/unifyfs_request_manager.h b/server/src/unifyfs_request_manager.h index bfb1910e1..de8009984 100644 --- a/server/src/unifyfs_request_manager.h +++ b/server/src/unifyfs_request_manager.h @@ -97,6 +97,9 @@ typedef struct reqmgr_thrd { /* list of client callback requests */ arraylist_t* client_callbacks; + /* flag set when client has fully attached */ + int attached; + /* flag set to indicate request manager thread should exit */ int exit_flag; diff --git a/server/src/unifyfs_server.c b/server/src/unifyfs_server.c index a9530bb17..a3aad9d86 100644 --- a/server/src/unifyfs_server.c +++ b/server/src/unifyfs_server.c @@ -63,6 +63,11 @@ static app_config* app_configs[UNIFYFS_SERVER_MAX_NUM_APPS]; /* list of apps */ static size_t clients_per_app = UNIFYFS_SERVER_MAX_APP_CLIENTS; +/* arraylist and mutex to track pending remote metaget() requests */ +arraylist_t* pending_metagets; // = NULL +static ABT_mutex pending_metagets_abt_sync; + + static int unifyfs_exit(void); #if defined(UNIFYFS_MULTIPLE_DELEGATORS) @@ -461,6 +466,12 @@ int main(int argc, char* argv[]) failed_clients = arraylist_create(0); ABT_mutex_unlock(app_configs_abt_sync); + ABT_mutex_create(&pending_metagets_abt_sync); + + ABT_mutex_lock(pending_metagets_abt_sync); + pending_metagets = arraylist_create(256); + ABT_mutex_unlock(pending_metagets_abt_sync); + /* launch the service manager (note: must happen after ABT_init) */ LOGDBG("launching service manager thread"); rc = svcmgr_init(); @@ -705,6 +716,13 @@ static int unifyfs_exit(void) } ABT_mutex_unlock(app_configs_abt_sync); + ABT_mutex_lock(pending_metagets_abt_sync); + if (NULL != pending_metagets) { + arraylist_free(pending_metagets); + pending_metagets = NULL; + } + ABT_mutex_unlock(pending_metagets_abt_sync); + /* TODO: notify the service threads to exit */ /* finalize kvstore service*/ @@ -716,6 +734,11 @@ static int unifyfs_exit(void) LOGERR("Error returned from ABT_mutex_free(): %d", ret); } + ret = ABT_mutex_free(&pending_metagets_abt_sync); + if (ret != ABT_SUCCESS) { + LOGERR("Error returned from ABT_mutex_free(): %d", ret); + } + /* shutdown rpc service * (note: this needs to happen after app-client cleanup above) */ LOGDBG("stopping rpc service"); @@ -1110,15 +1133,105 @@ unifyfs_rc add_failed_client(int app_id, int client_id) if (NULL == client) { return EINVAL; } + unifyfs_rc ret = UNIFYFS_SUCCESS; ABT_mutex_lock(app_configs_abt_sync); if (NULL != failed_clients) { int rc = arraylist_add(failed_clients, client); if (rc == -1) { - LOGERR("failed to add client to failed_clients arraylist"); + LOGERR("failed to add client[%d:%d] to failed_clients arraylist", + app_id, client_id); ret = UNIFYFS_FAILURE; } + } else { + LOGERR("failed_clients is NULL!"); + ret = UNIFYFS_FAILURE; } ABT_mutex_unlock(app_configs_abt_sync); return ret; } + +unifyfs_rc add_pending_metaget(int gfid) +{ + int* pending_gfid = (int*) malloc(sizeof(gfid)); + if (NULL == pending_gfid) { + return ENOMEM; + } + *pending_gfid = gfid; + + unifyfs_rc ret = UNIFYFS_SUCCESS; + ABT_mutex_lock(pending_metagets_abt_sync); + if (NULL != pending_metagets) { + int num_pending = arraylist_size(pending_metagets); + if (num_pending > 0) { + for (int i = 0; i < num_pending; i++) { + int* pending = (int*) arraylist_get(pending_metagets, i); + if ((NULL != pending) && (*pending == gfid)) { + ret = EEXIST; + break; + } + } + } + if (ret == UNIFYFS_SUCCESS) { + int rc = arraylist_add(pending_metagets, pending_gfid); + if (rc == -1) { + LOGERR("failed to add gfid=%d to pending_metagets arraylist", + gfid); + ret = UNIFYFS_FAILURE; + } + + } + } else { + LOGERR("pending_metagets is NULL!"); + ret = UNIFYFS_FAILURE; + } + ABT_mutex_unlock(pending_metagets_abt_sync); + return ret; +} + +bool check_pending_metaget(int gfid) +{ + bool is_pending = false; + ABT_mutex_lock(pending_metagets_abt_sync); + if (NULL != pending_metagets) { + int num_pending = arraylist_size(pending_metagets); + if (num_pending > 0) { + for (int i = 0; i < num_pending; i++) { + int* pending = (int*) arraylist_get(pending_metagets, i); + if ((NULL != pending) && (*pending == gfid)) { + is_pending = true; + break; + } + } + } + } else { + LOGERR("pending_metagets is NULL!"); + } + ABT_mutex_unlock(pending_metagets_abt_sync); + return is_pending; +} + +unifyfs_rc clear_pending_metaget(int gfid) +{ + unifyfs_rc ret = UNIFYFS_FAILURE; + ABT_mutex_lock(pending_metagets_abt_sync); + if (NULL != pending_metagets) { + int num_pending = arraylist_size(pending_metagets); + if (num_pending > 0) { + for (int i = 0; i < num_pending; i++) { + int* pending = (int*) arraylist_get(pending_metagets, i); + if ((NULL != pending) && (*pending == gfid)) { + pending = (int*) arraylist_remove(pending_metagets, i); + free(pending); + ret = UNIFYFS_SUCCESS; + break; + } + } + } + } else { + LOGERR("pending_metagets is NULL!"); + ret = UNIFYFS_FAILURE; + } + ABT_mutex_unlock(pending_metagets_abt_sync); + return ret; +} diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index 497f58da2..dba4621c3 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -498,6 +498,12 @@ int sm_set_fileattr(int gfid, LOGERR("failed to set attributes for gfid=%d (rc=%d, is_owner=%d)", gfid, ret, is_owner); } + } else if (is_owner && (file_op == UNIFYFS_FILE_ATTR_OP_CREATE)) { + /* start a broadcast rpc to inform other servers of new file */ + int rc = unifyfs_invoke_broadcast_fileattr(gfid, file_op, attrs); + if (rc != UNIFYFS_SUCCESS) { + LOGERR("failed to broadcast new file (gfid=%d) creation", gfid); + } } return ret; } @@ -1032,7 +1038,9 @@ static int process_metaset_rpc(server_rpc_req_t* req) int gfid = (int) in->gfid; int attr_op = (int) in->fileop; unifyfs_file_attr_t* attrs = &(in->attr); + int ret = sm_set_fileattr(gfid, attr_op, attrs); + margo_free_input(req->handle, in); free(in); @@ -1171,8 +1179,13 @@ static int process_fileattr_bcast_rpc(server_rpc_req_t* req) /* update file attributes */ int ret = sm_set_fileattr(gfid, attr_op, attrs); if (ret != UNIFYFS_SUCCESS) { - LOGERR("set_fileattr(gfid=%d, op=%d) failed - rc=%d", - gfid, attr_op, ret); + if ((attr_op == UNIFYFS_FILE_ATTR_OP_CREATE) && (ret == EEXIST)) { + /* ignore duplicate creates */ + ret = UNIFYFS_SUCCESS; + } else { + LOGWARN("set_fileattr(gfid=%d, op=%d) failed - rc=%d (%s)", + gfid, attr_op, ret, unifyfs_rc_enum_description(ret)); + } } collective_set_local_retval(req->coll, ret); From a2e0f480020f64b5895f730e8de02b30e34981bd Mon Sep 17 00:00:00 2001 From: "Michael J. Brim" Date: Tue, 25 Apr 2023 14:23:29 -0400 Subject: [PATCH 31/46] reduce sync requests to owner server This adds batching of client extent sync requests at each server to try to limit the number of RPCs to the owner to one-per-server, rather than one-per-client. It also avoids doing metaget RPCs for the mountpoint. Also: * use ABT_rwlock instead of pthread_rwlock_t * add comparison functions for int/float types to common * fix misused return code * fix free() of uninitialized margo bulk buf pointers * remove last vestiges of MPI in server * remove last vestiges of MDHIM in server --- .gitlab-ci.yml | 2 +- Makefile.am | 2 +- client/src/unifyfs_api.c | 6 +- common/src/Makefile.mk | 2 + common/src/compare_fn.c | 67 + common/src/compare_fn.h | 26 + common/src/seg_tree.c | 23 +- common/src/seg_tree.h | 4 +- common/src/unifyfs_client_rpcs.h | 9 + common/src/unifyfs_meta.h | 20 +- common/src/unifyfs_rc.h | 2 - common/src/unifyfs_server_rpcs.h | 4 +- configure.ac | 11 - docs/dependencies.rst | 12 +- meta/.gitignore | 26 - meta/Makefile.am | 1 - meta/README.md | 60 - meta/src/Makefile.am | 43 - meta/src/Mlog2/makefacs.pl | 198 -- meta/src/Mlog2/mlog2.c | 1644 ------------ meta/src/Mlog2/mlog2.h | 439 ---- meta/src/Mlog2/mlogfacs2.h | 151 -- meta/src/client.c | 389 --- meta/src/client.h | 52 - meta/src/data_store.c | 130 - meta/src/data_store.h | 150 -- meta/src/ds_leveldb.c | 1337 ---------- meta/src/ds_leveldb.h | 107 - meta/src/ds_mysql.c | 1022 -------- meta/src/ds_mysql.h | 67 - meta/src/indexes.c | 1776 ------------- meta/src/indexes.h | 148 -- meta/src/local_client.c | 305 --- meta/src/local_client.h | 51 - meta/src/mdhim.c | 998 -------- meta/src/mdhim.h | 179 -- meta/src/mdhim_options.c | 228 -- meta/src/mdhim_options.h | 127 - meta/src/mdhim_private.c | 671 ----- meta/src/mdhim_private.h | 56 - meta/src/messages.c | 2218 ---------------- meta/src/messages.h | 243 -- meta/src/partitioner.c | 1035 -------- meta/src/partitioner.h | 116 - meta/src/range_server.c | 1512 ----------- meta/src/range_server.h | 97 - meta/src/uthash/LICENSE | 21 - meta/src/uthash/README.md | 6 - meta/src/uthash/uthash.h | 947 ------- meta/tests/single_tests/Makefile | 93 - meta/tests/single_tests/bput-bdel.c | 144 -- meta/tests/single_tests/bput-bget.c | 369 --- meta/tests/single_tests/bput-bget_secondary.c | 255 -- .../single_tests/bput-bget_secondary_local.c | 260 -- meta/tests/single_tests/bput-bgetn.c | 220 -- meta/tests/single_tests/bput-bgetp.c | 217 -- meta/tests/single_tests/grey_sort.c | 169 -- meta/tests/single_tests/index_name.c | 279 -- meta/tests/single_tests/mdhim_manifest_1_0_1 | Bin 56 -> 0 bytes meta/tests/single_tests/plfs-bput-bgetn.c | 219 -- meta/tests/single_tests/plfs-put-get.c | 165 -- meta/tests/single_tests/put-del.c | 83 - meta/tests/single_tests/put-del_secondary.c | 115 - .../single_tests/put-del_secondary_local.c | 118 - meta/tests/single_tests/put-get.c | 85 - meta/tests/single_tests/put-get_2secondary.c | 111 - .../single_tests/put-get_2secondary_local.c | 173 -- meta/tests/single_tests/put-get_secondary.c | 134 - .../single_tests/put-get_secondary_local.c | 123 - meta/tests/single_tests/put-getn.c | 117 - meta/tests/single_tests/put-getn_secondary.c | 150 -- .../single_tests/put-getn_secondary_local.c | 158 -- meta/tests/single_tests/put-getp.c | 104 - meta/tests/single_tests/put-getp_secondary.c | 150 -- meta/tests/single_tests/puts-gets.c | 87 - meta/tests/single_tests/range_bget.c | 388 --- meta/tests/single_tests/range_bget.sh | 15 - meta/tests/single_tests/range_test.c | 334 --- meta/tests/single_tests/range_test.sh | 12 - meta/tests/tester/inTestAppend.txt | 11 - meta/tests/tester/inTestBasic.txt | 21 - meta/tests/tester/inTestBulk.txt | 11 - meta/tests/tester/inTestBulkLarge.txt | 4 - meta/tests/tester/inTestBulkLargeErr.txt | 9 - meta/tests/tester/inTestErr1.txt | 24 - meta/tests/tester/inTestLarge.txt | 21 - meta/tests/tester/inTestNext.txt | 9 - meta/tests/tester/inTestOps.txt | 122 - meta/tests/tester/inTestOps3.txt | 93 - meta/tests/tester/inTestOps5.txt | 96 - meta/tests/tester/inTestOps6.txt | 96 - meta/tests/tester/inTestRand.txt | 11 - meta/tests/tester/mdhimtst | Bin 821363 -> 0 bytes meta/tests/tester/mdhimtst.c | 2257 ----------------- meta/tests/tester/runAll.sh | 47 - server/src/Makefile.am | 32 +- server/src/extent_tree.c | 80 +- server/src/extent_tree.h | 16 +- server/src/unifyfs_client_rpc.c | 1 - server/src/unifyfs_fops.h | 10 +- server/src/unifyfs_fops_mdhim.c | 1198 --------- server/src/unifyfs_fops_rpc.c | 38 +- server/src/unifyfs_global.h | 1 + server/src/unifyfs_inode.c | 503 ++-- server/src/unifyfs_inode.h | 90 +- server/src/unifyfs_inode_tree.c | 23 +- server/src/unifyfs_inode_tree.h | 30 +- server/src/unifyfs_metadata_mdhim.c | 574 ----- server/src/unifyfs_metadata_mdhim.h | 250 -- server/src/unifyfs_p2p_rpc.c | 66 +- server/src/unifyfs_p2p_rpc.h | 2 +- server/src/unifyfs_request_manager.c | 147 +- server/src/unifyfs_request_manager.h | 16 - server/src/unifyfs_server.c | 196 +- server/src/unifyfs_service_manager.c | 104 +- t/Makefile.am | 4 +- 116 files changed, 664 insertions(+), 27136 deletions(-) create mode 100644 common/src/compare_fn.c create mode 100644 common/src/compare_fn.h delete mode 100644 meta/.gitignore delete mode 100644 meta/Makefile.am delete mode 100644 meta/README.md delete mode 100644 meta/src/Makefile.am delete mode 100644 meta/src/Mlog2/makefacs.pl delete mode 100644 meta/src/Mlog2/mlog2.c delete mode 100644 meta/src/Mlog2/mlog2.h delete mode 100644 meta/src/Mlog2/mlogfacs2.h delete mode 100644 meta/src/client.c delete mode 100644 meta/src/client.h delete mode 100644 meta/src/data_store.c delete mode 100644 meta/src/data_store.h delete mode 100644 meta/src/ds_leveldb.c delete mode 100644 meta/src/ds_leveldb.h delete mode 100644 meta/src/ds_mysql.c delete mode 100644 meta/src/ds_mysql.h delete mode 100644 meta/src/indexes.c delete mode 100644 meta/src/indexes.h delete mode 100644 meta/src/local_client.c delete mode 100644 meta/src/local_client.h delete mode 100644 meta/src/mdhim.c delete mode 100644 meta/src/mdhim.h delete mode 100644 meta/src/mdhim_options.c delete mode 100644 meta/src/mdhim_options.h delete mode 100644 meta/src/mdhim_private.c delete mode 100644 meta/src/mdhim_private.h delete mode 100644 meta/src/messages.c delete mode 100644 meta/src/messages.h delete mode 100644 meta/src/partitioner.c delete mode 100644 meta/src/partitioner.h delete mode 100644 meta/src/range_server.c delete mode 100644 meta/src/range_server.h delete mode 100644 meta/src/uthash/LICENSE delete mode 100644 meta/src/uthash/README.md delete mode 100644 meta/src/uthash/uthash.h delete mode 100644 meta/tests/single_tests/Makefile delete mode 100644 meta/tests/single_tests/bput-bdel.c delete mode 100644 meta/tests/single_tests/bput-bget.c delete mode 100644 meta/tests/single_tests/bput-bget_secondary.c delete mode 100644 meta/tests/single_tests/bput-bget_secondary_local.c delete mode 100644 meta/tests/single_tests/bput-bgetn.c delete mode 100644 meta/tests/single_tests/bput-bgetp.c delete mode 100644 meta/tests/single_tests/grey_sort.c delete mode 100644 meta/tests/single_tests/index_name.c delete mode 100644 meta/tests/single_tests/mdhim_manifest_1_0_1 delete mode 100644 meta/tests/single_tests/plfs-bput-bgetn.c delete mode 100644 meta/tests/single_tests/plfs-put-get.c delete mode 100644 meta/tests/single_tests/put-del.c delete mode 100644 meta/tests/single_tests/put-del_secondary.c delete mode 100644 meta/tests/single_tests/put-del_secondary_local.c delete mode 100644 meta/tests/single_tests/put-get.c delete mode 100644 meta/tests/single_tests/put-get_2secondary.c delete mode 100644 meta/tests/single_tests/put-get_2secondary_local.c delete mode 100644 meta/tests/single_tests/put-get_secondary.c delete mode 100644 meta/tests/single_tests/put-get_secondary_local.c delete mode 100644 meta/tests/single_tests/put-getn.c delete mode 100644 meta/tests/single_tests/put-getn_secondary.c delete mode 100644 meta/tests/single_tests/put-getn_secondary_local.c delete mode 100644 meta/tests/single_tests/put-getp.c delete mode 100644 meta/tests/single_tests/put-getp_secondary.c delete mode 100644 meta/tests/single_tests/puts-gets.c delete mode 100644 meta/tests/single_tests/range_bget.c delete mode 100644 meta/tests/single_tests/range_bget.sh delete mode 100644 meta/tests/single_tests/range_test.c delete mode 100644 meta/tests/single_tests/range_test.sh delete mode 100644 meta/tests/tester/inTestAppend.txt delete mode 100644 meta/tests/tester/inTestBasic.txt delete mode 100644 meta/tests/tester/inTestBulk.txt delete mode 100644 meta/tests/tester/inTestBulkLarge.txt delete mode 100644 meta/tests/tester/inTestBulkLargeErr.txt delete mode 100644 meta/tests/tester/inTestErr1.txt delete mode 100644 meta/tests/tester/inTestLarge.txt delete mode 100644 meta/tests/tester/inTestNext.txt delete mode 100644 meta/tests/tester/inTestOps.txt delete mode 100644 meta/tests/tester/inTestOps3.txt delete mode 100644 meta/tests/tester/inTestOps5.txt delete mode 100644 meta/tests/tester/inTestOps6.txt delete mode 100644 meta/tests/tester/inTestRand.txt delete mode 100644 meta/tests/tester/mdhimtst delete mode 100644 meta/tests/tester/mdhimtst.c delete mode 100644 meta/tests/tester/runAll.sh delete mode 100644 server/src/unifyfs_fops_mdhim.c delete mode 100644 server/src/unifyfs_metadata_mdhim.c delete mode 100644 server/src/unifyfs_metadata_mdhim.h diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ac8bd21a1..a768638ed 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -107,7 +107,7 @@ stages: script: - cd unifyfs-build/t && $JOB_LAUNCH_COMMAND make check after_script: - - rm -rf /tmp/unify* /tmp/tmp.* /tmp/mdhim* /tmp/na_sm | true + - rm -rf /tmp/unify* /tmp/tmp.* /tmp/na_sm | true # Run the integration test suite with the options provided from the specific # job. diff --git a/Makefile.am b/Makefile.am index 99e3451a6..8eb00afe2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = extras meta client server util examples t +SUBDIRS = extras client server util examples t CONFIG = ordered diff --git a/client/src/unifyfs_api.c b/client/src/unifyfs_api.c index 9e2b0a5c3..b6e56f013 100644 --- a/client/src/unifyfs_api.c +++ b/client/src/unifyfs_api.c @@ -265,13 +265,13 @@ unifyfs_rc unifyfs_initialize(const char* mountpoint, /* add mount point as a new directory in the file list */ if (unifyfs_fid_from_path(client, mountpoint) < 0) { /* no entry exists for mount point, so create one */ - int fid = unifyfs_fid_create_directory(client, mountpoint); - if (fid < 0) { + rc = unifyfs_fid_create_directory(client, mountpoint); + if (rc != UNIFYFS_SUCCESS) { /* if there was an error, return it */ LOGERR("failed to create directory entry for mount point: `%s'", mountpoint); unifyfs_client_fini(client); - return UNIFYFS_FAILURE; + return rc; } } diff --git a/common/src/Makefile.mk b/common/src/Makefile.mk index e5b53102e..889ba7da4 100644 --- a/common/src/Makefile.mk +++ b/common/src/Makefile.mk @@ -6,6 +6,8 @@ UNIFYFS_COMMON_INSTALL_HDRS = \ UNIFYFS_COMMON_BASE_SRCS = \ %reldir%/arraylist.h \ %reldir%/arraylist.c \ + %reldir%/compare_fn.h \ + %reldir%/compare_fn.c \ %reldir%/ini.h \ %reldir%/ini.c \ %reldir%/rm_enumerator.h \ diff --git a/common/src/compare_fn.c b/common/src/compare_fn.c new file mode 100644 index 000000000..dc9f31327 --- /dev/null +++ b/common/src/compare_fn.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023, Lawrence Livermore National Security, LLC. + * Produced at the Lawrence Livermore National Laboratory. + * + * Copyright 2023, UT-Battelle, LLC. + * + * LLNL-CODE-741539 + * All rights reserved. + * + * This is the license for UnifyFS. + * For details, see https://github.com/LLNL/UnifyFS. + * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. + */ + +#include "compare_fn.h" + +int int_compare_fn(const void* a, const void* b) +{ + int ai = *(int*)a; + int bi = *(int*)b; + if (ai == bi) { + return 0; + } else if (ai > bi) { + return 1; + } else { + return -1; + } +} + +int uint_compare_fn(const void* a, const void* b) +{ + unsigned int ai = *(unsigned int*)a; + unsigned int bi = *(unsigned int*)b; + if (ai == bi) { + return 0; + } else if (ai > bi) { + return 1; + } else { + return -1; + } +} + +int float_compare_fn(const void* a, const void* b) +{ + float af = *(float*)a; + float bf = *(float*)b; + if (af == bf) { + return 0; + } else if (af > bf) { + return 1; + } else { + return -1; + } +} + +int double_compare_fn(const void* a, const void* b) +{ + double ad = *(double*)a; + double bd = *(double*)b; + if (ad == bd) { + return 0; + } else if (ad > bd) { + return 1; + } else { + return -1; + } +} diff --git a/common/src/compare_fn.h b/common/src/compare_fn.h new file mode 100644 index 000000000..b5a12d8e3 --- /dev/null +++ b/common/src/compare_fn.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023, Lawrence Livermore National Security, LLC. + * Produced at the Lawrence Livermore National Laboratory. + * + * Copyright 2023, UT-Battelle, LLC. + * + * LLNL-CODE-741539 + * All rights reserved. + * + * This is the license for UnifyFS. + * For details, see https://github.com/LLNL/UnifyFS. + * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. + */ + +#ifndef COMPARE_FUNC_H +#define COMPARE_FUNC_H + +typedef int (*compare_fn)(const void *, const void *); + +int int_compare_fn(const void* a, const void* b); +int uint_compare_fn(const void* a, const void* b); + +int float_compare_fn(const void* a, const void* b); +int double_compare_fn(const void* a, const void* b); + +#endif /* COMPARE_FN_H */ diff --git a/common/src/seg_tree.c b/common/src/seg_tree.c index 7374756dc..73952a4c7 100644 --- a/common/src/seg_tree.c +++ b/common/src/seg_tree.c @@ -38,7 +38,8 @@ #endif static int -compare_func(struct seg_tree_node* node1, struct seg_tree_node* node2) +stn_compare_func(struct seg_tree_node* node1, + struct seg_tree_node* node2) { if (node1->start > node2->end) { return 1; @@ -49,14 +50,14 @@ compare_func(struct seg_tree_node* node1, struct seg_tree_node* node2) } } -RB_PROTOTYPE(inttree, seg_tree_node, entry, compare_func) -RB_GENERATE(inttree, seg_tree_node, entry, compare_func) +RB_PROTOTYPE(inttree, seg_tree_node, entry, stn_compare_func) +RB_GENERATE(inttree, seg_tree_node, entry, stn_compare_func) /* Returns 0 on success, positive non-zero error code otherwise */ int seg_tree_init(struct seg_tree* seg_tree) { memset(seg_tree, 0, sizeof(*seg_tree)); - pthread_rwlock_init(&seg_tree->rwlock, NULL); + ABT_rwlock_create(&(seg_tree->rwlock)); RB_INIT(&seg_tree->head); return 0; @@ -68,6 +69,7 @@ int seg_tree_init(struct seg_tree* seg_tree) void seg_tree_destroy(struct seg_tree* seg_tree) { seg_tree_clear(seg_tree); + ABT_rwlock_free(&(seg_tree->rwlock)); } /* Allocate a node for the range tree. Free node with free() when finished */ @@ -523,9 +525,9 @@ seg_tree_iter(struct seg_tree* seg_tree, struct seg_tree_node* start) void seg_tree_rdlock(struct seg_tree* seg_tree) { - int rc = pthread_rwlock_rdlock(&seg_tree->rwlock); + int rc = ABT_rwlock_rdlock(seg_tree->rwlock); if (rc) { - LOGERR("pthread_rwlock_rdlock() failed - rc=%d", rc); + LOGERR("ABT_rwlock_rdlock() failed - rc=%d", rc); } } @@ -537,9 +539,9 @@ seg_tree_rdlock(struct seg_tree* seg_tree) void seg_tree_wrlock(struct seg_tree* seg_tree) { - int rc = pthread_rwlock_wrlock(&seg_tree->rwlock); + int rc = ABT_rwlock_wrlock(seg_tree->rwlock); if (rc) { - LOGERR("pthread_rwlock_wrlock() failed - rc=%d", rc); + LOGERR("ABT_rwlock_wrlock() failed - rc=%d", rc); } } @@ -551,9 +553,9 @@ seg_tree_wrlock(struct seg_tree* seg_tree) void seg_tree_unlock(struct seg_tree* seg_tree) { - int rc = pthread_rwlock_unlock(&seg_tree->rwlock); + int rc = ABT_rwlock_unlock(seg_tree->rwlock); if (rc) { - LOGERR("pthread_rwlock_unlock() failed - rc=%d", rc); + LOGERR("ABT_rwlock_unlock() failed - rc=%d", rc); } } @@ -589,6 +591,7 @@ void seg_tree_clear(struct seg_tree* seg_tree) seg_tree->count = 0; seg_tree->max = 0; + seg_tree_unlock(seg_tree); } diff --git a/common/src/seg_tree.h b/common/src/seg_tree.h index 9c528677f..7ebfacf0e 100644 --- a/common/src/seg_tree.h +++ b/common/src/seg_tree.h @@ -15,7 +15,7 @@ #ifndef __SEG_TREE_H__ #define __SEG_TREE_H__ -#include +#include #include "tree.h" struct seg_tree_node { @@ -28,7 +28,7 @@ struct seg_tree_node { struct seg_tree { RB_HEAD(inttree, seg_tree_node) head; - pthread_rwlock_t rwlock; + ABT_rwlock rwlock; unsigned long count; /* number of segments stored in tree */ unsigned long max; /* maximum logical offset value in the tree */ }; diff --git a/common/src/unifyfs_client_rpcs.h b/common/src/unifyfs_client_rpcs.h index 12702f8ee..b509e892f 100644 --- a/common/src/unifyfs_client_rpcs.h +++ b/common/src/unifyfs_client_rpcs.h @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -56,6 +57,14 @@ typedef enum { UNIFYFS_CLIENT_CALLBACK_UNLINK } client_callback_e; +typedef struct { + client_rpc_e req_type; + hg_handle_t handle; + void* input; + void* bulk_buf; + size_t bulk_sz; +} client_rpc_req_t; + /* unifyfs_attach_rpc (client => server) * * initialize server access to client's shared memory and file state */ diff --git a/common/src/unifyfs_meta.h b/common/src/unifyfs_meta.h index 8b4a4b836..6a78f2004 100644 --- a/common/src/unifyfs_meta.h +++ b/common/src/unifyfs_meta.h @@ -349,16 +349,6 @@ int compare_name_rank_pair(const void* a, const void* b) return cmp; } -/* qsort comparison function for int */ -static inline -int compare_int(const void* a, const void* b) -{ - int aval = *(const int*)a; - int bval = *(const int*)b; - return aval - bval; -} - - /* * Hash a file path to a uint64_t using MD5 * @param path absolute file path @@ -367,7 +357,7 @@ int compare_int(const void* a, const void* b) uint64_t compute_path_md5(const char* path); /* - * Hash a file path to an integer gfid + * Hash a file path to a positive integer gfid * @param path absolute file path * @return gfid */ @@ -378,12 +368,8 @@ int unifyfs_generate_gfid(const char* path) uint64_t hash64 = compute_path_md5(path); uint32_t hash32 = (uint32_t)(hash64 >> 32); - /* TODO: Remove next statement once we get rid of MDHIM. - * - * MDHIM requires positive values for integer keys, due to the way - * slice servers are calculated. We use an integer key for the - * gfid -> file attributes index. To guarantee a positive value, we - * shift right one bit to make sure the top bit is zero. */ + /* To guarantee a positive value, we shift right one bit + * to make sure the top bit is zero. */ hash32 = hash32 >> 1; return (int)hash32; diff --git a/common/src/unifyfs_rc.h b/common/src/unifyfs_rc.h index 627108cc5..000f25d29 100644 --- a/common/src/unifyfs_rc.h +++ b/common/src/unifyfs_rc.h @@ -43,8 +43,6 @@ ENUMITEM(GOTCHA, "Gotcha operation error") \ ENUMITEM(KEYVAL, "Key-value store operation error") \ ENUMITEM(MARGO, "Mercury/Argobots operation error") \ - ENUMITEM(MDHIM, "MDHIM operation error") \ - ENUMITEM(META, "Metadata store operation error") \ ENUMITEM(NYI, "Not yet implemented") \ ENUMITEM(PMI, "PMI2/PMIx error") \ ENUMITEM(SHMEM, "Shared memory region init/access error") \ diff --git a/common/src/unifyfs_server_rpcs.h b/common/src/unifyfs_server_rpcs.h index d1ced495a..6c03a1eeb 100644 --- a/common/src/unifyfs_server_rpcs.h +++ b/common/src/unifyfs_server_rpcs.h @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -47,10 +48,11 @@ typedef enum { UNIFYFS_SERVER_BCAST_RPC_EXTENTS, UNIFYFS_SERVER_BCAST_RPC_FILEATTR, UNIFYFS_SERVER_BCAST_RPC_LAMINATE, + UNIFYFS_SERVER_BCAST_RPC_METAGET, UNIFYFS_SERVER_BCAST_RPC_TRANSFER, UNIFYFS_SERVER_BCAST_RPC_TRUNCATE, UNIFYFS_SERVER_BCAST_RPC_UNLINK, - UNIFYFS_SERVER_BCAST_RPC_METAGET + UNIFYFS_SERVER_PENDING_SYNC } server_rpc_e; /* structure to track server-to-server rpc request state */ diff --git a/configure.ac b/configure.ac index f382cdd95..fe392a5e1 100755 --- a/configure.ac +++ b/configure.ac @@ -105,15 +105,6 @@ AS_IF([test "x$enable_pmi" = "xyes"],[ AM_CONDITIONAL([USE_PMI2], [false]) ]) -# MDHIM support build option -AC_ARG_ENABLE([mdhim],[AS_HELP_STRING([--enable-mdhim],[Enable MDHIM build options.])]) -AS_IF([test "x$enable_mdhim" = "xyes"],[ - AM_CONDITIONAL([USE_MDHIM], [true]) - UNIFYFS_AC_LEVELDB -],[ - AM_CONDITIONAL([USE_MDHIM], [false]) -]) - AC_ARG_WITH(pkgconfigdir, [AS_HELP_STRING([--with-pkgconfigdir=DIR],[pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@])], [pkgconfigdir=$withval], @@ -386,8 +377,6 @@ AC_SUBST(unifyfs_bin_path) AC_SUBST(LINK_WRAPPERS) AC_CONFIG_FILES([Makefile - meta/Makefile - meta/src/Makefile server/Makefile server/src/Makefile client/Makefile diff --git a/docs/dependencies.rst b/docs/dependencies.rst index 238b33183..7c6524cd3 100644 --- a/docs/dependencies.rst +++ b/docs/dependencies.rst @@ -55,11 +55,9 @@ UnifyFS specific error codes are defined as follows: 1002 GOTCHA Gotcha operation error 1003 KEYVAL Key-value store operation error 1004 MARGO Mercury/Argobots operation error - 1005 MDHIM MDHIM operation error - 1006 META Metadata store operation error - 1007 NYI Not yet implemented - 1008 PMI PMI2/PMIx error - 1009 SHMEM Shared memory region init/access error - 1010 THREAD POSIX thread operation failed - 1011 TIMEOUT Timed out + 1005 NYI Not yet implemented + 1006 PMI PMI2/PMIx error + 1007 SHMEM Shared memory region init/access error + 1008 THREAD POSIX thread operation failed + 1009 TIMEOUT Operation timed out ===== ========= ====================================== diff --git a/meta/.gitignore b/meta/.gitignore deleted file mode 100644 index 527416fcb..000000000 --- a/meta/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Compiled Dynamic libraries -*.so -*.so* -*.dylib -*.dll - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -# Makefile and Makefile config -#Makefile -#Makefile.cfg diff --git a/meta/Makefile.am b/meta/Makefile.am deleted file mode 100644 index af437a64d..000000000 --- a/meta/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = src diff --git a/meta/README.md b/meta/README.md deleted file mode 100644 index e3bdddebf..000000000 --- a/meta/README.md +++ /dev/null @@ -1,60 +0,0 @@ -MDHIM - Multi-Dimensional Hashing Indexing Middleware - -Description ---------------- -This version of MDHIM package is customized to support UnifyFS. -In order to test these extended interfaces and implementations, -two test files are provided in the directory tests/singletests -(range_bget.c and range_test.c). The test scripts for these two -files are range_bget.sh range_test.sh. - -MDHIM is a parallel key/value store framework written in MPI. -Unlike other big data solutions, MDHIM has been designed for an HPC -environment and to take advantage of high speed networks. - -Building the Tests ---------------- -1. cd tests -2. Type: make -3. If all went well, you have all the tests compiled - -mdhimtst (mdhimtst.c) ---------------- -Typical setup to run file: ./mdhimtst -ftest.txt -q -t5 -d3 -r0~2 -w1 -p ./ - -Typical batch file setup: - -put single_insert.txt -get single_insertget.txt -del single_insertdel.txt - -Batch command file setup: - -For put get del bput bget bdel -[command] [#of items in file(if necessary)] [file containg key and value (if necessary)] - -For nput ngetn (random numbers are generated for this function) -[#number of records to put/get] [key size (only applicapble for byte/strng)] -[value size (nput only)] [size correctance number] - -For flush (only command is used to flush) - -Parameters: - -f (file with batch commands) - -d (Type of DB to use: levelDB=1 mysql=3) - -t (Type of keys: int=1, longInt=2, float=3, double=4, longDouble=5, - string=6, byte=7) - -p (path where DB will be created) - -n (Name of DataBase file or directory) - -b (MLOG_CRIT=1, MLOG_DBG=2) - -a (DB store append mode. By default records with same key are overwritten. - This flag turns on the option to append to existing values. - -w This flag turns on the option to either allow or deny threads to - do command based on if it is dividiable by the modlus of the modulus number - -r ~ This flag turns on the option to either - allow or deny threads to do command based on if the rank falls inclusively inbetween - the rank ranges. NOTE: You must use the '~' inbetween the numbers. Example: -r0~2 - -q<0|1> (Quiet mode, default is verbose) 1=write out to log file - - - diff --git a/meta/src/Makefile.am b/meta/src/Makefile.am deleted file mode 100644 index dd094febe..000000000 --- a/meta/src/Makefile.am +++ /dev/null @@ -1,43 +0,0 @@ -if USE_MDHIM -noinst_LIBRARIES = libmdhim.a -endif - -libmdhim_a_SOURCES = Mlog2/mlog2.c \ - Mlog2/mlog2.h \ - Mlog2/mlogfacs2.h \ - client.c \ - client.h \ - local_client.c \ - local_client.h \ - data_store.c \ - data_store.h \ - partitioner.c \ - partitioner.h \ - messages.c \ - messages.h \ - range_server.c \ - range_server.h \ - ds_leveldb.c \ - ds_leveldb.h \ - mdhim_options.c \ - mdhim_options.h \ - mdhim_private.c \ - mdhim_private.h \ - indexes.c \ - indexes.h \ - mdhim.c \ - mdhim.h \ - uthash/uthash.h - -# target_LDFLAGS is not valid for library archive targets -#libmdhim_a_LDFLAGS = $(AM_LDFLAGS) $(LEVELDB_LDFLAGS) $(LEVELDB_LIBS) $(MPI_CLDFLAGS) - -AM_CPPFLAGS = -I$(top_srcdir)/meta/src/Mlog2 \ - -I$(top_srcdir)/meta/src/uthash \ - -I$(top_srcdir)/common/src \ - -I$(top_srcdir)/server/src - -AM_CFLAGS = -DLEVELDB_SUPPORT $(LEVELDB_CFLAGS) $(MPI_CFLAGS) $(MARGO_CFLAGS) -AM_CFLAGS += -Wall -Werror - -CLEANFILES = diff --git a/meta/src/Mlog2/makefacs.pl b/meta/src/Mlog2/makefacs.pl deleted file mode 100644 index 594a447ea..000000000 --- a/meta/src/Mlog2/makefacs.pl +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/env perl -# -# The Self-* Storage System Project -# Copyright (c) 2004-2011, Carnegie Mellon University. -# All rights reserved. -# http://www.pdl.cmu.edu/ (Parallel Data Lab at Carnegie Mellon) -# -# This software is being provided by the copyright holders under the -# following license. By obtaining, using and/or copying this software, -# you agree that you have read, understood, and will comply with the -# following terms and conditions: -# -# Permission to reproduce, use, and prepare derivative works of this -# software is granted provided the copyright and "No Warranty" statements -# are included with all reproductions and derivative works and associated -# documentation. This software may also be redistributed without charge -# provided that the copyright and "No Warranty" statements are included -# in all redistributions. -# -# NO WARRANTY. THIS SOFTWARE IS FURNISHED ON AN "AS IS" BASIS. -# CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER -# EXPRESSED OR IMPLIED AS TO THE MATTER INCLUDING, BUT NOT LIMITED -# TO: WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY -# OF RESULTS OR RESULTS OBTAINED FROM USE OF THIS SOFTWARE. CARNEGIE -# MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT -# TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT. -# COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE -# OR DOCUMENTATION. -# - -# makefacs.pl autogen mlogfacs.h file based on facs list - -@facs = ( -# names: -# abbreviated long - "MDHIM_CLIENT" => "MDHIM client", - "MDHIM_SERVER" => "MDHIM range server", - "STORE" => "storage", - "MPI" => "MPI" -); - -@mloglvls = ( -# format: main_name:alias1:alias2:... - "MLOG_EMERG", # emergency - "MLOG_ALERT", # alert - "MLOG_CRIT", # critical - "MLOG_ERR", # error - "MLOG_WARN", # warning - "MLOG_NOTE", # notice - "MLOG_INFO", # info - "MLOG_DBG", # all debug streams - "MLOG_DBG0:DAPI", # debug stream 0 - "MLOG_DBG1:DINTAPI", # debug stream 1 - "MLOG_DBG2:DCOMMON", # debug stream 2 - "MLOG_DBG3:DRARE", # debug stream 3 -); - -###################################################################### -# end of configuration section -###################################################################### - -die "odd sized facs[] array" if (($#facs+1) & 1); - -open(P, ">mlogfacs.h_NEW") || die "cannot open mlogfacs.h_NEW ($!)"; - -use File::Basename; -my $myname = basename($0); - -$_ = < -#include -#include -#include -#include -#include -#include -#include -#include /* for strncasecmp */ -#include -#include -#include - -#ifdef MLOG_MUTEX -#include -#endif - -#include -#include -#include -#include - -#include -#include -#include - -#include "mlog2.h" - - -/* - * dispose of the mlog() macro function, if it is defined. we need - * the real thing here... - */ -#ifdef mlog -#undef mlog -#endif /* mlog */ - -#define MLOG_TAGPAD 16 /* extra tag bytes to alloc for a pid */ - -/** - * message buffer header: lives at the start of a message buffer, is - * malloced with it, and contains pointers + metainfo. - */ -struct mlog_mbhead { -#define MBH_START ">CpMdUl<" - char mbh_start[8]; /*!< magic string that marks start of msgbuf */ - uint32_t mbh_beef; /*!< 0xdeadbeef, for checking byte order */ - uint32_t mbh_len; /*!< length of buffer (not including header) */ - uint32_t mbh_cnt; /*!< number of bytes currently in buffer */ - uint32_t mbh_wp; /*!< write pointer */ -}; - -/** - * internal global state - */ -struct mlog_state { - /* note: tag, mlog_facs, and fac_cnt are in xstate now */ - - int def_mask; /*!< default facility mask value */ - int stderr_mask; /*!< mask above which we send to stderr */ - char *logfile; /*!< logfile name [malloced] */ - int logfd; /*!< fd of the open logfile */ - int oflags; /*!< open flags */ - int fac_alloc; /*!< # of slots in facs[] (>=fac_cnt) */ - unsigned char *mb; /*!< message buffer [malloced] */ - int udpsock; /*!< udp socket for cons output */ - int ucon_cnt; /*!< number of UDP output targets */ - int ucon_nslots; /*!< # of malloc'd entries in ucons[] */ - struct sockaddr_in *ucons; /*!< UDP output targets [malloced] */ - struct utsname uts; /*!< for hostname, from uname(3) */ - void (*abort_hook)(void); /*!< abort hook for mlog_abort() */ - int stdout_isatty; /*!< non-zero if stdout is a tty */ - int stderr_isatty; /*!< non-zero if stderr is a tty */ -#ifdef MLOG_MUTEX - pthread_mutex_t mlogmux; /*!< protect mlog in threaded env */ -#endif -}; - -/* - * global data. this sets mlog_xst.tag to 0, meaning the log is not open. - * this is global so mlog_filter() in mlog.h can get at it. - */ -struct mlog_xstate mlog_xst = { 0 }; - -/* - * static data. - */ -static struct mlog_state mst = { 0 }; -static int mlogsyslog[] = { - LOG_DEBUG, /* MLOG_DBUG */ - LOG_INFO, /* MLOG_INFO */ - LOG_NOTICE, /* MLOG_NOTE */ - LOG_WARNING, /* MLOG_WARN */ - LOG_ERR, /* MLOG_ERR */ - LOG_CRIT, /* MLOG_CRIT */ - LOG_ALERT, /* MLOG_ALERT */ - LOG_EMERG, /* MLOG_EMERG */ -}; -static const char *default_fac0name = "MLOG"; /* default name for facility 0 */ - -/* - * macros - */ -#ifdef MLOG_MUTEX -#define mlog_lock() pthread_mutex_lock(&mst.mlogmux) -#define mlog_unlock() pthread_mutex_unlock(&mst.mlogmux) -#else -#define mlog_lock() /* nothing */ -#define mlog_unlock() /* nothing */ -#endif - -/* - * local prototypes - */ -static void mlog_getmbptrs(char **, int *, char **, int *); -static void mlog_dmesg_mbuf(char **b1p, int *b1len, char **b2p, int *b2len); -static int mlog_getucon(int, struct sockaddr_in *, char *); -static const char *mlog_pristr(int); -static int mlog_resolvhost(struct sockaddr_in *, char *, char *); -static int mlog_setnfac(int); -static uint32_t wswap(uint32_t); -static void vmlog(int, const char *, va_list); - -/* - * local helper functions - */ - -/** - * mlog_getmbptrs: get pointers to the message buffer and their sizes, - * based on the current value of the write pointer. if the write pointer - * is zero, then the entire buffer is in one and twolen is set to zero. - * note that the _caller_ must check that mst.mb is valid, we assume it is. - * caller must hold mlog_lock. - * - * @param one pointer to first part of circular buffer - * @param onelen length of the one buffer - * @param two pointer to second part of circular buffer, if any - * @param twolen length of the two buffer - */ -static void mlog_getmbptrs(char **one, int *onelen, char **two, int *twolen) -{ - uint32_t wp; - wp = ((struct mlog_mbhead *)mst.mb)->mbh_wp; - *one = ((char *) mst.mb) + sizeof(struct mlog_mbhead) + wp; - *onelen = ((struct mlog_mbhead *)mst.mb)->mbh_len - wp; - *two = ((char *) mst.mb) + sizeof(struct mlog_mbhead); - *twolen = wp; -} - -/** - * mlog_dmesg_mbuf: obtain pointers to the current contents of the - * message buffer. since the message buffer is circular, the result - * may come back in two pieces. - * caller must hold mlog_lock. - * - * @param b1p returns pointer to first buffer here - * @param b1len returns length of data in b1 - * @param b2p returns pointer to second buffer here (null if none) - * @param b2len returns length of b2 or zero if b2 is null - */ -static void mlog_dmesg_mbuf(char **b1p, int *b1len, char **b2p, int *b2len) -{ - uint32_t skip; - /* get pointers */ - mlog_getmbptrs(b1p, b1len, b2p, b2len); - /* if the buffer wasn't full, we need to adjust the pointers */ - skip = ((struct mlog_mbhead *)mst.mb)->mbh_len - - ((struct mlog_mbhead *)mst.mb)->mbh_cnt; - if (skip >= *b1len) { /* skip entire first buffer? */ - skip -= *b1len; - *b1p = *b2p; - *b2p = 0; - *b1len = *b2len; - *b2len = 0; - } - if (skip) { - *b1p = *b1p + skip; - *b1len = *b1len - skip; - } - return; -} - -/** - * mlog_getucon: helper function that parses hostname/port info from - * a string into an array of sockaddr_in structures. the string format - * is: host1:port1;host2:port2;host3:port3 ... - * does not access global mlog state. - * - * @param cnt number of sockaddr_in structures alloced for ads[] array - * @param ads an array of sockaddr_in structures we fill in - * @param dcon text string to load ucon info from - * @return number of host/port entries resolved. - */ -static int mlog_getucon(int cnt, struct sockaddr_in *ads, char *dcon) -{ - int rv; - char *p, *hst, *col, *port; - p = dcon; - rv = 0; - while (*p && rv < cnt) { - hst = p; - while (*p && *p != ':') { - p++; - } - if (*p != ':') { - fprintf(stderr, "MLOG_UCON: parse error: missing ':'\n"); - break; - } - col = p++; - port = p; - while (*p && *p != ';') { - p++; - } - if (*p == ';') { - p++; - } - *col = 0; - if (mlog_resolvhost(&ads[rv], hst, port) != -1) { - rv++; - } - *col = ':'; - } - return(rv); -} - -/* - * static arrays for converting between pri's and strings - */ -static const char *norm[] = { "DBUG", "INFO", "NOTE", "WARN", - "ERR ", "CRIT", "ALRT", "EMRG" - }; -static const char *dbg[] = { "D---", "D3--", "D2--", "D23-", - "D1--", "D13-", "D12-", "D123", - "D0--", "D03-", "D02-", "D023", - "D01-", "D013", "D012", "DBUG" - }; -/** - * mlog_pristr: convert priority to 4 byte symbolic name. - * does not access mlog global state. - * - * @param pri the priority to convert to a string - * @return the string (symbolic name) of the priority - */ -static const char *mlog_pristr(int pri) -{ - int s; - pri = pri & MLOG_PRIMASK; /* be careful */ - s = (pri >> MLOG_PRISHIFT) & 7; - if (s) { - return(norm[s]); - } - s = (pri >> MLOG_DPRISHIFT) & 15; - return(dbg[s]); -} - -/** - * mlog_resolvhost: another helper function that does hostname resolution. - * does not access mlog global state. - * - * @param sinp pointer to sockaddr_in that we fill in based on h/p - * @param h hostname to resolve; also handles IP address - * @param p port number - * @return -1 on error, 0 otherwise. - */ -static int mlog_resolvhost(struct sockaddr_in *sinp, char *h, char *p) -{ - struct hostent *he; - memset(sinp, 0, sizeof(*sinp)); - sinp->sin_family = AF_INET; - sinp->sin_port = htons(atoi(p)); - if (*h >= '0' && *h <= '9') { - sinp->sin_addr.s_addr = inet_addr(h); - if (sinp->sin_addr.s_addr == 0 || - sinp->sin_addr.s_addr == ((in_addr_t) -1)) { - fprintf(stderr, "MLOG_UCON: invalid host %s\n", h); - return(-1); - } - } else { - he = gethostbyname(h); /* likely to block here */ - if (!he || he->h_addrtype != AF_INET || - he->h_length != sizeof(in_addr_t) || !he->h_addr) { - fprintf(stderr, "MLOG_UCON: invalid host %s\n", h); - return(-1); - } - memcpy(&sinp->sin_addr.s_addr, he->h_addr, he->h_length); - } - return(0); -} - -/** - * mlog_setnfac: set the number of facilites allocated (including default - * to a given value). mlog must be open for this to do anything. - * we set the default name for facility 0 here. - * caller must hold mlog_lock. - * - * @param n the number of facilities to allocate space for now. - * @return -1 on error. - */ -static int mlog_setnfac(int n) -{ - int try, lcv; - struct mlog_fac *nfacs; - - /* - * no need to check mlog_xst.tag to see if mlog is open or not, - * since caller holds mlog_lock already it must be ok. - */ - - /* hmm, already done */ - if (n <= mlog_xst.fac_cnt) { - return(0); - } - /* can we expand in place? */ - if (n <= mst.fac_alloc) { - mlog_xst.fac_cnt = n; - return(0); - } - /* must grow the array */ - try = (n < 1024) ? (n + 32) : n; /* pad a bit for small values of n */ - nfacs = calloc(1, try * sizeof(*nfacs)); - if (!nfacs) { - return(-1); - } - /* over the hump, setup the new array */ - lcv = 0; - if (mlog_xst.mlog_facs && mlog_xst.fac_cnt) { /* copy old? */ - for (/*null*/ ; lcv < mlog_xst.fac_cnt ; lcv++) { - nfacs[lcv] = mlog_xst.mlog_facs[lcv]; /* struct copy */ - } - } - for (/*null*/ ; lcv < try ; lcv++) { /* init the new */ - nfacs[lcv].fac_mask = mst.def_mask; - nfacs[lcv].fac_aname = (lcv == 0) ? (char *)default_fac0name : NULL; - nfacs[lcv].fac_lname = NULL; - } - /* install */ - if (mlog_xst.mlog_facs) { - free(mlog_xst.mlog_facs); - } - mlog_xst.mlog_facs = nfacs; - mlog_xst.fac_cnt = n; - mst.fac_alloc = try; - return(0); -} - -/** - * mlog_bput: copy a string to a buffer, counting the bytes - * - * @param bpp pointer to output pointer (we advance it) - * @param skippy pointer to bytes to skip - * @param residp pointer to length of buffer remaining - * @param totcp pointer to total bytes moved counter - * @param str the string to copy in (null to just add a \0) - */ -static void mlog_bput(char **bpp, int *skippy, int *residp, int *totcp, - const char *str) -{ - static const char *nullsrc = "X\0\0"; /* 'X' is a non-null dummy char */ - const char *sp; - if (str == NULL) { /* trick to allow a null insert */ - str = nullsrc; - } - for (sp = str ; *sp ; sp++) { - if (sp == nullsrc) { - sp++; /* skip over 'X' to null */ - } - if (totcp) { - (*totcp)++; /* update the total */ - } - if (skippy && *skippy > 0) { - (*skippy)--; /* honor skip */ - continue; - } - if (*residp > 0 && *bpp != NULL) { /* copyout if buffer w/space */ - **bpp = *sp; - (*bpp)++; - (*residp)--; - } - } - return; -} - -/** - * wswap: swap byte order of a 32bit word - * does not access mlog global state. - * - * @param w the 32bit int to swap - * @return the swapped version of the "w" - */ -static uint32_t wswap(uint32_t w) -{ - return( (w >> 24) | - ((w >> 16) & 0xff) << 8 | - ((w >> 8) & 0xff) << 16 | - ((w ) & 0xff) << 24 ); -} - -/** - * mlog_cleanout: release previously allocated resources (e.g. from a - * close or during a failed open). this function assumes the mlogmux - * has been allocated (caller must ensure that this is true or we'll - * die when attempting a mlog_lock()). we will dispose of mlogmux. - * (XXX: might want to switch over to a PTHREAD_MUTEX_INITIALIZER for - * mlogmux at some point?). - * - * the caller handles cleanout of mlog_xst.tag (not us). - */ -static void mlog_cleanout() -{ - int lcv; - mlog_lock(); - if (mst.logfile) { - if (mst.logfd >= 0) { - close(mst.logfd); - } - mst.logfd = -1; - free(mst.logfile); - mst.logfile = NULL; - } - if (mlog_xst.mlog_facs) { - /* - * free malloced facility names, being careful not to free - * the static default_fac0name.... - */ - for (lcv = 0 ; lcv < mst.fac_alloc ; lcv++) { - if (mlog_xst.mlog_facs[lcv].fac_aname && - mlog_xst.mlog_facs[lcv].fac_aname != default_fac0name) { - free(mlog_xst.mlog_facs[lcv].fac_aname); - } - if (mlog_xst.mlog_facs[lcv].fac_lname) { - free(mlog_xst.mlog_facs[lcv].fac_lname); - } - } - free(mlog_xst.mlog_facs); - mlog_xst.mlog_facs = NULL; - mlog_xst.fac_cnt = mst.fac_alloc = 0; - } - if (mst.mb) { - free(mst.mb); - mst.mb = NULL; - } - if (mst.udpsock >= 0) { - close(mst.udpsock); - mst.udpsock = -1; - } - if (mst.ucons) { - free(mst.ucons); - mst.ucons = NULL; - } - if (mst.oflags & MLOG_SYSLOG) { - closelog(); - } - mlog_unlock(); -#ifdef MLOG_MUTEX - pthread_mutex_destroy(&mst.mlogmux); -#endif -} - - -/** - * vmlog: core log function, front-ended by mlog/mlog_abort/mlog_exit. - * we vsnprintf the message into a holding buffer to format it. then we - * send it to all target output logs. the holding buffer is set to - * MLOG_TBSIZ, if the message is too long it will be silently truncated. - * caller should not hold mlog_lock, vmlog will grab it as needed. - * - * @param flags the flags (mainly fac+pri) for this log message - * @param fmt the printf(3) format to use - * @param ap the stdargs va_list to use for the printf format - */ -static void vmlog(int flags, const char *fmt, va_list ap) -{ -#define MLOG_TBSIZ 4096 /* bigger than any line should be */ - int fac, lvl, msk; - char b[MLOG_TBSIZ], *bp, *b_nopt1hdr; - char facstore[16], *facstr; - struct timeval tv; - struct tm *tm; - int hlen_pt1, hlen, mlen, tlen, thisflag; - int resid; - char *m1, *m2; - int m1len, m2len, ncpy; - //since we ignore any potential errors in MLOG let's always re-set - //errno to its orginal value - int save_errno = errno; - struct mlog_mbhead *mb; - /* - * make sure the mlog is open - */ - if (!mlog_xst.tag) { - return; - } - /* - * first, see if we can ignore the log messages because it is - * masked out. if debug messages are masked out, then we just - * directly compare levels. if debug messages are not masked, - * then we allow all non-debug messages and for debug messages we - * check to make sure the proper bit is on. [apps that don't use - * the debug bits just log with MLOG_DBG which has them all set] - */ - fac = flags & MLOG_FACMASK; - lvl = flags & MLOG_PRIMASK; - /* convert unknown facilities to default so we don't drop log msg */ - if (fac >= mlog_xst.fac_cnt) { - fac = 0; - } - msk = mlog_xst.mlog_facs[fac].fac_mask; - if (lvl >= MLOG_INFO) { /* normal mlog message */ - if (lvl < msk) { - errno = save_errno; - return; /* skip it */ - } - if (mst.stderr_mask != 0 && lvl >= mst.stderr_mask) { - flags |= MLOG_STDERR; - } - } else { /* debug mlog message */ - /* - * note: if (msk >= MLOG_INFO), then all the mask's debug bits - * are zero (meaning debugging messages are masked out). thus, - * for messages with the debug level we only have to do a bit - * test. - */ - if ((lvl & msk) == 0) { /* do we want this type of debug msg? */ - errno = save_errno; - return; /* no! */ - } - if ((lvl & mst.stderr_mask) != 0) { /* same thing for stderr_mask */ - flags |= MLOG_STDERR; - } - } - /* - * we must log it, start computing the parts of the log we'll need. - */ - mlog_lock(); /* lock out other threads */ - if (mlog_xst.mlog_facs[fac].fac_aname) { - facstr = mlog_xst.mlog_facs[fac].fac_aname; - } else { - snprintf(facstore, sizeof(facstore), "%d", fac); - facstr = facstore; - } - (void) gettimeofday(&tv, 0); - tm = localtime(&tv.tv_sec); - thisflag = (mst.oflags | flags); - /* - * ok, first, put the header into b[] - */ - hlen = snprintf(b, sizeof(b), - "%04d/%02d/%02d-%02d:%02d:%02d.%02ld %s %s ", - tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec, - (long int)tv.tv_usec / 10000, mst.uts.nodename, - mlog_xst.tag); - hlen_pt1 = hlen; /* save part 1 length */ - if (hlen < sizeof(b)) { - hlen += snprintf(b + hlen, sizeof(b) - hlen, "%-4s %s ", - facstr, mlog_pristr(lvl)); - } - /* - * we expect there is still room (i.e. at least one byte) for a - * message, so this overflow check should never happen, but let's - * check for it anyway. - */ - if (hlen + 1 >= sizeof(b)) { - mlog_unlock(); /* drop lock, this is the only early exit */ - fprintf(stderr, "mlog: header overflowed %zd byte buffer (%d)\n", - sizeof(b), hlen + 1); - errno = save_errno; - return; - } - /* - * now slap in the user's data at the end of the buffer - */ - mlen = vsnprintf(b + hlen, sizeof(b) - hlen, fmt, ap); - /* - * compute total length, check for overflows... make sure the string - * ends in a newline. - */ - tlen = hlen + mlen; - /* if overflow or totally full without newline at end ... */ - if (tlen >= sizeof(b) || - (tlen == sizeof(b) - 1 && b[sizeof(b)-2] != '\n') ) { - tlen = sizeof(b) - 1; /* truncate, counting final null */ - /* - * could overwrite the end of b with "[truncated...]" or - * something like that if we wanted to note the problem. - */ - b[sizeof(b)-2] = '\n'; /* jam a \n at the end */ - } else { - /* it fit, make sure it ends in newline */ - if (b[tlen - 1] != '\n') { - b[tlen++] = '\n'; - b[tlen] = 0; - } - } - b_nopt1hdr = b + hlen_pt1; - /* - * multilog message is now ready to be dispatched. - */ - /* - * 1: log it to the message buffer (note: mlog still locked) - */ - mb = (struct mlog_mbhead *)mst.mb; - if (mb) { - resid = tlen; - bp = b; - /* wont fit? truncate... */ - if (resid > mb->mbh_len) { - bp = b + resid - mb->mbh_len; - resid = mb->mbh_len; - } - mlog_getmbptrs(&m1, &m1len, &m2, &m2len); - ncpy = resid; - if (ncpy > m1len) { - ncpy = m1len; - } - memcpy(m1, bp, ncpy); - resid -= ncpy; - if (resid) { - bp += ncpy; - memcpy(m2, bp, resid); - } - /* update write pointer */ - if (tlen < mb->mbh_len) { - mb->mbh_wp += tlen; - if (mb->mbh_wp >= mb->mbh_len) { - mb->mbh_wp -= mb->mbh_len; - } - } - if (mb->mbh_cnt < mb->mbh_len) { - mb->mbh_cnt += tlen; - if (mb->mbh_cnt > mb->mbh_len) { - mb->mbh_cnt = mb->mbh_len; - } - } - } - /* - * locking options: b[] is current an auto var on the stack. - * this costs stack space, but means we can unlock earlier. - * (if b[] was static, you'd hold the lock until the end.) - * clearly the logfile needs mst.logfd to be stable, and the - * UCON walks the mst.ucons[] array... - * - * neither the stderr/out or syslog access parts of mst that - * change, so we don't really need it locked for that? - */ - /* - * 2: log it to the log file - */ - if (mst.logfd >= 0) { - if (write(mst.logfd, b, tlen) != 0) - fprintf(stderr, "mlog: Failed to write(): %s", strerror(errno)); - } - /* - * 3: log it to the UCONs (UDP console) [mst.oflags' MLOG_UCON_ON bit - * can only be set if there is a valid mst.udpsock open] - */ - if (mst.oflags & MLOG_UCON_ON) { - for (ncpy = 0 ; ncpy < mst.ucon_cnt ; ncpy++) - (void) sendto(mst.udpsock, b, tlen, 0, - (struct sockaddr *)&mst.ucons[ncpy], - sizeof(mst.ucons[ncpy])); - } - mlog_unlock(); /* drop lock here */ - /* - * 4: log it to stderr and/or stdout. skip part one of the header - * if the output channel is a tty - */ - if (thisflag & MLOG_STDERR) { - if (mst.stderr_isatty) { - fprintf(stderr, "%s", b_nopt1hdr); - } else { - fprintf(stderr, "%s", b); - } - } - if (thisflag & MLOG_STDOUT) { - if (mst.stderr_isatty) { - printf("%s", b_nopt1hdr); - } else { - printf("%s", b); - } - fflush(stdout); - } - /* - * 5: log it to syslog - */ - if (mst.oflags & MLOG_SYSLOG) { - b[tlen - 1] = 0; /* syslog doesn't want the \n */ - syslog(mlogsyslog[lvl >> MLOG_PRISHIFT], "%s", b_nopt1hdr); - b[tlen - 1] = '\n'; /* put \n back, just to be safe */ - } - /* - * done! - */ - errno = save_errno; - return; -} - -/* - * API functions - */ - -/* - * mlog_str2pri: convert a priority string to an int pri value to allow - * for more user-friendly programs. returns -1 (an invalid pri) on error. - * does not access mlog global state. - */ -int mlog_str2pri(const char *pstr) -{ - char ptmp[8]; - int lcv; - /* make sure we have a valid input */ - if (strlen(pstr) > 5) { - return(-1); - } - strcpy(ptmp, pstr); /* because we may overwrite parts of it */ - /* - * handle some quirks - */ - if (strcasecmp(ptmp, "ERR") == 0) { /* has trailing space in the array */ - return(MLOG_ERR); - } - if (strcasecmp(ptmp, "DEBUG") == 0) { /* 5 char alternative to 'DBUG' */ - return(MLOG_DBG); - } - if (ptmp[0] == 'D') { /* allow shorthand without the '-' chars */ - while (strlen(ptmp) < 4) { - strcat(ptmp, "-"); - } - } - /* - * do non-debug first, then debug - */ - for (lcv = 1 ; lcv <= 7 ; lcv++) { - if (strcasecmp(ptmp, norm[lcv]) == 0) { - return(lcv << MLOG_PRISHIFT); - } - } - for (lcv = 0 ; lcv < 16 ; lcv++) { - if (strcasecmp(ptmp, dbg[lcv]) == 0) { - return(lcv << MLOG_DPRISHIFT); - } - } - /* bogus! */ - return(-1); -} - -/* - * mlog_open: open a multilog (uses malloc, inits global state). you - * can only have one multilog open at a time, but you can use multiple - * facilities. - * - * if an mlog is already open, then this call will fail. if you use - * the message buffer, you prob want it to be 1K or larger. - * - * return 0 on success, -1 on error. - */ -int mlog_open(char *tag, int maxfac_hint, int default_mask, int stderr_mask, - char *logfile, int msgbuf_len, int flags, int syslogfac) -{ - int tagblen; - char *newtag, *dcon, *cp; - struct mlog_mbhead *mb; - /* quick sanity check (mst.tag is non-null if already open) */ - if (mlog_xst.tag || !tag || - (maxfac_hint < 0) || (default_mask & ~MLOG_PRIMASK) || - (stderr_mask & ~MLOG_PRIMASK) || - (msgbuf_len < 0) || (msgbuf_len > 0 && msgbuf_len < 16)) { - return(-1); - } - /* init working area so we can use mlog_cleanout to bail out */ - memset(&mst, 0, sizeof(mst)); - mst.logfd = mst.udpsock = -1; - /* start filling it in */ - tagblen = strlen(tag) + MLOG_TAGPAD; /* add a bit for pid */ - newtag = calloc(1, tagblen); - if (!newtag) { - return(-1); - } -#ifdef MLOG_MUTEX /* create lock */ - if (pthread_mutex_init(&mst.mlogmux, NULL) != 0) { - /* XXX: consider cvt to PTHREAD_MUTEX_INITIALIZER */ - free(newtag); - return(-1); - } -#endif - /* it is now safe to use mlog_cleanout() for error handling */ - - mlog_lock(); /* now locked */ - if (flags & MLOG_LOGPID) { - snprintf(newtag, tagblen, "%s[%d]", tag, getpid()); - } else { - snprintf(newtag, tagblen, "%s", tag); - } - mst.def_mask = default_mask; - mst.stderr_mask = stderr_mask; - if (logfile) { - mst.logfile = strdup(logfile); - if (!mst.logfile) { - goto error; - } - mst.logfd = open(mst.logfile, O_RDWR|O_APPEND|O_CREAT, 0666); - if (mst.logfd < 0) { - fprintf(stderr, "mlog_open: cannot open %s: %s\n", - mst.logfile, strerror(errno)); - goto error; - } - } - /* - * save setting of MLOG_SYSLOG and MLOG_UCON_ON bits until these - * features are actually enabled. this allows us to use - * mlog_close() to clean up after us if we encounter an error. - */ - mst.oflags = (flags & ~(MLOG_SYSLOG|MLOG_UCON_ON)); - /* maxfac_hint should include default fac. */ - if (mlog_setnfac((maxfac_hint < 1) ? 1 : maxfac_hint) < 0) { - goto error; - } - if (msgbuf_len) { - mst.mb = calloc(1, msgbuf_len + sizeof(struct mlog_mbhead)); - if (!mst.mb) { - goto error; - } - mb = (struct mlog_mbhead *)mst.mb; - memcpy(mb, MBH_START, sizeof(mb->mbh_start)); - mb->mbh_beef = 0xdeadbeef; - mb->mbh_len = msgbuf_len; - mb->mbh_cnt = 0; - mb->mbh_wp = 0; - } - if (flags & MLOG_UCON_ON) { - mst.udpsock = socket(PF_INET, SOCK_DGRAM, 0); - if (mst.udpsock < 0) { - goto error; - } - mst.oflags |= MLOG_UCON_ON; - /* note that mst.{ucon_nslots,ucon_cnt,ucons} are all 0 */ - } - if ((flags & MLOG_UCON_ENV) != 0 && (dcon = getenv("MLOG_UCON")) != 0) { - for (mst.ucon_cnt = 1, cp = dcon ; *cp ; cp++) { - if (*cp == ';') { - mst.ucon_cnt++; - } - } - mst.ucons = calloc(1, mst.ucon_cnt * sizeof(*mst.ucons)); - if (!mst.ucons) { - goto error; - } - mst.ucon_nslots = mst.ucon_cnt; - mst.ucon_cnt = mlog_getucon(mst.ucon_cnt, mst.ucons, dcon); - /* - * note that it is possible to load ucons but still have the - * console disabled (e.g. !UCON_ON && UCON_ENV). in that case - * the program may enable ucon later via mlog_ucon_on(). - */ - } - (void) uname(&mst.uts); - mlog_xst.nodename = mst.uts.nodename; /* expose this */ - /* chop off the domainname */ - if ((flags & MLOG_FQDN) == 0) { - for (cp = mst.uts.nodename ; *cp && *cp != '.' ; cp++) - /*null*/; - *cp = 0; - } - /* cache value of isatty() to avoid extra system calls */ - mst.stdout_isatty = isatty(fileno(stdout)); - mst.stderr_isatty = isatty(fileno(stderr)); - /* - * log now open! - */ - if (flags & MLOG_SYSLOG) { - openlog(tag, (flags & MLOG_LOGPID) ? LOG_PID : 0, syslogfac); - mst.oflags |= MLOG_SYSLOG; - } - mlog_xst.tag = newtag; - mlog_unlock(); - return(0); -error: - /* - * we failed. mlog_cleanout can handle the cleanup for us. - */ - free(newtag); /* was never installed */ - mlog_unlock(); - mlog_cleanout(); - return(-1); -} - -/* - * mlog_reopen: reopen a multilog. reopen logfile for rotation or - * after a fork... update ucon and pid in tag (if enabled). - */ -int mlog_reopen(char *logfile) -{ - int rv; - char *oldpid, *sdup; - if (!mlog_xst.tag) { - return(-1); /* log wasn't open in the first place */ - } - rv = 0; - mlog_lock(); /* lock it down */ - /* reset ucon if open */ - if (mst.oflags & MLOG_UCON_ON) { - if (mst.udpsock >= 0) { - close(mst.udpsock); - } - mst.udpsock = socket(PF_INET, SOCK_DGRAM, 0); - if (mst.udpsock == -1) { - mst.oflags &= ~MLOG_UCON_ON; /* unlikely */ - } - } - /* - * refresh the pid - mlog_open pads the tag such that we cannot - * overflow by snprinting an int pid here... - */ - if ((mst.oflags & MLOG_LOGPID) != 0 && - (oldpid = strrchr(mlog_xst.tag, '[')) != NULL) { - snprintf(oldpid, MLOG_TAGPAD, "[%d]", getpid()); - } - if (mst.logfd >= 0) { - (void) close(mst.logfd); - } - mst.logfd = -1; - /* now the log file */ - if (logfile == NULL) { /* don't want a log file */ - if (mst.logfile) { /* flush out any old stuff */ - free(mst.logfile); - mst.logfile = NULL; - } - } else if (logfile[0] != '\0' && - (mst.logfile == NULL || strcmp(mst.logfile, logfile) != 0)) { - /* - * we are here if we have a new logfile name requested and it - * different from what was there before, so we need to malloc a - * new mst.logfile. - */ - sdup = strdup(logfile); - if (sdup == NULL) { - fprintf(stderr, "mlog_reopen: out of memory - strdup(%s)\n", - logfile); - /* XXX: what else can we do? */ - rv = -1; - goto done; - } - if (mst.logfile) { - free(mst.logfile); /* dump the old one, if present */ - } - mst.logfile = sdup; /* install the new one */ - } - if (mst.logfile) { - mst.logfd = open(mst.logfile, O_RDWR|O_APPEND|O_CREAT, 0666); - if (mst.logfd < 0) { - fprintf(stderr, "mlog_reopen: cannot reopen logfile %s: %s\n", - mst.logfile, strerror(errno)); - rv = -1; - } - } -done: - mlog_unlock(); - return(rv); -} - -/* - * mlog_close: close off an mlog and release any allocated resources - * (e.g. as part of an orderly shutdown, after all worker threads have - * been collected). if already closed, this function is a noop. - */ -void mlog_close() -{ - if (!mlog_xst.tag) { - return; /* return if already closed */ - } - free(mlog_xst.tag); - mlog_xst.tag = NULL; /* marks us as down */ - mlog_cleanout(); -} - -/* - * mlog_namefacility: assign a name to a facility - * return 0 on success, -1 on error (malloc problem). - */ -int mlog_namefacility(int facility, char *aname, char *lname) -{ - int rv; - char *n, *nl; - /* not open? */ - if (!mlog_xst.tag) { - return(-1); - } - rv = -1; /* assume error */ - mlog_lock(); - /* need to allocate facility? */ - if (facility >= mlog_xst.fac_cnt) { - if (mlog_setnfac(facility+1) < 0) { - goto done; - } - } - n = 0; - nl = 0; - if (aname) { - n = strdup(aname); - if (!n) { - goto done; - } - if (lname && (nl = strdup(lname)) == NULL) { - free(n); - goto done; - } - } - if (mlog_xst.mlog_facs[facility].fac_aname && - mlog_xst.mlog_facs[facility].fac_aname != default_fac0name) { - free(mlog_xst.mlog_facs[facility].fac_aname); - } - if (mlog_xst.mlog_facs[facility].fac_lname) { - free(mlog_xst.mlog_facs[facility].fac_lname); - } - mlog_xst.mlog_facs[facility].fac_aname = n; - mlog_xst.mlog_facs[facility].fac_lname = nl; - rv = 0; /* now we have success */ -done: - mlog_unlock(); - return(rv); -} - -/* - * mlog_allocfacility: allocate a new facility with the given name. - * return new facility number on success, -1 on error (malloc problem). - */ -int mlog_allocfacility(char *aname, char *lname) -{ - int newfac; - /* not open? */ - if (!mlog_xst.tag) { - return(-1); - } - mlog_lock(); - newfac = mlog_xst.fac_cnt; - if (mlog_setnfac(newfac+1) < 0) { - newfac = -1; - } - mlog_unlock(); - if (newfac == -1 || mlog_namefacility(newfac, aname, lname) < 0) { - return(-1); - } - return(newfac); -} - -/* - * mlog_setlogmask: set the logmask for a given facility. if the user - * uses a new facility, we ensure that our facility array covers it - * (expanding as needed). return oldmask on success, -1 on error. cannot - * fail if facility array was preallocated. - */ -int mlog_setlogmask(int facility, int mask) -{ - int oldmask; - /* not open? */ - if (!mlog_xst.tag) { - return(-1); - } - mlog_lock(); - /* need to allocate facility? */ - if (facility >= mlog_xst.fac_cnt && mlog_setnfac(facility+1) < 0) { - oldmask = -1; /* error */ - } else { - /* swap it in, masking out any naughty bits */ - oldmask = mlog_xst.mlog_facs[facility].fac_mask; - mlog_xst.mlog_facs[facility].fac_mask = (mask & MLOG_PRIMASK); - } - mlog_unlock(); - return(oldmask); -} - -/* - * mlog_setmasks: set the mlog masks for a set of facilities to a given - * level. the input string should look: PREFIX1=LEVEL1,PREFIX2=LEVEL2,... - * if the "PREFIX=" part is omitted, then the level applies to all defined - * facilities (e.g. mlog_setmasks("WARN") sets everything to WARN). - */ -void mlog_setmasks(char *mstr, int mlen0) -{ - char *m, *current, *fac, *pri, pbuf[8]; - int mlen, facno, clen, elen, faclen, prilen, prino; - /* not open? */ - if (!mlog_xst.tag) { - return; - } - m = mstr; - mlen = mlen0; - if (mlen < 0) { - mlen = strlen(mstr); - } - while (mlen > 0 && (*m == ' ' || *m == '\t')) { /* remove leading space */ - m++; - mlen--; - } - if (mlen <= 0) { - return; /* nothing doing */ - } - facno = 0; /* make sure it gets init'd */ - while (m) { - /* note current chunk, and advance m to the next one */ - current = m; - for (clen = 0 ; clen < mlen && m[clen] != ',' ; clen++) { - /*null*/; - } - if (clen < mlen) { - m = m + clen + 1; /* skip the comma too */ - mlen = mlen - (clen + 1); - } else { - m = NULL; - mlen = 0; - } - if (clen == 0) { - continue; /* null entry, just skip it */ - } - for (elen = 0 ; elen < clen && current[elen] != '=' ; elen++) { - /*null*/; - } - if (elen < clen) { /* has a facility prefix? */ - fac = current; - faclen = elen; - pri = current + elen + 1; - prilen = clen - (elen + 1); - } else { - fac = NULL; /* means we apply to all facs */ - faclen = 0; - pri = current; - prilen = clen; - } - if (m == NULL) { - /* remove trailing white space from count */ - while (prilen > 0 && (pri[prilen-1] == '\n' || - pri[prilen-1] == ' ' || - pri[prilen-1] == '\t') ) { - prilen--; - } - } - /* parse complete! */ - /* process priority */ - if (prilen > 5) { /* we know it can't be longer than this */ - prino = -1; - } else if (prilen < 0) { /* This if() block gets rid of a */ - prino = -1; /* compiler warning. */ - } else { - memset(pbuf, 0, sizeof(pbuf)); - strncpy(pbuf, pri, prilen); - prino = mlog_str2pri(pbuf); - } - if (prino == -1) { - mlog(MLOG_ERR, "mlog_setmasks: %.*s: unknown priority %.*s", - faclen, fac, prilen, pri); - continue; - } - /* process facility */ - if (fac) { - mlog_lock(); - for (facno = 0 ; facno < mlog_xst.fac_cnt ; facno++) { - if (mlog_xst.mlog_facs[facno].fac_aname && - strlen(mlog_xst.mlog_facs[facno].fac_aname) == faclen && - strncasecmp(mlog_xst.mlog_facs[facno].fac_aname, fac, - faclen) == 0) { - break; - } - if (mlog_xst.mlog_facs[facno].fac_lname && - strlen(mlog_xst.mlog_facs[facno].fac_lname) == faclen && - strncasecmp(mlog_xst.mlog_facs[facno].fac_lname, fac, - faclen) == 0) { - break; - } - } - mlog_unlock(); - if (facno >= mlog_xst.fac_cnt) { - mlog(MLOG_ERR, "mlog_setmasks: unknown facility %.*s", - faclen, fac); - continue; - } - } - if (fac) { - /* apply only to this fac */ - mlog_setlogmask(facno, prino); - } else { - /* apply to all facilities */ - for (facno = 0 ; facno < mlog_xst.fac_cnt ; facno++) { - mlog_setlogmask(facno, prino); - } - } - } -} - -/* - * mlog_getmasks: get current masks levels - */ -int mlog_getmasks(char *buf, int discard, int len, int unterm) -{ - char *bp, *myname; - const char *p; - int skipcnt, resid, total, facno; - char store[64]; /* fac unlikely to overflow this */ - /* not open? */ - if (!mlog_xst.tag) { - return(0); - } - bp = buf; - skipcnt = discard; - resid = len; - total = 0; - mlog_lock(); - for (facno = 0 ; facno < mlog_xst.fac_cnt ; facno++) { - if (facno) { - mlog_bput(&bp, &skipcnt, &resid, &total, ","); - } - if (mlog_xst.mlog_facs[facno].fac_lname != NULL) { - myname = mlog_xst.mlog_facs[facno].fac_lname; - } else { - myname = mlog_xst.mlog_facs[facno].fac_aname; - } - if (myname == NULL) { - snprintf(store, sizeof(store), "%d", facno); - mlog_bput(&bp, &skipcnt, &resid, &total, store); - } else { - mlog_bput(&bp, &skipcnt, &resid, &total, myname); - } - mlog_bput(&bp, &skipcnt, &resid, &total, "="); - p = mlog_pristr(mlog_xst.mlog_facs[facno].fac_mask); - store[1] = 0; - while (*p && *p != ' ' && *p != '-') { - store[0] = *p; - p++; - mlog_bput(&bp, &skipcnt, &resid, &total, store); - } - } - mlog_unlock(); - strncpy(store, "\n", sizeof(store)); - mlog_bput(&bp, &skipcnt, &resid, &total, store); - if (unterm == 0) { - mlog_bput(&bp, &skipcnt, &resid, &total, NULL); - } - /* buf == NULL means probe for length ... */ - return((buf == NULL) ? total : len - resid); -} - -/* - * mlog_abort_hook: set mlog abort hook - */ -void *mlog_abort_hook(void (*abort_hook)(void)) -{ - void *ret; - if (mlog_xst.tag) { - mlog_lock(); - ret = mst.abort_hook; /* save old value for return */ - mst.abort_hook = abort_hook; - mlog_unlock(); - } else { - ret = NULL; - } - return(ret); -} - -/* - * mlog_dmesg: obtain pointers to the current contents of the message - * buffer. since the message buffer is circular, the result may come - * back in two pieces. - * return 0 on success, -1 on error (not open, or no message buffer) - */ -int mlog_dmesg(char **b1p, int *b1len, char **b2p, int *b2len) -{ - /* first check if we are open and have the buffer */ - if (!mlog_xst.tag || !mst.mb) { - return(-1); - } - mlog_lock(); - mlog_dmesg_mbuf(b1p, b1len, b2p, b2len); - mlog_unlock(); - return(0); -} - -/* - * mlog_mbcount: give a hint as to the current size of the message buffer. - */ -int mlog_mbcount() -{ - struct mlog_mbhead *mb; - int rv; - /* first check if we are open and have the buffer */ - if (!mlog_xst.tag || !mst.mb) { - return(0); - } - mlog_lock(); - rv = 0; - mb = (struct mlog_mbhead *)mst.mb; - if (mb) { - rv = mb->mbh_cnt; - } - mlog_unlock(); - return(rv); -} - -/* - * mlog_mbcopy: safely copy the most recent bytes of the message buffer - * over into another buffer for use. returns # of bytes copied, -1 on - * error. - */ -int mlog_mbcopy(char *buf, int offset, int len) -{ - char *b1, *b2, *bp; - int b1l, b2l, got, want, skip; - if (!buf || len < 1 || !mlog_xst.tag) { - return(-1); - } - if (!mst.mb) { - return(0); /* no message buffer, treat like reading /dev/null? */ - } - mlog_lock(); - mlog_dmesg_mbuf(&b1, &b1l, &b2, &b2l); - /* pull back from the newest data by 'offset' bytes */ - if (offset > 0 && b2l > 0) { - if (offset > b2l) { - offset -= b2l; - b2l = 0; - } else { - b2l -= offset; - offset = 0; - } - } - if (offset > 0 && b1l > 0) { - if (offset > b1l) { - b1l = 0; - } else { - b1l -= offset; - } - } - got = b1l + b2l; /* total bytes in msg buf */ - want = (len > got) ? got : len; /* how many we want, capped by got */ - skip = (want < got) ? got - want : 0; /* how many we skip over */ - if (skip) { - if (skip > b1l) { - skip -= b1l; - b1l = 0; - } else { - b1l -= skip; - b1 += skip; - skip = 0; - } - if (skip > b2l) { - b2l = 0; - } else { - b2l -= skip; - b2 += skip; - } - } - bp = buf; - if (b1l) { - memcpy(bp, b1, b1l); - bp += b1l; - } - if (b2l) { - memcpy(bp, b2, b2l); - } - mlog_unlock(); - return(want); -} - -/* XXXCDC: BEGIN TMP */ -/* - * plfs_debug: tmp wrapper - */ -void plfs_debug(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmlog(MLOG_DBG, fmt, ap); - va_end(ap); -} -/* XXXCDC: END TMP */ - -/* - * mlog: multilog a message... generic wrapper for the the core vmlog - * function. note that a log line cannot be larger than MLOG_TBSZ (4096) - * [if it is larger it will be (silently) truncated]. - */ -void mlog(int flags, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmlog(flags, fmt, ap); - va_end(ap); -} - -/* - * mlog_abort: like mlog, but prints the stack and does an abort after - * processing the log. for aborts, we always log to STDERR. - */ -void mlog_abort(int flags, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmlog(flags|MLOG_STDERR, fmt, ap); - va_end(ap); - if (mlog_xst.tag && mst.abort_hook) { /* call hook? */ - mst.abort_hook(); - } - abort(); - /*NOTREACHED*/ -} - -/* - * mlog_exit: like mlog, but exits with the given status after processing - * the log. we always log to STDERR. - */ -void mlog_exit(int status, int flags, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmlog(flags|MLOG_STDERR, fmt, ap); - va_end(ap); - exit(status); - /*NOTREACHED*/ -} - -/* - * mlog_findmesgbuf: search for a message buffer inside another buffer - * (typically a mmaped core file). does not access mlog global state. - * return 0 on success, -1 on error - */ -int mlog_findmesgbuf(char *b, int len, char **b1p, int *b1l, - char **b2p, int *b2l) -{ - char *ptr, *headend, *bufend; - struct mlog_mbhead mb; - uint32_t skip; - ptr = b; /* current pointer */ - bufend = b + len; /* end of buffer */ - headend = bufend - sizeof(struct mlog_mbhead); /* can't start from here */ - for (/*null*/ ; ptr < headend ; ptr += 4) { - if (memcmp(ptr, MBH_START, sizeof(MBH_START) - 1) != 0) { - continue; - } - /* - * might have found it. handle byte order and sanity check it. - */ - memcpy(&mb, ptr, sizeof(mb)); /* make a copy to ensure alignment */ - if (mb.mbh_beef == wswap(0xdeadbeef)) { - mb.mbh_len = wswap(mb.mbh_len); - mb.mbh_cnt = wswap(mb.mbh_cnt); - mb.mbh_wp = wswap(mb.mbh_wp); - } - if (mb.mbh_cnt > mb.mbh_len) { - continue; - } - if (mb.mbh_wp > mb.mbh_len) { - continue; - } - if (ptr + mb.mbh_len > bufend || - ptr + mb.mbh_len < ptr) { - continue; - } - /* - * looks good! - */ - *b1p = ptr + sizeof(mb) + mb.mbh_wp; - *b1l = mb.mbh_len - mb.mbh_wp; - *b2p = ptr + sizeof(mb); - *b2l = mb.mbh_wp; - skip = mb.mbh_len - mb.mbh_cnt; - if (skip > *b1l) { - skip -= *b1l; - *b1p = *b2p; - *b2p = 0; - *b1l = *b2l; - *b2l = 0; - } - if (skip) { - *b1p = *b1p + skip; - *b1l = *b1l - skip; - } - return(0); - } - return(-1); -} - -/* - * mlog_ucon_on: enable ucon (UDP console) - * return 0 on success, -1 on error - */ -int mlog_ucon_on() -{ - /* ensure open before doing stuff */ - if (!mlog_xst.tag) { - return(-1); - } - /* note that mst.ucons/mst.ucon_cnt must already be valid */ - mlog_lock(); - if ((mst.oflags & MLOG_UCON_ON) == 0) { - mst.udpsock = socket(PF_INET, SOCK_DGRAM, 0); - if (mst.udpsock >= 0) { - mst.oflags |= MLOG_UCON_ON; - } - } - mlog_unlock(); - return( ((mst.oflags & MLOG_UCON_ON) != 0) ? 0 : -1); -} - -/* - * mlog_ucon_off: disable ucon (UDP console) if enabled - * return 0 on success, -1 on error - */ -int mlog_ucon_off() -{ - /* ensure open before doing stuff */ - if (!mlog_xst.tag) { - return(-1); - } - mlog_lock(); - mst.oflags = mst.oflags & ~MLOG_UCON_ON; - if (mst.udpsock >= 0) { - close(mst.udpsock); - } - mst.udpsock = -1; - mlog_unlock(); - return(0); -} - -/* - * mlog_ucon_add: add an endpoint as a ucon - * return 0 on success, -1 on error - */ -int mlog_ucon_add(char *host, int port) -{ - char portstr[8]; - int rv, sz; - void *newbuf; - /* ensure open and sane before doing stuff */ - if (!mlog_xst.tag || port < 1 || port > 65535) { - return(-1); - } - rv = -1; /* assume fail */ - mlog_lock(); - /* grow the array if necessary */ - if (mst.ucon_cnt == mst.ucon_nslots) { - sz = mst.ucon_cnt + 1; - newbuf = calloc(1, sz * sizeof(*mst.ucons)); - if (!newbuf) { - goto done; - } - if (mst.ucons) { - memcpy(newbuf, mst.ucons, mst.ucon_cnt * sizeof(*mst.ucons)); - free(mst.ucons); - } - mst.ucons = newbuf; - mst.ucon_nslots = mst.ucon_cnt + 1; - } - snprintf(portstr, sizeof(portstr), "%d", port); - if (mlog_resolvhost(&mst.ucons[mst.ucon_cnt], host, portstr) < 0) { - goto done; - } - /* got it! */ - mst.ucon_cnt++; - rv = 0; -done: - mlog_unlock(); - return(rv); -} - -/* - * mlog_ucon_rm: remove an ucon endpoint (port in host byte order). - * return 0 on success, -1 on error - */ -int mlog_ucon_rm(char *host, int port) -{ - char portstr[8]; - struct sockaddr_in target; - int rv, lcv; - /* ensure open and sane before doing stuff */ - if (!mlog_xst.tag || port < 1 || port > 65535 || mst.ucon_cnt < 1) { - return(-1); - } - /* resolve the hostname */ - snprintf(portstr, sizeof(portstr), "%d", port); - if (mlog_resolvhost(&target, host, portstr) < 0) { - return(-1); - } - rv = -1; - mlog_lock(); - /* look for it ... */ - for (lcv = 0 ; lcv < mst.ucon_cnt ; lcv++) { - if (memcmp(&target, &mst.ucons[lcv], sizeof(*mst.ucons)) == 0) { - break; - } - } - /* didn't find it ? */ - if (lcv >= mst.ucon_cnt) { - goto done; - } - /* if not the last item in the list, pull that item forward */ - if (lcv < mst.ucon_cnt - 1) { - memcpy(&mst.ucons[lcv], &mst.ucons[mst.ucon_cnt - 1], - sizeof(*mst.ucons)); - } - /* remove last item in list */ - mst.ucon_cnt--; - rv = 0; - /* - * done! - */ -done: - mlog_unlock(); - return(rv); -} - diff --git a/meta/src/Mlog2/mlog2.h b/meta/src/Mlog2/mlog2.h deleted file mode 100644 index f7d1e4fc7..000000000 --- a/meta/src/Mlog2/mlog2.h +++ /dev/null @@ -1,439 +0,0 @@ -/* - * The Self-* Storage System Project - * Copyright (c) 2004-2011, Carnegie Mellon University. - * All rights reserved. - * http://www.pdl.cmu.edu/ (Parallel Data Lab at Carnegie Mellon) - * - * This software is being provided by the copyright holders under the - * following license. By obtaining, using and/or copying this software, - * you agree that you have read, understood, and will comply with the - * following terms and conditions: - * - * Permission to reproduce, use, and prepare derivative works of this - * software is granted provided the copyright and "No Warranty" statements - * are included with all reproductions and derivative works and associated - * documentation. This software may also be redistributed without charge - * provided that the copyright and "No Warranty" statements are included - * in all redistributions. - * - * NO WARRANTY. THIS SOFTWARE IS FURNISHED ON AN "AS IS" BASIS. - * CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER - * EXPRESSED OR IMPLIED AS TO THE MATTER INCLUDING, BUT NOT LIMITED - * TO: WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY - * OF RESULTS OR RESULTS OBTAINED FROM USE OF THIS SOFTWARE. CARNEGIE - * MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT - * TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT. - * COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE - * OR DOCUMENTATION. - */ - -/* - * mlog.h define API for multilog message logging system - * 08-Apr-2004 chuck@ece.cmu.edu - */ - -#ifndef _MLOG_H_ -#define _MLOG_H_ - -/* - * mlog flag values - */ -#define MLOG_STDERR 0x80000000 /* always log to stderr */ -#define MLOG_UCON_ON 0x40000000 /* enable UDP console on mlog_open */ -#define MLOG_UCON_ENV 0x20000000 /* get UCON list from $MLOG_UCON */ -#define MLOG_SYSLOG 0x10000000 /* syslog(3) the messages as well */ -#define MLOG_LOGPID 0x08000000 /* include pid in log tag */ -#define MLOG_FQDN 0x04000000 /* log fully quallified domain name */ -#define MLOG_STDOUT 0x02000000 /* always log to stdout */ -/* spare bits: 0x01000000-0x00800000 */ -#define MLOG_PRIMASK 0x007f0000 /* priority mask */ -#define MLOG_EMERG 0x00700000 /* emergency */ -#define MLOG_ALERT 0x00600000 /* alert */ -#define MLOG_CRIT 0x00500000 /* critical */ -#define MLOG_ERR 0x00400000 /* error */ -#define MLOG_WARN 0x00300000 /* warning */ -#define MLOG_NOTE 0x00200000 /* notice */ -#define MLOG_INFO 0x00100000 /* info */ -#define MLOG_PRISHIFT 20 /* to get non-debug level */ -#define MLOG_DPRISHIFT 16 /* to get debug level */ -#define MLOG_DBG 0x000f0000 /* all debug streams */ -#define MLOG_DBG0 0x00080000 /* debug stream 0 */ -#define MLOG_DBG1 0x00040000 /* debug stream 1 */ -#define MLOG_DBG2 0x00020000 /* debug stream 2 */ -#define MLOG_DBG3 0x00010000 /* debug stream 3 */ -#define MLOG_FACMASK 0x0000ffff /* facility mask */ - -/* - * structures: not really part of the external API, but exposed here - * so we can do the priority filter (mlog_filter) in a macro before - * calling mlog() ... no point evaluating the mlog() args if the - * filter is going to filter log out... - */ - -/** - * mlog_fac: facility name and mask info - */ -struct mlog_fac { - int fac_mask; /*!< log level for this facility */ - char *fac_aname; /*!< abbreviated name of this facility [malloced] */ - char *fac_lname; /*!< optional long name of this facility [malloced] */ -}; - -/** - * mlog_xstate: exposed global state... just enough for a level check - */ -struct mlog_xstate { - char *tag; /*!< tag string [malloced] */ - /* note that tag is NULL if mlog is not open/inited */ - struct mlog_fac *mlog_facs; /*!< array of facility info [malloced] */ - int fac_cnt; /*!< # of facilities we are using */ - char *nodename; /*!< pointer to our utsname */ -}; - - -#if defined(__cplusplus) -extern "C" { /* __BEGIN_DECLS */ -#endif - - /* - * API prototypes and inlines - */ - - /** - * mlog_filter: determine if we should log a message, based on its priority - * and the current mask level for the facility. flags is typically a - * constant, so the C optimizer should be able to reduce this inline - * quite a bit. no locking for threaded environment here, as we assume - * fac_cnt can only grow larger and threaded apps will shutdown threads - * before doing a mlog_close. - * - * @param flags the MLOG flags - * @return 1 if we should log, 0 if we should filter - */ - static inline int mlog_filter(int flags) - { - extern struct mlog_xstate mlog_xst; - unsigned int fac, lvl, mask; - /* first, ensure mlog is open */ - if (!mlog_xst.tag) { - return(0); - } - /* get the facility and level of this log message */ - fac = flags & MLOG_FACMASK; - lvl = flags & MLOG_PRIMASK; - /* - * check for valid facility. if it is not valid, then we convert - * it to the default facility because that seems like a better thing - * to do than drop the message. - */ - if (fac >= (unsigned)mlog_xst.fac_cnt) { - fac = 0; /* 0 == default facility */ - } - /* now we can get the mask we need */ - mask = mlog_xst.mlog_facs[fac].fac_mask; - /* for non-debug logs we directly compare the mask and level */ - if (lvl >= MLOG_INFO) { - return( (lvl < mask) ? 0 : 1); - } - /* - * for debugging logs, we check the channel mask bits. applications - * that don't use debugging channels always log with all the bits set. - */ - return( (lvl & mask) == 0 ? 0 : 1); - } - - /* XXXCDC: BEGIN TMP */ - - /* - * This is here temporarily because some of the code still calls the old - * plfs_debug. This routine now tranforms the plfs_debug call into an - * mlog call. - */ - - void plfs_debug(const char *fmt, ...); - - /* XXXCDC: END TMP */ - - - /** - * mlog: multilog a message... generic wrapper for the the core vmlog - * function. note that a log line cannot be larger than MLOG_TBSZ (4096) - * [if it is larger it will be (silently) truncated]. facility should - * allocated with mlog_open(), mlog_namefacility(), mlog_allocfacility(), - * or mlog_setlogmask() before being used (or the logs will get converted - * to the default facility, #0). - * - * @param flags facility+level+misc flags - * @param fmt printf-style format string - * @param ... printf-style args - */ - void mlog(int flags, const char *fmt, ...) - __attribute__((__format__(__printf__, 2, 3))); - - /** - * mlog_abort: like mlog, but does an abort after processing the log. - * for aborts, we always log to STDERR. - * - * @param flags facility+level+misc flags - * @param fmt printf-style format string - * @param ... printf-style args - */ - void mlog_abort(int flags, const char *fmt, ...) - __attribute__((__noreturn__, __format__(__printf__, 2, 3))); - - /** - * mlog_abort_hook: establish an abort "hook" to call before doing - * an abort (e.g. a hook to print the stack, or save some debug info). - * - * @param hook the abort hook function - * @return the old hook (NULL if there wasn't one) - */ - void *mlog_abort_hook(void (*abort_hook)(void)); - - /** - * mlog_allocfacility: allocate a new facility with the given name - * - * @param aname the abbr. name for the facility - can be null for no name - * @param lname the long name for the new facility - can be null for no name - * @return new facility number on success, -1 on error - malloc problem. - */ - int mlog_allocfacility(char *aname, char *lname); - - /** - * mlog_close: close off an mlog and release any allocated resources. - * if already close, this function is a noop. - */ - void mlog_close(void); - - /** - * mlog_dmesg: obtain pointers to the current contents of the message - * buffer. since the message buffer is circular, the result may come - * back in two pieces. note that this function returns pointers into - * the live message buffer, so the app had best not call mlog again - * until it is done with the pointers. - * - * @param b1p returns pointer to first buffer here - * @param b1len returns length of data in b1 - * @param b2p returns pointer to second buffer here (null if none) - * @param b2len returns length of b2 or zero if b2 is null - * @return 0 on success, -1 on error (not open, or no message buffer) - */ - int mlog_dmesg(char **b1p, int *b1len, char **b2p, int *b2len); - - /** - * mlog_mbcount: give hint as to current size of message buffer. - * (buffer size may change if mlog is called after this...) - * - * @return number of bytes in msg buffer (zero if empty/disabled) - */ - int mlog_mbcount(void); - - /** - * mlog_mbcopy: safely copy the most recent bytes of the message buffer - * over into another buffer for use. - * - * @param buf buffer to copy to - * @param offset offset in message buffer (0 to start at the end) - * @param len length of the buffer - * @return number of bytes copied (<= len), or -1 on error - */ - int mlog_mbcopy(char *buf, int offset, int len); - - /** - * mlog_exit: like mlog, but exits with the given status after processing - * the log. we always log to STDERR. - * - * @param status the value to exit with - * @param flags facility+level+misc flags - * @param fmt printf-style format string - * @param ... printf-style args - */ - void mlog_exit(int status, int flags, const char *fmt, ...) - __attribute__((__noreturn__, __format__(__printf__, 3, 4))); - - /** - * mlog_findmesgbuf: search for a message buffer inside another buffer - * (typically a mmaped core file). - * - * @param b the buffer to search - * @param len the length of the buffer b - * @param b1p returns pointer to first buffer here - * @param b1l returns length of data in b1 - * @param b2p returns pointer to second buffer here (null if none) - * @param b2l returns length of b2 or zero if b2 is null - * @return 0 on success, -1 on error - */ - int mlog_findmesgbuf(char *b, int len, char **b1p, int *b1l, - char **b2p, int *b2l); - - /** - * mlog_namefacility: assign a name to a facility. since the facility - * number is used as an index into an array, don't choose large numbers. - * - * @param facility the facility to name - * @param aname the new abbreviated name, or null to remove the name - * @param lname optional long name (null if not needed) - * @return 0 on success, -1 on error (malloc problem). - */ - int mlog_namefacility(int facility, char *aname, char *lname); - - /** - * mlog_open: open a multilog (uses malloc). you can only have one - * multilog open at a time, but you can use multiple facilities. - * if an mlog is already open, then this call will fail. if you use - * the message buffer, you will prob want it to be 1K or larger. - * - * @param tag string we tag each line with, optionally followed by pid - * @param maxfac_hint hint as to largest user fac value that will be used - * @param default_mask the default mask to use for each facility - * @param stderr_mask messages with a mask above this go to stderr. If - * this is 0, then output goes to stderr only if MLOG_STDERR is used - * (either in mlog_open or in mlog). - * @param logfile log file name, or null if no log file - * @param msgbuf_len size of message buffer, or zero if no message buffer - * @param flags STDERR, UCON_ON, UCON_ENV, SYSLOG, LOGPID - * @param syslogfac facility to use if MLOG_SYSLOG is set in flags - * @return 0 on success, -1 on error. - */ - int mlog_open(char *tag, int maxfac_hint, int default_mask, int stderr_mask, - char *logfile, int msgbuf_len, int flags, int syslogfac); - - /** - * mlog_str2pri: convert a priority string to an int pri value to allow - * for more user-friendly programs. - * - * @param pstr the priority string - * @return -1 (an invalid pri) on error. - */ - int mlog_str2pri(const char *pstr); - - /** - * mlog_reopen: reopen a multilog. this will reopen the log file, - * reset the ucon socket (if on), and refresh the pid in the tag (if - * present). call this to rotate log files or after a fork (which - * changes the pid and may also close fds). the logfile param should - * be set to a zero-length string ("") to keep the old value of logfile. - * if the logfile is NULL, then any open logfiles will be switched off. - * if the logfile is a non-zero length string, it is the new logfile name. - * - * @param logfile settings for the logfile after reopen (see above). - * @return 0 on success, -1 on error. - */ - int mlog_reopen(char *logfile); - - /** - * mlog_setlogmask: set the logmask for a given facility. if the user - * uses a new facility, we ensure that our facility array covers it - * (expanding as needed). - * - * @param facility the facility we are adjusting (16 bit int) - * @param mask the new mask to apply - * @return the old mask val, or -1 on error. cannot fail if facility array - * was preallocated. - */ - int mlog_setlogmask(int facility, int mask); - - /** - * mlog_setmasks: set mlog masks for a set of facilities to a given level. - * the input string should look like: PREFIX1=LEVEL1,PREFIX2=LEVEL2,... - * where the "PREFIX" is the facility name defined with mlog_namefacility(). - * - * @param mstr settings to use (doesn't have to be null term'd if mstr >= 0) - * @param mlen length of mstr (if < 0, assume null terminated, use strlen) - */ - void mlog_setmasks(char *mstr, int mlen); - - /** - * mlog_getmasks: get current mask level as a string (not null terminated). - * if the buffer is null, we probe for length rather than fill. - * - * @param buf the buffer to put the results in (NULL == probe for length) - * @param discard bytes to discard before starting to fill buf (normally 0) - * @param len length of the buffer - * @param unterm if non-zero do not include a trailing null - * @return bytes returned (may be trunced and non-null terminated if == len) - */ - int mlog_getmasks(char *buf, int discard, int len, int unterm); - - /** - * mlog_ucon_add: add an endpoint as a ucon - * - * @param host hostname (or IP) of remote endpoint - * @param port udp port (in host byte order) - * @return 0 on success, -1 on error - */ - int mlog_ucon_add(char *host, int port); - - /** - * mlog_ucon_on: enable ucon (UDP console) - * - * @return 0 on success, -1 on error - */ - int mlog_ucon_on(void); - - /** - * mlog_ucon_off: disable ucon (UDP console) if enabled - * - * @return 0 on success, -1 on error - */ - int mlog_ucon_off(void); - - /** - * mlog_ucon_rm: remove an ucon endpoint - * - * @param host hostname (or IP) of remote endpoint - * @param port udp port (in host byte order) - * @return 0 on success, -1 on error - */ - int mlog_ucon_rm(char *host, int port); - - -#ifndef MLOG_NOMACRO_OPT - /* - * here's some cpp-based optimizations - */ - - /* - * use -DMLOG_NEVERLOG=1 to compile out all the mlog calls (e.g. for - * performance testing, when you want to get rid of all extra overheads). - */ -#ifndef MLOG_NEVERLOG -#define MLOG_NEVERLOG 0 /* default value is to keep mlog */ -#endif - - /* - * turn log into a macro so that we can check the log level before - * evaluating all the mlog() args. no point in computing the args - * and building a call stack if we are not going to do anything. - * - * you can't do this with inline functions, because gcc will not - * inline functions that use "..." so doing something like: - * void inline mlog(int f, char *c, ...) { return; } - * and then - * mlog(MLOG_INFO, "fputs=%d", fputs("fputs was called", stdout)); - * will not inline out the function call setup, so fputs() will - * get called even though mlog doesn't do anything. - * - * vmlog() will refilter, but it also has to handle stderr_mask, so - * it isn't a big deal to have it recheck the level... could add - * a flag to tell vmlog() to skip the filter if it was an issue. - * - * this assumes your cpp supports "..." and __VA_ARGS__ (gcc does). - * - * note that cpp does not expand the mlog() call inside the #define, - * that goes to the real mlog function. - */ - -#define mlog(LEVEL, ...) do { \ - if (MLOG_NEVERLOG == 0 && mlog_filter(LEVEL)) \ - mlog((LEVEL), __VA_ARGS__); \ - } while (0) - -#endif /* MLOG_NOMACRO_OPT */ - - -#if defined(__cplusplus) -} /* __END_DECLS */ -#endif - -#endif /* _MLOG_H_ */ diff --git a/meta/src/Mlog2/mlogfacs2.h b/meta/src/Mlog2/mlogfacs2.h deleted file mode 100644 index e06640043..000000000 --- a/meta/src/Mlog2/mlogfacs2.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * The Self-* Storage System Project - * Copyright (c) 2011, Carnegie Mellon University. - * All rights reserved. - * http://www.pdl.cmu.edu/ (Parallel Data Lab at Carnegie Mellon) - * - * This software is being provided by the copyright holders under the - * following license. By obtaining, using and/or copying this software, - * you agree that you have read, understood, and will comply with the - * following terms and conditions: - * - * Permission to reproduce, use, and prepare derivative works of this - * software is granted provided the copyright and "No Warranty" statements - * are included with all reproductions and derivative works and associated - * documentation. This software may also be redistributed without charge - * provided that the copyright and "No Warranty" statements are included - * in all redistributions. - * - * NO WARRANTY. THIS SOFTWARE IS FURNISHED ON AN "AS IS" BASIS. - * CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER - * EXPRESSED OR IMPLIED AS TO THE MATTER INCLUDING, BUT NOT LIMITED - * TO: WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY - * OF RESULTS OR RESULTS OBTAINED FROM USE OF THIS SOFTWARE. CARNEGIE - * MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT - * TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT. - * COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE - * OR DOCUMENTATION. - */ - -/* - * facility names. - * - * DO NOT EDIT-- this file is automatically generated by makefacs.pl. - */ - -#ifndef _MLOGFACS_H_ -#define _MLOGFACS_H_ - -#include "mlog2.h" /* for MLOG_ defines */ - -#if defined(MLOG_FACSARRAY) || defined(MLOG_AFACSARRAY) -static const char *mlog_facsarray[] = { - "MLOG", /* 0 -- MLOG default fac */ - "MDHIM_CLIENT", /* 1 */ - "MDHIM_SERVER", /* 2 */ - "STORE", /* 3 */ - "MPI", /* 4 */ - 0, /* 5 */ -}; -#endif /* MLOG_FACSARRAY || MLOG_AFACSARRAY */ - -#if defined(MLOG_FACSARRAY) || defined(MLOG_LFACSARRAY) -static const char *mlog_lfacsarray[] = { - "MLOG", /* 0 -- MLOG default fac */ - "MDHIM client", /* 1 */ - "MDHIM range server", /* 2 */ - "storage", /* 3 */ - "MPI", /* 4 */ - 0, /* 5 */ -}; -#endif /* MLOG_LFACSARRAY || MLOG_LFACSARRAY */ - -/* - * standard facility defines - */ -#define MLOGFAC_MDHIM_CLIENT 1 /* MDHIM client */ -#define MLOGFAC_MDHIM_SERVER 2 /* MDHIM range server */ -#define MLOGFAC_STORE 3 /* storage */ -#define MLOGFAC_MPI 4 /* MPI */ - -/* - * MDHIM client MLOG levels - */ -#define MDHIM_CLIENT_EMERG (1 | MLOG_EMERG) -#define MDHIM_CLIENT_ALERT (1 | MLOG_ALERT) -#define MDHIM_CLIENT_CRIT (1 | MLOG_CRIT) -#define MDHIM_CLIENT_ERR (1 | MLOG_ERR) -#define MDHIM_CLIENT_WARN (1 | MLOG_WARN) -#define MDHIM_CLIENT_NOTE (1 | MLOG_NOTE) -#define MDHIM_CLIENT_INFO (1 | MLOG_INFO) -#define MDHIM_CLIENT_DBG (1 | MLOG_DBG) -#define MDHIM_CLIENT_DBG0 (1 | MLOG_DBG0) -#define MDHIM_CLIENT_DAPI MDHIM_CLIENT_DBG0 -#define MDHIM_CLIENT_DBG1 (1 | MLOG_DBG1) -#define MDHIM_CLIENT_DINTAPI MDHIM_CLIENT_DBG1 -#define MDHIM_CLIENT_DBG2 (1 | MLOG_DBG2) -#define MDHIM_CLIENT_DCOMMON MDHIM_CLIENT_DBG2 -#define MDHIM_CLIENT_DBG3 (1 | MLOG_DBG3) -#define MDHIM_CLIENT_DRARE MDHIM_CLIENT_DBG3 - -/* - * MDHIM range server MLOG levels - */ -#define MDHIM_SERVER_EMERG (2 | MLOG_EMERG) -#define MDHIM_SERVER_ALERT (2 | MLOG_ALERT) -#define MDHIM_SERVER_CRIT (2 | MLOG_CRIT) -#define MDHIM_SERVER_ERR (2 | MLOG_ERR) -#define MDHIM_SERVER_WARN (2 | MLOG_WARN) -#define MDHIM_SERVER_NOTE (2 | MLOG_NOTE) -#define MDHIM_SERVER_INFO (2 | MLOG_INFO) -#define MDHIM_SERVER_DBG (2 | MLOG_DBG) -#define MDHIM_SERVER_DBG0 (2 | MLOG_DBG0) -#define MDHIM_SERVER_DAPI MDHIM_SERVER_DBG0 -#define MDHIM_SERVER_DBG1 (2 | MLOG_DBG1) -#define MDHIM_SERVER_DINTAPI MDHIM_SERVER_DBG1 -#define MDHIM_SERVER_DBG2 (2 | MLOG_DBG2) -#define MDHIM_SERVER_DCOMMON MDHIM_SERVER_DBG2 -#define MDHIM_SERVER_DBG3 (2 | MLOG_DBG3) -#define MDHIM_SERVER_DRARE MDHIM_SERVER_DBG3 - -/* - * storage MLOG levels - */ -#define STORE_EMERG (3 | MLOG_EMERG) -#define STORE_ALERT (3 | MLOG_ALERT) -#define STORE_CRIT (3 | MLOG_CRIT) -#define STORE_ERR (3 | MLOG_ERR) -#define STORE_WARN (3 | MLOG_WARN) -#define STORE_NOTE (3 | MLOG_NOTE) -#define STORE_INFO (3 | MLOG_INFO) -#define STORE_DBG (3 | MLOG_DBG) -#define STORE_DBG0 (3 | MLOG_DBG0) -#define STORE_DAPI STORE_DBG0 -#define STORE_DBG1 (3 | MLOG_DBG1) -#define STORE_DINTAPI STORE_DBG1 -#define STORE_DBG2 (3 | MLOG_DBG2) -#define STORE_DCOMMON STORE_DBG2 -#define STORE_DBG3 (3 | MLOG_DBG3) -#define STORE_DRARE STORE_DBG3 - -/* - * MPI MLOG levels - */ -#define MPI_EMERG (4 | MLOG_EMERG) -#define MPI_ALERT (4 | MLOG_ALERT) -#define MPI_CRIT (4 | MLOG_CRIT) -#define MPI_ERR (4 | MLOG_ERR) -#define MPI_WARN (4 | MLOG_WARN) -#define MPI_NOTE (4 | MLOG_NOTE) -#define MPI_INFO (4 | MLOG_INFO) -#define MPI_DBG (4 | MLOG_DBG) -#define MPI_DBG0 (4 | MLOG_DBG0) -#define MPI_DAPI MPI_DBG0 -#define MPI_DBG1 (4 | MLOG_DBG1) -#define MPI_DINTAPI MPI_DBG1 -#define MPI_DBG2 (4 | MLOG_DBG2) -#define MPI_DCOMMON MPI_DBG2 -#define MPI_DBG3 (4 | MLOG_DBG3) -#define MPI_DRARE MPI_DBG3 - -#endif /* _MLOGFACS_H_ */ diff --git a/meta/src/client.c b/meta/src/client.c deleted file mode 100644 index 20a084f33..000000000 --- a/meta/src/client.c +++ /dev/null @@ -1,389 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include "mdhim.h" -#include "client.h" -#include "partitioner.h" -#include - -struct timeval msggetstart, msggetend; -double msggettime=0; - -struct timeval msgputstart, msgputend; -double msgputtime=0; -/** - * Send put to range server - * - * @param md main MDHIM struct - * @param pm pointer to put message to be sent or inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_rm_t *client_put(struct mdhim_t *md, struct mdhim_putm_t *pm) { - - int return_code; - struct mdhim_rm_t *rm; - - return_code = send_rangesrv_work(md, pm->basem.server_rank, pm); - // If the send did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while sending " - "put record request", md->mdhim_rank, return_code); - return NULL; - } - - return_code = receive_client_response(md, pm->basem.server_rank, (void **) &rm); - // If the receive did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while receiving " - "put record request", md->mdhim_rank, return_code); - rm->error = MDHIM_ERROR; - } - - // Return response message - return rm; -} - -/** - * Send bulk put to range server - * - * @param md main MDHIM struct - * @param bpm_list double pointer to an array of bulk put messages - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_brm_t *client_bput(struct mdhim_t *md, struct index_t *index, - struct mdhim_bputm_t **bpm_list) { - int return_code; - struct mdhim_brm_t *brm_head, *brm_tail, *brm; - struct mdhim_rm_t **rm_list, *rm; - int i; - int *srvs; - int num_srvs; - - num_srvs = 0; - srvs = malloc(sizeof(int) * index->num_rangesrvs); - for (i = 0; i < index->num_rangesrvs; i++) { - if (!bpm_list[i]) { - continue; - } - - srvs[num_srvs] = bpm_list[i]->basem.server_rank; - num_srvs++; - } - - if (!num_srvs) { - free(srvs); - return NULL; - } - - gettimeofday(&msgputstart, NULL); - return_code = send_all_rangesrv_work(md, (void **) bpm_list, index->num_rangesrvs); - // If the send did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while sending " - "bput record request", md->mdhim_rank, return_code); - - return NULL; - } - gettimeofday(&msgputend, NULL); - msgputtime += 1000000*(msgputend.tv_sec-msgputstart.tv_sec) + msgputend.tv_usec - msgputstart.tv_usec; - - rm_list = malloc(sizeof(struct mdhim_rm_t *) * num_srvs); - memset(rm_list, 0, sizeof(struct mdhim_rm_t *) * num_srvs); - return_code = receive_all_client_responses(md, srvs, num_srvs, (void ***) &rm_list); - // If the receives did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while receiving " - "bput record requests", md->mdhim_rank, return_code); - } - - brm_head = brm_tail = NULL; - for (i = 0; i < num_srvs; i++) { - rm = rm_list[i]; - if (!rm) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error: did not receive a response message in client_bput", - md->mdhim_rank); - //Skip this as the message doesn't exist - continue; - } - - brm = malloc(sizeof(struct mdhim_brm_t)); - brm->error = rm->error; - brm->basem.mtype = rm->basem.mtype; - brm->basem.server_rank = rm->basem.server_rank; - free(rm); - - //Build the linked list to return - brm->next = NULL; - if (!brm_head) { - brm_head = brm; - brm_tail = brm; - } else { - brm_tail->next = brm; - brm_tail = brm; - } - } - - free(rm_list); - free(srvs); - - // Return response message - return brm_head; -} - -/** Send bulk get to range server - * - * @param md main MDHIM struct - * @param bgm_list double pointer to an array or bulk get messages - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_bgetrm_t *client_bget(struct mdhim_t *md, struct index_t *index, - struct mdhim_bgetm_t **bgm_list) { - int return_code; - struct mdhim_bgetrm_t *bgrm_head, *bgrm_tail, *bgrm; - struct mdhim_bgetrm_t **bgrm_list; - int i; - int *srvs; - int num_srvs; - - num_srvs = 0; - srvs = malloc(sizeof(int) * index->num_rangesrvs); - for (i = 0; i < index->num_rangesrvs; i++) { - if (!bgm_list[i]) { - continue; - } - - srvs[num_srvs] = bgm_list[i]->basem.server_rank; - num_srvs++; - } - - if (!num_srvs) { - free(srvs); - return NULL; - } - gettimeofday(&msggetstart, NULL); - return_code = send_all_rangesrv_work(md, (void **) bgm_list, index->num_rangesrvs); - // If the send did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while sending " - "bget record request", md->mdhim_rank, return_code); - - return NULL; - } - gettimeofday(&msggetend, NULL); - msggettime += 1000000*(msggetend.tv_sec-msggetstart.tv_sec)+\ - msggetend.tv_usec-msggetstart.tv_usec; - - bgrm_list = malloc(sizeof(struct mdhim_bgetrm_t *) * num_srvs); - memset(bgrm_list, 0, sizeof(struct mdhim_bgetrm_t *) * num_srvs); - return_code = receive_all_client_responses(md, srvs, num_srvs, (void ***) &bgrm_list); - // If the receives did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while receiving " - "bget record requests", md->mdhim_rank, return_code); - } - - bgrm_head = bgrm_tail = NULL; - for (i = 0; i < num_srvs; i++) { - bgrm = bgrm_list[i]; - if (!bgrm) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error: did not receive a response message in client_bget", - md->mdhim_rank); - //Skip this as the message doesn't exist - continue; - } - //Build the linked list to return - bgrm->next = NULL; - if (!bgrm_head) { - bgrm_head = bgrm; - bgrm_tail = bgrm; - } else { - bgrm_tail->next = bgrm; - bgrm_tail = bgrm; - } - } - - free(bgrm_list); - free(srvs); - - // Return response message - return bgrm_head; -} - -/** Send get to range server with an op and number of records greater than one - * - * @param md main MDHIM struct - * @param gm pointer to get message to be sent or inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_bgetrm_t *client_bget_op(struct mdhim_t *md, struct mdhim_getm_t *gm) { - - int return_code; - struct mdhim_bgetrm_t *brm; - - return_code = send_rangesrv_work(md, gm->basem.server_rank, gm); - // If the send did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while sending " - "get record request", md->mdhim_rank, return_code); - return NULL; - } - - return_code = receive_client_response(md, gm->basem.server_rank, (void **) &brm); - // If the receive did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while receiving " - "get record request", md->mdhim_rank, return_code); - brm->error = MDHIM_ERROR; - } - - // Return response message - return brm; -} - -/** - * Send delete to range server - * - * @param md main MDHIM struct - * @param dm pointer to del message to be sent or inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_rm_t *client_delete(struct mdhim_t *md, struct mdhim_delm_t *dm) { - - int return_code; - struct mdhim_rm_t *rm; - - return_code = send_rangesrv_work(md, dm->basem.server_rank, dm); - // If the send did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while sending " - "delete record request", md->mdhim_rank, return_code); - return NULL; - } - - return_code = receive_client_response(md, dm->basem.server_rank, (void **) &rm); - // If the receive did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while receiving " - "delete record request", md->mdhim_rank, return_code); - rm->error = MDHIM_ERROR; - } - - // Return response - return rm; -} - -/** - * Send bulk delete to range server - * - * @param md main MDHIM struct - * @param bdm_list double pointer to an array of bulk del messages - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_brm_t *client_bdelete(struct mdhim_t *md, struct index_t *index, - struct mdhim_bdelm_t **bdm_list) { - int return_code; - struct mdhim_brm_t *brm_head, *brm_tail, *brm; - struct mdhim_rm_t **rm_list, *rm; - int i; - int *srvs; - int num_srvs; - - num_srvs = 0; - srvs = malloc(sizeof(int) * index->num_rangesrvs); - for (i = 0; i < index->num_rangesrvs; i++) { - if (!bdm_list[i]) { - continue; - } - - srvs[num_srvs] = bdm_list[i]->basem.server_rank; - num_srvs++; - } - - return_code = send_all_rangesrv_work(md, (void **) bdm_list, index->num_rangesrvs); - // If the send did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while sending " - "bdel record request", md->mdhim_rank, return_code); - - return NULL; - } - - rm_list = malloc(sizeof(struct mdhim_rm_t *) * num_srvs); - memset(rm_list, 0, sizeof(struct mdhim_rm_t *) * num_srvs); - return_code = receive_all_client_responses(md, srvs, num_srvs, (void ***) &rm_list); - // If the receives did not succeed then log the error code and return MDHIM_ERROR - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: %d from server while receiving " - "bdel record requests", md->mdhim_rank, return_code); - } - - brm_head = brm_tail = NULL; - for (i = 0; i < num_srvs; i++) { - rm = rm_list[i]; - if (!rm) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error: did not receive a response message in client_bdel", - md->mdhim_rank); - //Skip this as the message doesn't exist - continue; - } - - brm = malloc(sizeof(struct mdhim_brm_t)); - brm->error = rm->error; - brm->basem.mtype = rm->basem.mtype; - brm->basem.server_rank = rm->basem.server_rank; - free(rm); - - //Build the linked list to return - brm->next = NULL; - if (!brm_head) { - brm_head = brm; - brm_tail = brm; - } else { - brm_tail->next = brm; - brm_tail = brm; - } - } - - free(rm_list); - free(srvs); - - // Return response message - return brm_head; -} diff --git a/meta/src/client.h b/meta/src/client.h deleted file mode 100644 index a744302eb..000000000 --- a/meta/src/client.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __CLIENT_H -#define __CLIENT_H - -#include "messages.h" - -struct mdhim_rm_t *client_put(struct mdhim_t *md, struct mdhim_putm_t *pm); -struct mdhim_brm_t *client_bput(struct mdhim_t *md, struct index_t *index, - struct mdhim_bputm_t **bpm_list); -struct mdhim_bgetrm_t *client_bget(struct mdhim_t *md, struct index_t *index, - struct mdhim_bgetm_t **bgm_list); -struct mdhim_bgetrm_t *client_bget_op(struct mdhim_t *md, struct mdhim_getm_t *gm); -struct mdhim_rm_t *client_delete(struct mdhim_t *md, struct mdhim_delm_t *dm); -struct mdhim_brm_t *client_bdelete(struct mdhim_t *md, struct index_t *index, - struct mdhim_bdelm_t **bdm_list); - -#endif diff --git a/meta/src/data_store.c b/meta/src/data_store.c deleted file mode 100644 index 71fb760d5..000000000 --- a/meta/src/data_store.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include "mdhim_options.h" -#include "data_store.h" -#ifdef LEVELDB_SUPPORT -#include "ds_leveldb.h" -#endif -#ifdef ROCKSDB_SUPPORT -#include "ds_leveldb.h" -#endif -#ifdef SOPHIADB_SUPPORT -#include "ds_sophia.h" -#endif -#ifdef MYSQLDB_SUPPORT -#include "ds_mysql.h" -#endif - - -/** - * mdhim_db_init - * Initializes mdhim_store_t structure based on type - * - * @param type in Database store type to use (i.e., LEVELDB, etc) - * @return mdhim_store_t The mdhim storage abstraction struct - */ -struct mdhim_store_t *mdhim_db_init(int type) { - struct mdhim_store_t *store; - - //Initialize the store structure - store = malloc(sizeof(struct mdhim_store_t)); - store->type = type; - store->db_handle = NULL; - store->db_stats = NULL; - store->mdhim_store_stats = NULL; - store->mdhim_store_stats_lock = malloc(sizeof(pthread_rwlock_t)); - if (pthread_rwlock_init(store->mdhim_store_stats_lock, NULL) != 0) { - free(store->mdhim_store_stats_lock); - return NULL; - } - - switch(type) { - -#ifdef LEVELDB_SUPPORT - case LEVELDB: - store->open = mdhim_leveldb_open; - store->put = mdhim_leveldb_put; - store->batch_put = mdhim_leveldb_batch_put; - store->get = mdhim_leveldb_get; - store->get_next = mdhim_leveldb_get_next; - store->get_prev = mdhim_leveldb_get_prev; - store->del = mdhim_leveldb_del; - store->commit = mdhim_leveldb_commit; - store->close = mdhim_leveldb_close; - break; - -#endif - -#ifdef ROCKSDB_SUPPORT - case ROCKSDB: - store->open = mdhim_leveldb_open; - store->put = mdhim_leveldb_put; - store->batch_put = mdhim_leveldb_batch_put; - store->get = mdhim_leveldb_get; - store->get_next = mdhim_leveldb_get_next; - store->get_prev = mdhim_leveldb_get_prev; - store->del = mdhim_leveldb_del; - store->commit = mdhim_leveldb_commit; - store->close = mdhim_leveldb_close; - break; -#endif - -#ifdef MYSQLDB_SUPPORT - case MYSQLDB: - store->open = mdhim_mysql_open; - store->put = mdhim_mysql_put; - store->batch_put = mdhim_mysql_batch_put; - store->get = mdhim_mysql_get; - store->get_next = mdhim_mysql_get_next; - store->get_prev = mdhim_mysql_get_prev; - store->del = mdhim_mysql_del; - store->commit = mdhim_mysql_commit; - store->close = mdhim_mysql_close; - break; -#endif - - - default: - free(store); - store = NULL; - break; - } - - return store; -} diff --git a/meta/src/data_store.h b/meta/src/data_store.h deleted file mode 100644 index 284b143c7..000000000 --- a/meta/src/data_store.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __STORE_H -#define __STORE_H - -#include "uthash.h" -#include "mdhim_options.h" - -/* Storage Methods */ -#define LEVELDB 1 //LEVELDB storage method -#define MYSQLDB 3 -#define ROCKSDB 4 //RocksDB -/* mdhim_store_t flags */ -#define MDHIM_CREATE 1 //Implies read/write -#define MDHIM_RDONLY 2 -#define MDHIM_RDWR 3 - -/* Keys for stats database */ -#define MDHIM_MAX_STAT 1 -#define MDHIM_MIN_STAT 2 -#define MDHIM_NUM_STAT 3 - -struct mdhim_store_t; -/* Function pointers for abstracting data stores */ -typedef int (*mdhim_store_open_fn_t)(void **db_handle, void **db_stats, char *path, int flags, - int key_type, struct mdhim_options_t *opts); -typedef int (*mdhim_store_put_fn_t)(void *db_handle, void *key, int32_t key_len, - void *data, int32_t data_len); -typedef int (*mdhim_store_batch_put_fn_t)(void *db_handle, void **keys, int32_t *key_lens, - void **data, int32_t *data_lens, int num_records); -typedef int (*mdhim_store_get_fn_t)(void *db_handle, void *key, int key_len, void **data, int32_t *data_len); -typedef int (*mdhim_store_get_next_fn_t)(void *db_handle, void **key, - int *key_len, void **data, - int32_t *data_len); -typedef int (*mdhim_store_get_prev_fn_t)(void *db_handle, void **key, - int *key_len, void **data, - int32_t *data_len); -typedef int (*mdhim_store_del_fn_t)(void *db_handle, void *key, int key_len); -typedef int (*mdhim_store_commit_fn_t)(void *db_handle); -typedef int (*mdhim_store_close_fn_t)(void *db_handle, void *db_stats); - -//Used for storing stats in a hash table -struct mdhim_stat; -struct mdhim_stat { - int key; //Key (slice number) - void *max; //Max key - void *min; //Min key - int dirty; //Wether this stat was updated or a new stat - uint64_t num; //Number of keys in this slice - struct mdhim_stat *stats; //Used for local index stats to create a multi-level hash table - UT_hash_handle hh; /* makes this structure hashable */ -}; - - -//Used for storing stats in the database -struct mdhim_db_stat { - int slice; - uint64_t imax; - uint64_t imin; - long double dmax; - long double dmin; - uint64_t num; -}; - -//Used for transmitting integer stats to all nodes -struct mdhim_db_istat { - int slice; - uint64_t num; - uint64_t imax; - uint64_t imin; -}; - -//Used for transmitting float stats to all nodes -struct mdhim_db_fstat { - int slice; - uint64_t num; - long double dmax; - long double dmin; -}; - -/* Generic mdhim storage object */ -struct mdhim_store_t { - int type; - //handle to db - void *db_handle; - //Handle to db for stats - void *db_stats; - //Pointers to functions based on data store - mdhim_store_open_fn_t open; - mdhim_store_put_fn_t put; - mdhim_store_batch_put_fn_t batch_put; - mdhim_store_get_fn_t get; - mdhim_store_get_next_fn_t get_next; - mdhim_store_get_prev_fn_t get_prev; - mdhim_store_del_fn_t del; - mdhim_store_commit_fn_t commit; - mdhim_store_close_fn_t close; - - //Login credentials - char *db_user; - char *db_upswd; - char *dbs_user; - char *dbs_upswd; - char *db_host; - char *dbs_host; - - //Hashtable for stats - struct mdhim_stat *mdhim_store_stats; - - //Lock to allow concurrent readers and a single writer to the mdhim_store_stats - pthread_rwlock_t *mdhim_store_stats_lock; -}; - -//Initializes the data store based on the type given (i.e., LEVELDB, etc...) -struct mdhim_store_t *mdhim_db_init(int db_type); -#endif diff --git a/meta/src/ds_leveldb.c b/meta/src/ds_leveldb.c deleted file mode 100644 index 602b38ca3..000000000 --- a/meta/src/ds_leveldb.c +++ /dev/null @@ -1,1337 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include -#include -#include -#include -#include "ds_leveldb.h" - -struct timeval dbputstart, dbputend; -struct timeval dbgetstart, dbgetend; -double dbputtime=0, dbgettime=0; - -struct timeval dbngetstart, dbngetend; -double dbngettime=0; - -struct timeval dbbputstart, dbbputend; -double dbbputtime=0; - -extern int dbg_rank; -static void cmp_destroy(void* arg) { } - -static int cmp_empty(const char* a, size_t alen, - const char* b, size_t blen) { - int ret = 2; - if (a && !b) { - return 1; - } else if (!a && b) { - return -1; - } else if (!a && !b) { - return 0; - } - - if (alen > blen) { - return 1; - } else if (blen > alen) { - return -1; - } - - return ret; -} - -int cmp_int_compare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int ret; - - ret = cmp_empty(a, alen, b, blen); - if (ret != 2) { - return ret; - } - if (*(uint32_t *) a < *(uint32_t *) b) { - ret = -1; - } else if (*(uint32_t *) a == *(uint32_t *) b) { - ret = 0; - } else { - ret = 1; - } - - return ret; -} - -int cmp_lint_compare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int ret; - - ret = cmp_empty(a, alen, b, blen); - if (ret != 2) { - return ret; - } - if (*(uint64_t *) a < *(uint64_t *) b) { - ret = -1; - } else if (*(uint64_t *) a == *(uint64_t *) b) { - ret = 0; - } else { - ret = 1; - } - - return ret; -} - -static int cmp_double_compare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int ret; - - ret = cmp_empty(a, alen, b, blen); - if (ret != 2) { - return ret; - } - if (*(double *) a < *(double *) b) { - ret = -1; - } else if (*(double *) a == *(double *) b) { - ret = 0; - } else { - ret = 1; - } - - return ret; -} - -static int cmp_float_compare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int ret; - - ret = cmp_empty(a, alen, b, blen); - if (ret != 2) { - return ret; - } - if (*(float *) a < *(float *) b) { - ret = -1; - } else if (*(float *) a == *(float *) b) { - ret = 0; - } else { - ret = 1; - } - - return ret; -} - - -// For string, first compare for null pointers, then for order -// up to a null character or the given lengths. -static int cmp_string_compare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int idx; - - if (a && !b) { - return 1; - } else if (!a && b) { - return -1; - } else if (!a && !b) { - return 0; - } - - // Do this wile they are equal and we have not reached the end of one of them - for(idx=0; *a == *b && *a != '\0' && *b != '\0' && idx *b ) { // else compare the two different characters to decide - return 1; - } - - // If none of the above, then b is greater - return -1; -} - -static int cmp_byte_compare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int ret; - - long offset, old_offset; - long fid, old_fid; - - fid = *((unsigned long *)a); - old_fid = *((unsigned long *)b); - - offset = *((unsigned long *)a+1); - old_offset = *((unsigned long *)b+1); - - ret = fid - old_fid; - - if (ret != 0) - return ret; - else { - if (offset - old_offset > 0) - return 1; - else if(offset -old_offset < 0) - return -1; - else - return 0; - } - -// ret = memcmp(a, b, alen); - return ret; -} - -static int cmp_unifyfs_compare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int ret; - - long offset, old_offset; - long fid, old_fid; - - fid = *((unsigned long *)a); - old_fid = *((unsigned long *)b); - - offset = *((unsigned long *)a+1); - old_offset = *((unsigned long *)b+1); - - ret = fid - old_fid; - - if (ret != 0) - return ret; - else { - if (offset - old_offset > 0) - return 1; - else if(offset - old_offset < 0) - return -1; - else - return 0; - } - -// ret = memcmp(a, b, alen); - return ret; -} - -static const char* cmp_name(void* arg) { - return "mdhim_cmp"; -} - -/** - * mdhim_leveldb_open - * Opens the database - * - * @param dbh in double pointer to the leveldb handle - * @param dbs in double pointer to the leveldb statistics db handle - * @param path in path to the database file - * @param flags in flags for opening the data store - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ - -int mdhim_leveldb_open(void **dbh, void **dbs, char *path, int flags, int key_type, struct mdhim_options_t *opts) { - struct mdhim_leveldb_t *mdhimdb; - struct mdhim_leveldb_t *statsdb; - leveldb_t *db; - char *err = NULL; - char stats_path[PATH_MAX]; - - mdhimdb = malloc(sizeof(struct mdhim_leveldb_t)); - memset(mdhimdb, 0, sizeof(struct mdhim_leveldb_t)); - statsdb = malloc(sizeof(struct mdhim_leveldb_t)); - memset(statsdb, 0, sizeof(struct mdhim_leveldb_t)); - - //Create the options for the main database - mdhimdb->options = leveldb_options_create(); - leveldb_options_set_create_if_missing(mdhimdb->options, 1); - //leveldb_options_set_compression(options, 0); - mdhimdb->filter = leveldb_filterpolicy_create_bloom(256); - mdhimdb->cache = leveldb_cache_create_lru(8388608); - mdhimdb->env = leveldb_create_default_env(); - mdhimdb->write_options = leveldb_writeoptions_create(); - leveldb_writeoptions_set_sync(mdhimdb->write_options, 0); - mdhimdb->read_options = leveldb_readoptions_create(); - leveldb_options_set_cache(mdhimdb->options, mdhimdb->cache); - leveldb_options_set_filter_policy(mdhimdb->options, mdhimdb->filter); - //leveldb_options_set_max_open_files(mdhimdb->options, 10000); - leveldb_options_set_max_open_files(mdhimdb->options, 10000); - leveldb_options_set_write_buffer_size(mdhimdb->options, 1048576); - leveldb_options_set_env(mdhimdb->options, mdhimdb->env); - //Create the options for the stat database - statsdb->options = leveldb_options_create(); - leveldb_options_set_create_if_missing(statsdb->options, 1); - //leveldb_options_set_compression(stat_options, 0); - statsdb->filter = leveldb_filterpolicy_create_bloom(16); - statsdb->cache = leveldb_cache_create_lru(1024); - statsdb->env = leveldb_create_default_env(); - statsdb->write_options = leveldb_writeoptions_create(); - leveldb_writeoptions_set_sync(statsdb->write_options, 0); - statsdb->read_options = leveldb_readoptions_create(); - leveldb_options_set_cache(statsdb->options, statsdb->cache); - leveldb_options_set_filter_policy(statsdb->options, statsdb->filter); - leveldb_options_set_write_buffer_size(statsdb->options, 1024); - leveldb_options_set_env(statsdb->options, statsdb->env); - - switch(key_type) { - case MDHIM_INT_KEY: - mdhimdb->cmp = leveldb_comparator_create(NULL, cmp_destroy, cmp_int_compare, cmp_name); - mdhimdb->compare = cmp_int_compare; - break; - case MDHIM_LONG_INT_KEY: - mdhimdb->cmp = leveldb_comparator_create(NULL, cmp_destroy, cmp_lint_compare, cmp_name); - mdhimdb->compare = cmp_lint_compare; - break; - case MDHIM_FLOAT_KEY: - mdhimdb->cmp = leveldb_comparator_create(NULL, cmp_destroy, cmp_float_compare, cmp_name); - mdhimdb->compare = cmp_float_compare; - break; - case MDHIM_DOUBLE_KEY: - mdhimdb->cmp = leveldb_comparator_create(NULL, cmp_destroy, cmp_double_compare, cmp_name); - mdhimdb->compare = cmp_double_compare; - break; - case MDHIM_STRING_KEY: - mdhimdb->cmp = leveldb_comparator_create(NULL, cmp_destroy, cmp_string_compare, cmp_name); - mdhimdb->compare = cmp_string_compare; - break; - case MDHIM_UNIFYFS_KEY: - mdhimdb->cmp = leveldb_comparator_create(NULL, cmp_destroy, cmp_unifyfs_compare, cmp_name); - mdhimdb->compare = cmp_unifyfs_compare; - default: - mdhimdb->cmp = leveldb_comparator_create(NULL, cmp_destroy, cmp_byte_compare, cmp_name); - mdhimdb->compare = cmp_byte_compare; - break; - } - - leveldb_options_set_comparator(mdhimdb->options, mdhimdb->cmp); - //Check to see if the given path + "_stat" and the null char will be more than the max - if (strlen(path) + 6 > PATH_MAX) { - mlog(MDHIM_SERVER_CRIT, "Error opening leveldb database - path provided is too long"); - return MDHIM_DB_ERROR; - } - - //Open the main database - db = leveldb_open(mdhimdb->options, path, &err); - - fflush(stdout); - mdhimdb->db = db; - //Set the output handle - *((struct mdhim_leveldb_t **) dbh) = mdhimdb; - if (err != NULL) { - mlog(MDHIM_SERVER_CRIT, "Error opening leveldb database, abc..., path is %s", path); - return MDHIM_DB_ERROR; - } - - //Open the stats database - sprintf(stats_path, "%s_stats", path); - statsdb->compare = cmp_int_compare; - statsdb->cmp = leveldb_comparator_create(NULL, cmp_destroy, cmp_int_compare, cmp_name); - leveldb_options_set_comparator(statsdb->options, statsdb->cmp); - db = leveldb_open(statsdb->options, stats_path, &err); - - statsdb->db = db; - *((struct mdhim_leveldb_t **) dbs) = statsdb; - - if (err != NULL) { - mlog(MDHIM_SERVER_CRIT, "Error opening leveldb database, def..., stats_path is %s", stats_path); - return MDHIM_DB_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * mdhim_leveldb_put - * Stores a single key in the data store - * - * @param dbh in pointer to the leveldb handle - * @param key in void * to the key to store - * @param key_len in length of the key - * @param data in void * to the value of the key - * @param data_len in length of the value data - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_leveldb_put(void *dbh, void *key, int key_len, void *data, int32_t data_len) { - leveldb_writeoptions_t *options; - char *err = NULL; - struct mdhim_leveldb_t *mdhimdb = (struct mdhim_leveldb_t *) dbh; - struct timeval start, end; - - gettimeofday(&start, NULL); - options = mdhimdb->write_options; - leveldb_put(mdhimdb->db, options, key, key_len, data, data_len, &err); - gettimeofday(&end, NULL); - /* - * temporarily mute the error message until the file metadata - * operation is fully defined and implemented */ - - if (err != NULL) { - /* printf("in mdhim, rank:%d, key is %d, value len is %d, err is %s\n",\ - dbg_rank, *((int *)key), data_len, err); - fflush(stdout); */ - mlog(MDHIM_SERVER_CRIT, "Error putting key/value in leveldb"); - return MDHIM_DB_ERROR; - } - - mlog(MDHIM_SERVER_DBG, "Took: %d seconds to put the record", - (int) (end.tv_sec - start.tv_sec)); - - return MDHIM_SUCCESS; -} - -/** - * mdhim_leveldb_batch_put - * Stores multiple keys in the data store - * - * @param dbh in pointer to the leveldb handle - * @param keys in void ** to the key to store - * @param key_lens in int * to the lengths of the keys - * @param data in void ** to the values of the keys - * @param data_lens in int * to the lengths of the value data - * @param num_records in int for the number of records to insert - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_leveldb_batch_put(void *dbh, void **keys, int32_t *key_lens, - void **data, int32_t *data_lens, int num_records) { - gettimeofday(&dbbputstart, NULL); - leveldb_writeoptions_t *options; - char *err = NULL; - struct mdhim_leveldb_t *mdhimdb = (struct mdhim_leveldb_t *) dbh; - struct timeval start, end; - leveldb_writebatch_t* write_batch; - int i; - - gettimeofday(&start, NULL); - write_batch = leveldb_writebatch_create(); - options = mdhimdb->write_options; - for (i = 0; i < num_records; i++) { -/* printf("in ds, fid is %d, offset is %ld, nodeid is %ld, len %ld, key_len:%d, data_lens:%d, num_records:%ld\n", *((long *)(keys[i])),\ - *((long *)keys[i]+1), *(((long *)(data[i]))),\ - *((long *)((data[i]))+1), key_lens[i], data_lens[i], num_records); - fflush(stdout); -*/ - leveldb_writebatch_put(write_batch, keys[i], key_lens[i], - data[i], data_lens[i]); - } - - leveldb_write(mdhimdb->db, options, write_batch, &err); - leveldb_writebatch_destroy(write_batch); - if (err != NULL) { - mlog(MDHIM_SERVER_CRIT, "Error in batch put in leveldb"); - return MDHIM_DB_ERROR; - } - - gettimeofday(&end, NULL); - gettimeofday(&end, NULL); - - gettimeofday(&dbbputend, NULL); - dbbputtime+=1000000*(dbbputend.tv_sec-dbbputstart.tv_sec)+dbbputend.tv_usec-dbbputstart.tv_usec; - mlog(MDHIM_SERVER_DBG, "Took: %d seconds to put %d records", - (int) (end.tv_sec - start.tv_sec), num_records); - - return MDHIM_SUCCESS; -} - -/** - * mdhim_leveldb_get - * Gets a value, given a key, from the data store - * - * @param dbh in pointer to the leveldb db handle - * @param key in void * to the key to retrieve the value of - * @param key_len in length of the key - * @param data out void * to the value of the key - * @param data_len out pointer to length of the value data - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_leveldb_get(void *dbh, void *key, int key_len, void **data, int32_t *data_len) { -/* - printf("in getting\n"); - fflush(stdout); -*/ - leveldb_readoptions_t *options; - char *err = NULL; - struct mdhim_leveldb_t *mdhimdb = (struct mdhim_leveldb_t *) dbh; - int ret = MDHIM_SUCCESS; - void *ldb_data; - size_t ldb_data_len = 0; - - options = mdhimdb->read_options; - *data = NULL; - gettimeofday(&dbgetstart, NULL); - ldb_data = leveldb_get(mdhimdb->db, options, key, key_len, &ldb_data_len, &err); - if (err != NULL) { - mlog(MDHIM_SERVER_CRIT, "Error getting value in leveldb"); - return MDHIM_DB_ERROR; - } - - if (!ldb_data_len) { - ret = MDHIM_DB_ERROR; - return ret; - } - - *data_len = ldb_data_len; - *data = malloc(*data_len); - memcpy(*data, ldb_data, *data_len); - free(ldb_data); - gettimeofday(&dbgetend, NULL); - dbgettime+=1000000*(dbgetend.tv_sec-dbgetstart.tv_sec) + \ - dbgetend.tv_usec-dbgetstart.tv_usec; - return ret; -} - -/** - * mdhim_leveldb_get_next - * Gets the next key/value from the data store - * - * @param dbh in pointer to the unqlite db handle - * @param key out void ** to the key that we get - * @param key_len out int * to the length of the key - * @param data out void ** to the value belonging to the key - * @param data_len out int * to the length of the value data - * @param mstore_opts in additional cursor options for the data store layer - * - */ -int mdhim_leveldb_get_next(void *dbh, void **key, int *key_len, - void **data, int32_t *data_len) { - leveldb_readoptions_t *options; - struct mdhim_leveldb_t *mdhimdb = (struct mdhim_leveldb_t *) dbh; - int ret = MDHIM_SUCCESS; - leveldb_iterator_t *iter; - const char *res; - int len = 0; - void *old_key; - int old_key_len; - struct timeval start, end; - int cmp_ret = -5; - - gettimeofday(&dbngetstart, NULL); - //Init the data to return - *data = NULL; - *data_len = 0; - - gettimeofday(&start, NULL); - //Create the options and iterator - options = mdhimdb->read_options; - old_key = *key; - old_key_len = *key_len; - *key = NULL; - *key_len = 0; - - - iter = leveldb_create_iterator(mdhimdb->db, options); - - //If the user didn't supply a key, then seek to the first - if (!old_key || old_key_len == 0) { - - leveldb_iter_seek_to_first(iter); - } else { - - /* Seek to the passed in key. If that doesn't exist, iterate until we find one greater - or until we exhaust the keys.*/ - leveldb_iter_seek(iter, old_key, old_key_len); - - if (!leveldb_iter_valid(iter)) { - - leveldb_iter_seek_to_first(iter); - - while(leveldb_iter_valid(iter)) { - - res = leveldb_iter_key(iter, (size_t *) &len); - - if ((cmp_ret = mdhimdb->compare(NULL, res, len,\ - old_key, old_key_len)) > 0) { - break; - } - - leveldb_iter_next(iter); - } - } else { - - if (mdhimdb->compare(NULL, (leveldb_iter_key(iter,\ - (size_t *) &len)), len, old_key, old_key_len) == 0) - leveldb_iter_next(iter); - } - } - - if (!leveldb_iter_valid(iter)) { - /* - printf("error 1\n"); - fflush(stdout); - */ - goto error; - } - - res = leveldb_iter_value(iter, (size_t *) &len); - if (res) { - *data = malloc(len); - memcpy(*data, res, len); - *data_len = len; - } else { - *data = NULL; - *data_len = 0; - } - - res = leveldb_iter_key(iter, (size_t *) key_len); - if (res) { - *key = malloc(*key_len); - memcpy(*key, res, *key_len); - } else { - *key = NULL; - *key_len = 0; - } - - if (!*data) { - goto error; - /* - printf("error 2\n"); - fflush(stdout); - */ - } - - //Destroy iterator - leveldb_iter_destroy(iter); - gettimeofday(&end, NULL); - mlog(MDHIM_SERVER_DBG, "Took: %d seconds to get the next record", - (int) (end.tv_sec - start.tv_sec)); - gettimeofday(&dbngetend, NULL); - dbngettime += 1000000*(dbngetend.tv_sec-dbngetstart.tv_sec)+dbngetend.tv_usec-dbngetstart.tv_usec; - return ret; - -error: - gettimeofday(&dbngetend, NULL); - dbngettime += 1000000*(dbngetend.tv_sec-dbngetstart.tv_sec)+dbngetend.tv_usec-dbngetstart.tv_usec; - //Destroy iterator - leveldb_iter_destroy(iter); - *key = NULL; - *key_len = 0; - *data = NULL; - *data_len = 0; - return MDHIM_DB_ERROR; -} - - -/** - * mdhim_leveldb_get_prev - * Gets the prev key/value from the data store - * - * @param dbh in pointer to the unqlite db handle - * @param key out void ** to the key that we get - * @param key_len out int * to the length of the key - * @param data out void ** to the value belonging to the key - * @param data_len out int * to the length of the value data - * @param mstore_opts in additional cursor options for the data store layer - * - */ -int mdhim_leveldb_get_prev(void *dbh, void **key, int *key_len, - void **data, int32_t *data_len) { - leveldb_readoptions_t *options; - struct mdhim_leveldb_t *mdhimdb = (struct mdhim_leveldb_t *) dbh; - int ret = MDHIM_SUCCESS; - leveldb_iterator_t *iter; - const char *res; - int len = 0; - void *old_key; - int old_key_len; - struct timeval start, end; - - //Init the data to return - *data = NULL; - *data_len = 0; - - gettimeofday(&start, NULL); - - //Create the options and iterator - options = mdhimdb->read_options; - old_key = *key; - old_key_len = *key_len; - *key = NULL; - *key_len = 0; - - iter = leveldb_create_iterator(mdhimdb->db, options); - - //If the user didn't supply a key, then seek to the first - if (!old_key || old_key_len == 0) { - leveldb_iter_seek_to_last(iter); - } else { - leveldb_iter_seek(iter, old_key, old_key_len); - if (!leveldb_iter_valid(iter)) { - leveldb_iter_seek_to_last(iter); - while(leveldb_iter_valid(iter)) { - res = leveldb_iter_key(iter, (size_t *) &len); - if (mdhimdb->compare(NULL, res, len, old_key, old_key_len) < 0) { - break; - } - - leveldb_iter_prev(iter); - } - } else { - leveldb_iter_prev(iter); - } - } - - if (!leveldb_iter_valid(iter)) { - goto error; - } - - res = leveldb_iter_value(iter, (size_t *) &len); - if (res) { - *data = malloc(len); - memcpy(*data, res, len); - *data_len = len; - } else { - *data = NULL; - *data_len = 0; - } - - res = leveldb_iter_key(iter, (size_t *) key_len); - if (res) { - *key = malloc(*key_len); - memcpy(*key, res, *key_len); - } else { - *key = NULL; - *key_len = 0; - } - - if (!*data) { - goto error; - } - - //Destroy iterator - leveldb_iter_destroy(iter); - gettimeofday(&end, NULL); - mlog(MDHIM_SERVER_DBG, "Took: %d seconds to get the previous record", - (int) (end.tv_sec - start.tv_sec)); - return ret; - -error: - //Destroy iterator - leveldb_iter_destroy(iter); - *key = NULL; - *key_len = 0; - *data = NULL; - *data_len = 0; - return MDHIM_DB_ERROR; -} - -/** - * mdhim_leveldb_close - * Closes the data store - * - * @param dbh in pointer to the leveldb db handle - * @param dbs in pointer to the leveldb statistics db handle - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_leveldb_close(void *dbh, void *dbs) { - struct mdhim_leveldb_t *mdhimdb = (struct mdhim_leveldb_t *) dbh; - struct mdhim_leveldb_t *statsdb = (struct mdhim_leveldb_t *) dbs; - - //Close the databases - leveldb_close(mdhimdb->db); - leveldb_close(statsdb->db); - - //Destroy the options - leveldb_comparator_destroy(mdhimdb->cmp); - leveldb_options_destroy(mdhimdb->options); - leveldb_readoptions_destroy(mdhimdb->read_options); - leveldb_writeoptions_destroy(mdhimdb->write_options); - leveldb_filterpolicy_destroy(mdhimdb->filter); - leveldb_comparator_destroy(statsdb->cmp); - leveldb_options_destroy(statsdb->options); - leveldb_readoptions_destroy(statsdb->read_options); - leveldb_writeoptions_destroy(statsdb->write_options); - leveldb_filterpolicy_destroy(statsdb->filter); - - free(mdhimdb); - free(statsdb); - - return MDHIM_SUCCESS; -} - -/** - * mdhim_leveldb_del - * delete the given key - * - * @param dbh in pointer to the leveldb db handle - * @param key in void * for the key to delete - * @param key_len in int for the length of the key - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_leveldb_del(void *dbh, void *key, int key_len) { - leveldb_writeoptions_t *options; - char *err = NULL; - struct mdhim_leveldb_t *mdhimdb = (struct mdhim_leveldb_t *) dbh; - - options = mdhimdb->write_options; - leveldb_delete(mdhimdb->db, options, key, key_len, &err); - if (err != NULL) { - mlog(MDHIM_SERVER_CRIT, "Error deleting key in leveldb"); - return MDHIM_DB_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * mdhim_leveldb_commit - * Commits outstanding writes the data store - * - * @param dbh in pointer to the leveldb handle - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_leveldb_commit(void *dbh) { - return MDHIM_SUCCESS; -} - - -/** - * mdhim_leveldb_batch_next - * get next (tot_records) starting from key (inclusive) - * - * @param dbh in pointer to the leveldb db handle - * @param key in a list of keys to be returned - * @param key_len in a list of key_length to be returned - * @param data in a list values to be returned corresponding to the keys - * @param data_len in a list of value length to be returned - * @param num_records in actual number of key-value pairs returned - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - * @return - */ -int mdhim_leveldb_batch_next(void *dbh, char **key, int *key_len, - char **data, int32_t *data_len, - int tot_records, int *num_records) { - - gettimeofday(&dbngetstart, NULL); - struct mdhim_leveldb_t *mdhim_db = (struct mdhim_leveldb_t *) dbh; - int cursor = 0; - leveldb_readoptions_t *options; - leveldb_iterator_t *iter; - const char *res; - int len = 0; - void *old_key; - int old_key_len; - - options = mdhim_db->read_options; - old_key = key[0]; - old_key_len = key_len[0]; - - iter = leveldb_create_iterator(mdhim_db->db, options); - if (!old_key || old_key_len == 0) { - leveldb_iter_seek_to_first(iter); - - } else { - leveldb_iter_seek(iter, (char *)old_key, old_key_len); - - while(leveldb_iter_valid(iter) && cursor != tot_records) { - - res = leveldb_iter_value(iter, (size_t *)&len); - if (res) { - data[cursor] = (char *)malloc(len); - memcpy(data[cursor], res, len); - data_len[cursor] = len; - - } else { - data[cursor] = NULL; - data_len[cursor] = 0; - goto error; - } - - res = leveldb_iter_key(iter, (size_t *)&len); - if (res) { - key[cursor] = (char *)malloc(len); - memcpy(key[cursor], res, len); - key_len[cursor] = len; - - - } else { - key[cursor] = NULL; - key_len[cursor] = 0; - goto error; - } - - leveldb_iter_next(iter); - (*num_records)++; - cursor++; - } - } - gettimeofday(&dbngetend, NULL); - dbngettime +=\ - 1000000 * (dbngetend.tv_sec - dbngetstart.tv_sec)\ - + dbngetend.tv_usec - dbngetstart.tv_usec; - leveldb_iter_destroy(iter); - if (*num_records < tot_records) - return MDHIM_DB_ERROR; - else - return 0; -error: - gettimeofday(&dbngetend, NULL); - dbngettime += 1000000 * (dbngetend.tv_sec - dbngetstart.tv_sec)\ - + dbngetend.tv_usec - dbngetstart.tv_usec; - //Destroy iterator - leveldb_iter_destroy(iter); - return MDHIM_DB_ERROR; - -} - -/** - * leveldb_batch_ranges - * get a list of key-value pairs that fall in the range of a list of - * items identified (start_key, end_key) - * - * @param dbh in pointer to the leveldb db handle - * @param key in a list of start_key and end_key pairs - * @param key_len in a list of key_length for start_keys and end_keys - * @param out_keys in pointer to a list keys to be returned - * @param out_keys_len in pointer to a list of key_lengths to be returned - * @param out_val in pointer to a list of values to be returned - * @param out_val_len in pointer to a list of value lens to be returned - * @param num_ranges in number of start/end key ranges - * @param out_records_cnt in number of copied key-value pairs - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - * @return - */ -int leveldb_batch_ranges(void *dbh, char **key, int32_t *key_len, - char ***out_keys, int32_t **out_keys_len, - char ***out_vals, int32_t **out_vals_len, - int num_ranges, int *out_records_cnt) { - - int i, start_ndx, end_ndx; - struct mdhim_leveldb_t *mdhim_db = (struct mdhim_leveldb_t *) dbh; - - int tmp_records_cnt = 0; /*the temporary number of out records*/ - int tmp_out_cap = num_ranges; /* the temporary out capacity*/ - - leveldb_iterator_t *iter; - leveldb_readoptions_t *options; - options = mdhim_db->read_options; - - iter = leveldb_create_iterator(mdhim_db->db, options); - - *out_keys = (char **) calloc(num_ranges, sizeof(char *)); - *out_keys_len = (int32_t *) calloc(num_ranges, sizeof(int32_t)); - - *out_vals = (char **) calloc(num_ranges, sizeof(char *)); - *out_vals_len = (int32_t *) calloc(num_ranges, sizeof(int32_t)); - - /*ToDo: return different error types if leveldb_process_range fails*/ - - for (i = 0; i < num_ranges; i++) { - start_ndx = 2 * i; - end_ndx = start_ndx + 1; - /* printf("range %d: fid is %d, start_offset=%zu end_offset=%zu\n", - * i, UNIFYFS_KEY_FID(key[start_ndx]), - * UNIFYFS_KEY_OFF(key[start_ndx]), - * UNIFYFS_KEY_OFF(key[end_ndx])); - */ - leveldb_process_range(iter, key[start_ndx], key[end_ndx], - key_len[start_ndx], - out_keys, out_keys_len, - out_vals, out_vals_len, - &tmp_records_cnt, &tmp_out_cap); - } - - *out_records_cnt = tmp_records_cnt; - - /* printf("out_records_cnt is %d\n", *out_records_cnt); - * for (i = 0; i < *out_records_cnt; i++) { - * printf("out %d: fid is %d, offset=%zu addr=%zu\n", - * i, UNIFYFS_KEY_FID((*out_keys)[i]), - * UNIFYFS_KEY_OFF((*out_keys)[i]), - * UNIFYFS_VAL_ADDR((*out_vals)[i])); - * } - * fflush(stdout); - */ - - leveldb_iter_destroy(iter); - return 0; -} - -/* - * for comments inside: - * start: start_key offset - * end: end_key offset - * prev_s: start offset of the K-V pair that precedes start - * prev_e: end offset of the K-V pair that precedes start - * (prev_e = prev_s + value length - 1) - * next_s: start offset of the K-V pair that follows start - * next_e: end offset of the K-V pair that follows start - * (next_e = next_s + value length - 1) - * */ -int leveldb_process_range(leveldb_iterator_t *iter, - char *start_key, char *end_key, int32_t key_len, - char ***out_keys, int32_t **out_keys_len, - char ***out_vals, int32_t **out_vals_len, - int *tmp_records_cnt, int *tmp_out_cap) { - - const char *ret_key, *ret_val; - size_t tmp_key_len, tmp_val_len; - const char *next_ret_key; - - int prev_flag = 0; - - leveldb_iter_seek(iter, (char *)start_key, (size_t)key_len); - if (!leveldb_iter_valid(iter)) { - // check last K-V - leveldb_iter_seek_to_last(iter); - if (!leveldb_iter_valid(iter)) - return 0; - - ret_key = leveldb_iter_key(iter, &tmp_key_len); - if (!ret_key) - return MDHIM_DB_ERROR; - else if (UNIFYFS_KEY_FID(ret_key) != UNIFYFS_KEY_FID(start_key)) - return 0; - - // last key matched fid, but not offset - prev_flag = 1; - } else { - ret_key = leveldb_iter_key(iter, &tmp_key_len); - if (!ret_key) - return MDHIM_DB_ERROR; - - if (UNIFYFS_KEY_FID(start_key) != UNIFYFS_KEY_FID(ret_key)) { - // mismatch on fid, check previous K-V - leveldb_iter_prev(iter); - if (!leveldb_iter_valid(iter)) { - return 0; - } - - ret_key = leveldb_iter_key(iter, &tmp_key_len); - if (!ret_key) - return MDHIM_DB_ERROR; - else if (UNIFYFS_KEY_FID(start_key) != UNIFYFS_KEY_FID(ret_key)) - return 0; - - prev_flag = 1; - } - } - - ret_val = leveldb_iter_value(iter, &tmp_val_len); - if (!ret_val) - return MDHIM_DB_ERROR; - - unsigned long start_off = UNIFYFS_KEY_OFF(start_key); - unsigned long end_off = UNIFYFS_KEY_OFF(end_key); - - if (prev_flag) { - // ret_key is previous K-V with matching fid - unsigned long prev_st = UNIFYFS_KEY_OFF(ret_key); - unsigned long prev_end = prev_st + UNIFYFS_VAL_LEN(ret_val) - 1; - if (start_off > prev_end) { - /* prev_s......prev_e; ...... start..end */ - return 0; - } - - unsigned long tmp_end; - if (end_off > prev_end) { - /* prev_s......prev_e; next_s......next_e - start...............end */ - tmp_end = prev_end; - } else { - /* prev_s......prev_e; next_s......next_e - start..end */ - tmp_end = end_off; - } - - assert((UNIFYFS_KEY_SZ == tmp_key_len) && - (UNIFYFS_VAL_SZ == tmp_val_len)); - char *ret_out_key = calloc(1, UNIFYFS_KEY_SZ); - char *ret_out_val = calloc(1, UNIFYFS_VAL_SZ); - - memcpy(ret_out_key, ret_key, UNIFYFS_KEY_SZ); - UNIFYFS_KEY_OFF(ret_out_key) = start_off; - - memcpy(ret_out_val, ret_val, UNIFYFS_VAL_SZ); - UNIFYFS_VAL_ADDR(ret_out_val) = UNIFYFS_VAL_ADDR(ret_val) - + (start_off - prev_st); - UNIFYFS_VAL_LEN(ret_out_val) = tmp_end - start_off + 1; - - add_kv(out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap, - ret_out_key, ret_out_val, - tmp_key_len, tmp_val_len); - - return 0; - - } else if (UNIFYFS_KEY_OFF(ret_key) == start_off) { - // exact match on start offset - return handle_next_half(iter, start_key, end_key, - out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap); - } - - leveldb_iter_prev(iter); - if (!leveldb_iter_valid(iter)) { - // already the first K-V, handle the rest of range - leveldb_iter_seek_to_first(iter); - return handle_next_half(iter, start_key, end_key, - out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap); - } - - next_ret_key = ret_key; - ret_key = leveldb_iter_key(iter, &tmp_key_len); - if (!ret_key) - return MDHIM_DB_ERROR; - else if (UNIFYFS_KEY_FID(ret_key) != UNIFYFS_KEY_FID(start_key)) { - leveldb_iter_next(iter); - return handle_next_half(iter, start_key, end_key, - out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap); - } - - ret_val = leveldb_iter_value(iter, &tmp_val_len); - if (!ret_val) - return MDHIM_DB_ERROR; - - unsigned long prev_st = UNIFYFS_KEY_OFF(ret_key); - unsigned long prev_end = prev_st + UNIFYFS_VAL_LEN(ret_val) - 1; - - if (start_off <= prev_end) { - int found_end = 0; - unsigned long tmp_end = prev_end; - if (end_off <= prev_end) { - /* prev_s......prev_e; next_s......next_e - * start....end - */ - found_end = 1; - tmp_end = end_off; - } - /* else prev_end < end_off - * prev_s......prev_e; next_s......next_e - * start..................end - */ - - assert((UNIFYFS_KEY_SZ == tmp_key_len) && - (UNIFYFS_VAL_SZ == tmp_val_len)); - char *ret_out_key = (char *) calloc(1, UNIFYFS_KEY_SZ); - char *ret_out_val = (char *) calloc(1, UNIFYFS_VAL_SZ); - - memcpy(ret_out_key, ret_key, UNIFYFS_KEY_SZ); - UNIFYFS_KEY_OFF(ret_out_key) = start_off; - - memcpy(ret_out_val, ret_val, UNIFYFS_VAL_SZ); - UNIFYFS_VAL_LEN(ret_out_val) = tmp_end - start_off + 1; - UNIFYFS_VAL_ADDR(ret_out_val) = UNIFYFS_VAL_ADDR(ret_val) + - (start_off - prev_st); - - add_kv(out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap, - ret_out_key, ret_out_val, - tmp_key_len, tmp_val_len); - - if (found_end) { - return 0; - } - - // start at next to find rest of range - UNIFYFS_KEY_OFF(start_key) = UNIFYFS_KEY_OFF(next_ret_key); - leveldb_iter_next(iter); - } else { - /* start between prev and next, one of two cases: - * (1) prev_s......prev_e; next_s......next_e - * start............end - * - * (2) prev_s......prev_e; next_s......next_e - * start..........................end - */ - // look for start of range in next - leveldb_iter_next(iter); - } - - return handle_next_half(iter, start_key, end_key, - out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap); -} - -int handle_next_half(leveldb_iterator_t *iter, - char *start_key, char *end_key, - char ***out_keys, int32_t **out_keys_len, - char ***out_vals, int32_t **out_vals_len, - int *tmp_records_cnt, int *tmp_out_cap) { - const char *ret_key, *ret_val; - size_t tmp_key_len, tmp_val_len; - - ret_key = leveldb_iter_key(iter, &tmp_key_len); - if (!ret_key) - return MDHIM_DB_ERROR; - - ret_val = leveldb_iter_value(iter, &tmp_val_len); - if (!ret_val) - return MDHIM_DB_ERROR; - - assert((UNIFYFS_KEY_SZ == tmp_key_len) && - (UNIFYFS_VAL_SZ == tmp_val_len)); - - unsigned long curr_off = UNIFYFS_KEY_OFF(ret_key); - unsigned long curr_end = curr_off + UNIFYFS_VAL_LEN(ret_val) - 1; - - unsigned long end_off = UNIFYFS_KEY_OFF(end_key); - - if (curr_off > end_off) { - // start..end precedes current K-V offset - return 0; - } - - char *ret_out_key; - char *ret_out_val; - - ret_out_key = (char *) calloc(1, UNIFYFS_KEY_SZ); - ret_out_val = (char *) calloc(1, UNIFYFS_VAL_SZ); - memcpy(ret_out_key, ret_key, UNIFYFS_KEY_SZ); - memcpy(ret_out_val, ret_val, UNIFYFS_VAL_SZ); - - if (end_off <= curr_end) { - // found end in current K-V, add slice - /* curr_s.........curr_e - [start]....end */ - - UNIFYFS_VAL_LEN(ret_out_val) = end_off - curr_off + 1; - - add_kv(out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap, - ret_out_key, ret_out_val, - tmp_key_len, tmp_val_len); - return 0; - } - - // range fully covers current K-V, add it - add_kv(out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap, - ret_out_key, ret_out_val, - tmp_key_len, tmp_val_len); - - // add subsequent K-Vs until end found (or fid mismatch) - int found_end = 0; - while (1) { - leveldb_iter_next(iter); - if (!leveldb_iter_valid(iter)) { - // end is past last K-V - break; - } - - ret_key = leveldb_iter_key(iter, (size_t *)&tmp_key_len); - if (!ret_key) - return MDHIM_DB_ERROR; - else if (UNIFYFS_KEY_FID(ret_key) != UNIFYFS_KEY_FID(start_key)) { - // fid mismatch - break; - } - - ret_val = leveldb_iter_value(iter, (size_t *)&tmp_val_len); - if (!ret_val) - return MDHIM_DB_ERROR; - - curr_off = UNIFYFS_KEY_OFF(ret_key); - curr_end = curr_off + UNIFYFS_VAL_LEN(ret_val) - 1; - - if (curr_off > end_off) { - // current K-V starts after end - break; - } - - assert((UNIFYFS_KEY_SZ == tmp_key_len) && - (UNIFYFS_VAL_SZ == tmp_val_len)); - ret_out_key = (char *) calloc(1, UNIFYFS_KEY_SZ); - ret_out_val = (char *) calloc(1, UNIFYFS_VAL_SZ); - memcpy(ret_out_key, ret_key, UNIFYFS_KEY_SZ); - memcpy(ret_out_val, ret_val, UNIFYFS_VAL_SZ); - - if (curr_end >= end_off) { - // found end in current K-V, add slice - found_end = 1; - UNIFYFS_VAL_LEN(ret_out_val) = end_off - curr_off + 1; - } - // else, range fully covers current K-V, add it - add_kv(out_keys, out_keys_len, - out_vals, out_vals_len, - tmp_records_cnt, tmp_out_cap, - ret_out_key, ret_out_val, - tmp_key_len, tmp_val_len); - - if (found_end) - break; - } - return 0; -} - -int add_kv(char ***out_keys, int32_t **out_keys_len, - char ***out_vals, int32_t **out_vals_len, - int *tmp_records_cnt, int *tmp_out_cap, - char *ret_key, char *ret_val, - size_t key_len, size_t val_len) { - int curr_cnt = *tmp_records_cnt; - if (curr_cnt == *tmp_out_cap) { - int new_cap = curr_cnt * 2; - *out_keys = (char **) realloc(*out_keys, - new_cap * sizeof(char *)); - *out_vals = (char **) realloc(*out_vals, - new_cap * sizeof(char *)); - *out_keys_len = (int32_t *) realloc(*out_keys_len, - new_cap * sizeof(int32_t)); - *out_vals_len = (int32_t *) realloc(*out_vals_len, - new_cap * sizeof(int32_t)); - *tmp_out_cap = new_cap; - } - - (*out_keys)[curr_cnt] = ret_key; - (*out_vals)[curr_cnt] = ret_val; - (*out_keys_len)[curr_cnt] = (int32_t)key_len; - (*out_vals_len)[curr_cnt] = (int32_t)val_len; - - *tmp_records_cnt = curr_cnt + 1; - return 0; -} diff --git a/meta/src/ds_leveldb.h b/meta/src/ds_leveldb.h deleted file mode 100644 index befef0c23..000000000 --- a/meta/src/ds_leveldb.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __LEVELDB_H -#define __LEVELDB_H - -#ifndef LEVELDB_SUPPORT -#include -#else -#include -#endif - -#include "mdhim.h" -#include "partitioner.h" -#include "data_store.h" - -#include "unifyfs_metadata_mdhim.h" - -/* Function pointer for comparator in C */ -typedef int (*mdhim_store_cmp_fn_t)(void* arg, const char* a, size_t alen, - const char* b, size_t blen); - -struct mdhim_leveldb_t { - leveldb_t *db; - leveldb_options_t *options; - leveldb_comparator_t* cmp; - leveldb_filterpolicy_t *filter; - leveldb_cache_t *cache; - leveldb_env_t *env; - leveldb_writeoptions_t *write_options; - leveldb_readoptions_t *read_options; - mdhim_store_cmp_fn_t compare; -}; - -int mdhim_leveldb_open(void **dbh, void **dbs, char *path, - int flags, int key_type, - struct mdhim_options_t *opts); -int mdhim_leveldb_put(void *dbh, void *key, int key_len, - void *data, int32_t data_len); -int mdhim_leveldb_get(void *dbh, void *key, int key_len, - void **data, int32_t *data_len); -int mdhim_leveldb_get_next(void *dbh, void **key, int *key_len, - void **data, int32_t *data_len); -int mdhim_leveldb_get_prev(void *dbh, void **key, int *key_len, - void **data, int32_t *data_len); -int mdhim_leveldb_close(void *dbh, void *dbs); -int mdhim_leveldb_del(void *dbh, void *key, int key_len); -int mdhim_leveldb_commit(void *dbh); -int mdhim_leveldb_batch_put(void *dbh, void **key, int32_t *key_lens, - void **data, int32_t *data_lens, int num_records); -int mdhim_leveldb_batch_next(void *dbh, char **key, - int *key_len, char **data, int32_t *data_len, - int tot_records, int *num_records); -int leveldb_batch_ranges(void *dbh, char **key, int32_t *key_len, - char ***out_key, int32_t **out_key_len, - char ***out_val, int32_t **out_val_len, - int num_ranges, int *out_records_cnt); -int leveldb_process_range(leveldb_iterator_t *iter, - char *start_key, char *end_key, int32_t key_len, - char ***out_key, int32_t **out_key_len, - char ***out_val, int32_t **out_val_len, - int *tmp_records_cnt, int *tmp_out_cap); -int handle_next_half(leveldb_iterator_t *iter, - char *start_key, char *end_key, - char ***out_key, int **out_key_len, - char ***out_val, int **out_val_len, - int *tmp_records_cnt, int *tmp_out_cap); -int add_kv(char ***out_key, int32_t **out_key_len, - char ***out_val, int32_t **out_val_len, - int *tmp_records_cnt, int *tmp_out_cap, - char *ret_key, char *ret_val, - size_t key_len, size_t val_len); - -#endif diff --git a/meta/src/ds_mysql.c b/meta/src/ds_mysql.c deleted file mode 100644 index de9cde98a..000000000 --- a/meta/src/ds_mysql.c +++ /dev/null @@ -1,1022 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include "ds_mysql.h" -#include -#include -#define MYSQL_BUFFER 1024 -#define MYSQLDB_HANDLE 1 -#define MYSQLDB_STAT_HANDLE 2 - -char *sb_key_copy(MYSQL *d, char *key_t, int key_len_t) { - if (key_len_t ==0) key_len_t = strlen(key_t); - char *k_copy = malloc(2+key_len_t+1); - memset(k_copy, 0, key_len_t+1); - mysql_real_escape_string(d, k_copy, key_t, key_len_t); - - return k_copy; - } - - -/* - *Put general functionf - * - *@param pdb in MYSQL pointer Database handle for connection and doing the escape stirnt - *@param key_t in void pointer Key for value - *@param k_len in int Key lenght - *@param data_t in void pointer Data to be inserted - *@param d_len in int Data Length - *@param t_name in char pointer Table name to execute insert - -*/ - -char *put_value(MYSQL *pdb, void *key_t, int k_len, void *data_t, int d_len, char *t_name, int pk_type){ - -char chunk[2*d_len+1]; -char kchunk[2*k_len+1]; - mysql_real_escape_string(pdb, chunk, data_t, d_len); - mysql_real_escape_string(pdb, kchunk, key_t, k_len); - // mysql_real_escape_string(db, key_t_insert,key_t,k_len); - //char *key_copy; - size_t st_len, size=0; - char *r_query=NULL, *st; - switch(pk_type){ - case MDHIM_BYTE_KEY: - case MDHIM_STRING_KEY: - //mysql_real_escape_string(pdb, k_chunk, key_t, k_len); - st = "Insert INTO %s (Id, Value) VALUES ('%s', '%s');"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - //key_copy = malloc(2*k_len+1); - //memset(key_copy, 0, 2*k_len+1); - //memcpy(key_copy, kchunk, 2*k_len+1); - snprintf(r_query, st_len + size, st, t_name, kchunk, chunk); - //free(key_copy); - break; - case MDHIM_FLOAT_KEY: - st = "Insert INTO %s (Id, Value) VALUES (%f, '%s');"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name, *((float*)key_t), chunk); - break; - case MDHIM_DOUBLE_KEY: - st = "Insert INTO %s (Id, Value) VALUES (%lf, '%s');"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name, *((double*)key_t), chunk); - break; - case MDHIM_INT_KEY: - st = "Insert INTO %s (Id, Value) VALUES (%d, '%s');"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name, *((int*)key_t), chunk); - break; - case MDHIM_LONG_INT_KEY: - st = "Insert INTO %s (Id, Value) VALUES (%ld, '%s');"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name, *((long*)key_t), chunk); - break; - } - return r_query; - -} - - -/* update_value - *Update the value if it didn't insert on put. - - *@param pdb in MYSQL pointer Database handle for connection and doing the escape stirnt - *@param key_t in void pointer Key for value - *@param k_len in int Key lenght - *@param data_t in void pointer Data to be inserted - *@param d_len in int Data Length - *@param t_name in char pointer Table name to execute insert - -*/ -char *update_value(MYSQL *pdb, void *key_t, int k_len, void *data_t, int d_len, char *t_name, int pk_type){ - -char chunk[2*d_len+1]; -char kchunk[2*k_len+1]; - mysql_real_escape_string(pdb, chunk, data_t, d_len); - mysql_real_escape_string(pdb, kchunk, key_t, k_len); - size_t st_len, size=0; - char *r_query=NULL, *st; - switch(pk_type){ - case MDHIM_BYTE_KEY: - case MDHIM_STRING_KEY: - st = "Update %s set Value = '%s' where Id = '%s';"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name, chunk, kchunk); - break; - case MDHIM_FLOAT_KEY: - st = "Update %s set Value = '%s' where Id = %f;"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name, chunk, *((float*)key_t) ); - break; - case MDHIM_DOUBLE_KEY: - st = "Update %s set Value = '%s' where Id = %lf;"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name, chunk, *((double*)key_t) ); - break; - case MDHIM_INT_KEY: - st = "Update %s set Value = '%s' where Id = %d;"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name,chunk, *((int*)key_t)); - break; - case MDHIM_LONG_INT_KEY: - st = "Update %s set Value = '%s' where Id = %ld;"; - st_len = strlen(st); - size = 2*d_len+1 + 2*k_len+1 + strlen(t_name)+st_len;//strlen(chunk)+strlen(key_t_insert)+1; - r_query=malloc(sizeof(char)*(size)); - snprintf(r_query, st_len + size, st, t_name, chunk, *((long*)key_t)); - break; - - } - - return r_query; - -} - - -/* create db - -* Helps to create the database for mysql if it does not exist -* @param dbmn Database name that will be used in the function -* @param db Database connection used to create the database -* Exit(1) is used to exit out if you don't have a connection - -*/ - -void create_db(char *dbmn, MYSQL *db){ - char q_create[MYSQL_BUFFER]; - memset(q_create, 0, MYSQL_BUFFER); - //int q =0; while (q==0) sleep(5); - snprintf(q_create, sizeof(char)*MYSQL_BUFFER, "USE %s", dbmn); - if (mysql_query(db, q_create)) - { - memset(q_create, 0, MYSQL_BUFFER); - snprintf(q_create, sizeof(char)*MYSQL_BUFFER,"CREATE DATABASE %s", dbmn); - //printf("\nCREATE DATABASE %s\n",dbmn); - if(mysql_query(db,q_create)) { - fprintf(stderr, "%s\n", mysql_error(db)); - mysql_close(db); - exit(1); - } - memset(q_create, 0, strlen(q_create)); - snprintf(q_create, sizeof(char)*MYSQL_BUFFER,"USE %s", dbmn); - if(mysql_query(db,q_create)) { - fprintf(stderr, "%s\n", mysql_error(db)); - mysql_close(db); - exit(1); - } //else printf("DATABASE IN USE"); - } - -} - -/* create_table fot table name - * @param dbmt Database table name to create the table/check to see if table is there - * @param db_name Database name for accessing the databaase - * @param k_type Key type that is used to create the table with the proper type for the key/value storage - **/ -void create_table(char *dbmt, MYSQL *db, char* db_name, int k_type){ - char name[MYSQL_BUFFER]; - //snprintf(name, "SHOW TABLES LIKE \'%s\'", dbmt); - //Create table and if it's there stop - if(mysql_query(db, "SHOW TABLES LIKE 'mdhim'")){ - fprintf(stderr, "%s\n", mysql_error(db)); - } - int check_er = mysql_errno(db); - //printf("\nThis is the error number: %d\n", check_er); - if (check_er == 1050){ - if(mysql_query(db, "Drop table mdhim")){ - fprintf(stderr, "%s\n", mysql_error(db)); - } - } - MYSQL_RES *table_res=mysql_store_result(db); - int row_count = table_res->row_count; - if(row_count == 0) - { - memset(name, 0, strlen(name)); - switch(k_type){ - case MDHIM_FLOAT_KEY: - snprintf(name, sizeof(char)*MYSQL_BUFFER, "CREATE TABLE %s( Id FLOAT PRIMARY KEY, Value LONGBLOB)", db_name); - break; - case MDHIM_DOUBLE_KEY: - snprintf(name, sizeof(char)*MYSQL_BUFFER, "CREATE TABLE %s( Id DOUBLE PRIMARY KEY, Value LONGBLOB)", db_name); - break; - case MDHIM_INT_KEY: - snprintf(name, sizeof(char)*MYSQL_BUFFER, "CREATE TABLE %s( Id BIGINT PRIMARY KEY, Value LONGBLOB)", db_name); - break; - case MDHIM_LONG_INT_KEY: - snprintf(name, sizeof(char)*MYSQL_BUFFER, "CREATE TABLE %s( Id BIGINT PRIMARY KEY, Value LONGBLOB)", db_name); - break; - case MDHIM_STRING_KEY: - case MDHIM_BYTE_KEY: - snprintf(name, sizeof(char)*MYSQL_BUFFER, "CREATE TABLE %s( Id VARCHAR(767) PRIMARY KEY, Value LONGBLOB)", db_name); - break; - } - - if(mysql_query(db, name)){ - fprintf(stderr, "%s\n", mysql_error(db)); - } - } - -} -/* str_to_key Helps convert the value in mysql_row into the proper key type and readability - * @param key_row Mysql_ROW type that has the key value - * @param key_type Value that determins what type the mysql_row info should be convereted into thus garanteting the proper key type - * @param size Gets size of the key type - **/ - -void * str_to_key(MYSQL_ROW key_row, int key_type, int * size){ - void * ret=NULL; - switch(key_type){ - case MDHIM_STRING_KEY: - *size= strlen(key_row[0]); - ret = malloc(*size); - ret=key_row[0]; - break; - case MDHIM_FLOAT_KEY: - *size= sizeof(float); - ret = malloc(*size); - *(float*)ret=strtol(key_row[0],NULL,10); - break; - case MDHIM_DOUBLE_KEY: - *size= sizeof(double); - char * endptr; - ret = malloc(*size); - *(double*)ret=strtod(key_row[0],&endptr); - break; - case MDHIM_INT_KEY: - *size= sizeof(int); - ret = malloc(*size); - *(int*)ret=strtol(key_row[0],NULL,10); - break; - case MDHIM_LONG_INT_KEY: - *size= sizeof(long); - ret = malloc(*size); - *(long*)ret=strtol(key_row[0],NULL,10); - break; - case MDHIM_BYTE_KEY: - *size= strlen(key_row[0]); - ret = malloc(*size); - ret=key_row[0]; - break; - } - - return ret; - -} - -/** - * mdhim_mysql_open - * Opens the database - * - * @param dbh in double pointer to the mysql handle - * @param dbs in double pointer to the mysql statistics db handle - * @param path in path to the database file - * @param flags in flags for opening the data store - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ - - - -int mdhim_mysql_open(void **dbh, void **dbs, char *path, int flags,int key_type, struct mdhim_options_t *db_opts) { - struct MDI *Input_DB; - struct MDI *Stats_DB; - Input_DB = malloc(sizeof(struct MDI)); - Stats_DB = malloc(sizeof(struct MDI)); - MYSQL *db = mysql_init(NULL); - MYSQL *sdb = mysql_init(NULL); - if (db == NULL){ - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - if (sdb == NULL){ - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - /*char *path_s = malloc(sizeof(path)); - path_s = strcpy(path_s, path); */ - Input_DB ->host = db_opts->db_host; - Stats_DB->host = db_opts->dbs_host; - Input_DB ->user = db_opts->db_user; - Stats_DB ->user = db_opts->dbs_user; - Input_DB ->pswd = db_opts->db_upswd; - Stats_DB->pswd = db_opts->dbs_upswd; - //Abstracting the host, usernames, and password - Input_DB->database= "maindb"; //mstore_opts -> db_ptr4; //Abstracting Database - Input_DB->table = "mdhim"; - Stats_DB ->database = "statsdb";//mstore_opts -> db_ptr4; //Abstracting Statsics Database - Stats_DB->table = "mdhim"; - Input_DB->msqkt = db_opts->db_key_type; - Stats_DB->msqkt = db_opts->db_key_type; - - //connect to the Database - if (mysql_real_connect(db, Input_DB->host, Input_DB->user, Input_DB->pswd, - NULL, 0, NULL, 0) == NULL){ - fprintf(stderr, "%s\n", mysql_error(db)); - mysql_close(db); - return MDHIM_DB_ERROR; - } - if (mysql_real_connect(sdb, Stats_DB->host, Stats_DB->user, Stats_DB->pswd, - NULL, 0, NULL, 0) == NULL){ - fprintf(stderr, "%s\n", mysql_error(db)); - mysql_close(sdb); - return MDHIM_DB_ERROR; - } - if (mysql_library_init(0, NULL, NULL)) { - fprintf(stderr, "could not initialize MySQL library\n"); - return MDHIM_DB_ERROR; - } - - create_db(Input_DB->database, db); - create_table(Input_DB->database, db,Input_DB->table, Input_DB->msqkt); - create_db(Stats_DB->database, sdb); - create_table(Stats_DB->database, sdb,Stats_DB->table, Stats_DB->msqkt); - //Abstracting the host, usernames, and password - - - Input_DB->msqdb = db; - Input_DB->msqht = MYSQLDB_HANDLE; - Stats_DB->msqdb = sdb; - Stats_DB->msqht = MYSQLDB_STAT_HANDLE; - *dbh = Input_DB; - *dbs = Stats_DB; - - - - return MDHIM_SUCCESS; - -} -///////////////////////////////////////////////////////////////////////////////////////// - -/** - * mdhim_mysql_put - * Stores a single key in the data store - * - * @param dbh in pointer to the mysql struct which points to the handle - * @param key in void * to the key to store - * @param key_len in length of the key - * @param data in void * to the value of the key - * @param data_len in length of the value data - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_mysql_put(void *dbh, void *key, int key_len, void *data, int32_t data_len) { - - struct timeval start, end; - //printf("In put function\n"); - struct MDI *x = (struct MDI *)(dbh); - MYSQL *db = x->msqdb; - if (db == NULL) - { - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - char *table_name; - table_name = x->table; - - gettimeofday(&start, NULL); - char *query; - //Insert key and value into table - query = put_value(db, key, key_len, data, data_len, table_name, x->msqkt); - //printf("\nThis is the query: \n%s\n", query); - - if (mysql_real_query(db, query, sizeof(char)*strlen(query))) { - int check_er = mysql_errno(db); - //printf("\nThis is the error number: %d\n", check_er); - if (check_er == 1062){ - memset(query, 0, sizeof(char)*strlen(query)); - query = update_value(db, key, key_len, data, data_len, table_name, x->msqkt); - //printf("\nThis is the query: \n%s\n", query); - - - if (mysql_real_query(db, query, sizeof(char)*strlen(query))) { - //printf("This is the query: %s\n", query); - mlog(MDHIM_SERVER_CRIT, "Error updating key/value in mysql\n"); - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - //else printf("Sucessfully updated key/value in mdhim\n"); - } - else { - mlog(MDHIM_SERVER_CRIT, "Error putting key/value in mysql\nHere is the command:%s\n",query); - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - } - //Report timing - gettimeofday(&end, NULL); - mlog(MDHIM_SERVER_DBG, "Took: %d seconds to put the record", - (int) (end.tv_sec - start.tv_sec)); - return MDHIM_SUCCESS; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -/** - * mdhim_mysql_batch_put - * Stores a multiple keys in the data store - * - * @param dbh in pointer to the mysql struct which points to the handle - * @param keys in void ** to the key to store - * @param key_lens in int * to the lengths of the keys - * @param data in void ** to the values of the keys - * @param data_lens in int * to the lengths of the value data - * @param num_records in int for the number of records to insert - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure */ - -int mdhim_mysql_batch_put(void *dbh, void **keys, int32_t *key_lens, - void **data, int32_t *data_lens, int num_records) { - struct MDI *x = (struct MDI *)(dbh); - MYSQL *db = (MYSQL *) x->msqdb; - if (db == NULL) - { - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - int i; - struct timeval start, end; - gettimeofday(&start, NULL); - char *table_name = x->table; - char *query=NULL; - //Insert X amount of Keys and Values - printf("Number records: %d\n", num_records); - for (i = 0; i < num_records; i++) { - query = put_value(db, keys[i], key_lens[i], data[i], data_lens[i], table_name, x->msqkt); - //printf("\nThis is the query: \n%s\n", query); - - if (mysql_real_query(db, query, sizeof(char)*strlen(query))) { - int check_er = mysql_errno(db); - //printf("\nThis is the error number: %d\n", check_er); - if (check_er == 1062){ - memset(query, 0, sizeof(char)*strlen(query)); - query = update_value(db, keys[i], key_lens[i], data[i], data_lens[i], table_name, x->msqkt); - //printf("\nThis is the query: \n%s\n", query); - - if (mysql_real_query(db, query, sizeof(char)*strlen(query))) { - //printf("This is the query: %s\n", query); - mlog(MDHIM_SERVER_CRIT, "Error updating key/value in mysql\n"); - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - //else printf("Sucessfully updated key/value in mdhim\n"); - } - else { - mlog(MDHIM_SERVER_CRIT, "Error putting key/value in mysql\n"); - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - } - - memset(query, 0, sizeof(query)); - } - - //Report timing - gettimeofday(&end, NULL); - mlog(MDHIM_SERVER_DBG, "Took: %d seconds to put %d records", - (int) (end.tv_sec - start.tv_sec), num_records); - return MDHIM_SUCCESS; -} - -///////////////////////////////////////////////////////////////////////////////////////// - - -/** - * mdhim_mysql_get - * Gets a value, given a key, from the data store - * - * @param dbh in pointer to the mysql struct which points to the handle - * @param key in void * to the key to retrieve the value of - * @param key_len in length of the key - * @param data out void * to the value of the key - * @param data_len out pointer to length of the value data - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_mysql_get(void *dbh, void *key, int key_len, void **data, int32_t *data_len){ - MYSQL_RES *data_res; - int ret = MDHIM_SUCCESS; - char get_value[MYSQL_BUFFER+key_len]; - MYSQL_ROW row; - void *msl_data; - char *table_name; - struct MDI *x = (struct MDI *)(dbh); - MYSQL *db = x->msqdb; - char *key_copy; - table_name = x->table; - - if (db == NULL) - { - fprintf(stderr, "%s\n", mysql_error(db)); - goto error; - } - - *data = NULL; - if (x->msqkt == MDHIM_STRING_KEY || - x->msqkt == MDHIM_BYTE_KEY) { - key_copy = sb_key_copy(db, key, key_len); - } - -//Create statement to go through and get the value based upon the key - - switch(x->msqkt){ - case MDHIM_STRING_KEY: - snprintf(get_value, sizeof(char)*(MYSQL_BUFFER+ key_len), "Select Value FROM %s WHERE Id = '%s'",table_name, key_copy); - free(key_copy); - break; - case MDHIM_FLOAT_KEY: - snprintf(get_value, sizeof(char)*MYSQL_BUFFER, "Select Value FROM %s WHERE Id = %f",table_name, *((float*)key)); - break; - case MDHIM_DOUBLE_KEY: - snprintf(get_value, sizeof(char)*MYSQL_BUFFER, "Select Value FROM %s WHERE Id = %lf",table_name, *((double*)key)); - break; - case MDHIM_INT_KEY: - snprintf(get_value, sizeof(char)*MYSQL_BUFFER, "Select Value FROM %s WHERE Id = %d",table_name, *((int*)key)); - break; - case MDHIM_LONG_INT_KEY: - snprintf(get_value, sizeof(char)*MYSQL_BUFFER, "Select Value FROM %s WHERE Id = %ld",table_name, *((long*)key)); - break; - case MDHIM_BYTE_KEY: - snprintf(get_value, sizeof(char)*(MYSQL_BUFFER+ key_len), "Select Value FROM %s WHERE Id = '%s'",table_name, key_copy); - free(key_copy); - break; - } -//Query and get results if no resuls get an error or else get the value - //printf("\nThis is the query: \n%s\n", get_value); - if (mysql_query(db,get_value)) { - if(x->msqht !=MYSQLDB_STAT_HANDLE) { - mlog(MDHIM_SERVER_CRIT, "Error getting value in mysql"); - printf("This is the error, get_value failed.\n"); - goto error; - } - } - data_res = mysql_store_result(db); - if (data_res->row_count == 0){ - mlog(MDHIM_SERVER_CRIT, "No row data selected"); - printf("This is the error, store row has nothing.\nHEre is query:%s\n", get_value); - goto error; - } - - row = mysql_fetch_row(data_res); - unsigned long *rl = mysql_fetch_lengths(data_res); - *data_len = *rl; - *data = malloc(*data_len+1); - msl_data = row[0]; - //printf("\nThis is the row : \n%s\n", (char*)row[0]); - if (!memcpy(*data, msl_data, *data_len)) { - mlog(MDHIM_SERVER_CRIT, "Error failed memory copy"); - printf("This is the error, get_value failed\n"); - goto error; - -} - mysql_free_result(data_res); - return ret; - -error: - *data=NULL; - *data_len = 0; - return MDHIM_DB_ERROR; -} - -///////////////////////////////////////////////////////////////////////////////////////// - -/** - * mdhim_mysql_del - * delete the given key - * - * @param dbh in pointer to the mysql struct which points to the handle - * @param key in void * for the key to delete - * @param key_len in int for the length of the key - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_mysql_del(void *dbh, void *key, int key_len) { - - struct MDI *x = (struct MDI *)(dbh); - MYSQL *db = x->msqdb; - if (db == NULL) - { - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - char key_delete[MYSQL_BUFFER+key_len]; - //Delete the Key - char *table_name = x->table; - char *key_copy; - - - if (x->msqkt == MDHIM_STRING_KEY || - x->msqkt == MDHIM_BYTE_KEY) { - key_copy = sb_key_copy(db, key, key_len); - } - - switch(x->msqkt){ - case MDHIM_STRING_KEY: - snprintf(key_delete, sizeof(char)*(MYSQL_BUFFER+key_len),"Delete FROM %s WHERE Id = '%s'",table_name, (char*)key_copy); - break; - case MDHIM_FLOAT_KEY: - snprintf(key_delete, sizeof(char)*(MYSQL_BUFFER+key_len),"Delete FROM %s WHERE Id = %f",table_name, *((float*)key)); - break; - case MDHIM_DOUBLE_KEY: - snprintf(key_delete, sizeof(char)*(MYSQL_BUFFER+key_len),"Delete FROM %s WHERE Id = %lf",table_name, *((double*)key)); - break; - case MDHIM_INT_KEY: - snprintf(key_delete, sizeof(char)*(MYSQL_BUFFER+key_len),"Delete FROM %s WHERE Id = %d",table_name, *((int*)key)); - break; - case MDHIM_LONG_INT_KEY: - snprintf(key_delete, sizeof(char)*(MYSQL_BUFFER+key_len),"Delete FROM %s WHERE Id = %ld",table_name, *((long*)key)); - break; - case MDHIM_BYTE_KEY: - snprintf(key_delete, sizeof(char)*(MYSQL_BUFFER+key_len), "Delete FROM %s WHERE Id = '%s'",table_name, (char*)key_copy); - break; - } - if (mysql_query(db,key_delete)) { - mlog(MDHIM_SERVER_CRIT, "Error deleting key in mysql"); - return MDHIM_DB_ERROR; - } - //Reset error variable - return MDHIM_SUCCESS; -} - - -/** - * mdhim_mysql_close - * Closes the data store - * - * @param dbh in pointer to the mysql struct which points to the handle - * @param dbs in pointer to the statistics mysql struct which points to the statistics handle - * @param mstore_opts in additional options for the data store layer - * - * @return MDHIM_SUCCESS on success or MDHIM_DB_ERROR on failure - */ -int mdhim_mysql_close(void *dbh, void *dbs) { - - struct MDI *x = (struct MDI *)(dbh); - struct MDI *y = (struct MDI *)(dbs); - MYSQL *db = x->msqdb; - MYSQL *sdb = y->msqdb; -// if(mysql_query(db, "Drop table maindb.mdhim")){ -// mlog(MDHIM_SERVER_CRIT, "Error deleting key in mysql"); -// } -// if (mysql_query(sdb, "Drop table statsdb.mdhim")){ -// mlog(MDHIM_SERVER_CRIT, "Error deleting key in mysql"); -// } - mysql_close(db); - mysql_close(sdb); - free(x); - free(y); - return MDHIM_SUCCESS; -} - -///////////////////////////////////////////////////////////////////////////////////////// - - -/** - * mdhim_mysql_get_next - * Gets the next key/value from the data store - * - * @param dbh in pointer to the mysql struct which points to the handle - * @param key out void ** to the key that we get - * @param key_len out int * to the length of the key - * @param data out void ** to the value belonging to the key - * @param data_len out int * to the length of the value data - * @param mstore_opts in additional cursor options for the data store layer - * - */ -int mdhim_mysql_get_next(void *dbh, void **key, int *key_len, - void **data, int32_t *data_len) { - struct MDI *x = (struct MDI *)(dbh); - MYSQL *db = x->msqdb; - if (db == NULL) - { - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - int ret = MDHIM_SUCCESS; - void *old_key, *msl_key, *msl_data; - struct timeval start, end; - int key_lg; - if (!key_len){ key_lg = 0; *key=NULL;} - else key_lg = *key_len; - - char get_next[MYSQL_BUFFER+key_lg]; - MYSQL_RES *key_result; - MYSQL_ROW key_row; - char *table_name; - table_name = x->table; - - gettimeofday(&start, NULL); - old_key = *key; - char *key_copy; - if (old_key) key_copy = sb_key_copy(db, (char*)old_key, *key_len); - if (key_len) { - *key = NULL; - *key_len = 0; - } - else{ - *key = NULL; - key_len = &key_lg; - } - *data = NULL; - *data_len = 0; - - //Get the Key from the tables and if there was no old key, use the first one. - if (!old_key){ - snprintf(get_next, sizeof(char)*(MYSQL_BUFFER+*key_len), "Select * From %s where Id = (Select min(Id) from %s)", table_name, table_name); - if(mysql_query(db, get_next)) { - mlog(MDHIM_SERVER_DBG2, "Could not get the next key/value"); - goto error; - } - - } else { - switch(x->msqkt){ - case MDHIM_STRING_KEY: - snprintf(get_next, sizeof(char)*(MYSQL_BUFFER+*key_len),"Select * From %s where Id = (Select min(Id) from %s where Id >'%s')", table_name,table_name, key_copy); - free(key_copy); - break; - case MDHIM_FLOAT_KEY: - snprintf(get_next, sizeof(char)*(MYSQL_BUFFER+*key_len), "Select * From %s where Id = (Select min(Id) from %s where Id >%f)", table_name,table_name, *((float*)old_key)); - break; - case MDHIM_DOUBLE_KEY: - snprintf(get_next, sizeof(char)*(MYSQL_BUFFER+*key_len), "Select * From %s where Id = (Select min(Id) from %s where Id >%lf)", table_name,table_name, *((double*)old_key)); - break; - case MDHIM_INT_KEY: - snprintf(get_next, sizeof(char)*(MYSQL_BUFFER+*key_len), "Select * From %s where Id = (Select min(Id) from %s where Id >%d)", table_name,table_name, *((int*)old_key)); - break; - case MDHIM_LONG_INT_KEY: - snprintf(get_next, sizeof(char)*(MYSQL_BUFFER+*key_len), "Select * From %s where Id = (Select min(Id) from %s where Id >%ld)", table_name,table_name, *((long*)old_key)); - break; - case MDHIM_BYTE_KEY: - snprintf(get_next, sizeof(char)*(MYSQL_BUFFER+*key_len), "Select * From %s where Id = (Select min(Id) from %s where Id > '%s')", table_name,table_name, key_copy); - free(key_copy); - break; - } - //snprintf(get_next, "Select * From %s where Id = (Select min(Id) from %s where Id >%d)", table_name, table_name, *(int*)old_key); - if(mysql_query(db, get_next)) { - mlog(MDHIM_SERVER_DBG2, "Could not get the next key/value"); - goto error; - } - } - - - //STore the result, you MUST use mysql_store_result because of it being parallel - key_result = mysql_store_result(db); - - if (key_result->row_count == 0) { - mlog(MDHIM_SERVER_DBG2, "Could not get mysql result"); - goto error; - } - key_row = mysql_fetch_row(key_result); - unsigned long *dl = mysql_fetch_lengths(key_result); - int r_size; - msl_key = str_to_key(key_row, x->msqkt, &r_size); - *key_len = r_size; - *data_len = dl[1]; - msl_data = key_row[1]; - - //Allocate data and key to mdhim program - if (key_row && *key_row) { - *key = malloc(*key_len+1); - memset(*key, 0, *key_len+1); - memcpy(*key, msl_key, *key_len); - *data = malloc(*data_len+1); - memset(*data, 0, *data_len+1); - memcpy(*data, msl_data, *data_len+1); - //printf("\nCopied here\n"); - - } else { - *key = NULL; - *key_len = 0; - *data = NULL; - *data_len = 0; - printf("\nNot Copied here\n"); - } - gettimeofday(&end, NULL); - mlog(MDHIM_SERVER_DBG, "Took: %d seconds to get the next record", - (int) (end.tv_sec - start.tv_sec)); - - - return ret; - -error: - *key = NULL; - *key_len = 0; - *data = NULL; - *data_len = 0; - return MDHIM_DB_ERROR; - -} - - -///////////////////////////////////////////////////////////////////////////////////////// -/** - * mdhim_mysql_get_prev - * Gets the previous key/value from the data store - * - * @param dbh in pointer to the unqlite db handle - * @param key out void ** to the key that we get - * @param key_len out int * to the length of the key - * @param data out void ** to the value belonging to the key - * @param data_len out int * to the length of the value data - * @param mstore_opts in additional cursor options for the data store layer - * - */ - -int mdhim_mysql_get_prev(void *dbh, void **key, int *key_len, - void **data, int32_t *data_len){ - struct MDI *x = (struct MDI *)(dbh); - MYSQL *db = x->msqdb; - if (db == NULL) - { - fprintf(stderr, "%s\n", mysql_error(db)); - return MDHIM_DB_ERROR; - } - int ret = MDHIM_SUCCESS; - void *old_key; - struct timeval start, end; - int key_lg; - if (!key_len){ key_lg = 0; *key = NULL;} - else key_lg = *key_len; - - char get_prev[MYSQL_BUFFER+key_lg]; - MYSQL_RES *key_result; - MYSQL_ROW key_row; - void *msl_data; - void *msl_key; - char *table_name; - //Init the data to return - gettimeofday(&start, NULL); - old_key = *key; - char *key_copy; - if (x->msqkt == MDHIM_STRING_KEY || - x->msqkt == MDHIM_BYTE_KEY) { - if (old_key) key_copy = sb_key_copy(db, (char*)old_key, *key_len); - } - //Start with Keys/data being null - if (key_len) { - *key = NULL; - *key_len = 0; - } - else{ - *key = NULL; - key_len = &key_lg; - } - *data = NULL; - *data_len = 0; - - table_name = x->table; - - //Get the Key/Value from the tables and if there was no old key, use the last one. - - if (!old_key){ - snprintf(get_prev, sizeof(char)*(MYSQL_BUFFER+*key_len),"Select * from %s where Id = (Select max(Id) From %s)", table_name,table_name); - if(mysql_query(db, get_prev)) { - mlog(MDHIM_SERVER_DBG2, "Could not get the previous key/value"); - goto error; - } - - } else { - - switch(x->msqkt){ - case MDHIM_STRING_KEY: - snprintf(get_prev, sizeof(char)*(MYSQL_BUFFER+*key_len), "Select * From %s where Id = (Select max(Id) from %s where Id < '%s')", table_name,table_name, key_copy); - free(key_copy); - break; - case MDHIM_FLOAT_KEY: - snprintf(get_prev, sizeof(char)*(MYSQL_BUFFER+*key_len),"Select * From %s where Id = (Select max(Id) from %s where Id <%f)", table_name,table_name, *((float*)old_key)); - break; - case MDHIM_DOUBLE_KEY: - snprintf(get_prev, sizeof(char)*(MYSQL_BUFFER+*key_len),"Select * From %s where Id = (Select max(Id) from %s where Id <%lf)", table_name,table_name, *((double*)old_key)); - break; - case MDHIM_INT_KEY: - snprintf(get_prev, sizeof(char)*(MYSQL_BUFFER+*key_len),"Select * From %s where Id = (Select max(Id) from %s where Id <%d)", table_name,table_name, *((int*)old_key)); - break; - case MDHIM_LONG_INT_KEY: - snprintf(get_prev, sizeof(char)*(MYSQL_BUFFER+*key_len),"Select * From %s where Id = (Select max(Id) from %s where Id <%ld)", table_name,table_name, *((long*)old_key)); - break; - case MDHIM_BYTE_KEY: - snprintf(get_prev, sizeof(char)*(MYSQL_BUFFER+*key_len),"Select * From %s where Id = (Select max(Id) from %s where Id < '%s')", table_name,table_name, key_copy); - free(key_copy); - break; - } - - - //Query the database - if(mysql_query(db, get_prev)) { - mlog(MDHIM_SERVER_DBG2, "Could not get the previous key/value"); - goto error; - } - } - //STore the result, you MUST use mysql_store_result because of it being parallel - key_result = mysql_store_result(db); - - if (key_result->row_count == 0) { - mlog(MDHIM_SERVER_DBG2, "Could not get mysql result"); - goto error; - } - //Fetch row and get data from database - key_row = mysql_fetch_row(key_result); - unsigned long *dl = mysql_fetch_lengths(key_result); - int r_size; - msl_key = str_to_key(key_row, x->msqkt, &r_size); - *key_len = r_size; - *data_len = dl[1]; - msl_data = key_row[1]; - - //Allocate data and key to mdhim program - if (key_row && *key_row) { - *key = malloc(*key_len+1); - memset(*key, 0, *key_len+1); - memcpy(*key, msl_key, *key_len); - *data = malloc(*data_len); - memset(*data, 0, *data_len); - memcpy(*data, msl_data, *data_len); - //printf("\nCopied here\n"); - - } else { - *key = NULL; - *key_len = 0; - *data = NULL; - *data_len = 0; - } - - mysql_free_result(key_result); - //End timing - gettimeofday(&end, NULL); - mlog(MDHIM_SERVER_DBG, "Took: %d seconds to get the prev record", - (int) (end.tv_sec - start.tv_sec)); - return ret; -error: - *key = NULL; - *key_len = 0; - *data = NULL; - *data_len = 0; - return MDHIM_DB_ERROR; -} - - -int mdhim_mysql_commit(void *dbh) { - return MDHIM_SUCCESS; -} diff --git a/meta/src/ds_mysql.h b/meta/src/ds_mysql.h deleted file mode 100644 index 15d87c441..000000000 --- a/meta/src/ds_mysql.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include "mdhim.h" -#include "data_store.h" - -//Struct for MYSQL Handling -//MDI = Mysql Database Info -//Too lazy to Edit name -struct MDI { - MYSQL *msqdb; //Database connection - int msqht; //Handle's specfication, whether it's the original or stat - int msqkt; - char *host; - char *user; - char *pswd; - char *table; - char *database; -}; - -int mdhim_mysql_open(void **dbh, void **dbs, char *path, int flags, int key_type, struct mdhim_options_t *opts); -int mdhim_mysql_put(void *dbh, void *key, int key_len, void *data, int32_t data_len); -int mdhim_mysql_get(void *dbh, void *key, int key_len, void **data, int32_t *data_len); -int mdhim_mysql_get_next(void *dbh, void **key, int *key_len, - void **data, int32_t *data_len); -int mdhim_mysql_get_prev(void *dbh, void **key, int *key_len, - void **data, int32_t *data_len); -int mdhim_mysql_close(void *dbh, void *dbs); -int mdhim_mysql_del(void *dbh, void *key, int key_len); -int mdhim_mysql_commit(void *dbh); -int mdhim_mysql_batch_put(void *dbh, void **key, int32_t *key_lens, - void **data, int32_t *data_lens, int num_record); diff --git a/meta/src/indexes.c b/meta/src/indexes.c deleted file mode 100644 index 0721a3cf8..000000000 --- a/meta/src/indexes.c +++ /dev/null @@ -1,1776 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "mdhim.h" -#include "indexes.h" - -struct timeval hashopstart, hashopend; -double hashoptime=0; - -struct timeval cmpstart, cmpend; -double cmptime=0; - -struct timeval metastart, metaend; -double metatime=0; - -struct timeval sleepstart, sleepend; -double sleeptime=0; -/** - * to_lower - * convert strings to all lower case - * - */ -void to_lower(size_t in_length, char *in, char *out) { - memset(out, 0, in_length); - - // Make sure that the name passed is lowercase - int i=0; - for(i=0; i < in_length; i++) { - out[i] = tolower(in[i]); - } -} - -/** - * im_range_server - * checks if I'm a range server - * - * @param md Pointer to the main MDHIM structure - * @return 0 if false, 1 if true - */ - -int im_range_server(struct index_t *index) { - if (index->myinfo.rangesrv_num > 0) { - return 1; - } - - return 0; -} - -/** - * open_manifest - * Opens the manifest file - * - * @param md Pointer to the main MDHIM structure - * @param flags Flags to open the file with - */ -int open_manifest(struct mdhim_t *md, struct index_t *index, int flags) { - int fd; - char path[PATH_MAX]; - - sprintf(path, "%s%d_%d_%d", md->db_opts->manifest_path, index->type, - index->id, md->mdhim_rank); - fd = open(path, flags, 00600); - if (fd < 0) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Error opening manifest file", - md->mdhim_rank); - } - - return fd; -} - -/** - * write_manifest - * Writes out the manifest file - * - * @param md Pointer to the main MDHIM structure - */ -void write_manifest(struct mdhim_t *md, struct index_t *index) { - index_manifest_t manifest; - int fd; - int ret; - - //Range server with range server number 1, for the primary index, is in charge of the manifest - if (index->type != LOCAL_INDEX && - (index->myinfo.rangesrv_num != 1)) { - return; - } - - if ((fd = open_manifest(md, index, O_RDWR | O_CREAT | O_TRUNC)) < 0) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error opening manifest file", - md->mdhim_rank); - return; - } - - //Populate the manifest structure - manifest.num_rangesrvs = index->num_rangesrvs; - manifest.key_type = index->key_type; - manifest.db_type = index->db_type; - manifest.rangesrv_factor = index->range_server_factor; - manifest.slice_size = index->mdhim_max_recs_per_slice; - manifest.num_nodes = md->mdhim_comm_size; - - if ((ret = write(fd, &manifest, sizeof(manifest))) < 0) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error writing manifest file", - md->mdhim_rank); - } - - close(fd); -} - -/** - * read_manifest - * Reads in and validates the manifest file - * - * @param md Pointer to the main MDHIM structure - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int read_manifest(struct mdhim_t *md, struct index_t *index) { - int fd; - int ret; - index_manifest_t manifest; - - if ((fd = open_manifest(md, index, O_RDWR)) < 0) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Couldn't open manifest file", - md->mdhim_rank); - return MDHIM_SUCCESS; - } - - if ((ret = read(fd, &manifest, sizeof(manifest))) < 0) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Couldn't read manifest file", - md->mdhim_rank); - return MDHIM_ERROR; - } - - ret = MDHIM_SUCCESS; - mlog(MDHIM_SERVER_DBG, "Rank: %d - Manifest contents - \nnum_rangesrvs: %d, key_type: %d, " - "db_type: %d, rs_factor: %u, slice_size: %lu, num_nodes: %d", - md->mdhim_rank, manifest.num_rangesrvs, manifest.key_type, manifest.db_type, - manifest.rangesrv_factor, manifest.slice_size, manifest.num_nodes); - - //Check that the manifest and the current config match - if (manifest.key_type != index->key_type) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - The key type in the manifest file" - " doesn't match the current key type", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - if (manifest.db_type != index->db_type) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - The database type in the manifest file" - " doesn't match the current database type", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - - if (manifest.rangesrv_factor != index->range_server_factor) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - The range server factor in the manifest file" - " doesn't match the current range server factor", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - if (manifest.slice_size != index->mdhim_max_recs_per_slice) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - The slice size in the manifest file" - " doesn't match the current slice size", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - if (manifest.num_nodes != md->mdhim_comm_size) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - The number of nodes in this MDHIM instance" - " doesn't match the number used previously", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - - close(fd); - return ret; -} - -/** - * update_stat - * Adds or updates the given stat to the hash table - * - * @param md pointer to the main MDHIM structure - * @param key pointer to the key we are examining - * @param key_len the key's length - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int update_stat(struct mdhim_t *md, struct index_t *index, void *key, uint32_t key_len) { - int slice_num; - void *val1, *val2; - int float_type = 0; - struct mdhim_stat *os, *stat; - - //Acquire the lock to update the stats - gettimeofday(&sleepstart, NULL); - while (pthread_rwlock_wrlock(index->mdhim_store->mdhim_store_stats_lock) == EBUSY) { - usleep(10); - } - gettimeofday(&sleepend, NULL); - sleeptime += 1000000*(sleepend.tv_sec-sleepstart.tv_sec)+sleepend.tv_usec-sleepstart.tv_usec; - - gettimeofday(&metastart, NULL); - if ((float_type = is_float_key(index->key_type)) == 1) { - val1 = (void *) malloc(sizeof(long)); - val2 = (void *) malloc(sizeof(long)); - /* printf("is float key\n"); - fflush(stdout); - */ - } else if (index->key_type != MDHIM_UNIFYFS_KEY){ - val1 = (void *) malloc(sizeof(uint64_t)); - val2 = (void *) malloc(sizeof(uint64_t)); - /* printf("is not unifyfs key\n"); - fflush(stdout); - */ - } - else { - val1 = NULL; - val2 = NULL; - /* - printf("is unifyfs key\n"); - fflush(stdout); - */ - } - /* - printf("key_type is %d\n", index->key_type); - fflush(stdout); - */ - if (index->key_type == MDHIM_STRING_KEY) { - *(long double *)val1 = get_str_num(key, key_len); - *(long double *)val2 = *(long double *)val1; - } else if (index->key_type == MDHIM_FLOAT_KEY) { - *(long double *)val1 = *(float *) key; - *(long double *)val2 = *(float *) key; - } else if (index->key_type == MDHIM_DOUBLE_KEY) { - *(long double *)val1 = *(double *) key; - *(long double *)val2 = *(double *) key; - } else if (index->key_type == MDHIM_INT_KEY) { - *(uint64_t *)val1 = *(uint32_t *) key; - *(uint64_t *)val2 = *(uint32_t *) key; - } else if (index->key_type == MDHIM_LONG_INT_KEY) { - *(uint64_t *)val1 = *(uint64_t *) key; - *(uint64_t *)val2 = *(uint64_t *) key; - } else if (index->key_type == MDHIM_BYTE_KEY) { - *(unsigned long *)val1 = get_byte_num(key, key_len); - *(unsigned long *)val2 = *(unsigned long *)val1; - } else if (index->key_type == MDHIM_UNIFYFS_KEY) { - val1 = copy_unifyfs_key(key, key_len); - val2 = copy_unifyfs_key(key, key_len); - } - gettimeofday(&metaend, NULL); - metatime+=1000000*(metaend.tv_sec-metastart.tv_sec)+metaend.tv_usec-metastart.tv_usec; - - slice_num = get_slice_num(md, index, key, key_len); - gettimeofday(&hashopstart, NULL); - HASH_FIND_INT(index->mdhim_store->mdhim_store_stats, &slice_num, os); - gettimeofday(&hashopend, NULL); - - - // printf("val1 is %ld, val2 is %ld\n", *((long *)val1+1), *((long *)val2+1)); - stat = malloc(sizeof(struct mdhim_stat)); - stat->min = val1; - stat->max = val2; - stat->num = 1; - stat->key = slice_num; - stat->dirty = 1; - hashoptime += 1000000*(hashopend.tv_sec-hashopstart.tv_sec)+hashopend.tv_usec-hashopstart.tv_usec; -// printf("here min stat is %ld, max stat is %ld\n", *((long *)stat->min), *((long *)stat->max)); -// fflush(stdout); - - gettimeofday(&cmpstart, NULL); - if (index->key_type == MDHIM_UNIFYFS_KEY && os ) { - if (unifyfs_compare(os->min, val1) > 0) { - /* - printf("freeing %x, va1 addr is %x\n", os->min, val1); - fflush(stdout); - */ - free(os->min); - stat->min = val1; - } else { - stat->min = os->min; - free(val1); - } - - if (unifyfs_compare(os->max, val2) < 0) { - /* - printf("freeing %xb,bbb\n", os->max); - fflush(stdout); - */ - free(os->max); - stat->max = val2; - } else { - stat->max = os->max; - free(val2); - } - } - gettimeofday(&cmpend, NULL); - cmptime+=1000000*(cmpend.tv_sec-cmpstart.tv_sec)+cmpend.tv_usec-cmpstart.tv_usec; - - if (float_type && os) { -// printf("comparing min is %ld, val1 is %ld\n", *((long *)stat->min), *((long *)val1)); -// fflush(stdout); - if (*(unsigned long *)os->min > *(unsigned long *)val1) { - /* - printf("freeing %x 1\n", os->min); - fflush(stdout); - */ - free(os->min); - stat->min = val1; - } else { - /* - printf("freeing %x 1\n", val1); - fflush(stdout); - */ - free(val1); - stat->min = os->min; - } - - if (*(unsigned long *)os->max < *(unsigned long *)val2) { - /* - printf("freeing %x2\n", os->max); - fflush(stdout); - */ - free(os->max); - stat->max = val2; - } else { - /* - printf("freeing %x2\n", val2); - fflush(stdout); - */ - free(val2); - stat->max = os->max; - } - } - - if (!float_type && os && index->key_type != MDHIM_UNIFYFS_KEY) { - if (*(uint64_t *)os->min > *(uint64_t *)val1) { - /* - printf("freeing %x3\n", os->min); - fflush(stdout); - */ - free(os->min); - stat->min = val1; - } else { - /* - printf("freeing %x3\n", val1); - fflush(stdout); - */ - free(val1); - stat->min = os->min; - } - - if (*(uint64_t *)os->max < *(uint64_t *)val2) { - /* - printf("freeing %x4\n", os->max); - fflush(stdout); - */ - free(os->max); - stat->max = val2; - } else { - /* - printf("freeing %x4\n", val2); - fflush(stdout); - */ - free(val2); - stat->max = os->max; - } - } - - if (!os) { - gettimeofday(&hashopstart, NULL); - HASH_ADD_INT(index->mdhim_store->mdhim_store_stats, key, stat); - gettimeofday(&hashopend, NULL); - hashoptime += 1000000*(hashopend.tv_sec-hashopstart.tv_sec)+hashopend.tv_usec-hashopstart.tv_usec; - } else { - stat->num = os->num + 1; - - //Replace the existing stat - gettimeofday(&hashopstart, NULL); - HASH_REPLACE_INT(index->mdhim_store->mdhim_store_stats, key, stat, os); - free(os); - gettimeofday(&hashopend, NULL); - hashoptime += 1000000*(hashopend.tv_sec-hashopstart.tv_sec)+hashopend.tv_usec-hashopstart.tv_usec; - } - - //Release the stats lock - gettimeofday(&sleepstart, NULL); - pthread_rwlock_unlock(index->mdhim_store->mdhim_store_stats_lock); - gettimeofday(&sleepend, NULL); - sleeptime +=1000000*(sleepend.tv_sec-sleepstart.tv_sec)+sleepend.tv_usec-sleepstart.tv_usec; - return MDHIM_SUCCESS; -} - -/** - * load_stats - * Loads the statistics from the database - * - * @param md Pointer to the main MDHIM structure - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int load_stats(struct mdhim_t *md, struct index_t *index) { - void **val; - int *val_len, *key_len; - int **slice; - int *old_slice; - struct mdhim_stat *stat; - int float_type = 0; - void *min, *max; - int done = 0; - - float_type = is_float_key(index->key_type); - slice = malloc(sizeof(int *)); - *slice = NULL; - key_len = malloc(sizeof(int)); - *key_len = sizeof(int); - val = malloc(sizeof(struct mdhim_db_stat *)); - val_len = malloc(sizeof(int)); - old_slice = NULL; - index->mdhim_store->mdhim_store_stats = NULL; - while (!done) { - //Check the db for the key/value - *val = NULL; - *val_len = 0; - index->mdhim_store->get_next(index->mdhim_store->db_stats, - (void **) slice, key_len, (void **) val, - val_len); - - //Add the stat to the hash table - the value is 0 if the key was not in the db - if (!*val || !*val_len) { - done = 1; - continue; - } - - if (old_slice) { - free(old_slice); - old_slice = NULL; - } - - mlog(MDHIM_SERVER_DBG, "Rank: %d - Loaded stat for slice: %d with " - "imin: %lu and imax: %lu, dmin: %Lf, dmax: %Lf, and num: %lu", - md->mdhim_rank, **slice, (*(struct mdhim_db_stat **)val)->imin, - (*(struct mdhim_db_stat **)val)->imax, (*(struct mdhim_db_stat **)val)->dmin, - (*(struct mdhim_db_stat **)val)->dmax, (*(struct mdhim_db_stat **)val)->num); - - stat = malloc(sizeof(struct mdhim_stat)); - if (float_type) { - min = (void *) malloc(sizeof(long double)); - max = (void *) malloc(sizeof(long double)); - *(long double *)min = (*(struct mdhim_db_stat **)val)->dmin; - *(long double *)max = (*(struct mdhim_db_stat **)val)->dmax; - } else { - min = (void *) malloc(sizeof(uint64_t)); - max = (void *) malloc(sizeof(uint64_t)); - *(uint64_t *)min = (*(struct mdhim_db_stat **)val)->imin; - *(uint64_t *)max = (*(struct mdhim_db_stat **)val)->imax; - } - - stat->min = min; - stat->max = max; - stat->num = (*(struct mdhim_db_stat **)val)->num; - stat->key = **slice; - stat->dirty = 0; - old_slice = *slice; - HASH_ADD_INT(index->mdhim_store->mdhim_store_stats, key, stat); - free(*val); - } - - if (old_slice) { - free(old_slice); - } - free(val); - free(val_len); - free(key_len); - free(*slice); - free(slice); - return MDHIM_SUCCESS; -} - -/** - * write_stats - * Writes the statistics stored in a hash table to the database - * This is done on mdhim_close - * - * @param md Pointer to the main MDHIM structure - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int write_stats(struct mdhim_t *md, struct index_t *bi) { - struct mdhim_stat *stat, *tmp; - struct mdhim_db_stat *dbstat; - int float_type = 0; - - float_type = is_float_key(bi->key_type); - - //Iterate through the stat hash entries - HASH_ITER(hh, bi->mdhim_store->mdhim_store_stats, stat, tmp) { - if (!stat) { - continue; - } - - if (!stat->dirty) { - goto free_stat; - } - - dbstat = malloc(sizeof(struct mdhim_db_stat)); - if (float_type) { - dbstat->dmax = *(long double *)stat->max; - dbstat->dmin = *(long double *)stat->min; - dbstat->imax = 0; - dbstat->imin = 0; - } else { - dbstat->imax = *(uint64_t *)stat->max; - dbstat->imin = *(uint64_t *)stat->min; - dbstat->dmax = 0; - dbstat->dmin = 0; - } - - dbstat->slice = stat->key; - dbstat->num = stat->num; - //Write the key to the database - bi->mdhim_store->put(bi->mdhim_store->db_stats, - &dbstat->slice, sizeof(int), dbstat, - sizeof(struct mdhim_db_stat)); - //Delete and free hash entry - free(dbstat); - - free_stat: - HASH_DEL(bi->mdhim_store->mdhim_store_stats, stat); - free(stat->max); - free(stat->min); - free(stat); - } - - return MDHIM_SUCCESS; -} - -/** - * open_db_store - * Opens the database for the given idenx - * - * @param md Pointer to the main MDHIM structure - * @param index Pointer to the index - * @return the initialized data store or NULL on error - */ - -int open_db_store(struct mdhim_t *md, struct index_t *index) { - char filename[PATH_MAX] = {'\0'}; - int flags = MDHIM_CREATE; - int path_num; - int ret; - - //Database filename is dependent on ranges. This needs to be configurable and take a prefix - if (!md->db_opts->db_paths) { - sprintf(filename, "%s/%s-%d-%d", md->db_opts->db_path, - md->db_opts->db_name, index->id, md->mdhim_rank); - } else { - path_num = index->myinfo.rangesrv_num/((double) index->num_rangesrvs/(double) md->db_opts->num_paths); - path_num = path_num >= md->db_opts->num_paths ? md->db_opts->num_paths - 1 : path_num; - if (path_num < 0) { - sprintf(filename, "%s/%s-%d-%d", md->db_opts->db_path, - md->db_opts->db_name, - index->id, md->mdhim_rank); - } else { - sprintf(filename, "%s/%s-%d-%d", - md->db_opts->db_paths[path_num], - md->db_opts->db_name, index->id, - md->mdhim_rank); - } - } - - //Initialize data store - index->mdhim_store = mdhim_db_init(index->db_type); - if (!index->mdhim_store) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while initializing data store with file: %s", - md->mdhim_rank, - filename); - return MDHIM_ERROR; - } - - //Open the main database and the stats database - if ((ret = index->mdhim_store->open(&index->mdhim_store->db_handle, - &index->mdhim_store->db_stats, - filename, flags, index->key_type, md->db_opts)) != MDHIM_SUCCESS){ - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while opening database", - md->mdhim_rank); - return MDHIM_ERROR; - } - - //Load the stats from the database - if ((ret = load_stats(md, index)) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while loading stats", - md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * get_num_range_servers - * Gets the number of range servers for an index - * - * @param md main MDHIM struct - * @param rindex pointer to a index_t struct - * @return MDHIM_ERROR on error, otherwise the number of range servers - */ -uint32_t get_num_range_servers(struct mdhim_t *md, struct index_t *rindex) { - int size; - uint32_t num_servers = 0; - int i = 0; - int ret; - - if ((ret = MPI_Comm_size(md->mdhim_comm, &size)) != MPI_SUCCESS) { - mlog(MPI_EMERG, "Rank: %d - Couldn't get the size of the comm in get_num_range_servers", - md->mdhim_rank); - return MDHIM_ERROR; - } - - /* Get the number of range servers */ - if (size - 1 < rindex->range_server_factor) { - //The size of the communicator is less than the RANGE_SERVER_FACTOR - return 1; - } - - //Figure out the number of range servers, details on the algorithm are in is_range_server - for (i = 0; i < size; i++) { - if (i % rindex->range_server_factor == 0) { - num_servers++; - } - } - - return num_servers; -} - -/** - * create_local_index - * Creates an index on the primary index that is handled by the same servers as the primary index. - * This index does not have global ordering. Ordering is local to the range server only. - * Retrieving a key from this index will require querying multiple range servers simultaneously. - * - * @param md main MDHIM struct - * @return MDHIM_ERROR on error, otherwise the index identifier - */ -struct index_t *create_local_index(struct mdhim_t *md, int db_type, int key_type, char *index_name) { - struct index_t *li; - struct index_t *check = NULL; - uint32_t rangesrv_num; - int ret; - - MPI_Barrier(md->mdhim_client_comm); - - //Check that the key type makes sense - if (key_type < MDHIM_INT_KEY || key_type > MDHIM_UNIFYFS_KEY) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM - Invalid key type specified"); - return NULL; - } - - //Acquire the lock to update indexes - while (pthread_rwlock_wrlock(md->indexes_lock) == EBUSY) { - usleep(10); - } - - //Create a new global_index to hold our index entry - li = malloc(sizeof(struct index_t)); - if (!li) { - goto done; - } - - //Initialize the new index struct - memset(li, 0, sizeof(struct index_t)); - li->id = HASH_COUNT(md->indexes); - li->range_server_factor = md->primary_index->range_server_factor; - li->mdhim_max_recs_per_slice = MDHIM_MAX_SLICES; - li->type = LOCAL_INDEX; - li->key_type = key_type; - li->db_type = db_type; - li->myinfo.rangesrv_num = 0; - li->myinfo.rank = md->mdhim_rank; - li->primary_id = md->primary_index->id; - li->stats = NULL; - - if (index_name != NULL) { - size_t name_len = strlen(index_name)+1; - char *lower_name = malloc(name_len); - - to_lower(name_len, index_name, lower_name); - - // check if the name has been used - HASH_FIND_STR(md->indexes, lower_name, check); - if(check) { - goto done; - } - - li->name = malloc(name_len); - memcpy(li->name, lower_name, name_len); - - } else { - char buf[50]; - sprintf(buf, "local_%d", li->id); - li->name = malloc(sizeof(char)*strlen(buf)); - strcpy(li->name, buf); - } - - - //Figure out how many range servers we could have based on the range server factor - li->num_rangesrvs = get_num_range_servers(md, li); - - //Get the range servers for this index - ret = get_rangesrvs(md, li); - if (ret != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Couldn't get the range server list", - md->mdhim_rank); - } - - //Add it to the hash table - HASH_ADD_INT(md->indexes, id, li); - HASH_ADD_KEYPTR( hh_name, md->indexes_by_name, li->name, strlen(li->name), li ); - - //Test if I'm a range server and get the range server number - if ((rangesrv_num = is_range_server(md, md->mdhim_rank, li)) == MDHIM_ERROR) { - goto done; - } - - if (rangesrv_num > 0) { - //Populate my range server info for this index - li->myinfo.rank = md->mdhim_rank; - li->myinfo.rangesrv_num = rangesrv_num; - } - - //If not a range server, our work here is done - if (!rangesrv_num) { - goto done; - } - - //Read in the manifest file if the rangesrv_num is 1 for the primary index - if (rangesrv_num == 1 && - (ret = read_manifest(md, li)) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error: There was a problem reading or validating the manifest file", - md->mdhim_rank); - MPI_Abort(md->mdhim_comm, 0); - } - - //Open the data store - ret = open_db_store(md, (struct index_t *) li); - if (ret != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error opening data store for index: %d", - md->mdhim_rank, li->id); - MPI_Abort(md->mdhim_comm, 0); - } - - //Initialize the range server threads if they haven't been already - if (!md->mdhim_rs) { - ret = range_server_init(md); - } - -done: - //Release the indexes lock - if (pthread_rwlock_unlock(md->indexes_lock) != 0) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error unlocking the indexes_lock", - md->mdhim_rank); - return NULL; - } - - if (!li) { - return NULL; - } - - // The index name has already been taken - if(check) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error creating index: Name %s, already exists", md->mdhim_rank, index_name); - return NULL; - } - - return li; -} - -/** - * create_global_index - * Collective call that creates a global index. - * A global index has global ordering. This means that range servers serve mutually exclusive keys - * and keys can be retrieved across servers in order. Retrieving a key will query only one range - * server. - * - * @param md main MDHIM struct - * @param server_factor used in calculating the number of range servers - * @param max_recs_per_slice the number of records per slice - * @return MDHIM_ERROR on error, otherwise the index identifier - */ - -struct index_t *create_global_index(struct mdhim_t *md, int server_factor, - uint64_t max_recs_per_slice, - int db_type, int key_type, char *index_name) { - struct index_t *gi; - struct index_t *check = NULL; - uint32_t rangesrv_num; - int ret; - - MPI_Barrier(md->mdhim_client_comm); - //Check that the key type makes sense - if (key_type < MDHIM_INT_KEY || key_type > MDHIM_UNIFYFS_KEY) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM - Invalid key type specified"); - return NULL; - } - - //Acquire the lock to update indexes - while (pthread_rwlock_wrlock(md->indexes_lock) == EBUSY) { - usleep(10); - } - - //Create a new global_index to hold our index entry - gi = malloc(sizeof(struct index_t)); - if (!gi) { - goto done; - } - - //Initialize the new index struct - memset(gi, 0, sizeof(struct index_t)); - gi->id = HASH_COUNT(md->indexes); - gi->range_server_factor = server_factor; - gi->mdhim_max_recs_per_slice = max_recs_per_slice; - gi->type = gi->id > 0 ? SECONDARY_INDEX : PRIMARY_INDEX; - gi->key_type = key_type; - gi->db_type = db_type; - gi->myinfo.rangesrv_num = 0; - gi->myinfo.rank = md->mdhim_rank; - gi->primary_id = gi->type == SECONDARY_INDEX ? md->primary_index->id : -1; - gi->stats = NULL; - - if (gi->id > 0) { - - if (index_name != NULL) { - - size_t name_len = strlen(index_name)+1; - char *lower_name = malloc(name_len); - - to_lower(name_len, index_name, lower_name); - - // check if the name has been used - HASH_FIND_STR(md->indexes, lower_name, check); - if(check) { - goto done; - } - - gi->name = malloc(name_len); - memcpy(gi->name, lower_name, name_len); - - } else { - char buf[50]; - sprintf(buf, "global_%d", gi->id); - gi->name = malloc(sizeof(char)*strlen(buf)); - strcpy(gi->name, buf); - } - - } else { - gi->name = malloc(sizeof(char)*10); - strcpy(gi->name, "primary"); - } - - //Figure out how many range servers we could have based on the range server factor - gi->num_rangesrvs = get_num_range_servers(md, gi); - //Get the range servers for this index - ret = get_rangesrvs(md, gi); - if (ret != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Couldn't get the range server list", - md->mdhim_rank); - } - - //Add it to the hash table - HASH_ADD_INT(md->indexes, id, gi); - HASH_ADD_KEYPTR( hh_name, md->indexes_by_name, gi->name, strlen(gi->name), gi ); - - //Test if I'm a range server and get the range server number - if ((rangesrv_num = is_range_server(md, md->mdhim_rank, gi)) == MDHIM_ERROR) { - goto done; - } - - if (rangesrv_num > 0) { - //Populate my range server info for this index - gi->myinfo.rank = md->mdhim_rank; - gi->myinfo.rangesrv_num = rangesrv_num; - } - - //Initialize the communicator for this index - if ((ret = index_init_comm(md, gi)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error creating the index communicator", - md->mdhim_rank); - goto done; - } - //If not a range server, our work here is done - if (!rangesrv_num) { - goto done; - } - - //Read in the manifest file if the rangesrv_num is 1 for the primary index - if (rangesrv_num == 1 && - (ret = read_manifest(md, gi)) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error: There was a problem reading or validating the manifest file", - md->mdhim_rank); - MPI_Abort(md->mdhim_comm, 0); - } - - //Open the data store - ret = open_db_store(md, (struct index_t *) gi); - if (ret != MDHIM_SUCCESS) { - // printf("open store failed with error %d, rank%d\n", ret, md->mdhim_rank); - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error opening data store for index: %d", - md->mdhim_rank, gi->id); - } - - //Initialize the range server threads if they haven't been already - - if (!md->mdhim_rs) { - ret = range_server_init(md); - } - -done: - //Release the indexes lock - if (pthread_rwlock_unlock(md->indexes_lock) != 0) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error unlocking the indexes_lock", - md->mdhim_rank); - return NULL; - } - - if (!gi) { - return NULL; - } - - // The index name has already been taken - if(check) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error creating index: Name %s, already exists", md->mdhim_rank, index_name); - return NULL; - } - - return gi; -} - -/** - * get_rangesrvs - * Creates a rangesrv_info hash table - * - * @param md in main MDHIM struct - * @return a list of range servers - */ -int get_rangesrvs(struct mdhim_t *md, struct index_t *index) { - struct rangesrv_info *rs_entry_num, *rs_entry_rank; - uint32_t rangesrv_num; - int i; - - //Iterate through the ranks to determine which ones are range servers - for (i = 0; i < md->mdhim_comm_size; i++) { - //Test if the rank is range server for this index - if ((rangesrv_num = is_range_server(md, i, index)) == MDHIM_ERROR) { - continue; - } - - if (!rangesrv_num) { - continue; - } - - //Set the master range server to be the server with the largest rank - if (i > index->rangesrv_master) { - index->rangesrv_master = i; - } - - rs_entry_num = malloc(sizeof(struct rangesrv_info)); - rs_entry_rank = malloc(sizeof(struct rangesrv_info)); - rs_entry_num->rank = rs_entry_rank->rank = i; - rs_entry_rank->rangesrv_num = rs_entry_num->rangesrv_num = rangesrv_num; -// printf("range server rank is %d, range server num is %d, myrank is %d\n", rs_entry_rank->rank, rs_entry_num->rangesrv_num, md->mdhim_rank); -// fflush(stdout); - //Add it to the hash tables - HASH_ADD_INT(index->rangesrvs_by_num, rangesrv_num, rs_entry_num); - HASH_ADD_INT(index->rangesrvs_by_rank, rank, rs_entry_rank); - } - - return MDHIM_SUCCESS; -} - -/** - * is_range_server - * Tests to see if the given rank is a range server for one or more indexes - * - * @param md main MDHIM struct - * @param rank rank to find out if it is a range server - * @return MDHIM_ERROR on error, 0 on false, 1 or greater to represent the range server number otherwise - */ -uint32_t is_range_server(struct mdhim_t *md, int rank, struct index_t *index) { - int size; - int ret; - uint64_t rangesrv_num = 0; - - //If a local index, check to see if the rank is a range server for the primary index - if (index->type == LOCAL_INDEX) { - rangesrv_num = is_range_server(md, rank, md->primary_index); - - return rangesrv_num; - } - - if ((ret = MPI_Comm_size(md->mdhim_comm, &size)) != MPI_SUCCESS) { - mlog(MPI_EMERG, "Rank: %d - Couldn't get the size of the comm in is_range_server", - md->mdhim_rank); - return MDHIM_ERROR; - } - - /* Get the range server number, which is just a number from 1 onward - It represents the ranges the server serves and is calculated with the RANGE_SERVER_FACTOR - - The RANGE_SERVER_FACTOR is a number that is divided by the rank such that if the - remainder is zero, then the rank is a rank server - - For example, if there were 8 ranks and the RANGE_SERVER_FACTOR is 2, - then ranks: 0, 2, 4, 6 are range servers - - If the size of communicator is less than the RANGE_SERVER_FACTOR, - the last rank is the range server - */ - - size -= 1; - if (size < index->range_server_factor && rank == size) { - //The size of the communicator is less than the RANGE_SERVER_FACTOR - rangesrv_num = 1; - - } else if (size >= index->range_server_factor && rank % index->range_server_factor == 0) { - //This is a range server, get the range server's number - rangesrv_num = rank / index->range_server_factor; - rangesrv_num++; - } - - if (rangesrv_num > index->num_rangesrvs) { - rangesrv_num = 0; - } -// printf("rangeser_num is %d, rank is %d\n", rangesrv_num, md->mdhim_rank); - return rangesrv_num; -} - -/** - * range_server_init_comm - * Initializes the range server communicator that is used for range server to range - * server collectives - * The stat flush function will use this communicator - * - * @param md Pointer to the main MDHIM structure - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int index_init_comm(struct mdhim_t *md, struct index_t *bi) { - MPI_Group orig, new_group; - int *ranks; - int i = 0; - int ret; - int comm_size, size; - MPI_Comm new_comm; - struct rangesrv_info *rangesrv, *tmp; - - ranks = NULL; - size = 0; - //Populate the ranks array that will be in our new comm - if ((ret = im_range_server(bi)) == 1) { - ranks = malloc(sizeof(int) * bi->num_rangesrvs); - //Iterate through the stat hash entries - HASH_ITER(hh, bi->rangesrvs_by_rank, rangesrv, tmp) { - if (!rangesrv) { - continue; - } - - ranks[size] = rangesrv->rank; - size++; - } - } else { - MPI_Comm_size(md->mdhim_comm, &comm_size); - ranks = malloc(sizeof(int) * comm_size); - for (i = 0; i < comm_size; i++) { - HASH_FIND_INT(bi->rangesrvs_by_rank, &i, rangesrv); - if (rangesrv) { - continue; - } - - ranks[size] = i; - size++; - } - } - - //Create a new group with the range servers only - if ((ret = MPI_Comm_group(md->mdhim_comm, &orig)) != MPI_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while creating a new group in range_server_init_comm", - md->mdhim_rank); - return MDHIM_ERROR; - } - - if ((ret = MPI_Group_incl(orig, size, ranks, &new_group)) != MPI_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while creating adding ranks to the new group in range_server_init_comm", - md->mdhim_rank); - return MDHIM_ERROR; - } - - if ((ret = MPI_Comm_create(md->mdhim_comm, new_group, &new_comm)) - != MPI_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while creating the new communicator in range_server_init_comm", - md->mdhim_rank); - return MDHIM_ERROR; - } - if ((ret = im_range_server(bi)) == 1) { - memcpy(&bi->rs_comm, &new_comm, sizeof(MPI_Comm)); - } else { - MPI_Comm_free(&new_comm); - } - - MPI_Group_free(&orig); - MPI_Group_free(&new_group); - free(ranks); - return MDHIM_SUCCESS; -} - -struct index_t *get_index(struct mdhim_t *md, int index_id) { - struct index_t *index; - - //Acquire the lock to update indexes - while (pthread_rwlock_wrlock(md->indexes_lock) == EBUSY) { - usleep(10); - } - - index = NULL; - if (index_id >= 0) { - HASH_FIND(hh, md->indexes, &index_id, sizeof(int), index); - } - - if (pthread_rwlock_unlock(md->indexes_lock) != 0) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error unlocking the indexes_lock", - md->mdhim_rank); - return NULL; - } - - return index; -} - - -/* - * === FUNCTION ====================================================================== - * Name: get_index_by_name - * Description: Retrieve the index by name - * ===================================================================================== - */ -struct index_t* -get_index_by_name ( struct mdhim_t *md, char *index_name ) -{ - struct index_t *index = NULL; - size_t name_len = strlen(index_name)+1; - char *lower_name = malloc(name_len); - - // Acquire the lock to update indexes - while ( pthread_rwlock_wrlock(md->indexes_lock) == EBUSY ) { - usleep(10); - } - - to_lower(name_len, index_name, lower_name); - - if ( strcmp(lower_name, "") != 0 ) { - HASH_FIND(hh_name, md->indexes_by_name, lower_name, strlen(lower_name), index); - } - - if ( pthread_rwlock_unlock(md->indexes_lock) !=0 ) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error unlocking the indexes_lock", - md->mdhim_rank); - return NULL; - } - -return index; -} /* ----- end of function get_index_by_name ----- */ - -void indexes_release(struct mdhim_t *md) { - struct index_t *cur_indx, *tmp_indx; - struct rangesrv_info *cur_rs, *tmp_rs; - int ret; - struct mdhim_stat *stat, *tmp; - - HASH_ITER(hh, md->indexes, cur_indx, tmp_indx) { - HASH_DELETE(hh, md->indexes, cur_indx); - HASH_DELETE(hh_name, md->indexes_by_name, cur_indx); - HASH_ITER(hh, cur_indx->rangesrvs_by_num, cur_rs, tmp_rs) { - HASH_DEL(cur_indx->rangesrvs_by_num, cur_rs); - free(cur_rs); - } - - HASH_ITER(hh, cur_indx->rangesrvs_by_rank, cur_rs, tmp_rs) { - HASH_DEL(cur_indx->rangesrvs_by_rank, cur_rs); - free(cur_rs); - } - - //Clean up the storage if I'm a range server for this index - if (cur_indx->myinfo.rangesrv_num > 0) { - //Write the stats to the database - if ((ret = write_stats(md, cur_indx)) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while loading stats", - md->mdhim_rank); - } - - if (cur_indx->myinfo.rangesrv_num == 1) { - //Write the manifest - write_manifest(md, cur_indx); - } - - //Close the database - if ((ret = cur_indx->mdhim_store->close(cur_indx->mdhim_store->db_handle, - cur_indx->mdhim_store->db_stats)) - != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error closing database", - md->mdhim_rank); - } - - pthread_rwlock_destroy(cur_indx->mdhim_store->mdhim_store_stats_lock); - free(cur_indx->mdhim_store->mdhim_store_stats_lock); - if (cur_indx->type != LOCAL_INDEX) { - MPI_Comm_free(&cur_indx->rs_comm); - } - free(cur_indx->mdhim_store); - } - - - //Iterate through the stat hash entries to free them - HASH_ITER(hh, cur_indx->stats, stat, tmp) { - if (!stat) { - continue; - } - - HASH_DEL(cur_indx->stats, stat); - free(stat->max); - free(stat->min); - free(stat); - } - - free(cur_indx); - } -} - -int pack_stats(struct index_t *index, void *buf, int size, - int float_type, int stat_size, MPI_Comm comm) { - - struct mdhim_stat *stat, *tmp; - void *tstat; - struct mdhim_db_istat *istat; - struct mdhim_db_fstat *fstat; - int ret = MPI_SUCCESS; - int sendidx = 0; - - //Pack the stat data I have by iterating through the stats hash - HASH_ITER(hh, index->mdhim_store->mdhim_store_stats, stat, tmp) { - //Get the appropriate struct to send - if (float_type) { - fstat = malloc(sizeof(struct mdhim_db_fstat)); - fstat->slice = stat->key; - fstat->num = stat->num; - - if (index->key_type == MDHIM_UNIFYFS_KEY) { -/* printf("bbbefore:min fid is %ld, min offset is %ld, \ - max fid is %ld, max offset is %ld\n", \ - *((ulong *)stat->min), *((ulong *)stat->min+1), \ - *((ulong *)stat->max), *((ulong *)stat->max+1)); - fflush(stdout); -*/ - memcpy((char *)&fstat->dmin, (char *)stat->min, sizeof(ulong)); - memcpy((char *)(&fstat->dmin)+sizeof(ulong), (char *)(stat->min)+sizeof(ulong), \ - sizeof(ulong)); - memcpy((char *)&fstat->dmax, (char *)stat->max, sizeof(ulong)); - memcpy((char *)(&fstat->dmax)+sizeof(ulong), (char *)(stat->max)+sizeof(ulong), \ - sizeof(ulong)); -/* printf("before:min fid is %ld, min offset is %ld, \ - max fid is %ld, max offset is %ld\n", \ - *((ulong *)&(fstat->dmin)), *((ulong *)&(fstat->dmin)+1), \ - *((ulong *)&(fstat->dmax)), *((ulong *)&(fstat->dmax)+1)); - fflush(stdout); -*/ - } - else { - fstat->dmin = *(long double *) stat->min; - fstat->dmax = *(long double *) stat->max; - } - tstat = fstat; - } else { - istat = malloc(sizeof(struct mdhim_db_istat)); - istat->slice = stat->key; - istat->num = stat->num; - istat->imin = *(uint64_t *) stat->min; - istat->imax = *(uint64_t *) stat->max; - tstat = istat; - } - - //Pack the struct - if ((ret = MPI_Pack(tstat, stat_size, MPI_CHAR, buf, size, &sendidx, - comm)) != MPI_SUCCESS) { - mlog(MPI_CRIT, "Error packing buffer when sending stat info" - " to master range server"); - free(buf); - free(tstat); - return ret; - } - - free(tstat); - } - - return ret; -} - -int get_stat_flush_global(struct mdhim_t *md, struct index_t *index) { - char *sendbuf; - int sendsize = 0; - int recvidx = 0; - char *recvbuf; - int *recvcounts; - int *displs; - int recvsize; - int ret = 0; - int i = 0; - int float_type = 0; - struct mdhim_stat *stat, *tmp; - void *tstat; - int stat_size = 0; - int master; - int num_items = 0; - - //Determine the size of the buffers to send based on the number and type of stats - if ((ret = is_float_key(index->key_type)) == 1 || \ - index->key_type == MDHIM_UNIFYFS_KEY) { - float_type = 1; - stat_size = sizeof(struct mdhim_db_fstat); - } else { - float_type = 0; - stat_size = sizeof(struct mdhim_db_istat); - } - recvbuf = NULL; - if (index->myinfo.rangesrv_num > 0) { - //Get the number stats in our hash table - if (index->mdhim_store->mdhim_store_stats) { - num_items = HASH_COUNT(index->mdhim_store->mdhim_store_stats); - // printf("num_items is %ld\n", num_items); - // fflush(stdout); - } else { - num_items = 0; - } - ret = is_float_key(index->key_type); - if (ret == 1 || index->key_type == MDHIM_UNIFYFS_KEY) - sendsize = num_items * sizeof(struct mdhim_db_fstat); - else - sendsize = num_items * sizeof(struct mdhim_db_istat); - } - - if (index->myinfo.rangesrv_num > 0) { - //Get the master range server rank according the range server comm - if ((ret = MPI_Comm_size(index->rs_comm, &master)) != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error getting size of comm", - md->mdhim_rank); - } - //The master rank is the last rank in range server comm - master--; - - //First we send the number of items that we are going to send - //Allocate the receive buffer size - recvsize = index->num_rangesrvs * sizeof(int); - recvbuf = malloc(recvsize); - memset(recvbuf, 0, recvsize); - MPI_Barrier(index->rs_comm); - //The master server will receive the number of stats each server has - if ((ret = MPI_Gather(&num_items, 1, MPI_UNSIGNED, recvbuf, 1, - MPI_INT, master, index->rs_comm)) != MPI_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - " - "Error while receiving the number of statistics from each range server", - md->mdhim_rank); - free(recvbuf); - goto error; - } - - num_items = 0; - displs = malloc(sizeof(int) * index->num_rangesrvs); - recvcounts = malloc(sizeof(int) * index->num_rangesrvs); - for (i = 0; i < index->num_rangesrvs; i++) { - displs[i] = num_items * stat_size; - num_items += ((int *)recvbuf)[i]; - recvcounts[i] = ((int *)recvbuf)[i] * stat_size; - } - - free(recvbuf); - recvbuf = NULL; - - //Allocate send buffer - sendbuf = malloc(sendsize); - - //Pack the stat data I have by iterating through the stats hash table - ret = pack_stats(index, sendbuf, sendsize, - float_type, stat_size, index->rs_comm); - if (ret != MPI_SUCCESS) { - free(recvbuf); - goto error; - } - - //Allocate the recv buffer for the master range server - if (md->mdhim_rank == index->rangesrv_master) { - recvsize = num_items * stat_size; - recvbuf = malloc(recvsize); - memset(recvbuf, 0, recvsize); - } else { - recvbuf = NULL; - recvsize = 0; - } - - MPI_Barrier(index->rs_comm); - //The master server will receive the stat info from each rank in the range server comm - if ((ret = MPI_Gatherv(sendbuf, sendsize, MPI_PACKED, recvbuf, recvcounts, displs, - MPI_PACKED, master, index->rs_comm)) != MPI_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - " - "Error while receiving range server info", - md->mdhim_rank); - goto error; - } - free(recvcounts); - free(displs); - free(sendbuf); - } - - MPI_Barrier(md->mdhim_client_comm); - //The master range server broadcasts the number of stats it is going to send - if ((ret = MPI_Bcast(&num_items, 1, MPI_UNSIGNED, index->rangesrv_master, - md->mdhim_comm)) != MPI_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - " - "Error while receiving the number of stats to receive", - md->mdhim_rank); - goto error; - } - MPI_Barrier(md->mdhim_client_comm); - - recvsize = num_items * stat_size; - //Allocate the receive buffer size for clients - if (md->mdhim_rank != index->rangesrv_master) { - recvbuf = malloc(recvsize); - memset(recvbuf, 0, recvsize); - } - - //The master range server broadcasts the receive buffer to the mdhim_comm - if ((ret = MPI_Bcast(recvbuf, recvsize, MPI_PACKED, index->rangesrv_master, - md->mdhim_comm)) != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error while receiving range server info", - md->mdhim_rank); - goto error; - } - - //Unpack the receive buffer and populate our index->stats hash table - recvidx = 0; - for (i = 0; i < recvsize; i+=stat_size) { - tstat = malloc(stat_size); - memset(tstat, 0, stat_size); - if ((ret = MPI_Unpack(recvbuf, recvsize, &recvidx, tstat, stat_size, - MPI_CHAR, md->mdhim_comm)) != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error while unpacking stat data", - md->mdhim_rank); - free(tstat); - goto error; - } - - stat = malloc(sizeof(struct mdhim_stat)); - stat->dirty = 0; - if (float_type) { - stat->min = (void *) malloc(sizeof(long double)); - stat->max = (void *) malloc(sizeof(long double)); - if (index->key_type == MDHIM_UNIFYFS_KEY) { - struct mdhim_db_fstat * tmp_stat; - tmp_stat = (struct mdhim_db_fstat *)tstat; - memcpy((char *)stat->min, (char *)&(tmp_stat->dmin), sizeof(ulong)); - memcpy((char *)(stat->min)+sizeof(ulong), \ - (char *)&(tmp_stat->dmin)+sizeof(ulong), sizeof(ulong)); - memcpy((char *)stat->max, (char *)&(tmp_stat->dmax), sizeof(ulong)); - memcpy((char *)(stat->max)+sizeof(ulong), \ - (char *)&(tmp_stat->dmax)+sizeof(ulong), sizeof(ulong)); - /* printf("abcd:min fid is %ld, min offset is %ld, \ - max fid is %ld, max offset is %ld, rank is %d\n", \ - *((ulong *)stat->min), *((ulong *)stat->min+1), \ - *((ulong *)stat->max), *((ulong *)stat->max+1), \ - md->mdhim_rank); - fflush(stdout); - */ - } - else { - *(long double *)stat->min = ((struct mdhim_db_fstat *)tstat)->dmin; - *(long double *)stat->max = ((struct mdhim_db_fstat *)tstat)->dmax; - } - stat->key = ((struct mdhim_db_fstat *)tstat)->slice; - // printf("abcd:slice is %ld\n", stat->key); - stat->num = ((struct mdhim_db_fstat *)tstat)->num; - } else { - stat->min = (void *) malloc(sizeof(uint64_t)); - stat->max = (void *) malloc(sizeof(uint64_t)); - *(uint64_t *)stat->min = ((struct mdhim_db_istat *)tstat)->imin; - *(uint64_t *)stat->max = ((struct mdhim_db_istat *)tstat)->imax; - stat->key = ((struct mdhim_db_istat *)tstat)->slice; - stat->num = ((struct mdhim_db_istat *)tstat)->num; - } - - HASH_FIND_INT(index->stats, &stat->key, tmp); - if (!tmp) { - HASH_ADD_INT(index->stats, key, stat); - } else { - //Replace the existing stat - HASH_REPLACE_INT(index->stats, key, stat, tmp); - free(tmp); - } - free(tstat); - } - free(recvbuf); - return MDHIM_SUCCESS; - -error: - if (recvbuf) { - free(recvbuf); - } - - return MDHIM_ERROR; -} - -int get_stat_flush_local(struct mdhim_t *md, struct index_t *index) { - char *sendbuf; - int sendsize = 0; - int recvidx = 0; - char *recvbuf; - int *num_items_to_recv; - int *recvcounts; - int *displs; - int recvsize; - int ret = 0; - int i = 0, j; - int float_type = 0; - struct mdhim_stat *stat, *tmp, *rank_stat; - void *tstat; - int stat_size = 0; - int num_items = 0; - - //Determine the size of the buffers to send based on the number and type of stats - if ((ret = is_float_key(index->key_type)) == 1) { - float_type = 1; - stat_size = sizeof(struct mdhim_db_fstat); - } else { - float_type = 0; - stat_size = sizeof(struct mdhim_db_istat); - } - - recvbuf = NULL; - if (index->myinfo.rangesrv_num > 0) { - //Get the number stats in our hash table - if (index->mdhim_store->mdhim_store_stats) { - num_items = HASH_COUNT(index->mdhim_store->mdhim_store_stats); - } else { - num_items = 0; - } - if ((ret = is_float_key(index->key_type)) == 1) { - sendsize = num_items * sizeof(struct mdhim_db_fstat); - } else { - sendsize = num_items * sizeof(struct mdhim_db_istat); - } - } - - //First we send the number of items that we are going to send - //Allocate the receive buffer size - recvsize = md->mdhim_comm_size * sizeof(int); - recvbuf = malloc(recvsize); - memset(recvbuf, 0, recvsize); - MPI_Barrier(md->mdhim_client_comm); - //All gather the number of items to send - if ((ret = MPI_Allgather(&num_items, 1, MPI_UNSIGNED, recvbuf, 1, - MPI_INT, md->mdhim_comm)) != MPI_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - " - "Error while receiving the number of statistics from each range server", - md->mdhim_rank); - free(recvbuf); - goto error; - } - - num_items = 0; - displs = malloc(sizeof(int) * md->mdhim_comm_size); - recvcounts = malloc(sizeof(int) * md->mdhim_comm_size); - for (i = 0; i < md->mdhim_comm_size; i++) { - displs[i] = num_items * stat_size; - num_items += ((int *)recvbuf)[i]; - recvcounts[i] = ((int *)recvbuf)[i] * stat_size; - } - - num_items_to_recv = (int *)recvbuf; - recvbuf = NULL; - - if (sendsize) { - //Allocate send buffer - sendbuf = malloc(sendsize); - - //Pack the stat data I have by iterating through the stats hash table - ret = pack_stats(index, sendbuf, sendsize, - float_type, stat_size, md->mdhim_comm); - if (ret != MPI_SUCCESS) { - free(recvbuf); - goto error; - } - } else { - sendbuf = NULL; - } - - recvsize = num_items * stat_size; - recvbuf = malloc(recvsize); - memset(recvbuf, 0, recvsize); - - MPI_Barrier(md->mdhim_client_comm); - //The master server will receive the stat info from each rank in the range server comm - if ((ret = MPI_Allgatherv(sendbuf, sendsize, MPI_PACKED, recvbuf, recvcounts, displs, - MPI_PACKED, md->mdhim_comm)) != MPI_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - " - "Error while receiving range server info", - md->mdhim_rank); - goto error; - } - - free(recvcounts); - free(displs); - free(sendbuf); - - - MPI_Barrier(md->mdhim_client_comm); - - //Unpack the receive buffer and populate our index->stats hash table - recvidx = 0; - for (i = 0; i < md->mdhim_comm_size; i++) { - if ((ret = is_range_server(md, i, index)) < 1) { - continue; - } - - HASH_FIND_INT(index->stats, &i, tmp); - if (!tmp) { - mlog(MPI_CRIT, "Rank: %d - " - "Adding rank: %d to local index stat data", - md->mdhim_rank, i); - rank_stat = malloc(sizeof(struct mdhim_stat)); - memset(rank_stat, 0, sizeof(struct mdhim_stat)); - rank_stat->key = i; - rank_stat->stats = NULL; - HASH_ADD_INT(index->stats, key, rank_stat); - } else { - rank_stat = tmp; - } - - for (j = 0; j < num_items_to_recv[i]; j++) { - tstat = malloc(stat_size); - memset(tstat, 0, stat_size); - if ((ret = MPI_Unpack(recvbuf, recvsize, &recvidx, tstat, stat_size, - MPI_CHAR, md->mdhim_comm)) != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error while unpacking stat data", - md->mdhim_rank); - free(tstat); - goto error; - } - - stat = malloc(sizeof(struct mdhim_stat)); - stat->dirty = 0; - if (float_type) { - stat->min = (void *) malloc(sizeof(long double)); - stat->max = (void *) malloc(sizeof(long double)); - *(long double *)stat->min = ((struct mdhim_db_fstat *)tstat)->dmin; - *(long double *)stat->max = ((struct mdhim_db_fstat *)tstat)->dmax; - stat->key = ((struct mdhim_db_fstat *)tstat)->slice; - stat->num = ((struct mdhim_db_fstat *)tstat)->num; - } else { - stat->min = (void *) malloc(sizeof(uint64_t)); - stat->max = (void *) malloc(sizeof(uint64_t)); - *(uint64_t *)stat->min = ((struct mdhim_db_istat *)tstat)->imin; - *(uint64_t *)stat->max = ((struct mdhim_db_istat *)tstat)->imax; - stat->key = ((struct mdhim_db_istat *)tstat)->slice; - stat->num = ((struct mdhim_db_istat *)tstat)->num; - } - - mlog(MPI_CRIT, "Rank: %d - " - "Adding rank: %d with stat min: %lu, stat max: %lu, stat key: %u num: %lu" - "to local index stat data", - md->mdhim_rank, i, *(uint64_t *)stat->min, *(uint64_t *)stat->max, - stat->key, stat->num); - HASH_FIND_INT(rank_stat->stats, &stat->key, tmp); - if (!tmp) { - HASH_ADD_INT(rank_stat->stats, key, stat); - } else { - //Replace the existing stat - HASH_REPLACE_INT(rank_stat->stats, key, stat, tmp); - free(tmp); - } - - free(tstat); - } - } - - free(recvbuf); - free(num_items_to_recv); - - return MDHIM_SUCCESS; - -error: - if (recvbuf) { - free(recvbuf); - } - - return MDHIM_ERROR; -} - -/** - * get_stat_flush - * Receives stat data from all the range servers and populates md->stats - * - * @param md in main MDHIM struct - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int get_stat_flush(struct mdhim_t *md, struct index_t *index) { - int ret; - - pthread_mutex_lock(md->mdhim_comm_lock); - - if (index->type != LOCAL_INDEX) { - ret = get_stat_flush_global(md, index); - } else { - ret = get_stat_flush_local(md, index); - } - - pthread_mutex_unlock(md->mdhim_comm_lock); - - return ret; -} diff --git a/meta/src/indexes.h b/meta/src/indexes.h deleted file mode 100644 index d40c7daa5..000000000 --- a/meta/src/indexes.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __INDEX_H -#define __INDEX_H - -#include "uthash.h" -#include "mdhim_options.h" -#include "mpi.h" - -#define PRIMARY_INDEX 1 -#define SECONDARY_INDEX 2 -#define LOCAL_INDEX 3 -#define REMOTE_INDEX 4 - -struct mdhim_t; // avoid circular #include chain - -typedef struct rangesrv_info rangesrv_info; -/* - * Range server info - * Contains information about each range server - */ -struct rangesrv_info { - //The range server's rank in the mdhim_comm - uint32_t rank; - //The range server's identifier based on rank and number of servers - uint32_t rangesrv_num; - uint32_t num_recs; - void *first_key; - - UT_hash_handle hh; /* makes this structure hashable */ -}; - -/* - * Remote Index info - * Contains information about a remote index - * - * A remote index means that an index can be served by one or more range servers - */ -struct index_t { - int id; // Hash key - char *name; // Secondary Hash key - - //The abstracted data store layer that mdhim uses to store and retrieve records - struct mdhim_store_t *mdhim_store; - //Options for the mdhim data store - int key_type; //The key type used in the db - int db_type; //The database type - int type; /* The type of index - (PRIMARY_INDEX, SECONDARY_INDEX, LOCAL_INDEX) */ - int primary_id; /* The primary index id if this is a secondary index */ - rangesrv_info *rangesrvs_by_num; /* Hash table of the range servers - serving this index. Key is range server number */ - rangesrv_info *rangesrvs_by_rank; /* Hash table of the range servers - serving this index. Key is the rank */ - //Used to determine the number of range servers which is based in - //if myrank % RANGE_SERVER_FACTOR == 0, then myrank is a server - int range_server_factor; - - //Maximum size of a slice. A range server may serve several slices. - uint64_t mdhim_max_recs_per_slice; - - //This communicator is for range servers only to talk to each other - MPI_Comm rs_comm; - /* The rank of the range server master that will broadcast stat data to all clients - This rank is the rank in mdhim_comm not in the range server communicator */ - int rangesrv_master; - - //The number of range servers for this index - uint32_t num_rangesrvs; - - //The rank's range server information, if it is a range server for this index - rangesrv_info myinfo; - - //Statistics retrieved from the mdhimStatFlush operation - struct mdhim_stat *stats; - - UT_hash_handle hh; /* makes this structure hashable */ - UT_hash_handle hh_name; /* makes this structure hashable by name */ -}; - -typedef struct index_manifest_t { - int key_type; //The type of key - int index_type; /* The type of index - (PRIMARY_INDEX, SECONDARY_INDEX) */ - int index_id; /* The id of the index in the hash table */ - int primary_id; - char *index_name; /* The name of the index in the hash table */ - int db_type; - uint32_t num_rangesrvs; - int rangesrv_factor; - uint64_t slice_size; - int num_nodes; - int local_server_rank; -} index_manifest_t; - -int update_stat(struct mdhim_t *md, struct index_t *bi, void *key, uint32_t key_len); -int load_stats(struct mdhim_t *md, struct index_t *bi); -int write_stats(struct mdhim_t *md, struct index_t *bi); -int open_db_store(struct mdhim_t *md, struct index_t *index); -uint32_t get_num_range_servers(struct mdhim_t *md, struct index_t *index); -struct index_t *create_local_index(struct mdhim_t *md, int db_type, int key_type, char *index_name); -struct index_t *create_global_index(struct mdhim_t *md, int server_factor, - uint64_t max_recs_per_slice, int db_type, - int key_type, char *index_name); -int get_rangesrvs(struct mdhim_t *md, struct index_t *index); -uint32_t is_range_server(struct mdhim_t *md, int rank, struct index_t *index); -int index_init_comm(struct mdhim_t *md, struct index_t *bi); -int get_stat_flush(struct mdhim_t *md, struct index_t *index); -struct index_t *get_index(struct mdhim_t *md, int index_id); -struct index_t *get_index_by_name(struct mdhim_t *md, char *index_name); -void indexes_release(struct mdhim_t *md); -int im_range_server(struct index_t *index); - -#endif diff --git a/meta/src/local_client.c b/meta/src/local_client.c deleted file mode 100644 index 0a5d64a20..000000000 --- a/meta/src/local_client.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include "mdhim.h" -#include "local_client.h" - -/** - * get_msg_self - * Gets a message from the range server if we are waiting to hear back from ourselves - * This means that the range server is running in the same process as the caller, - * but on a different thread - * - * @param md the main mdhim struct - * @return a pointer to the message received or NULL - */ -static void *get_msg_self(struct mdhim_t *md) { - void *msg; - - //Lock the receive msg mutex - pthread_mutex_lock(md->receive_msg_mutex); - //Wait until there is a message to receive - if (!md->receive_msg) { - pthread_cond_wait(md->receive_msg_ready_cv, md->receive_msg_mutex); - } - - //Get the message - msg = md->receive_msg; - //Set the message queue to null - md->receive_msg = NULL; - //unlock the mutex - pthread_mutex_unlock(md->receive_msg_mutex); - - return msg; -} - -/** - * Send put to range server - * - * @param md main MDHIM struct - * @param pm pointer to put message to be sent or inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_rm_t *local_client_put(struct mdhim_t *md, struct mdhim_putm_t *pm) { - int ret; - struct mdhim_rm_t *rm; - work_item *item; - - if ((item = malloc(sizeof(work_item))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "Error while allocating memory for client"); - return NULL; - } - - memset(item, 0, sizeof(work_item)); - item->message = (void *)pm; - item->source = md->mdhim_rank; - if ((ret = range_server_add_work(md, item)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error adding work to range server in local_client_put"); - return NULL; - } - - rm = (struct mdhim_rm_t *) get_msg_self(md); - // Return response - - return rm; -} - -/** - * Send bulk put to range server - * - * @param md main MDHIM struct - * @param bpm pointer to bulk put message to be sent or inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR -*/ -struct mdhim_rm_t *local_client_bput(struct mdhim_t *md, struct mdhim_bputm_t *bpm) { - int ret; - struct mdhim_rm_t *brm; - work_item *item; - - if ((item = malloc(sizeof(work_item))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "Error while allocating memory for client"); - return NULL; - } - - item->message = (void *)bpm; - item->source = md->mdhim_rank; - if ((ret = range_server_add_work(md, item)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error adding work to range server in local_client_put"); - return NULL; - } - - brm = (struct mdhim_rm_t *) get_msg_self(md); - - // Return response - return brm; -} - -/** - * Send bulk get to range server - * - * @param md main MDHIM struct - * @param bgm pointer to get message to be sent or inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_bgetrm_t *local_client_bget(struct mdhim_t *md, struct mdhim_bgetm_t *bgm) { - int ret; - struct mdhim_bgetrm_t *rm; - work_item *item; - - if ((item = malloc(sizeof(work_item))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "Error while allocating memory for client"); - return NULL; - } - - item->message = (void *)bgm; - item->source = md->mdhim_rank; - if ((ret = range_server_add_work(md, item)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error adding work to range server in local_client_put"); - return NULL; - } - - rm = (struct mdhim_bgetrm_t *) get_msg_self(md); - - // Return response - return rm; -} - -/** - * Send get with an op and number of records greater than 1 to range server - * - * @param md main MDHIM struct - * @param gm pointer to get message to be inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_bgetrm_t *local_client_bget_op(struct mdhim_t *md, struct mdhim_getm_t *gm) { - int ret; - struct mdhim_bgetrm_t *rm; - work_item *item; - - if ((item = malloc(sizeof(work_item))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "Error while allocating memory for client"); - return NULL; - } - - item->message = (void *)gm; - item->source = md->mdhim_rank; - if ((ret = range_server_add_work(md, item)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error adding work to range server in local_client_put"); - return NULL; - } - - rm = (struct mdhim_bgetrm_t *) get_msg_self(md); - - // Return response - return rm; -} - -/** - * Send commit to range server - * - * @param md main MDHIM struct - * @param cm pointer to put message to be inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_rm_t *local_client_commit(struct mdhim_t *md, struct mdhim_basem_t *cm) { - int ret; - struct mdhim_rm_t *rm; - work_item *item; - - if ((item = malloc(sizeof(work_item))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "Error while allocating memory for client"); - return NULL; - } - - item->message = (void *)cm; - item->source = md->mdhim_rank; - if ((ret = range_server_add_work(md, item)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error adding work to range server in local_client_put"); - return NULL; - } - - rm = (struct mdhim_rm_t *) get_msg_self(md); - // Return response - - return rm; -} - -/** - * Send delete to range server - * - * @param md main MDHIM struct - * @param dm pointer to delete message to be inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_rm_t *local_client_delete(struct mdhim_t *md, struct mdhim_delm_t *dm) { - int ret; - struct mdhim_rm_t *rm; - work_item *item; - - if ((item = malloc(sizeof(work_item))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "Error while allocating memory for client"); - return NULL; - } - - item->message = (void *)dm; - item->source = md->mdhim_rank; - if ((ret = range_server_add_work(md, item)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error adding work to range server in local_client_put"); - return NULL; - } - - rm = (struct mdhim_rm_t *) get_msg_self(md); - - // Return response - return rm; - -} - -/** - * Send bulk delete to MDHIM - * - * @param md main MDHIM struct - * @param bdm pointer to bulk delete message to be inserted into the range server's work queue - * @return return_message structure with ->error = MDHIM_SUCCESS or MDHIM_ERROR - */ -struct mdhim_rm_t *local_client_bdelete(struct mdhim_t *md, struct mdhim_bdelm_t *bdm) { - int ret; - struct mdhim_rm_t *brm; - work_item *item; - - if ((item = malloc(sizeof(work_item))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "Error while allocating memory for client"); - return NULL; - } - - item->message = (void *)bdm; - item->source = md->mdhim_rank; - if ((ret = range_server_add_work(md, item)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error adding work to range server in local_client_put"); - return NULL; - } - - brm = (struct mdhim_rm_t *) get_msg_self(md); - - // Return response - return brm; -} - -/** - * Send close to range server - * - * @param md main MDHIM struct - * @param cm pointer to close message to be inserted into the range server's work queue - */ -void local_client_close(struct mdhim_t *md, struct mdhim_basem_t *cm) { - int ret; - work_item *item; - - if ((item = malloc(sizeof(work_item))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "Error while allocating memory for client"); - return; - } - - item->message = (void *)cm; - item->source = md->mdhim_rank; - if ((ret = range_server_add_work(md, item)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error adding work to range server in local_client_put"); - return; - } - - return; -} diff --git a/meta/src/local_client.h b/meta/src/local_client.h deleted file mode 100644 index 42e6c4a12..000000000 --- a/meta/src/local_client.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __LOCAL_CLIENT_H -#define __LOCAL_CLIENT_H - -#include "messages.h" - -struct mdhim_rm_t *local_client_put(struct mdhim_t *md, struct mdhim_putm_t *pm); -struct mdhim_rm_t *local_client_bput(struct mdhim_t *md, struct mdhim_bputm_t *bpm); -struct mdhim_bgetrm_t *local_client_bget(struct mdhim_t *md, struct mdhim_bgetm_t *bgm); -struct mdhim_bgetrm_t *local_client_bget_op(struct mdhim_t *md, struct mdhim_getm_t *gm); -struct mdhim_rm_t *local_client_commit(struct mdhim_t *md, struct mdhim_basem_t *cm); -struct mdhim_rm_t *local_client_delete(struct mdhim_t *md, struct mdhim_delm_t *dm); -struct mdhim_rm_t *local_client_bdelete(struct mdhim_t *md, struct mdhim_bdelm_t *dm); -void local_client_close(struct mdhim_t *md, struct mdhim_basem_t *cm); - -#endif diff --git a/meta/src/mdhim.c b/meta/src/mdhim.c deleted file mode 100644 index a48e0ee07..000000000 --- a/meta/src/mdhim.c +++ /dev/null @@ -1,998 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#define _XOPEN_SOURCE 500 -#include -#include -#include -#include -#include -#include "mdhim.h" -#include "range_server.h" -#include "client.h" -#include "local_client.h" -#include "partitioner.h" -#include "mdhim_options.h" -#include "indexes.h" -#include "mdhim_private.h" - - -/*! \mainpage MDHIM TNG - * - * \section intro_sec Introduction - * - * MDHIM TNG is a key/value store for HPC - * - */ - - -/** - * mdhimInit - * Initializes MDHIM - Collective call - * - * @param appComm the communicator that was passed in from the application (e.g., MPI_COMM_WORLD) - * @param opts Options structure for DB creation, such as name, and primary key type - * @return mdhim_t* that contains info about this instance or NULL if there was an error - */ - -int dbg_rank; -int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf); -struct mdhim_t *mdhimInit(void *appComm, struct mdhim_options_t *opts) { - int ret = 0; - int flag, provided; - struct mdhim_t *md; - struct index_t *primary_index; - MPI_Comm comm; - - if (!opts) { - //Set default options if no options were passed - opts = mdhim_options_init(); - mdhim_options_set_db_path(opts, "/tmp/hng/"); - mdhim_options_set_db_name(opts, "mdhimDb"); - mdhim_options_set_db_type(opts, LEVELDB); - mdhim_options_set_server_factor(opts, 1); - mdhim_options_set_max_recs_per_slice(opts, 1000); - mdhim_options_set_key_type(opts, MDHIM_BYTE_KEY); - mdhim_options_set_debug_level(opts, MLOG_CRIT); - mdhim_options_set_num_worker_threads(opts, 30); - } - - //Open mlog - stolen from plfs - ret = mlog_open((char *)"mdhim", 0, - opts->debug_level, opts->debug_level, NULL, 0, MLOG_LOGPID, 0); - - //Check if MPI has been initialized - if ((ret = MPI_Initialized(&flag)) != MPI_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM - Error while calling MPI_Initialized"); - exit(1); - } - if (!flag) { - //Initialize MPI with multiple thread support since MPI hasn't been initialized - ret = MPI_Init_thread(NULL, NULL, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM - Error while calling MPI_Init_thread"); - exit(1); - } - //Quit if MPI didn't initialize with multiple threads - if (provided != MPI_THREAD_MULTIPLE) { - mlog(MDHIM_CLIENT_WARN, "MDHIM - Error while initializing MPI with threads"); - //exit(1); - } - } - - if (appComm) { - comm = *((MPI_Comm *) appComm); - } else { - comm = MPI_COMM_WORLD; - } - - //Allocate memory for the main MDHIM structure - md = malloc(sizeof(struct mdhim_t)); - memset(md, 0, sizeof(struct mdhim_t)); - if (!md) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM - Error while allocating memory while initializing"); - return NULL; - } - - //Set the options passed or the defaults created - md->db_opts = opts; - - if ((ret = MPI_Comm_dup(comm, &md->mdhim_comm)) != MPI_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error while initializing the MDHIM communicator"); - return NULL; - } - - //Get our rank in the main MDHIM communicator - if ((ret = MPI_Comm_rank(md->mdhim_comm, &md->mdhim_rank)) != MPI_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error getting our rank while initializing MDHIM"); - return NULL; - } - - //Initialize mdhim_comm mutex - md->mdhim_comm_lock = malloc(sizeof(pthread_mutex_t)); - if (!md->mdhim_comm_lock) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while allocating memory for client", - md->mdhim_rank); - return NULL; - } - - if ((ret = pthread_mutex_init(md->mdhim_comm_lock, NULL)) != 0) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while initializing mdhim_comm_lock", md->mdhim_rank); - return NULL; - } - - //Dup the communicator passed in for barriers between clients - if ((ret = MPI_Comm_dup(comm, &md->mdhim_client_comm)) != MPI_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "Error while initializing the MDHIM communicator"); - return NULL; - } - - //Get the size of the main MDHIM communicator - if ((ret = MPI_Comm_size(md->mdhim_comm, &md->mdhim_comm_size)) != MPI_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error getting the size of the " - "comm while initializing", - md->mdhim_rank); - return NULL; - } - - if ((ret = MPI_Comm_rank(md->mdhim_comm, &dbg_rank)) != MPI_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error getting the rank of the " - "comm while initializing", - md->mdhim_rank); - return NULL; - } - - //Initialize receive msg mutex - used for receiving a message from myself - md->receive_msg_mutex = malloc(sizeof(pthread_mutex_t)); - if (!md->receive_msg_mutex) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while allocating memory for client", - md->mdhim_rank); - return NULL; - } - if ((ret = pthread_mutex_init(md->receive_msg_mutex, NULL)) != 0) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while initializing receive queue mutex", md->mdhim_rank); - return NULL; - } - //Initialize the receive condition variable - used for receiving a message from myself - md->receive_msg_ready_cv = malloc(sizeof(pthread_cond_t)); - if (!md->receive_msg_ready_cv) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while allocating memory for client", - md->mdhim_rank); - return NULL; - } - if ((ret = pthread_cond_init(md->receive_msg_ready_cv, NULL)) != 0) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while initializing client receive condition variable", - md->mdhim_rank); - return NULL; - } - - //Initialize the partitioner - partitioner_init(); - - //Initialize the indexes and create the primary index - md->indexes = NULL; - md->indexes_by_name = NULL; - md->indexes_lock = malloc(sizeof(pthread_rwlock_t)); - if (pthread_rwlock_init(md->indexes_lock, NULL) != 0) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while initializing remote_indexes_lock", - md->mdhim_rank); - return NULL; - } - - //Create the default remote primary index - primary_index = create_global_index(md, opts->rserver_factor, opts->max_recs_per_slice, - opts->db_type, opts->db_key_type, NULL); - if (!primary_index) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Couldn't create the default index", - md->mdhim_rank); - return NULL; - } - md->primary_index = primary_index; - - //Set the local receive queue to NULL - used for sending and receiving to/from ourselves - md->receive_msg = NULL; - MPI_Barrier(md->mdhim_client_comm); - - - return md; -} - -/** - * Quits the MDHIM instance - collective call - * - * @param md main MDHIM struct - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int mdhimClose(struct mdhim_t *md) { - int ret; - struct timeval start, end; - - mlog(MDHIM_CLIENT_DBG, "MDHIM Rank %d: Called close", md->mdhim_rank); - gettimeofday(&start, NULL); - MPI_Barrier(md->mdhim_client_comm); - gettimeofday(&end, NULL); -// printf("Took: %lu seconds to complete first close barrier\n", end.tv_sec - start.tv_sec); - - gettimeofday(&start, NULL); - //Stop range server if I'm a range server - if (md->mdhim_rs && (ret = range_server_stop(md)) != MDHIM_SUCCESS) { - return MDHIM_ERROR; - } - - gettimeofday(&end, NULL); -// printf("Took: %lu seconds to stop the range server\n", end.tv_sec - start.tv_sec); - - //Free up memory used by the partitioner - partitioner_release(); - - //Free up memory used by indexes - indexes_release(md); - - //Destroy the receive condition variable - if ((ret = pthread_cond_destroy(md->receive_msg_ready_cv)) != 0) { - return MDHIM_ERROR; - } - free(md->receive_msg_ready_cv); - - //Destroy the receive mutex - if ((ret = pthread_mutex_destroy(md->receive_msg_mutex)) != 0) { - return MDHIM_ERROR; - } - free(md->receive_msg_mutex); - - if ((ret = pthread_rwlock_destroy(md->indexes_lock)) != 0) { - return MDHIM_ERROR; - } - free(md->indexes_lock); - - gettimeofday(&start, NULL); - MPI_Barrier(md->mdhim_client_comm); - //Destroy the client_comm_lock - if ((ret = pthread_mutex_destroy(md->mdhim_comm_lock)) != 0) { - return MDHIM_ERROR; - } - gettimeofday(&end, NULL); - free(md->mdhim_comm_lock); -// printf("Took: %lu seconds to complete the second close barrier\n", end.tv_sec - start.tv_sec); - mlog(MDHIM_CLIENT_DBG, "MDHIM Rank %d: Finished close", md->mdhim_rank); - - MPI_Comm_free(&md->mdhim_client_comm); - MPI_Comm_free(&md->mdhim_comm); - free(md); - - //Close MLog - mlog_close(); - - return MDHIM_SUCCESS; -} - -/** - * Commits outstanding MDHIM writes - collective call - * - * @param md main MDHIM struct - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int mdhimCommit(struct mdhim_t *md, struct index_t *index) { - int ret = MDHIM_SUCCESS; - struct mdhim_basem_t *cm; - struct mdhim_rm_t *rm = NULL; - - MPI_Barrier(md->mdhim_client_comm); - //If I'm a range server, send a commit message to myself - if (im_range_server(index)) { - cm = malloc(sizeof(struct mdhim_basem_t)); - cm->mtype = MDHIM_COMMIT; - cm->index = index->id; - cm->index_type = index->type; - rm = local_client_commit(md, cm); - if (!rm || rm->error) { - ret = MDHIM_ERROR; - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while committing database in mdhimCommit", - md->mdhim_rank); - } - - if (rm) { - free(rm); - } - } - - MPI_Barrier(md->mdhim_client_comm); - - return ret; -} - -/** - * Inserts a single record into MDHIM - * - * @param md main MDHIM struct - * @param primary_key pointer to key to store - * @param primary_key_len the length of the key - * @param value pointer to the value to store - * @param value_len the length of the value - * @param secondary_info secondary global and local information for - inserting secondary global and local keys - * @return mdhim_brm_t * or NULL on error - */ -struct mdhim_brm_t *mdhimPut(struct mdhim_t *md, - /*Primary key */ - void *primary_key, int primary_key_len, - void *value, int value_len, - /* Optional secondary global and local keys */ - struct secondary_info *secondary_global_info, - struct secondary_info *secondary_local_info) { - int i; - //Return message list - struct mdhim_brm_t *head; - void **primary_keys; - int *primary_key_lens; - //Return message from each _put_record casll - struct mdhim_brm_t *brm; - struct mdhim_rm_t *rm; - - brm = NULL; - rm = NULL; - head = NULL; - if (!primary_key || !primary_key_len || - !value || !value_len) { - return NULL; - } - - rm = _put_record(md, md->primary_index, primary_key, primary_key_len, value, value_len); - if (!rm || rm->error) { - return head; - } - - head = _create_brm(rm); - mdhim_full_release_msg(rm); - - //Insert the secondary local key if it was given - if (secondary_local_info && secondary_local_info->secondary_index && - secondary_local_info->secondary_keys && - secondary_local_info->secondary_key_lens && - secondary_local_info->num_keys) { - primary_keys = malloc(sizeof(void *) * secondary_local_info->num_keys); - primary_key_lens = malloc(sizeof(int) * secondary_local_info->num_keys); - for (i = 0; i < secondary_local_info->num_keys; i++) { - primary_keys[i] = primary_key; - primary_key_lens[i] = primary_key_len; - } - - brm = _bput_records(md, secondary_local_info->secondary_index, - secondary_local_info->secondary_keys, - secondary_local_info->secondary_key_lens, - primary_keys, primary_key_lens, - secondary_local_info->num_keys); - - free(primary_keys); - free(primary_key_lens); - if (!brm) { - return head; - } - - _concat_brm(head, brm); - } - - //Insert the secondary global key if it was given - if (secondary_global_info && secondary_global_info->secondary_index && - secondary_global_info->secondary_keys && - secondary_global_info->secondary_key_lens && - secondary_global_info->num_keys) { - primary_keys = malloc(sizeof(void *) * secondary_global_info->num_keys); - primary_key_lens = malloc(sizeof(int) * secondary_global_info->num_keys); - for (i = 0; i < secondary_global_info->num_keys; i++) { - primary_keys[i] = primary_key; - primary_key_lens[i] = primary_key_len; - } - brm = _bput_records(md, secondary_global_info->secondary_index, - secondary_global_info->secondary_keys, - secondary_global_info->secondary_key_lens, - primary_keys, primary_key_lens, - secondary_global_info->num_keys); - - free(primary_keys); - free(primary_key_lens); - if (!brm) { - return head; - } - - _concat_brm(head, brm); - } - - return head; -} - -/** - * Inserts a single record into an MDHIM secondary index - * - * @param md main MDHIM struct - * @param secondary_key pointer to key to store - * @param secondary_key_len the length of the key - * @param primary_key pointer to the primary_key - * @param primary_key_len the length of the value - * @return mdhim_brm_t * or NULL on error - */ -struct mdhim_brm_t *mdhimPutSecondary(struct mdhim_t *md, - struct index_t *secondary_index, - /*Secondary key */ - void *secondary_key, int secondary_key_len, - /* Primary key */ - void *primary_key, int primary_key_len) { - - //Return message list - struct mdhim_brm_t *head; - - //Return message from each _put_record casll - struct mdhim_rm_t *rm; - - rm = NULL; - head = NULL; - if (!secondary_key || !secondary_key_len || - !primary_key || !primary_key_len) { - return NULL; - } - - rm = _put_record(md, secondary_index, secondary_key, secondary_key_len, - primary_key, primary_key_len); - if (!rm || rm->error) { - return head; - } - - head = _create_brm(rm); - mdhim_full_release_msg(rm); - - return head; -} - -struct mdhim_brm_t *_bput_secondary_keys_from_info(struct mdhim_t *md, - struct secondary_bulk_info *secondary_info, - void **primary_keys, int *primary_key_lens, - int num_records) { - int i, j; - void **primary_keys_to_send; - int *primary_key_lens_to_send; - struct mdhim_brm_t *head, *new; - - head = new = NULL; - for (i = 0; i < num_records; i++) { - primary_keys_to_send = - malloc(secondary_info->num_keys[i] * sizeof(void *)); - primary_key_lens_to_send = - malloc(secondary_info->num_keys[i] * sizeof(int)); - - for (j = 0; j < secondary_info->num_keys[i]; j++) { - primary_keys_to_send[j] = primary_keys[i]; - primary_key_lens_to_send[j] = primary_key_lens[i]; - } - - new = _bput_records(md, secondary_info->secondary_index, - secondary_info->secondary_keys[i], - secondary_info->secondary_key_lens[i], - primary_keys_to_send, primary_key_lens_to_send, - secondary_info->num_keys[i]); - if (!head) { - head = new; - } else if (new) { - _concat_brm(head, new); - } - - free(primary_keys_to_send); - free(primary_key_lens_to_send); - } - - return head; -} - -/** - * Inserts multiple records into MDHIM - * - * @param md main MDHIM struct - * @param keys pointer to array of keys to store - * @param key_lens array with lengths of each key in keys - * @param values pointer to array of values to store - * @param value_lens array with lengths of each value - * @param num_records the number of records to store (i.e., the number of keys in keys array) - * @return mdhim_brm_t * or NULL on error - */ -struct mdhim_brm_t *mdhimBPut(struct mdhim_t *md, - void **primary_keys, int *primary_key_lens, - void **primary_values, int *primary_value_lens, - int num_records, - struct secondary_bulk_info *secondary_global_info, - struct secondary_bulk_info *secondary_local_info) { - struct mdhim_brm_t *head, *new; - - head = new = NULL; - if (!primary_keys || !primary_key_lens || - !primary_values || !primary_value_lens) { - return NULL; - } - - head = _bput_records(md, md->primary_index, primary_keys, primary_key_lens, - primary_values, primary_value_lens, num_records); - if (!head || head->error) { - return head; - } - - //Insert the secondary local keys if they were given - if (secondary_local_info && secondary_local_info->secondary_index && - secondary_local_info->secondary_keys && - secondary_local_info->secondary_key_lens) { - new = _bput_secondary_keys_from_info(md, secondary_local_info, primary_keys, - primary_key_lens, num_records); - if (new) { - _concat_brm(head, new); - } - } - - //Insert the secondary global keys if they were given - if (secondary_global_info && secondary_global_info->secondary_index && - secondary_global_info->secondary_keys && - secondary_global_info->secondary_key_lens) { - new = _bput_secondary_keys_from_info(md, secondary_global_info, primary_keys, - primary_key_lens, num_records); - if (new) { - _concat_brm(head, new); - } - } - - return head; -} - -/** - * Inserts multiple records into an MDHIM secondary index - * - * @param md main MDHIM struct - * @param index the secondary index to use - * @param keys pointer to array of keys to store - * @param key_lens array with lengths of each key in keys - * @param values pointer to array of values to store - * @param value_lens array with lengths of each value - * @param num_records the number of records to store (i.e., the number of keys in keys array) - * @return mdhim_brm_t * or NULL on error - */ -struct mdhim_brm_t *mdhimBPutSecondary(struct mdhim_t *md, struct index_t *secondary_index, - void **secondary_keys, int *secondary_key_lens, - void **primary_keys, int *primary_key_lens, - int num_records) { - struct mdhim_brm_t *head, *new; - - head = new = NULL; - if (!secondary_keys || !secondary_key_lens || - !primary_keys || !primary_key_lens) { - return NULL; - } - - head = _bput_records(md, secondary_index, secondary_keys, secondary_key_lens, - primary_keys, primary_key_lens, num_records); - if (!head || head->error) { - return head; - } - - return head; -} - -/** - * Retrieves a single record from MDHIM - * - * @param md main MDHIM struct - * @param key pointer to key to get value of or last key to start from if op is - (MDHIM_GET_NEXT or MDHIM_GET_PREV) - * @param key_len the length of the key - * @param op the operation type - * @return mdhim_getrm_t * or NULL on error - */ -struct mdhim_bgetrm_t *mdhimGet(struct mdhim_t *md, struct index_t *index, - void *key, int key_len, - int op) { - - void **keys; - int *key_lens; - struct mdhim_bgetrm_t *bgrm_head; - - if (op != MDHIM_GET_EQ && op != MDHIM_GET_PRIMARY_EQ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Invalid op specified for mdhimGet", - md->mdhim_rank); - return NULL; - } - - if (!index) { - index = md->primary_index; - } - - //Create an a array with the single key and key len passed in - keys = malloc(sizeof(void *)); - key_lens = malloc(sizeof(int)); - keys[0] = key; - key_lens[0] = key_len; - - //Get the linked list of return messages from mdhimBGet - bgrm_head = _bget_records(md, index, keys, key_lens, 1, 1, op); - - //Clean up - free(keys); - free(key_lens); - - return bgrm_head; -} - -/** - * Retrieves multiple records from MDHIM - * - * @param md main MDHIM struct - * @param keys pointer to array of keys to get values for - * @param key_lens array with lengths of each key in keys - * @param num_records the number of keys to get (i.e., the number of keys in keys array) - * @return mdhim_bgetrm_t * or NULL on error - */ -struct mdhim_bgetrm_t *mdhimBGet(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - int num_keys, int op) { - struct mdhim_bgetrm_t *bgrm_head, *lbgrm; - void **primary_keys; - int *primary_key_lens, plen; - struct index_t *primary_index; - int i; - - if (op != MDHIM_GET_EQ && op != MDHIM_GET_PRIMARY_EQ && op != MDHIM_RANGE_BGET) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Invalid operation for mdhimBGet", - md->mdhim_rank); - return NULL; - } - - //Check to see that we were given a sane amount of records - if (num_keys > MAX_BULK_OPS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Too many bulk operations requested in mdhimBGet", - md->mdhim_rank); - return NULL; - } - - if (!index) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Invalid index specified", - md->mdhim_rank); - return NULL; - } - - bgrm_head = _bget_records(md, index, keys, key_lens, num_keys, 1, op); - if (!bgrm_head) { - return NULL; - } - - if (op == MDHIM_GET_PRIMARY_EQ) { - //Get the number of keys/values we received - plen = 0; - while (bgrm_head) { - for (i = 0; i < bgrm_head->num_keys; i++) - plen++; - bgrm_head = bgrm_head->next; - } - - if (plen > MAX_BULK_OPS) { - printf("plen is %d, MAX_BULK_OPS is %d\n", plen, - MAX_BULK_OPS); - fflush(stdout); - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Too many bulk operations would be performed " - "with the MDHIM_GET_PRIMARY_EQ operation. Limiting " - "request to : %u key/values", - md->mdhim_rank, MAX_BULK_OPS); - plen = MAX_BULK_OPS - 1; - } - - primary_keys = malloc(sizeof(void *) * plen); - primary_key_lens = malloc(sizeof(int) * plen); - //Initialize the primary keys array and key lens array - memset(primary_keys, 0, sizeof(void *) * plen); - memset(primary_key_lens, 0, sizeof(int) * plen); - - //Get the primary keys from the previously received messages' values - plen = 0; - while (bgrm_head) { - for (i = 0; i < bgrm_head->num_keys && plen < MAX_BULK_OPS ; i++) { - primary_keys[plen] = malloc(bgrm_head->value_lens[i]); - memcpy(primary_keys[plen], bgrm_head->values[i], - bgrm_head->value_lens[i]); - primary_key_lens[plen] = bgrm_head->value_lens[i]; - plen++; - } - - lbgrm = bgrm_head->next; - mdhim_full_release_msg(bgrm_head); - bgrm_head = lbgrm; - } - - primary_index = get_index(md, index->primary_id); - //Get the primary keys' values - bgrm_head = _bget_records(md, primary_index, - primary_keys, primary_key_lens, - plen, 1, MDHIM_GET_EQ); - - //Free up the primary keys and lens arrays - for (i = 0; i < plen; i++) { - free(primary_keys[i]); - } - - free(primary_keys); - free(primary_key_lens); - } - - //Return the head of the list - return bgrm_head; -} - - -/** - * Retrieves multiple sequential records from a single range server if they exist - * - * If the operation passed in is MDHIM_GET_NEXT or MDHIM_GET_PREV, this return all the records - * starting from the key passed in in the direction specified - * - * If the operation passed in is MDHIM_GET_FIRST and MDHIM_GET_LAST and the key is NULL, - * then this operation will return the keys starting from the first or last key - * - * If the operation passed in is MDHIM_GET_FIRST and MDHIM_GET_LAST and the key is not NULL, - * then this operation will return the keys starting the first key on - * the range server that the key resolves to - * - * @param md main MDHIM struct - * @param key pointer to the key to start getting next entries from - * @param key_len the length of the key - * @param num_records the number of successive keys to get - * @param op the operation to perform (i.e., MDHIM_GET_NEXT or MDHIM_GET_PREV) - * @return mdhim_bgetrm_t * or NULL on error - */ -struct mdhim_bgetrm_t *mdhimBGetOp(struct mdhim_t *md, struct index_t *index, - void *key, int key_len, - int num_records, int op) -{ - void **keys; - int *key_lens; - struct mdhim_bgetrm_t *bgrm_head; - printf("num_records is is %d, MAX_BULK_OPS is %d\n", num_records, - MAX_BULK_OPS); - fflush(stdout); - - if (num_records > MAX_BULK_OPS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "To many bulk operations requested in %s", - md->mdhim_rank, __func__); - return NULL; - } - - if (op == MDHIM_GET_EQ || op == MDHIM_GET_PRIMARY_EQ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Invalid op specified for mdhimGet", - md->mdhim_rank); - return NULL; - } - - //Create an a array with the single key and key len passed in - keys = malloc(sizeof(void *)); - key_lens = malloc(sizeof(int)); - keys[0] = key; - key_lens[0] = key_len; - - //Get the linked list of return messages from mdhimBGet - bgrm_head = _bget_records(md, index, keys, key_lens, 1, num_records, op); - - //Clean up - free(keys); - free(key_lens); - - return bgrm_head; -} - -struct mdhim_bgetrm_t *mdhimBGetRange(struct mdhim_t *md, struct index_t *index, - void *start_key, void *end_key, int key_len) { - struct mdhim_bgetrm_t *bgrm_head; - - //Get the linked list of return messages from mdhimBGet - bgrm_head = _bget_range_records(md, index, start_key, end_key, key_len); - - return bgrm_head; -} - - - -/** - * Deletes a single record from MDHIM - * - * @param md main MDHIM struct - * @param key pointer to key to delete - * @param key_len the length of the key - * @return mdhim_rm_t * or NULL on error - */ -struct mdhim_brm_t *mdhimDelete(struct mdhim_t *md, struct index_t *index, - void *key, int key_len) { - struct mdhim_brm_t *brm_head; - void **keys; - int *key_lens; - - keys = malloc(sizeof(void *)); - key_lens = malloc(sizeof(int)); - keys[0] = key; - key_lens[0] = key_len; - - brm_head = _bdel_records(md, index, keys, key_lens, 1); - - free(keys); - free(key_lens); - - return brm_head; -} - -/** - * Deletes multiple records from MDHIM - * - * @param md main MDHIM struct - * @param keys pointer to array of keys to delete - * @param key_lens array with lengths of each key in keys - * @param num_records the number of keys to delete (i.e., the number of keys in keys array) - * @return mdhim_brm_t * or NULL on error - */ -struct mdhim_brm_t *mdhimBDelete(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - int num_records) { - struct mdhim_brm_t *brm_head; - - - //Check to see that we were given a sane amount of records - if (num_records > MAX_BULK_OPS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "To many bulk operations requested in mdhimBGetOp", - md->mdhim_rank); - return NULL; - } - - brm_head = _bdel_records(md, index, keys, key_lens, num_records); - - //Return the head of the list - return brm_head; -} - - -/** - * Retrieves statistics from all the range servers - collective call - * - * @param md main MDHIM struct - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int mdhimStatFlush(struct mdhim_t *md, struct index_t *index) { - int ret; - - MPI_Barrier(md->mdhim_client_comm); - if ((ret = get_stat_flush(md, index)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while getting MDHIM stat data in mdhimStatFlush", - md->mdhim_rank); - } - MPI_Barrier(md->mdhim_client_comm); - - return ret; -} - -/** - * Sets the secondary_info structure used in mdhimPut - * - */ -struct secondary_info *mdhimCreateSecondaryInfo(struct index_t *secondary_index, - void **secondary_keys, int *secondary_key_lens, - int num_keys, int info_type) { - struct secondary_info *sinfo; - - - if (!secondary_index || !secondary_keys || - !secondary_key_lens || !num_keys) { - return NULL; - } - - if (info_type != SECONDARY_GLOBAL_INFO && - info_type != SECONDARY_LOCAL_INFO) { - return NULL; - } - - //Initialize the struct - sinfo = malloc(sizeof(struct secondary_info)); - memset(sinfo, 0, sizeof(struct secondary_info)); - - //Set the index fields - sinfo->secondary_index = secondary_index; - sinfo->secondary_keys = secondary_keys; - sinfo->secondary_key_lens = secondary_key_lens; - sinfo->num_keys = num_keys; - sinfo->info_type = info_type; - - return sinfo; -} - -void mdhimReleaseSecondaryInfo(struct secondary_info *si) { - free(si); - - return; -} - -/** - * Sets the secondary_info structure used in mdhimBPut - * - */ -struct secondary_bulk_info *mdhimCreateSecondaryBulkInfo(struct index_t *secondary_index, - void ***secondary_keys, - int **secondary_key_lens, - int *num_keys, int info_type) { - - struct secondary_bulk_info *sinfo; - - if (!secondary_index || !secondary_keys || - !secondary_key_lens || !num_keys) { - return NULL; - } - - if (info_type != SECONDARY_GLOBAL_INFO && - info_type != SECONDARY_LOCAL_INFO) { - return NULL; - } - - //Initialize the struct - sinfo = malloc(sizeof(struct secondary_bulk_info)); - memset(sinfo, 0, sizeof(struct secondary_bulk_info)); - - //Set the index fields - sinfo->secondary_index = secondary_index; - sinfo->secondary_keys = secondary_keys; - sinfo->secondary_key_lens = secondary_key_lens; - sinfo->num_keys = num_keys; - sinfo->info_type = info_type; - - return sinfo; -} - -void mdhimReleaseSecondaryBulkInfo(struct secondary_bulk_info *si) { - free(si); - - return; -} diff --git a/meta/src/mdhim.h b/meta/src/mdhim.h deleted file mode 100644 index 4a5366dd0..000000000 --- a/meta/src/mdhim.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __MDHIM_H -#define __MDHIM_H - -#include -#include -#include -#include "data_store.h" -#include "range_server.h" -#include "messages.h" -#include "partitioner.h" -#include "Mlog2/mlog2.h" -#include "Mlog2/mlogfacs2.h" -#include "mdhim_options.h" -#include "indexes.h" -#include "mdhim_private.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -#define MDHIM_SUCCESS 0 -#define MDHIM_ERROR -1 -#define MDHIM_DB_ERROR -2 - -#define SECONDARY_GLOBAL_INFO 1 -#define SECONDARY_LOCAL_INFO 2 - -/* - * mdhim data - * Contains client communicator - * Contains a list of range servers - * Contains a pointer to mdhim_rs_t if rank is a range server - */ -struct mdhim_t { - //This communicator will include every process in the application, but is separate from main the app - //It is used for sending and receiving to and from the range servers - MPI_Comm mdhim_comm; - pthread_mutex_t *mdhim_comm_lock; - - //This communicator will include every process in the application, but is separate from the app - //It is used for barriers for clients - MPI_Comm mdhim_client_comm; - - //The rank in the mdhim_comm - int mdhim_rank; - //The size of mdhim_comm - int mdhim_comm_size; - //Flag to indicate mdhimClose was called - volatile int shutdown; - //A pointer to the primary index - struct index_t *primary_index; - //A linked list of range servers - struct index_t *indexes; - // The hash to hold the indexes by name - struct index_t *indexes_by_name; - - //Lock to allow concurrent readers and a single writer to the remote_indexes hash table - pthread_rwlock_t *indexes_lock; - - //The range server structure which is used only if we are a range server - mdhim_rs_t *mdhim_rs; - //The mutex used if receiving from ourselves - pthread_mutex_t *receive_msg_mutex; - //The condition variable used if receiving from ourselves - pthread_cond_t *receive_msg_ready_cv; - /* The receive msg, which is sent to the client by the - range server running in the same process */ - void *receive_msg; - //Options for DB creation - mdhim_options_t *db_opts; -}; - -struct secondary_info { - struct index_t *secondary_index; - void **secondary_keys; - int *secondary_key_lens; - int num_keys; - int info_type; -}; - -struct secondary_bulk_info { - struct index_t *secondary_index; - void ***secondary_keys; - int **secondary_key_lens; - int *num_keys; - int info_type; -}; - -struct mdhim_t *mdhimInit(void *appComm, struct mdhim_options_t *opts); -int mdhimClose(struct mdhim_t *md); -int mdhimCommit(struct mdhim_t *md, struct index_t *index); -int mdhimStatFlush(struct mdhim_t *md, struct index_t *index); -struct mdhim_brm_t *mdhimPut(struct mdhim_t *md, - void *key, int key_len, - void *value, int value_len, - struct secondary_info *secondary_global_info, - struct secondary_info *secondary_local_info); -struct mdhim_brm_t *mdhimPutSecondary(struct mdhim_t *md, - struct index_t *secondary_index, - /*Secondary key */ - void *secondary_key, int secondary_key_len, - /* Primary key */ - void *primary_key, int primary_key_len); -struct mdhim_brm_t *mdhimBPut(struct mdhim_t *md, - void **primary_keys, int *primary_key_lens, - void **primary_values, int *primary_value_lens, - int num_records, - struct secondary_bulk_info *secondary_global_info, - struct secondary_bulk_info *secondary_local_info); -struct mdhim_bgetrm_t *mdhimGet(struct mdhim_t *md, struct index_t *index, - void *key, int key_len, - int op); -struct mdhim_bgetrm_t *mdhimBGet(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - int num_records, int op); -struct mdhim_bgetrm_t *mdhimBGetOp(struct mdhim_t *md, struct index_t *index, - void *key, int key_len, - int num_records, int op); - -struct mdhim_bgetrm_t *mdhimBGetRange(struct mdhim_t *md, struct index_t *index, - void *start_key, void *end_key, int key_len); - -struct mdhim_brm_t *mdhimDelete(struct mdhim_t *md, struct index_t *index, - void *key, int key_len); -struct mdhim_brm_t *mdhimBDelete(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - int num_keys); -void mdhim_release_recv_msg(void *msg); -struct secondary_info *mdhimCreateSecondaryInfo(struct index_t *secondary_index, - void **secondary_keys, int *secondary_key_lens, - int num_keys, int info_type); - -void mdhimReleaseSecondaryInfo(struct secondary_info *si); -struct secondary_bulk_info *mdhimCreateSecondaryBulkInfo(struct index_t *secondary_index, - void ***secondary_keys, - int **secondary_key_lens, - int *num_keys, int info_type); -void mdhimReleaseSecondaryBulkInfo(struct secondary_bulk_info *si); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/meta/src/mdhim_options.c b/meta/src/mdhim_options.c deleted file mode 100644 index dd19e33cb..000000000 --- a/meta/src/mdhim_options.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -/* - * DB usage options. - * Location and name of DB, type of DataSotre primary key type, - */ - -#include -#include -#include -#include -#include "mdhim_options.h" - -// Default path to a local path and name, levelDB=2, int_key_type=1, yes_create_new=1 -// and debug=1 (mlog_CRIT) - -#define MANIFEST_FILE_NAME "/mdhim_manifest_" - -struct mdhim_options_t *mdhim_options_init() -{ - struct mdhim_options_t* opts; - opts = malloc(sizeof(struct mdhim_options_t)); - - opts->db_path = "./"; - opts->db_name = "mdhimTstDB-"; - opts->manifest_path = NULL; - opts->db_type = 2; - opts->db_key_type = 1; - opts->db_create_new = 1; - opts->db_value_append = MDHIM_DB_OVERWRITE; - - opts->db_host = "localhost"; - opts->dbs_host = "localhost"; - opts->db_user = "test"; - opts->db_upswd = "pass"; - opts->dbs_user = "test"; - opts->dbs_upswd = "pass"; - - - opts->debug_level = 1; - opts->rserver_factor = 1; - opts->max_recs_per_slice = 100000; - opts->db_paths = NULL; - opts->num_paths = 0; - opts->num_wthreads = 1; - - set_manifest_path(opts, "./"); - return opts; -} - -int check_path_length(mdhim_options_t* opts, char *path) { - int path_len; - int ret = 0; - - path_len = strlen(path) + 1; - if (((!opts->db_name && path_len < PATH_MAX) || - ((path_len + strlen(opts->db_name)) < PATH_MAX)) && - (path_len + strlen(MANIFEST_FILE_NAME)) < PATH_MAX) { - ret = 1; - } else { - printf("Path: %s exceeds: %d bytes, so it won't be used\n", path, PATH_MAX); - } - - return ret; -} - -void set_manifest_path(mdhim_options_t* opts, char *path) { - char *manifest_path; - int path_len = 0; - - if (opts->manifest_path) { - free(opts->manifest_path); - opts->manifest_path = NULL; - } - - path_len = strlen(path) + strlen(MANIFEST_FILE_NAME) + 1; - manifest_path = malloc(path_len); - sprintf(manifest_path, "%s%s", path, MANIFEST_FILE_NAME); - opts->manifest_path = manifest_path; -} - -void mdhim_options_set_login_c(mdhim_options_t* opts, char* db_hl, char *db_ln, char *db_pw, char *dbs_hl, char *dbs_ln, char *dbs_pw){ - opts->db_host = db_hl; - opts->db_user = db_ln; - opts->db_upswd = db_pw; - opts->dbs_host = dbs_hl; - opts->dbs_user = dbs_ln; - opts->dbs_upswd = dbs_pw; - -} -void mdhim_options_set_db_path(mdhim_options_t* opts, char *path) -{ - int ret; - - if (!path) { - return; - } - - ret = check_path_length(opts, path); - if (ret) { - opts->db_path = path; - set_manifest_path(opts, path); - } -}; - -void mdhim_options_set_db_paths(struct mdhim_options_t* opts, char **paths, int num_paths) -{ - int i = 0; - int ret; - int verified_paths = -1; - - if (num_paths <= 0) { - return; - } - - opts->db_paths = malloc(sizeof(char *) * num_paths); - for (i = 0; i < num_paths; i++) { - if (!paths[i]) { - continue; - } - - ret = check_path_length(opts, paths[i]); - if (!ret) { - continue; - } - if (!i) { - set_manifest_path(opts, paths[i]); - } - - verified_paths++; - opts->db_paths[verified_paths] = malloc(strlen(paths[i]) + 1); - sprintf(opts->db_paths[verified_paths], "%s", paths[i]); - } - - opts->num_paths = ++verified_paths; -}; - -void mdhim_options_set_db_name(mdhim_options_t* opts, char *name) -{ - opts->db_name = name; -}; - -void mdhim_options_set_db_type(mdhim_options_t* opts, int type) -{ - opts->db_type = type; -}; - -void mdhim_options_set_key_type(mdhim_options_t* opts, int key_type) -{ - opts->db_key_type = key_type; -}; - -void mdhim_options_set_create_new_db(mdhim_options_t* opts, int create_new) -{ - opts->db_create_new = create_new; -}; - -void mdhim_options_set_debug_level(mdhim_options_t* opts, int dbug) -{ - opts->debug_level = dbug; -}; - -void mdhim_options_set_value_append(mdhim_options_t* opts, int append) -{ - opts->db_value_append = append; -}; - -void mdhim_options_set_server_factor(mdhim_options_t* opts, int server_factor) -{ - opts->rserver_factor = server_factor; -}; - -void mdhim_options_set_max_recs_per_slice(mdhim_options_t* opts, uint64_t max_recs_per_slice) -{ - opts->max_recs_per_slice = max_recs_per_slice; -}; - -void mdhim_options_set_num_worker_threads(mdhim_options_t* opts, int num_wthreads) -{ - if (num_wthreads > 0) { - opts->num_wthreads = num_wthreads; - } -}; - -void mdhim_options_destroy(mdhim_options_t *opts) { - int i; - - for (i = 0; i < opts->num_paths; i++) { - free(opts->db_paths[i]); - } - - free(opts->manifest_path); - free(opts); -}; diff --git a/meta/src/mdhim_options.h b/meta/src/mdhim_options.h deleted file mode 100644 index 31e7370f1..000000000 --- a/meta/src/mdhim_options.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __OPTIONS_H -#define __OPTIONS_H - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif -/* Append option */ -#define MDHIM_DB_OVERWRITE 0 -#define MDHIM_DB_APPEND 1 - -// Options for the database (used when opening a MDHIM dataStore) -typedef struct mdhim_options_t { - // ------------------- - //Directory location of DBs - char *db_path; - - //Multiple paths of DBs - char **db_paths; - //Number of paths in db_paths - int num_paths; - - char *manifest_path; - - //Name of each DB (will be modified by adding "_" to create multiple - // unique DB for each rank server. - char *db_name; - - //Different types of dataStores - //LEVELDB=1 (from data_store.h) - int db_type; - - //Primary key type - //MDHIM_INT_KEY, MDHIM_LONG_INT_KEY, MDHIM_FLOAT_KEY, MDHIM_DOUBLE_KEY - //MDHIM_STRING_KEY, MDHIM_BYTE_KEY - //(from partitioner.h) - int db_key_type; - - //Force the creation of a new DB (deleting any previous versions if present) - int db_create_new; - - //Whether to append a value to an existing key or overwrite the value - //MDHIM_DB_APPEND to append or MDHIM_DB_OVERWRITE (default) - int db_value_append; - - //DEBUG level - int debug_level; - - //Used to determine the number of range servers which is based in - //if myrank % rserver_factor == 0, then myrank is a server. - // This option is used to set range_server_factor previously a defined var. - int rserver_factor; - - //Maximum size of a slice. A ranger server may server several slices. - uint64_t max_recs_per_slice; - - //Number of worker threads per range server - int num_wthreads; - - //Login Credentials - char *db_host; - char *dbs_host; - char *db_user; - char *db_upswd; - char *dbs_user; - char *dbs_upswd; - - -} mdhim_options_t; - -struct mdhim_options_t* mdhim_options_init(); -void mdhim_options_set_db_path(struct mdhim_options_t* opts, char *path); -void mdhim_options_set_db_paths(struct mdhim_options_t* opts, char **paths, int num_paths); -void mdhim_options_set_db_name(struct mdhim_options_t* opts, char *name); -void mdhim_options_set_db_type(struct mdhim_options_t* opts, int type); -void mdhim_options_set_key_type(struct mdhim_options_t* opts, int key_type); -void mdhim_options_set_create_new_db(struct mdhim_options_t* opts, int create_new); -void mdhim_options_set_login_c(struct mdhim_options_t* opts, char* db_hl, char *db_ln, char *db_pw, char *dbs_hl, char *dbs_ln, char *dbs_pw); -void mdhim_options_set_debug_level(struct mdhim_options_t* opts, int dbug); -void mdhim_options_set_value_append(struct mdhim_options_t* opts, int append); -void mdhim_options_set_server_factor(struct mdhim_options_t* opts, int server_factor); -void mdhim_options_set_max_recs_per_slice(struct mdhim_options_t* opts, uint64_t max_recs_per_slice); -void mdhim_options_set_num_worker_threads(struct mdhim_options_t* opts, int num_wthreads); -void set_manifest_path(mdhim_options_t* opts, char *path); -void mdhim_options_destroy(struct mdhim_options_t *opts); -#ifdef __cplusplus -} -#endif -#endif diff --git a/meta/src/mdhim_private.c b/meta/src/mdhim_private.c deleted file mode 100644 index 399ab0e0f..000000000 --- a/meta/src/mdhim_private.c +++ /dev/null @@ -1,671 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include "mdhim.h" -#include "client.h" -#include "local_client.h" -#include "partitioner.h" -#include "indexes.h" -#include -#include - -struct timeval localgetstart, localgetend; -double localgettime=0; - -struct timeval localrangestart, localrangeend; -double localrangetime=0; - -struct timeval localbpmstart, localbpmend; -double localbpmtime=0; -double calrangetime=0; - -struct timeval localcpystart, localcpyend; -double localcpytime = 0; -struct timeval localassignstart, localassignend; -double localassigntime = 0; -struct timeval localgetcpystart, localgetcpyend; -double localgetcpytime = 0; -struct timeval localmallocstart, localmallocend; -double localmalloctime = 0; - -struct timeval confgetstart; -double confgettime=0; -struct mdhim_rm_t *_put_record(struct mdhim_t *md, struct index_t *index, - void *key, int key_len, - void *value, int value_len) { - struct mdhim_rm_t *rm = NULL; - rangesrv_list *rl, *rlp; - int ret; - struct mdhim_putm_t *pm; - struct index_t *lookup_index, *put_index; - - put_index = index; - if (index->type == LOCAL_INDEX) { - lookup_index = get_index(md, index->primary_id); - if (!lookup_index) { - return NULL; - } - } else { - lookup_index = index; - } - - //Get the range server this key will be sent to - if (put_index->type == LOCAL_INDEX) { - if ((rl = get_range_servers(md, lookup_index, value, value_len)) == - NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in mdhimBPut", - md->mdhim_rank); - return NULL; - } - } else { - //Get the range server this key will be sent to - if ((rl = get_range_servers(md, lookup_index, key, key_len)) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in _put_record", - md->mdhim_rank); - return NULL; - } - } - - while (rl) { - pm = malloc(sizeof(struct mdhim_putm_t)); - if (!pm) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while allocating memory in _put_record", - md->mdhim_rank); - return NULL; - } - - //Initialize the put message - pm->basem.mtype = MDHIM_PUT; - pm->key = key; - pm->key_len = key_len; - pm->value = value; - pm->value_len = value_len; - pm->basem.server_rank = rl->ri->rank; - pm->basem.index = put_index->id; - pm->basem.index_type = put_index->type; - - //Test if I'm a range server - ret = im_range_server(put_index); - - //If I'm a range server and I'm the one this key goes to, send the message locally - if (ret && md->mdhim_rank == pm->basem.server_rank) { - rm = local_client_put(md, pm); - } else { - //Send the message through the network as this message is for another rank - rm = client_put(md, pm); - free(pm); - } - - rl = rl->next; - rlp = rl; - free(rlp); - } - - return rm; -} - -/* Creates a linked list of mdhim_rm_t messages */ -struct mdhim_brm_t *_create_brm(struct mdhim_rm_t *rm) { - struct mdhim_brm_t *brm; - - if (!rm) { - return NULL; - } - - brm = malloc(sizeof(struct mdhim_brm_t)); - memset(brm, 0, sizeof(struct mdhim_brm_t)); - brm->error = rm->error; - brm->basem.mtype = rm->basem.mtype; - brm->basem.index = rm->basem.index; - brm->basem.index_type = rm->basem.index_type; - brm->basem.server_rank = rm->basem.server_rank; - - return brm; -} - -/* adds new to the list pointed to by head */ -void _concat_brm(struct mdhim_brm_t *head, struct mdhim_brm_t *addition) { - struct mdhim_brm_t *brmp; - - brmp = head; - while (brmp->next) { - brmp = brmp->next; - } - - brmp->next = addition; - - return; -} - -struct mdhim_brm_t *_bput_records(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - void **values, int *value_lens, - int num_keys) { - struct mdhim_bputm_t **bpm_list, *lbpm; - struct mdhim_bputm_t *bpm; - struct mdhim_brm_t *brm, *brm_head; - struct mdhim_rm_t *rm; - int i; - rangesrv_list *rl, *rlp; - struct index_t *lookup_index, *put_index; - - put_index = index; - if (index->type == LOCAL_INDEX) { - lookup_index = get_index(md, index->primary_id); - if (!lookup_index) { - return NULL; - } - } else { - lookup_index = index; - } - - //Check to see that we were given a sane amount of records - if (num_keys > MAX_BULK_OPS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "To many bulk operations requested in mdhimBGetOp", - md->mdhim_rank); - return NULL; - } - - //The message to be sent to ourselves if necessary - lbpm = NULL; - //Create an array of bulk put messages that holds one bulk message per range server - bpm_list = malloc(sizeof(struct mdhim_bputm_t *) * lookup_index->num_rangesrvs); - - //Initialize the pointers of the list to null - for (i = 0; i < lookup_index->num_rangesrvs; i++) { - bpm_list[i] = NULL; - } - - /* Go through each of the records to find the range server(s) the record belongs to. - If there is not a bulk message in the array for the range server the key belongs to, - then it is created. Otherwise, the data is added to the existing message in the array.*/ - gettimeofday(&localcpystart, NULL); - for (i = 0; i < num_keys && i < MAX_BULK_OPS; i++) { - //Get the range server this key will be sent to - if (put_index->type == LOCAL_INDEX) { - if ((rl = get_range_servers(md, lookup_index, values[i], value_lens[i])) == - NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in mdhimBPut", - md->mdhim_rank); - continue; - } - } else { - gettimeofday(&localrangestart, NULL); - if ((rl = get_range_servers(md, lookup_index, keys[i], key_lens[i])) == - NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in mdhimBPut", - md->mdhim_rank); - continue; - } - gettimeofday(&localrangeend, NULL); - localrangetime += 1000000 * (localrangeend.tv_sec - \ - localrangestart.tv_sec) + localrangeend.tv_usec - \ - localrangestart.tv_usec; - } - - //There could be more than one range server returned in the case of the local index - while (rl) { - gettimeofday(&localbpmstart, NULL); - if (rl->ri->rank != md->mdhim_rank) { - //Set the message in the list for this range server - bpm = bpm_list[rl->ri->rangesrv_num - 1]; - } else { - //Set the local message - bpm = lbpm; - } - gettimeofday(&localbpmend, NULL); - localbpmtime += 1000000 * (localbpmend.tv_sec - localbpmstart.tv_sec) + \ - localbpmend.tv_usec - localbpmstart.tv_usec; - //If the message doesn't exist, create one - gettimeofday(&localmallocstart, NULL); - if (!bpm) { - bpm = malloc(sizeof(struct mdhim_bputm_t)); - bpm->keys = malloc(sizeof(void *) * MAX_BULK_OPS); - bpm->key_lens = malloc(sizeof(int) * MAX_BULK_OPS); - bpm->values = malloc(sizeof(void *) * MAX_BULK_OPS); - bpm->value_lens = malloc(sizeof(int) * MAX_BULK_OPS); - bpm->num_keys = 0; - bpm->basem.server_rank = rl->ri->rank; - bpm->basem.mtype = MDHIM_BULK_PUT; - bpm->basem.index = put_index->id; - bpm->basem.index_type = put_index->type; - if (rl->ri->rank != md->mdhim_rank) { - bpm_list[rl->ri->rangesrv_num - 1] = bpm; - } else { - lbpm = bpm; - } - } - gettimeofday(&localmallocend, NULL); - localmalloctime += 1000000 * (localmallocend.tv_sec - \ - localmallocstart.tv_sec) + localmallocend.tv_usec - \ - localmallocstart.tv_usec; - - gettimeofday(&localassignstart, NULL); - //Add the key, lengths, and data to the message - bpm->keys[bpm->num_keys] = keys[i]; - bpm->key_lens[bpm->num_keys] = key_lens[i]; - bpm->values[bpm->num_keys] = values[i]; - bpm->value_lens[bpm->num_keys] = value_lens[i]; - bpm->num_keys++; - rlp = rl; - rl = rl->next; - free(rlp); - gettimeofday(&localassignend, NULL); - localassigntime += 1000000 * (localassignend.tv_sec - \ - localassignstart.tv_sec) + localassignend.tv_usec - \ - localassignstart.tv_usec; - } - } - gettimeofday(&localcpyend, NULL); - localcpytime += 1000000 * (localcpyend.tv_sec - localcpystart.tv_sec) + \ - localcpyend.tv_usec - localcpystart.tv_usec; - - //Make a list out of the received messages to return - brm_head = client_bput(md, put_index, bpm_list); - if (lbpm) { - rm = local_client_bput(md, lbpm); - if (rm) { - brm = _create_brm(rm); - brm->next = brm_head; - brm_head = brm; - free(rm); - } - } - - //Free up messages sent - for (i = 0; i < lookup_index->num_rangesrvs; i++) { - if (!bpm_list[i]) { - continue; - } - - free(bpm_list[i]->keys); - free(bpm_list[i]->values); - free(bpm_list[i]->key_lens); - free(bpm_list[i]->value_lens); - free(bpm_list[i]); - } - - free(bpm_list); - - //Return the head of the list - return brm_head; -} - -struct mdhim_bgetrm_t *_bget_records(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - int num_keys, int num_records, int op) { - struct mdhim_bgetm_t **bgm_list; - struct mdhim_bgetm_t *bgm, *lbgm; - struct mdhim_bgetrm_t *bgrm_head, *lbgrm; - int i; - rangesrv_list *rl = NULL, *rlp; - - //The message to be sent to ourselves if necessary - lbgm = NULL; - //Create an array of bulk get messages that holds one bulk message per range server - bgm_list = malloc(sizeof(struct mdhim_bgetm_t *) * index->num_rangesrvs); - //Initialize the pointers of the list to null - for (i = 0; i < index->num_rangesrvs; i++) { - bgm_list[i] = NULL; - } - - /* Go through each of the records to find the range server the record belongs to. - If there is not a bulk message in the array for the range server the key belongs to, - then it is created. Otherwise, the data is added to the existing message in the array.*/ - for (i = 0; i < num_keys && i < MAX_BULK_OPS; i++) { - //Get the range server this key will be sent to - if ((op == MDHIM_GET_EQ || op == MDHIM_GET_PRIMARY_EQ || op == MDHIM_RANGE_BGET) && - index->type != LOCAL_INDEX && - (rl = get_range_servers(md, index, keys[i], key_lens[i])) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in mdhimBget", - md->mdhim_rank); - free(bgm_list); - return NULL; - } else if ((index->type == LOCAL_INDEX || - (op != MDHIM_GET_EQ && op != MDHIM_GET_PRIMARY_EQ && op != MDHIM_RANGE_BGET)) && - (rl = get_range_servers_from_stats(md, index, keys[i], key_lens[i], op)) == - NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in mdhimBget", - md->mdhim_rank); - free(bgm_list); - return NULL; - } - - gettimeofday(&localgetcpystart, NULL); - while (rl) { - if (rl->ri->rank != md->mdhim_rank) { - //Set the message in the list for this range server - bgm = bgm_list[rl->ri->rangesrv_num - 1]; - } else { - //Set the local message - bgm = lbgm; - } - - //If the message doesn't exist, create one - if (!bgm) { - bgm = malloc(sizeof(struct mdhim_bgetm_t)); - //bgm->keys = malloc(sizeof(void *) * MAX_BULK_OPS); - //bgm->key_lens = malloc(sizeof(int) * MAX_BULK_OPS); - bgm->keys = malloc(sizeof(void *) * num_keys); - bgm->key_lens = malloc(sizeof(int) * num_keys); - bgm->num_keys = 0; - bgm->num_recs = num_records; - bgm->basem.server_rank = rl->ri->rank; - bgm->basem.mtype = MDHIM_BULK_GET; - bgm->op = (op == MDHIM_GET_PRIMARY_EQ) ? MDHIM_GET_EQ : op; - bgm->basem.index = index->id; - bgm->basem.index_type = index->type; - if (rl->ri->rank != md->mdhim_rank) { - bgm_list[rl->ri->rangesrv_num - 1] = bgm; - } else { - lbgm = bgm; - } - } - - //Add the key, lengths, and data to the message - bgm->keys[bgm->num_keys] = keys[i]; - bgm->key_lens[bgm->num_keys] = key_lens[i]; - - bgm->num_keys++; - rlp = rl; - rl = rl->next; - free(rlp); - } - gettimeofday(&localgetcpyend, NULL); - localgetcpytime += 1000000 * (localgetcpyend.tv_sec - \ - localgetcpystart.tv_sec) + localgetcpyend.tv_usec - \ - localgetcpystart.tv_usec; - } - - //Make a list out of the received messages to return - gettimeofday(&localgetstart, NULL); - bgrm_head = client_bget(md, index, bgm_list); - if (lbgm) { - lbgrm = local_client_bget(md, lbgm); - lbgrm->next = bgrm_head; - bgrm_head = lbgrm; - } - gettimeofday(&localgetend, NULL); - localgettime += 1000000*(localgetend.tv_sec-localgetstart.tv_sec)+\ - localgetend.tv_usec-localgetstart.tv_usec; - - for (i = 0; i < index->num_rangesrvs; i++) { - if (!bgm_list[i]) { - continue; - } - - free(bgm_list[i]->keys); - free(bgm_list[i]->key_lens); - free(bgm_list[i]); - } - - free(bgm_list); - - return bgrm_head; -} - -struct mdhim_bgetrm_t *_bget_range_records(struct mdhim_t *md, struct index_t *index, - void *start_key, void *end_key, int key_len) { - struct mdhim_bgetm_t **bgm_list; - struct mdhim_bgetm_t *bgm, *lbgm; - struct mdhim_bgetrm_t *bgrm_head, *lbgrm; - int i; - rangesrv_list *rl = NULL, *rlp; - - gettimeofday(&localgetstart, NULL); - //The message to be sent to ourselves if necessary - lbgm = NULL; - //Create an array of bulk get messages that holds one bulk message per range server - bgm_list = malloc(sizeof(struct mdhim_bgetm_t *) * index->num_rangesrvs); - //Initialize the pointers of the list to null - for (i = 0; i < index->num_rangesrvs; i++) { - bgm_list[i] = NULL; - } - - //Get the range server this key will be sent to - if ((rl = get_range_servers_from_range(md, index, start_key, end_key, key_len)) == - NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in mdhimBget", - md->mdhim_rank); - free(bgm_list); - return NULL; - } - - gettimeofday(&confgetstart, NULL); - calrangetime+=1000000*(confgetstart.tv_sec-localgetstart.tv_sec)+\ - confgetstart.tv_usec-localgetstart.tv_usec; - while (rl) { - if (rl->ri->rank != md->mdhim_rank) { - //Set the message in the list for this range server - bgm = bgm_list[rl->ri->rangesrv_num - 1]; - } else { - //Set the local message - bgm = lbgm; - } - - //If the message doesn't exist, create one - if (!bgm) { - bgm = malloc(sizeof(struct mdhim_bgetm_t)); - //bgm->keys = malloc(sizeof(void *) * MAX_BULK_OPS); - //bgm->key_lens = malloc(sizeof(int) * MAX_BULK_OPS); - bgm->keys = malloc(sizeof(void *)); - bgm->key_lens = malloc(sizeof(int)); - bgm->num_keys = 1; - bgm->keys[0] = NULL; - bgm->num_recs = 0; - bgm->basem.server_rank = rl->ri->rank; - bgm->basem.mtype = MDHIM_BULK_GET; - bgm->op = MDHIM_GET_NEXT; - bgm->basem.index = index->id; - bgm->basem.index_type = index->type; - if (rl->ri->rank != md->mdhim_rank) { - bgm_list[rl->ri->rangesrv_num - 1] = bgm; - } else { - lbgm = bgm; - } - } - - //Add the key, lengths, and data to the message - if (bgm->keys[0] == NULL) { - bgm->keys[0] = rl->ri->first_key; - bgm->key_lens[0] = key_len; - /* printf("the first key's fid is %ld, offset is %ld, key length is %ld, addr is %x\n", \ - *((long *)bgm->keys[0]), *(((long *)bgm->keys[0])+1), bgm->key_lens[0], bgm->keys[0]); - fflush(stdout); - */ - } - - bgm->num_recs+=rl->ri->num_recs; -// printf("here num_recs is %ld\n", bgm->num_recs); -// fflush(stdout); - rlp = rl; - rl = rl->next; - free(rlp); - } - - gettimeofday(&localgetend, NULL); - confgettime+=1000000*(localgetend.tv_sec-confgetstart.tv_sec)+\ - localgetend.tv_usec-confgetstart.tv_usec; - localgettime+=1000000*(localgetend.tv_sec-localgetstart.tv_sec)+ - localgetend.tv_usec-localgetstart.tv_usec; - - - //Make a list out of the received messages to return - bgrm_head = client_bget(md, index, bgm_list); - if (lbgm) { - lbgrm = local_client_bget(md, lbgm); - lbgrm->next = bgrm_head; - bgrm_head = lbgrm; - } - for (i = 0; i < index->num_rangesrvs; i++) { - if (!bgm_list[i]) { - continue; - } - - free(bgm_list[i]->keys); - free(bgm_list[i]->key_lens); - free(bgm_list[i]); - - } - - free(bgm_list); -/* printf("after freeing all these\n"); - fflush(stdout); -*/ - return bgrm_head; -} - -/** - * Deletes multiple records from MDHIM - * - * @param md main MDHIM struct - * @param keys pointer to array of keys to delete - * @param key_lens array with lengths of each key in keys - * @param num_keys the number of keys to delete (i.e., the number of keys in keys array) - * @return mdhim_brm_t * or NULL on error - */ -struct mdhim_brm_t *_bdel_records(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - int num_keys) { - struct mdhim_bdelm_t **bdm_list; - struct mdhim_bdelm_t *bdm, *lbdm; - struct mdhim_brm_t *brm, *brm_head; - struct mdhim_rm_t *rm; - int i; - rangesrv_list *rl; - - //The message to be sent to ourselves if necessary - lbdm = NULL; - //Create an array of bulk del messages that holds one bulk message per range server - bdm_list = malloc(sizeof(struct mdhim_bdelm_t *) * index->num_rangesrvs); - //Initialize the pointers of the list to null - for (i = 0; i < index->num_rangesrvs; i++) { - bdm_list[i] = NULL; - } - - /* Go through each of the records to find the range server the record belongs to. - If there is not a bulk message in the array for the range server the key belongs to, - then it is created. Otherwise, the data is added to the existing message in the array.*/ - for (i = 0; i < num_keys && i < MAX_BULK_OPS; i++) { - //Get the range server this key will be sent to - if (index->type != LOCAL_INDEX && - (rl = get_range_servers(md, index, keys[i], key_lens[i])) == - NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in mdhimBdel", - md->mdhim_rank); - continue; - } else if (index->type == LOCAL_INDEX && - (rl = get_range_servers_from_stats(md, index, keys[i], - key_lens[i], MDHIM_GET_EQ)) == - NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - " - "Error while determining range server in mdhimBdel", - md->mdhim_rank); - continue; - } - - if (rl->ri->rank != md->mdhim_rank) { - //Set the message in the list for this range server - bdm = bdm_list[rl->ri->rangesrv_num - 1]; - } else { - //Set the local message - bdm = lbdm; - } - - //If the message doesn't exist, create one - if (!bdm) { - bdm = malloc(sizeof(struct mdhim_bdelm_t)); - bdm->keys = malloc(sizeof(void *) * MAX_BULK_OPS); - bdm->key_lens = malloc(sizeof(int) * MAX_BULK_OPS); - bdm->num_keys = 0; - bdm->basem.server_rank = rl->ri->rank; - bdm->basem.mtype = MDHIM_BULK_DEL; - bdm->basem.index = index->id; - bdm->basem.index_type = index->type; - if (rl->ri->rank != md->mdhim_rank) { - bdm_list[rl->ri->rangesrv_num - 1] = bdm; - } else { - lbdm = bdm; - } - } - - //Add the key, lengths, and data to the message - bdm->keys[bdm->num_keys] = keys[i]; - bdm->key_lens[bdm->num_keys] = key_lens[i]; - bdm->num_keys++; - } - - //Make a list out of the received messages to return - brm_head = client_bdelete(md, index, bdm_list); - if (lbdm) { - rm = local_client_bdelete(md, lbdm); - brm = malloc(sizeof(struct mdhim_brm_t)); - brm->error = rm->error; - brm->basem.mtype = rm->basem.mtype; - brm->basem.index = rm->basem.index; - brm->basem.index_type = rm->basem.index_type; - brm->basem.server_rank = rm->basem.server_rank; - brm->next = brm_head; - brm_head = brm; - free(rm); - } - - for (i = 0; i < index->num_rangesrvs; i++) { - if (!bdm_list[i]) { - continue; - } - - free(bdm_list[i]->keys); - free(bdm_list[i]->key_lens); - free(bdm_list[i]); - } - - free(bdm_list); - - //Return the head of the list - return brm_head; -} diff --git a/meta/src/mdhim_private.h b/meta/src/mdhim_private.h deleted file mode 100644 index f6177b2a7..000000000 --- a/meta/src/mdhim_private.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include "mdhim.h" - -struct mdhim_rm_t *_put_record(struct mdhim_t *md, struct index_t *index, - void *key, int key_len, - void *value, int value_len); -struct mdhim_brm_t *_create_brm(struct mdhim_rm_t *rm); -void _concat_brm(struct mdhim_brm_t *head, struct mdhim_brm_t *addition); -struct mdhim_brm_t *_bput_records(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - void **values, int *value_lens, int num_records); -struct mdhim_bgetrm_t *_bget_records(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - int num_keys, int num_records, int op); - -struct mdhim_bgetrm_t *_bget_range_records(struct mdhim_t *md, struct index_t *index, - void *start_key, void *end_key, int key_len); - -struct mdhim_brm_t *_bdel_records(struct mdhim_t *md, struct index_t *index, - void **keys, int *key_lens, - int num_records); diff --git a/meta/src/messages.c b/meta/src/messages.c deleted file mode 100644 index ce452f50d..000000000 --- a/meta/src/messages.c +++ /dev/null @@ -1,2218 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - - -#include -#include -#include "mdhim.h" -#include "partitioner.h" -#include "messages.h" -#include -#include - -struct timeval recv_comm_start, recv_comm_end; -double recv_comm_time = 0; - -struct timeval packputstart, packputend; -double packputtime = 0; -struct timeval packgetstart, packgetend; -double packgettime = 0; -struct timeval packmpiputstart, packmpiputend; -double packmpiputtime = 0; -struct timeval packretgetstart, packretgetend; -double packretgettime = 0; -struct timeval packretputstart, packretputend; -double packretputtime = 0; - -void test_req_and_wait(struct mdhim_t *md, MPI_Request *req) { - int flag; - MPI_Status status; - int done = 0; - - while (!done) { - pthread_mutex_lock(md->mdhim_comm_lock); - (void) MPI_Test(req, &flag, &status); - //Unlock the mdhim_comm_lock - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (flag) { - done = 1; - } else { - usleep(100); - } - } -} - -/** - * send_rangesrv_work - * Sends a message to the range server at the given destination - * - * @param md main MDHIM struct - * @param dest destination to send to - * @param message pointer to message struct to send - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int send_rangesrv_work(struct mdhim_t *md, int dest, void *message) { - int return_code = MDHIM_ERROR; - void *sendbuf = NULL; - int sendsize = 0; - int mtype; - MPI_Request *req; - - //Pack the work message in into sendbuf and set sendsize - mtype = ((struct mdhim_basem_t *) message)->mtype; - switch(mtype) { - case MDHIM_PUT: - return_code = pack_put_message(md, (struct mdhim_putm_t *)message, &sendbuf, - &sendsize); - break; - case MDHIM_BULK_PUT: - return_code = pack_bput_message(md, (struct mdhim_bputm_t *)message, &sendbuf, - &sendsize); - break; - case MDHIM_BULK_GET: - return_code = pack_bget_message(md, (struct mdhim_bgetm_t *)message, &sendbuf, - &sendsize); - break; - case MDHIM_DEL: - return_code = pack_del_message(md, (struct mdhim_delm_t *)message, &sendbuf, - &sendsize); - break; - case MDHIM_BULK_DEL: - return_code = pack_bdel_message(md, (struct mdhim_bdelm_t *)message, &sendbuf, - &sendsize); - break; - case MDHIM_COMMIT: - return_code = pack_base_message(md, (struct mdhim_basem_t *)message, &sendbuf, - &sendsize); - break; - case MDHIM_CLOSE: - return_code = pack_base_message(md, (struct mdhim_basem_t *)message, &sendbuf, - &sendsize); - break; - default: - break; - } - - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: Packing message " - "failed before sending.", md->mdhim_rank); - return MDHIM_ERROR; - } - - req = malloc(sizeof(MPI_Request)); - //Send the size of the message - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Isend(&sendsize, 1, MPI_INT, dest, RANGESRV_WORK_SIZE_MSG, - md->mdhim_comm, req); - pthread_mutex_unlock(md->mdhim_comm_lock); - test_req_and_wait(md, req); - - if (return_code != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error sending work size message in send_rangesrv_work", - md->mdhim_rank); - free(req); - return MDHIM_ERROR; - } - - //Send the message - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Isend(sendbuf, sendsize, MPI_PACKED, dest, RANGESRV_WORK_MSG, - md->mdhim_comm, req); - pthread_mutex_unlock(md->mdhim_comm_lock); - test_req_and_wait(md, req); - free(req); - - if (return_code != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error sending work message in send_rangesrv_work", - md->mdhim_rank); - return MDHIM_ERROR; - } - - free(sendbuf); - return MDHIM_SUCCESS; -} - -/** - * send_all_rangesrv_work - * Sends multiple messages simultaneously and waits for them to all complete - * - * @param md main MDHIM struct - * @param messages double pointer to array of messages to send - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int send_all_rangesrv_work(struct mdhim_t *md, void **messages, int num_srvs) { - int return_code = MDHIM_ERROR; - void *sendbuf = NULL; - void **sendbufs; - int *sizes; - int sendsize = 0; - int mtype; - MPI_Request **reqs, **size_reqs; - MPI_Request *req; - int num_msgs; - int i, ret, flag, done; - void *mesg; - MPI_Status status; - int dest; - - ret = MDHIM_SUCCESS; - num_msgs = 0; - reqs = malloc(sizeof(MPI_Request *) * num_srvs); - size_reqs = malloc(sizeof(MPI_Request *) * num_srvs); - memset(reqs, 0, sizeof(MPI_Request *) * num_srvs); - memset(size_reqs, 0, sizeof(MPI_Request *) * num_srvs); - sendbufs = malloc(sizeof(void *) * num_srvs); - memset(sendbufs, 0, sizeof(void *) * num_srvs); - sizes = malloc(sizeof(int) * num_srvs); - memset(sizes, 0, sizeof(int) * num_srvs); - done = 0; - - //Send all messages at once - for (i = 0; i < num_srvs; i++) { - mesg = *(messages + i); - if (!mesg) { - continue; - } - - mtype = ((struct mdhim_basem_t *) mesg)->mtype; - dest = ((struct mdhim_basem_t *) mesg)->server_rank; - //Pack the work message in into sendbuf and set sendsize - switch(mtype) { - case MDHIM_BULK_PUT: - gettimeofday(&packputstart, NULL); - return_code = pack_bput_message(md, (struct mdhim_bputm_t *)mesg, &sendbuf, - &sendsize); - gettimeofday(&packputend, NULL); - packputtime += 1000000 * (packputend.tv_sec - packputstart.tv_sec)+\ - packputend.tv_usec - packputstart.tv_usec; - break; - case MDHIM_BULK_GET: - gettimeofday(&packgetstart, NULL); - return_code = pack_bget_message(md, (struct mdhim_bgetm_t *)mesg, &sendbuf, - &sendsize); - gettimeofday(&packgetend, NULL); - packgettime+=1000000 * (packgetend.tv_sec - packgetstart.tv_sec) + \ - packgetend.tv_usec - packgetstart.tv_usec; - break; - case MDHIM_BULK_DEL: - return_code = pack_bdel_message(md, (struct mdhim_bdelm_t *)mesg, &sendbuf, - &sendsize); - break; - default: - break; - } - - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: Packing message " - "failed before sending.", md->mdhim_rank); - ret = MDHIM_ERROR; - continue; - } - - sendbufs[num_msgs] = sendbuf; - sizes[num_msgs] = sendsize; - req = malloc(sizeof(MPI_Request)); - size_reqs[num_msgs] = req; - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Isend(&sizes[num_msgs], 1, MPI_INT, dest, RANGESRV_WORK_SIZE_MSG, - md->mdhim_comm, req); - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (return_code != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error sending work message in send_rangesrv_work", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - - req = malloc(sizeof(MPI_Request)); - reqs[num_msgs] = req; - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Isend(sendbuf, sizes[num_msgs], MPI_PACKED, dest, RANGESRV_WORK_MSG, - md->mdhim_comm, req); - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (return_code != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error sending work message in send_rangesrv_work", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - - num_msgs++; - } - - //Wait for messages to complete - while (done != num_msgs * 2) { - for (i = 0; i < num_msgs; i++) { - req = size_reqs[i]; - if (!req) { - continue; - } - - //Lock the mdhim_comm_lock - pthread_mutex_lock(md->mdhim_comm_lock); - ret = MPI_Test(req, &flag, &status); - //Unlock the mdhim_comm_lock - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (flag) { - free(req); - size_reqs[i] = NULL; - done++; - } - } - for (i = 0; i < num_msgs; i++) { - req = reqs[i]; - if (!req) { - continue; - } - - pthread_mutex_lock(md->mdhim_comm_lock); - ret = MPI_Test(req, &flag, &status); - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (flag) { - free(req); - reqs[i] = NULL; - done++; - } - } - - if (done != num_msgs * 2) { - usleep(100); - } - } - - for (i = 0; i < num_msgs; i++) { - if (!sendbufs[i]) { - continue; - } - free(sendbufs[i]); - } - - free(sendbufs); - free(size_reqs); - free(sizes); - free(reqs); - - return ret; -} - -/** - * receive_rangesrv_work message - * Receives a message from the given source - * - * @param md in main MDHIM struct - * @param message out double pointer for message received - * @param src out pointer to source of message received - * @return MDHIM_SUCCESS, MDHIM_CLOSE, MDHIM_COMMIT, or MDHIM_ERROR on error - */ -int receive_rangesrv_work(struct mdhim_t *md, int *src, void **message) { - MPI_Status status; - int return_code; - int msg_size; - int msg_source; - void *recvbuf; - int recvsize; - int mtype; - struct mdhim_basem_t *bm; - int mesg_idx = 0; - MPI_Request *req; - int flag = 0; - int ret = MDHIM_SUCCESS; - - // Receive a message from any client - flag = 0; - - req = malloc(sizeof(MPI_Request)); - pthread_mutex_lock(md->mdhim_comm_lock); - gettimeofday(&recv_comm_start, NULL); - return_code = MPI_Irecv(&recvsize,1, MPI_INT, MPI_ANY_SOURCE, RANGESRV_WORK_SIZE_MSG, - md->mdhim_comm, req); - gettimeofday(&recv_comm_end, NULL); - recv_comm_time += 1000000*(recv_comm_end.tv_sec-recv_comm_start.tv_sec)+recv_comm_end.tv_usec-recv_comm_start.tv_usec; - pthread_mutex_unlock(md->mdhim_comm_lock); - - // If the receive did not succeed then return the error code back - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: %d " - "receive size message failed.", md->mdhim_rank, return_code); - free(req); - return MDHIM_ERROR; - } - - gettimeofday(&recv_comm_start, NULL); - while (!flag) { - if (md->shutdown) { - free(req); - return MDHIM_ERROR; - } - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Test(req, &flag, &status); - pthread_mutex_unlock(md->mdhim_comm_lock); - usleep(100); - } - gettimeofday(&recv_comm_end, NULL); - recv_comm_time += 1000000*(recv_comm_end.tv_sec-recv_comm_start.tv_sec)+recv_comm_end.tv_usec-recv_comm_start.tv_usec; - - if (return_code == MPI_ERR_IN_STATUS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Received an error status: %d " - " while receiving work message size", md->mdhim_rank, status.MPI_ERROR); - } - recvbuf = (void *) malloc(recvsize); - memset(recvbuf, 0, recvsize); - flag = 0; - - pthread_mutex_lock(md->mdhim_comm_lock); - gettimeofday(&recv_comm_start, NULL); - return_code = MPI_Irecv(recvbuf, recvsize, MPI_PACKED, status.MPI_SOURCE, - RANGESRV_WORK_MSG, md->mdhim_comm, req); - gettimeofday(&recv_comm_end, NULL); - recv_comm_time += 1000000*(recv_comm_end.tv_sec-recv_comm_start.tv_sec)+recv_comm_end.tv_usec-recv_comm_start.tv_usec; - pthread_mutex_unlock(md->mdhim_comm_lock); - // If the receive did not succeed then return the error code back - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: %d " - "receive message failed.", md->mdhim_rank, return_code); - free(recvbuf); - free(req); - return MDHIM_ERROR; - } - gettimeofday(&recv_comm_start, NULL); - while (!flag) { - if (md->shutdown) { - return MDHIM_ERROR; - } - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Test(req, &flag, &status); - pthread_mutex_unlock(md->mdhim_comm_lock); - - usleep(100); - } - gettimeofday(&recv_comm_end, NULL); - recv_comm_time += 1000000*(recv_comm_end.tv_sec-recv_comm_start.tv_sec)+recv_comm_end.tv_usec-recv_comm_start.tv_usec; - - free(req); - if (return_code == MPI_ERR_IN_STATUS) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Received an error status: %d " - " while receiving work message size", md->mdhim_rank, status.MPI_ERROR); - } - if (!recvbuf) { - return MDHIM_ERROR; - } - - msg_source = status.MPI_SOURCE; - *src = msg_source; - *message = NULL; - //Unpack buffer to get the message type - bm = malloc(sizeof(struct mdhim_basem_t)); - return_code = MPI_Unpack(recvbuf, recvsize, &mesg_idx, bm, - sizeof(struct mdhim_basem_t), MPI_CHAR, - md->mdhim_comm); - mtype = bm->mtype; - msg_size = bm->size; - free(bm); - - // Checks for valid message, if error inform and ignore message - if (msg_size==0 || mtypeMDHIM_COMMIT) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Got empty/invalid message in receive_rangesrv_work.", - md->mdhim_rank); - free(recvbuf); - return MDHIM_ERROR; - } - switch(mtype) { - case MDHIM_PUT: - return_code = unpack_put_message(md, recvbuf, msg_size, message); - break; - case MDHIM_BULK_PUT: - return_code = unpack_bput_message(md, recvbuf, msg_size, message); - break; - case MDHIM_BULK_GET: - return_code = unpack_bget_message(md, recvbuf, msg_size, message); - break; - case MDHIM_DEL: - return_code = unpack_del_message(md, recvbuf, msg_size, message); - break; - case MDHIM_BULK_DEL: - return_code = unpack_bdel_message(md, recvbuf, msg_size, message); - break; - case MDHIM_COMMIT: - ret = MDHIM_COMMIT; - break; - case MDHIM_CLOSE: - ret = MDHIM_CLOSE; - break; - default: - break; - } - if (return_code != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error unpacking message in receive_rangesrv_work", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - - free(recvbuf); - - return ret; -} - -/** - * send_client_response - * Sends a message to a client - * - * @param md main MDHIM struct - * @param dest destination to send to - * @param message pointer to message to send - * @param sendbuf double pointer to packed message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int send_client_response(struct mdhim_t *md, int dest, void *message, int *sizebuf, - void **sendbuf, MPI_Request **size_req, MPI_Request **msg_req) { - int return_code = 0; - int mtype; - int ret = MDHIM_SUCCESS; - - *size_req = NULL; - *msg_req = NULL; - *sendbuf = NULL; - //Pack the client response in the message pointer into sendbuf and set sendsize - mtype = ((struct mdhim_basem_t *) message)->mtype; - switch(mtype) { - case MDHIM_RECV: - gettimeofday(&packretputstart, NULL); - return_code = pack_return_message(md, (struct mdhim_rm_t *)message, sendbuf, - sizebuf); - gettimeofday(&packretputend, NULL); - packretputtime+=1000000 * (packretputend.tv_sec - \ - packretputstart.tv_sec) + packretputend.tv_usec - \ - packretputstart.tv_usec; - break; - case MDHIM_RECV_BULK_GET: - gettimeofday(&packretgetstart, NULL); - return_code = pack_bgetrm_message(md, (struct mdhim_bgetrm_t *)message, sendbuf, - sizebuf); - gettimeofday(&packretgetend, NULL); - packretgettime+=1000000 * (packretgetend.tv_sec - \ - packretgetstart.tv_sec) + packretgetend.tv_usec - \ - packretgetstart.tv_usec; - break; - default: - break; - } - - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the message while sending.", md->mdhim_rank); - ret = MDHIM_ERROR; - } - - //Send the size message - *size_req = malloc(sizeof(MPI_Request)); - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Isend(sizebuf, 1, MPI_INT, dest, CLIENT_RESPONSE_SIZE_MSG, - md->mdhim_comm, *size_req); - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (return_code != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error sending client response message size in send_client_response", - md->mdhim_rank); - ret = MDHIM_ERROR; - free(*size_req); - *size_req = NULL; - } - - *msg_req = malloc(sizeof(MPI_Request)); - //Send the actual message - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Isend(*sendbuf, *sizebuf, MPI_PACKED, dest, CLIENT_RESPONSE_MSG, - md->mdhim_comm, *msg_req); - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (return_code != MPI_SUCCESS) { - mlog(MPI_CRIT, "Rank: %d - " - "Error sending client response message in send_client_response", - md->mdhim_rank); - ret = MDHIM_ERROR; - free(*msg_req); - *msg_req = NULL; - } - - return ret; -} - - -/** - * receive_client_response message - * Receives a message from the given source - * - * @param md in main MDHIM struct - * @param src in source to receive from - * @param message out double pointer for message received - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int receive_client_response(struct mdhim_t *md, int src, void **message) { - int return_code; - int msg_size; - int mtype; - int mesg_idx = 0; - void *recvbuf; - struct mdhim_basem_t *bm; - MPI_Request *req; - - req = malloc(sizeof(MPI_Request)); - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Irecv(&msg_size, 1, MPI_INT, src, CLIENT_RESPONSE_SIZE_MSG, - md->mdhim_comm, req); - pthread_mutex_unlock(md->mdhim_comm_lock); - test_req_and_wait(md, req); - - // If the receive did not succeed then return the error code back - if ( return_code != MPI_SUCCESS ) { - mlog(MPI_CRIT, "Rank: %d - " - "Error receiving message in receive_client_response", - md->mdhim_rank); - free(req); - return MDHIM_ERROR; - } - - recvbuf = malloc(msg_size); - memset(recvbuf, 0, msg_size); - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Irecv(recvbuf, msg_size, MPI_PACKED, src, CLIENT_RESPONSE_MSG, - md->mdhim_comm, req); - pthread_mutex_unlock(md->mdhim_comm_lock); - test_req_and_wait(md, req); - free(req); - - // If the receive did not succeed then return the error code back - if ( return_code != MPI_SUCCESS ) { - mlog(MPI_CRIT, "Rank: %d - " - "Error receiving message in receive_client_response", - md->mdhim_rank); - return MDHIM_ERROR; - } - - //Received the message - *message = NULL; - bm = malloc(sizeof(struct mdhim_basem_t)); - //Unpack buffer to get the message type - return_code = MPI_Unpack(recvbuf, msg_size, &mesg_idx, bm, - sizeof(struct mdhim_basem_t), MPI_CHAR, - md->mdhim_comm); - mtype = bm->mtype; - msg_size = bm->size; - free(bm); - switch(mtype) { - case MDHIM_RECV: - return_code = unpack_return_message(md, recvbuf, message); - break; - case MDHIM_RECV_BULK_GET: - return_code = unpack_bgetrm_message(md, recvbuf, msg_size, message); - break; - default: - break; - } - - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the message while receiving from client.", md->mdhim_rank); - return MDHIM_ERROR; - } - - free(recvbuf); - - return MDHIM_SUCCESS; -} - -/** - * receive_all_client_responses - * Receives messages from multiple sources sources - * - * @param md in main MDHIM struct - * @param srcs in sources to receive from - * @param nsrcs in number of sources to receive from - * @param messages out array of messages to receive - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int receive_all_client_responses(struct mdhim_t *md, int *srcs, int nsrcs, - void ***messages) { - MPI_Status status; - int return_code; - int mtype; - int mesg_idx = 0; - void *recvbuf, **recvbufs; - int *sizebuf; - struct mdhim_basem_t *bm; - int i; - int ret = MDHIM_SUCCESS; - MPI_Request **reqs, *req; - int done = 0; - int flag = 0; - int msg_size; - - sizebuf = malloc(sizeof(int) * nsrcs); - memset(sizebuf, 0, sizeof(int) * nsrcs); - reqs = malloc(nsrcs * sizeof(MPI_Request *)); - memset(reqs, 0, nsrcs * sizeof(MPI_Request *)); - recvbufs = malloc(nsrcs * sizeof(void *)); - memset(recvbufs, 0, nsrcs * sizeof(void *)); - done = 0; - for (i = 0; i < nsrcs; i++) { - // Receive a size message from the servers in the list - req = malloc(sizeof(MPI_Request)); - reqs[i] = req; - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Irecv(&sizebuf[i], 1, MPI_INT, - srcs[i], CLIENT_RESPONSE_SIZE_MSG, - md->mdhim_comm, req); - pthread_mutex_unlock(md->mdhim_comm_lock); - - // If the receive did not succeed then return the error code back - if ( return_code != MPI_SUCCESS ) { - mlog(MPI_CRIT, "Rank: %d - " - "Error receiving message in receive_client_response", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - } - - //Wait for size messages to complete - while (done != nsrcs) { - for (i = 0; i < nsrcs; i++) { - req = reqs[i]; - if (!req) { - continue; - } - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Test(req, &flag, &status); - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (return_code == MPI_ERR_REQUEST) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Received an error status: %d " - " while receiving client response message size", - md->mdhim_rank, status.MPI_ERROR); - } - if (!flag) { - continue; - } - free(req); - reqs[i] = NULL; - done++; - } - - if (done != nsrcs) { - usleep(100); - } - } - - done = 0; - for (i = 0; i < nsrcs; i++) { - // Receive a message from the servers in the list - recvbuf = malloc(sizebuf[i]); - recvbufs[i] = recvbuf; - req = malloc(sizeof(MPI_Request)); - reqs[i] = req; - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Irecv(recvbuf, sizebuf[i], MPI_PACKED, - srcs[i], CLIENT_RESPONSE_MSG, - md->mdhim_comm, req); - pthread_mutex_unlock(md->mdhim_comm_lock); - - // If the receive did not succeed then return the error code back - if ( return_code != MPI_SUCCESS ) { - mlog(MPI_CRIT, "Rank: %d - " - "Error receiving message in receive_client_response", - md->mdhim_rank); - ret = MDHIM_ERROR; - } - } - - //Wait for messages to complete - while (done != nsrcs) { - for (i = 0; i < nsrcs; i++) { - req = reqs[i]; - if (!req) { - continue; - } - - pthread_mutex_lock(md->mdhim_comm_lock); - return_code = MPI_Test(req, &flag, &status); - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (return_code == MPI_ERR_REQUEST) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Received an error status: %d " - " while receiving work message size", md->mdhim_rank, status.MPI_ERROR); - } - if (!flag) { - continue; - } - free(req); - reqs[i] = NULL; - done++; - } - - if (done != nsrcs) { - usleep(100); - } - } - - free(reqs); - for (i = 0; i < nsrcs; i++) { - recvbuf = recvbufs[i]; - //Received the message - *(*messages + i) = NULL; - bm = malloc(sizeof(struct mdhim_basem_t)); - //Unpack buffer to get the message type - mesg_idx = 0; - return_code = MPI_Unpack(recvbuf, sizebuf[i], &mesg_idx, bm, - sizeof(struct mdhim_basem_t), MPI_CHAR, - md->mdhim_comm); - mtype = bm->mtype; - msg_size = bm->size; - free(bm); - switch(mtype) { - case MDHIM_RECV: - return_code = unpack_return_message(md, recvbuf, - (*messages + i)); - break; - case MDHIM_RECV_BULK_GET: - return_code = unpack_bgetrm_message(md, recvbuf, msg_size, - (*messages + i)); - break; - default: - break; - } - - if (return_code != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the message while receiving from client.", md->mdhim_rank); - ret = MDHIM_ERROR; - } - - free(recvbuf); - } - - free(recvbufs); - free(sizebuf); - - return ret; -} - -///------------------------ - -/** - * pack_put_message - * Packs a put message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param pm in structure put_message which will be packed into the sendbuf - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer to size of sendbuf - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_putm_t { - int mtype; - void *key; - int key_len; - void *data; - int data_len; - int server_rank; - }; -*/ -int pack_put_message(struct mdhim_t *md, struct mdhim_putm_t *pm, void **sendbuf, int *sendsize) { - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int64_t m_size = sizeof(struct mdhim_putm_t); // Generous variable for size calculation - int mesg_size; // Variable to be used as parameter for MPI_pack of safe size - int mesg_idx = 0; // Variable for incremental pack - void *outbuf; - - // Add to size the length of the key and data fields - m_size += pm->key_len + pm->value_len; - if (m_size > MDHIM_MAX_MSG_SIZE) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: put message too large." - " Put is over Maximum size allowed of %d.", md->mdhim_rank, MDHIM_MAX_MSG_SIZE); - return MDHIM_ERROR; - } - - //Set output variable for the size to send - mesg_size = (int) m_size; - *sendsize = mesg_size; - pm->basem.size = mesg_size; - - // Is the computed message size of a safe value? (less than a max message size?) - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack put message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - outbuf = *sendbuf; - // pack the message first with the structure and then followed by key and data values. - return_code = MPI_Pack(pm, sizeof(struct mdhim_putm_t), MPI_CHAR, outbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - return_code += MPI_Pack(pm->key, pm->key_len, MPI_CHAR, outbuf, mesg_size, &mesg_idx, - md->mdhim_comm); - return_code += MPI_Pack(pm->value, pm->value_len, MPI_CHAR, outbuf, mesg_size, &mesg_idx, - md->mdhim_comm); - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the put message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * pack_bput_message - * Packs a bulk put message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param bpm in structure bput_message which will be packed into the sendbuf - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer for packed message size - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_bputm_t { - int mtype; - void **keys; - int *key_lens; - void **data; - int *data_lens; - int num_records; - int server_rank; - }; -*/ -int pack_bput_message(struct mdhim_t *md, struct mdhim_bputm_t *bpm, void **sendbuf, int *sendsize) { - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int64_t m_size = sizeof(struct mdhim_bputm_t); // Generous variable for size calc - int mesg_size; // Variable to be used as parameter for MPI_pack of safe size - int mesg_idx = 0; - int i; - - // Add the sizes of the length arrays (key_lens and data_lens) - m_size += 2 * bpm->num_keys * sizeof(int); - - // For the each of the keys and data add enough chars. - for (i=0; i < bpm->num_keys; i++) - m_size += bpm->key_lens[i] + bpm->value_lens[i]; - - // Is the computed message size of a safe value? (less than a max message size?) - if (m_size > MDHIM_MAX_MSG_SIZE) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: bulk put message too large." - " Bput is over Maximum size allowed of %d.", md->mdhim_rank, MDHIM_MAX_MSG_SIZE); - return MDHIM_ERROR; - } - mesg_size = m_size; // Safe size to use in MPI_pack - *sendsize = mesg_size; - bpm->basem.size = mesg_size; - - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack bulk put message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // pack the message first with the structure and then followed by key and data values (plus lengths). - return_code = MPI_Pack(bpm, sizeof(struct mdhim_bputm_t), MPI_CHAR, *sendbuf, - mesg_size, &mesg_idx, md->mdhim_comm); - - // For the each of the keys and data pack the chars plus two ints for key_len and data_len. - gettimeofday(&packmpiputstart, NULL); - for (i=0; i < bpm->num_keys; i++) { - return_code += MPI_Pack(&bpm->key_lens[i], 1, MPI_INT, - *sendbuf, mesg_size, &mesg_idx, md->mdhim_comm); - return_code += MPI_Pack(bpm->keys[i], bpm->key_lens[i], MPI_CHAR, - *sendbuf, mesg_size, &mesg_idx, md->mdhim_comm); - return_code += MPI_Pack(&bpm->value_lens[i], 1, MPI_INT, - *sendbuf, mesg_size, &mesg_idx, md->mdhim_comm); - return_code += MPI_Pack(bpm->values[i], bpm->value_lens[i], MPI_CHAR, - *sendbuf, mesg_size, &mesg_idx, md->mdhim_comm); - } - gettimeofday(&packmpiputend, NULL); - packmpiputtime += 1000000 * - (packmpiputend.tv_sec - packmpiputstart.tv_sec) + - packmpiputend.tv_usec - packmpiputstart.tv_usec; - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the bulk put message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * unpack_put_message - * Unpacks a put message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param message in pointer for packed message we received - * @param mesg_size in size of the incoming message - * @param putm out put message which will be unpacked from the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_putm_t { - int mtype; - void *key; - int key_len; - void *data; - int data_len; - int server_rank; - }; -*/ -int unpack_put_message(struct mdhim_t *md, void *message, int mesg_size, void **putm) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_idx = 0; // Variable for incremental unpack - struct mdhim_putm_t *pm; - - if ((*((struct mdhim_putm_t **) putm) = malloc(sizeof(struct mdhim_putm_t))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack put message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - pm = *((struct mdhim_putm_t **) putm); - // Unpack the message first with the structure and then followed by key and data values. - return_code = MPI_Unpack(message, mesg_size, &mesg_idx, pm, - sizeof(struct mdhim_putm_t), MPI_CHAR, - md->mdhim_comm); - - // Unpack key by first allocating memory and then extracting the values from message - if ((pm->key = malloc(pm->key_len * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack put message.", md->mdhim_rank); - return MDHIM_ERROR; - } - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, pm->key, pm->key_len, - MPI_CHAR, md->mdhim_comm); - - // Unpack data by first allocating memory and then extracting the values from message - if ((pm->value = malloc(pm->value_len * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack put message.", md->mdhim_rank); - return MDHIM_ERROR; - } - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, pm->value, pm->value_len, - MPI_CHAR, md->mdhim_comm); - - // If the unpack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the put message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * unpack_bput_message - * Unpacks a bulk put message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param message in pointer for packed message we received - * @param mesg_size in size of the incoming message - * @param bput out bulk put message which will be unpacked from the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_bputm_t { - int mtype; - void **keys; - int *key_lens; - void **data; - int *data_lens; - int num_records; - int server_rank; - }; -*/ -int unpack_bput_message(struct mdhim_t *md, void *message, int mesg_size, void **bput) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_idx = 0; // Variable for incremental unpack - int i; - int num_records; - - if ((*((struct mdhim_bputm_t **) bput) = malloc(sizeof(struct mdhim_bputm_t))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bput message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // Unpack the message first with the structure and then followed by key and data values. - return_code = MPI_Unpack(message, mesg_size, &mesg_idx, *((struct mdhim_bputm_t **) bput), - sizeof(struct mdhim_bputm_t), - MPI_CHAR, md->mdhim_comm); - - num_records = (*((struct mdhim_bputm_t **) bput))->num_keys; - // Allocate memory for key pointers, to be populated later. - if (((*((struct mdhim_bputm_t **) bput))->keys = - malloc(num_records * sizeof(void *))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bput message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // Allocate memory for value pointers, to be populated later. - if (((*((struct mdhim_bputm_t **) bput))->values = - malloc(num_records * sizeof(void *))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bput message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // Allocate memory for key_lens, to be populated later. - if (((*((struct mdhim_bputm_t **) bput))->key_lens = - (int *)malloc(num_records * sizeof(int))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bput message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // Allocate memory for value_lens, to be populated later. - if (((*((struct mdhim_bputm_t **) bput))->value_lens = - (int *)malloc(num_records * sizeof(int))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bput message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // For the each of the keys and data unpack the chars plus two ints for key_lens[i] and data_lens[i]. - for (i=0; i < num_records; i++) { - // Unpack the key_lens[i] - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - &(*((struct mdhim_bputm_t **) bput))->key_lens[i], 1, MPI_INT, - md->mdhim_comm); - - // Unpack key by first allocating memory and then extracting the values from message - if (((*((struct mdhim_bputm_t **) bput))->keys[i] = - malloc((*((struct mdhim_bputm_t **) bput))->key_lens[i] * - sizeof(char))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bput message.", md->mdhim_rank); - return MDHIM_ERROR; - } - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - (*((struct mdhim_bputm_t **) bput))->keys[i], - (*((struct mdhim_bputm_t **) bput))->key_lens[i], - MPI_CHAR, md->mdhim_comm); - - // Unpack the data_lens[i] - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - &(*((struct mdhim_bputm_t **) bput))->value_lens[i], 1, - MPI_INT, - md->mdhim_comm); - - // Unpack data by first allocating memory and then extracting the values from message - if (((*((struct mdhim_bputm_t **) bput))->values[i] = - malloc((*((struct mdhim_bputm_t **) bput))->value_lens[i] * - sizeof(char))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bput message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - (*((struct mdhim_bputm_t **) bput))->values[i], - (*((struct mdhim_bputm_t **) bput))->value_lens[i], - MPI_CHAR, md->mdhim_comm); - } - - // If the unpack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the bput message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -///------------------------ - -/** - * pack_get_message - * Packs a get message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param gm in structure get_message which will be packed into the sendbuf - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer to sendbuf's size - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_getm_t { - int mtype; - int op; - void *key; - int key_len; - int server_rank; - }; -*/ -int pack_get_message(struct mdhim_t *md, struct mdhim_getm_t *gm, void **sendbuf, int *sendsize) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int64_t m_size = sizeof(struct mdhim_getm_t); // Generous variable for size calculation - int mesg_size; // Variable to be used as parameter for MPI_pack of safe size - int mesg_idx = 0; // Variable for incremental pack - void *outbuf; - - // Add to size the length of the key and data fields - m_size += gm->key_len; - - if (m_size > MDHIM_MAX_MSG_SIZE) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: get message too large." - " Get is over Maximum size allowed of %d.", md->mdhim_rank, MDHIM_MAX_MSG_SIZE); - return MDHIM_ERROR; - } - mesg_size = m_size; - *sendsize = mesg_size; - gm->basem.size = mesg_size; - - // Is the computed message size of a safe value? (less than a max message size?) - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack get message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - outbuf = *sendbuf; - // pack the message first with the structure and then followed by key and data values. - return_code = MPI_Pack(gm, sizeof(struct mdhim_getm_t), MPI_CHAR, outbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - return_code += MPI_Pack(gm->key, gm->key_len, MPI_CHAR, outbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the get message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * pack_bget_message - * Packs a bget message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param bgm in structure bget_message which will be packed into the sendbuf - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer for sendbuf size - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_bgetm_t { - int mtype; - int op; - void **keys; - int *key_lens; - int num_records; - int server_rank; - }; -*/ -int pack_bget_message(struct mdhim_t *md, struct mdhim_bgetm_t *bgm, void **sendbuf, int *sendsize) { - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int64_t m_size = sizeof(struct mdhim_bgetm_t); // Generous variable for size calc - int mesg_size; // Variable to be used as parameter for MPI_pack of safe size - int mesg_idx = 0; - int i; - - // Calculate the size of the message to send - m_size += bgm->num_keys * sizeof(int) * 2; - // For the each of the keys add the size to the length - for (i=0; i < bgm->num_keys; i++) - m_size += bgm->key_lens[i]; - - // Is the computed message size of a safe value? (less than a max message size?) - if (m_size > MDHIM_MAX_MSG_SIZE) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: bulk get message too large." - " Bget is over Maximum size allowed of %d.", md->mdhim_rank, MDHIM_MAX_MSG_SIZE); - return MDHIM_ERROR; - } - mesg_size = m_size; // Safe size to use in MPI_pack - *sendsize = mesg_size; - bgm->basem.size = mesg_size; - - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack bulk get message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // pack the message first with the structure and then followed by key and - // data values (plus lengths). - return_code = MPI_Pack(bgm, sizeof(struct mdhim_bgetm_t), MPI_CHAR, - *sendbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - // For the each of the keys and data pack the chars plus one int for key_len. - for (i=0; i < bgm->num_keys; i++) { - return_code += MPI_Pack(&bgm->key_lens[i], 1, MPI_INT, - *sendbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - return_code += MPI_Pack(bgm->keys[i], bgm->key_lens[i], MPI_CHAR, - *sendbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - - } - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the bulk get message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * unpack_get_message - * Unpacks a get message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param message in pointer for packed message we received - * @param mesg_size in size of the incoming message - * @param getm out get message which will be unpacked from the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_getm_t { - int mtype; - //Operation type e.g., MDHIM_GET_VAL, MDHIM_GET_NEXT, MDHIM_GET_PREV - int op; - void *key; - int key_len; - int server_rank; - }; -*/ -int unpack_get_message(struct mdhim_t *md, void *message, int mesg_size, void **getm) { - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_idx = 0; // Variable for incremental unpack - - if ((*((struct mdhim_getm_t **) getm) = malloc(sizeof(struct mdhim_getm_t))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack get message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // Unpack the message first with the structure and then followed by key and data values. - return_code = MPI_Unpack(message, mesg_size, &mesg_idx, *((struct mdhim_getm_t **) getm), - sizeof(struct mdhim_getm_t), MPI_CHAR, md->mdhim_comm); - - // Unpack key by first allocating memory and then extracting the values from message - if (((*((struct mdhim_getm_t **) getm))->key = - malloc((*((struct mdhim_getm_t **) getm))->key_len * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack get message.", md->mdhim_rank); - return MDHIM_ERROR; - } - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - (*((struct mdhim_getm_t **) getm))->key, - (*((struct mdhim_getm_t **) getm))->key_len, - MPI_CHAR, md->mdhim_comm); - - // If the unpack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the get message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * unpack_bget_message - * Unpacks a bulk get message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param message in pointer for packed message we received - * @param mesg_size in size of the incoming message - * @param bgetm out bulk get message which will be unpacked from the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_bgetm_t { - int mtype; - int op; - void **keys; - int *key_lens; - int num_records; - int server_rank; - }; -*/ -int unpack_bget_message(struct mdhim_t *md, void *message, int mesg_size, void **bgetm) { - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_idx = 0; // Variable for incremental unpack - int i; - int num_records; - - if ((*((struct mdhim_bgetm_t **) bgetm) = malloc(sizeof(struct mdhim_bgetm_t))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // Unpack the message first with the structure and then followed by key and data values. - return_code = MPI_Unpack(message, mesg_size, &mesg_idx, *((struct mdhim_bgetm_t **) bgetm), - sizeof(struct mdhim_bgetm_t), - MPI_CHAR, md->mdhim_comm); - - num_records = (*((struct mdhim_bgetm_t **) bgetm))->num_keys; - // Allocate memory for key pointers, to be populated later. - if (((*((struct mdhim_bgetm_t **) bgetm))->keys = - malloc(num_records * sizeof(void *))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget message.", md->mdhim_rank); - return MDHIM_ERROR; - } - // Allocate memory for key_lens, to be populated later. - if (((*((struct mdhim_bgetm_t **) bgetm))->key_lens = - (int *)malloc(num_records * sizeof(int))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - memset((*((struct mdhim_bgetm_t **) bgetm))->key_lens, 0, num_records * sizeof(int)); - // For the each of the keys and data unpack the chars plus an int for key_lens[i]. - for (i=0; i < num_records; i++) { - // Unpack the key_lens[i] - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - &(*((struct mdhim_bgetm_t **) bgetm))->key_lens[i], - 1, MPI_INT, md->mdhim_comm); - // Unpack key by first allocating memory and then extracting the values from message - if (((*((struct mdhim_bgetm_t **) bgetm))->keys[i] = - malloc((*((struct mdhim_bgetm_t **) bgetm))->key_lens[i] * - sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - (*((struct mdhim_bgetm_t **) bgetm))->keys[i], - (*((struct mdhim_bgetm_t **) bgetm))->key_lens[i], - MPI_CHAR, md->mdhim_comm); - } - - // If the unpack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the bget message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * pack_bgetrm_message - * Packs a bulk get return message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param bgrm in structure bget_return_message which will be packed into the message - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer to sendbuf's size - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_bgetrm_t { - int mtype; - int error; - void **keys; - int *key_lens; - void **values; - int *value_lens; - int num_records; - }; -*/ -int pack_bgetrm_message(struct mdhim_t *md, struct mdhim_bgetrm_t *bgrm, void **sendbuf, int *sendsize) { - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int64_t m_size = sizeof(struct mdhim_bgetrm_t); // Generous variable for size calc - int mesg_size; // Variable to be used as parameter for MPI_pack of safe size - int mesg_idx = 0; - int i; - void *outbuf; - - // For each of the lens (key_lens and data_lens) - // WARNING We are treating ints as the same size as char for packing purposes - m_size += 2 * bgrm->num_keys * sizeof(int); - - // For the each of the keys and data add enough chars. - for (i=0; i < bgrm->num_keys; i++) - m_size += bgrm->key_lens[i] + bgrm->value_lens[i]; - - // Is the computed message size of a safe value? (less than a max message size?) - if (m_size > MDHIM_MAX_MSG_SIZE) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: bulk get return message too large." - " Bget return message is over Maximum size allowed of %d.", md->mdhim_rank, - MDHIM_MAX_MSG_SIZE); - return MDHIM_ERROR; - } - mesg_size = m_size; // Safe size to use in MPI_pack - *sendsize = mesg_size; - bgrm->basem.size = mesg_size; - - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack bulk get return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - outbuf = *sendbuf; - // pack the message first with the structure and then followed by key and data values (plus lengths). - return_code = MPI_Pack(bgrm, sizeof(struct mdhim_bgetrm_t), MPI_CHAR, outbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - - // For the each of the keys and data pack the chars plus two ints for key_len and data_len. - for (i=0; i < bgrm->num_keys; i++) { - return_code += MPI_Pack(&bgrm->key_lens[i], 1, MPI_INT, outbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - if (bgrm->key_lens[i] > 0) { - return_code += MPI_Pack(bgrm->keys[i], bgrm->key_lens[i], MPI_CHAR, outbuf, - mesg_size, &mesg_idx, md->mdhim_comm); - } - - return_code += MPI_Pack(&bgrm->value_lens[i], 1, MPI_INT, outbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - /* Pack the value retrieved from the db - There is a chance that the key didn't exist in the db */ - if (bgrm->value_lens[i] > 0) { - return_code += MPI_Pack(bgrm->values[i], bgrm->value_lens[i], - MPI_CHAR, outbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - } - } - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the bulk get return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * unpack_bgetrm_message - * Unpacks a bulk get return message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param message in pointer for packed message - * @param mesg_size in size of the incoming message - * @param bgetrm out bulk get return message which will be unpacked from the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_bgetrm_t { - int mtype; - int error; - void **keys; - int *key_lens; - void **values; - int *value_lens; - int num_records; - }; -*/ -int unpack_bgetrm_message(struct mdhim_t *md, void *message, int mesg_size, void **bgetrm) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_idx = 0; // Variable for incremental unpack - int i; - struct mdhim_bgetrm_t *bgrm; - - if ((*((struct mdhim_bgetrm_t **) bgetrm) = malloc(sizeof(struct mdhim_bgetrm_t))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - bgrm = *((struct mdhim_bgetrm_t **) bgetrm); - // Unpack the message first with the structure and then followed by key and data values. - return_code = MPI_Unpack(message, mesg_size, &mesg_idx, bgrm, sizeof(struct mdhim_bgetrm_t), - MPI_CHAR, md->mdhim_comm); - - // Allocate memory for key pointers, to be populated later. - if ((bgrm->keys = malloc(bgrm->num_keys * sizeof(void *))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bgetrm message.", md->mdhim_rank); - return MDHIM_ERROR; - } - memset(bgrm->keys, 0, sizeof(void *) * bgrm->num_keys); - - // Allocate memory for key_lens, to be populated later. - if ((bgrm->key_lens = malloc(bgrm->num_keys * sizeof(int))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - memset(bgrm->key_lens, 0, sizeof(int) * bgrm->num_keys); - - // Allocate memory for value pointers, to be populated later. - if ((bgrm->values = malloc(bgrm->num_keys * sizeof(void *))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bgetrm message.", md->mdhim_rank); - return MDHIM_ERROR; - } - memset(bgrm->values, 0, sizeof(void *) * bgrm->num_keys); - - // Allocate memory for value_lens, to be populated later. - if ((bgrm->value_lens = (int *)malloc(bgrm->num_keys * sizeof(int))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - memset(bgrm->value_lens, 0, sizeof(int) * bgrm->num_keys); - - // For the each of the keys and data unpack the chars plus two ints for key_lens[i] and data_lens[i]. - for (i=0; i < bgrm->num_keys; i++) { - // Unpack the key_lens[i] - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, &bgrm->key_lens[i], 1, - MPI_INT, md->mdhim_comm); - - // Unpack key by first allocating memory and then extracting the values from message - bgrm->keys[i] = NULL; - if (bgrm->key_lens[i] && - (bgrm->keys[i] = (char *)malloc(bgrm->key_lens[i] * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - if (bgrm->keys[i]) { - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, bgrm->keys[i], bgrm->key_lens[i], - MPI_CHAR, md->mdhim_comm); - } - - // Unpack the value_lens[i] - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, &bgrm->value_lens[i], 1, - MPI_INT, md->mdhim_comm); - - //There wasn't a value found for this key - if (!bgrm->value_lens[i]) { - bgrm->values[i] = NULL; - continue; - } - - // Unpack data by first allocating memory and then extracting the values from message - bgrm->values[i] = NULL; - if (bgrm->value_lens[i] && - (bgrm->values[i] = (char *)malloc(bgrm->value_lens[i] * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bget return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - if (bgrm->values[i]) { - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, bgrm->values[i], - bgrm->value_lens[i], - MPI_CHAR, md->mdhim_comm); - } - - } - - // If the unpack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the bget return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -///------------------------ - -/** - * pack_base_message - * Packs a base message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param cm in structure base message which will be packed into the sendbuf - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer for packed message size - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_basem_t { - int mtype; - }; -*/ -int pack_base_message(struct mdhim_t *md, struct mdhim_basem_t *cm, void **sendbuf, int *sendsize) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int64_t m_size = sizeof(struct mdhim_basem_t); // Generous variable for size calculation - int mesg_size; // Variable to be used as parameter for MPI_pack of safe size - int mesg_idx = 0; // Variable for incremental pack - void *outbuf; - - mesg_size = m_size; - *sendsize = mesg_size; - cm->size = mesg_size; - - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - outbuf = *sendbuf; - // pack the message first with the structure and then followed by key and data values. - return_code = MPI_Pack(cm, sizeof(struct mdhim_basem_t), MPI_CHAR, outbuf, mesg_size, - &mesg_idx, md->mdhim_comm); - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -///------------------------ - -/** - * pack_del_message - * Packs a delete message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param dm in structure del_message which will be packed into the sendbuf - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer for packed message size - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_delm_t { - int mtype; - void *key; - int key_len; - int server_rank; - }; -*/ -int pack_del_message(struct mdhim_t *md, struct mdhim_delm_t *dm, void **sendbuf, int *sendsize) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int64_t m_size = sizeof(struct mdhim_delm_t); // Generous variable for size calculation - int mesg_size; // Variable to be used as parameter for MPI_pack of safe size - int mesg_idx = 0; // Variable for incremental pack - - // Add to size the length of the key and data fields - m_size += dm->key_len; - - // Is the computed message size of a safe value? (less than a max message size?) - if (m_size > MDHIM_MAX_MSG_SIZE) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: del message too large." - " Del is over Maximum size allowed of %d.", md->mdhim_rank, MDHIM_MAX_MSG_SIZE); - return MDHIM_ERROR; - } - mesg_size = m_size; - *sendsize = mesg_size; - dm->basem.size = mesg_size; - - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // pack the message first with the structure and then followed by key and data values. - return_code = MPI_Pack(dm, sizeof(struct mdhim_delm_t), MPI_CHAR, *sendbuf, - mesg_size, &mesg_idx, md->mdhim_comm); - return_code += MPI_Pack(dm->key, dm->key_len, MPI_CHAR, *sendbuf, - mesg_size, &mesg_idx, md->mdhim_comm); - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * pack_bdel_message - * Packs a bdel message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param bdm in structure bdel_message which will be packed into the message - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer for packed message size - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_bdelm_t { - int mtype; - void **keys; - int *key_lens; - int num_records; - int server_rank; - }; -*/ -int pack_bdel_message(struct mdhim_t *md, struct mdhim_bdelm_t *bdm, void **sendbuf, - int *sendsize) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int64_t m_size = sizeof(struct mdhim_bdelm_t); // Generous variable for size calc - int mesg_size; // Variable to be used as parameter for MPI_pack of safe size - int mesg_idx = 0; - int i; - - // Add up the size of message - m_size += bdm->num_keys * sizeof(int); - - // For the each of the keys add enough chars. - for (i=0; i < bdm->num_keys; i++) - m_size += bdm->key_lens[i]; - - // Is the computed message size of a safe value? (less than a max message size?) - if (m_size > MDHIM_MAX_MSG_SIZE) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: bulk del message too large." - " Bdel is over Maximum size allowed of %d.", md->mdhim_rank, MDHIM_MAX_MSG_SIZE); - return MDHIM_ERROR; - } - mesg_size = m_size; // Safe size to use in MPI_pack - *sendsize = mesg_size; - bdm->basem.size = mesg_size; - - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack bulk del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // pack the message first with the structure and then followed by key (plus lengths). - return_code = MPI_Pack(bdm, sizeof(struct mdhim_bdelm_t), MPI_CHAR, *sendbuf, - mesg_size, &mesg_idx, md->mdhim_comm); - - // For the each of the keys and data pack the chars plus one int for key_len. - for (i=0; i < bdm->num_keys; i++) { - return_code += MPI_Pack(&bdm->key_lens[i], 1, MPI_INT, *sendbuf, - mesg_size, &mesg_idx, md->mdhim_comm); - return_code += MPI_Pack(bdm->keys[i], bdm->key_lens[i], MPI_CHAR, - *sendbuf, mesg_size, &mesg_idx, - md->mdhim_comm); - } - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the bulk del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * unpack_del_message - * Unpacks a del message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param message in pointer for packed message - * @param mesg_size in size of the incoming message - * @param delm out structure get_message which will be unpacked from the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_delm_t { - int mtype; - void *key; - int key_len; - int server_rank; - }; -*/ -int unpack_del_message(struct mdhim_t *md, void *message, int mesg_size, void **delm) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_idx = 0; // Variable for incremental unpack - struct mdhim_delm_t *dm; - - if ((*((struct mdhim_delm_t **) delm) = malloc(sizeof(struct mdhim_delm_t))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - dm = *((struct mdhim_delm_t **) delm); - // Unpack the message first with the structure and then followed by key and data values. - return_code = MPI_Unpack(message, mesg_size, &mesg_idx, dm, sizeof(struct mdhim_delm_t), - MPI_CHAR, md->mdhim_comm); - - // Unpack key by first allocating memory and then extracting the values from message - if ((dm->key = (char *)malloc(dm->key_len * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, dm->key, dm->key_len, - MPI_CHAR, md->mdhim_comm); - - // If the unpack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the del message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * unpack_bdel_message - * Unpacks a bulk del message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param message in pointer for packed message - * @param mesg_size in size of the incoming message - * @param bdelm out structure bulk_del_message which will be unpacked from the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_bdelm_t { - int mtype; - void **keys; - int *key_lens; - int num_records; - int server_rank; - }; -*/ -int unpack_bdel_message(struct mdhim_t *md, void *message, int mesg_size, void **bdelm) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_idx = 0; // Variable for incremental unpack - int i; - int num_records; - - if ((*((struct mdhim_bdelm_t **) bdelm) = malloc(sizeof(struct mdhim_bdelm_t))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bdel message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // Unpack the message first with the structure and then followed by key and data values. - return_code = MPI_Unpack(message, mesg_size, &mesg_idx, - (*((struct mdhim_bdelm_t **) bdelm)), sizeof(struct mdhim_bdelm_t), - MPI_CHAR, md->mdhim_comm); - - num_records = (*((struct mdhim_bdelm_t **) bdelm))->num_keys; - // Allocate memory for keys, to be populated later. - if (((*((struct mdhim_bdelm_t **) bdelm))->keys = - malloc(num_records * sizeof(void *))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bdel message.", md->mdhim_rank); - return MDHIM_ERROR; - } - // Allocate memory for key_lens, to be populated later. - if (((*((struct mdhim_bdelm_t **) bdelm))->key_lens = - (int *)malloc(num_records * sizeof(int))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bdel message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - // For the each of the keys and data unpack the chars plus an int for key_lens[i]. - for (i=0; i < num_records; i++) { - // Unpack the key_lens[i] - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - &(*((struct mdhim_bdelm_t **) bdelm))->key_lens[i], 1, - MPI_INT, md->mdhim_comm); - - // Unpack key by first allocating memory and then extracting the values from message - if (((*((struct mdhim_bdelm_t **) bdelm))->keys[i] = - (char *)malloc((*((struct mdhim_bdelm_t **) bdelm))->key_lens[i] * - sizeof(char))) == NULL) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack bdel message.", md->mdhim_rank); - return MDHIM_ERROR; - } - return_code += MPI_Unpack(message, mesg_size, &mesg_idx, - (*((struct mdhim_bdelm_t **) bdelm))->keys[i], - (*((struct mdhim_bdelm_t **) bdelm))->key_lens[i], - MPI_CHAR, md->mdhim_comm); - } - - // If the unpack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the bdel message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -///------------------------ - - -/** - * pack_return_message - * Packs a return message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param rm in structure which will be packed into the sendbuf - * @param sendbuf out double pointer for packed message to send - * @param sendsize out pointer for packed message size - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_rm_t { - int mtype; - int error; - }; -*/ -int pack_return_message(struct mdhim_t *md, struct mdhim_rm_t *rm, void **sendbuf, int *sendsize) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_size = sizeof(struct mdhim_rm_t); - int mesg_idx = 0; - void *outbuf; - - *sendsize = mesg_size; - rm->basem.size = mesg_size; - - if ((*sendbuf = malloc(mesg_size * sizeof(char))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to pack return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - outbuf = *sendbuf; - // Pack the message from the structure - return_code = MPI_Pack(rm, sizeof(struct mdhim_rm_t), MPI_CHAR, outbuf, mesg_size, &mesg_idx, - md->mdhim_comm); - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to pack " - "the return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * unpack_return_message - * unpacks a return message structure into contiguous memory for message passing - * - * @param md in main MDHIM struct - * @param message out pointer for buffer to unpack message to - * @param retm in return message that will be unpacked into message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - * - * struct mdhim_rm_t { - int mtype; - int error; - }; -*/ -int unpack_return_message(struct mdhim_t *md, void *message, void **retm) { - - int return_code = MPI_SUCCESS; // MPI_SUCCESS = 0 - int mesg_size = sizeof(struct mdhim_rm_t); - int mesg_idx = 0; - struct mdhim_rm_t *rm; - - if (((*(struct mdhim_rm_t **) retm) = malloc(sizeof(struct mdhim_rm_t))) == NULL) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to allocate " - "memory to unpack return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - rm = *((struct mdhim_rm_t **) retm); - - // Unpack the structure from the message - return_code = MPI_Unpack(message, mesg_size, &mesg_idx, rm, sizeof(struct mdhim_rm_t), - MPI_CHAR, md->mdhim_comm); - - // If the pack did not succeed then log the error and return the error code - if ( return_code != MPI_SUCCESS ) { - mlog(MDHIM_CLIENT_CRIT, "MDHIM Rank: %d - Error: unable to unpack " - "the return message.", md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -/** - * Frees all memory taken up by messages - including keys and values - * - * @param msg pointer to the message to free - */ -void mdhim_full_release_msg(void *msg) { - int mtype; - int i; - - if (!msg) { - return; - } - - //Determine the message type and free accordingly - mtype = ((struct mdhim_basem_t *) msg)->mtype; - switch(mtype) { - case MDHIM_RECV: - free((struct mdhim_rm_t *) msg); - break; - case MDHIM_RECV_BULK_GET: - for (i = 0; i < ((struct mdhim_bgetrm_t *) msg)->num_keys; i++) { - if (((struct mdhim_bgetrm_t *) msg)->key_lens[i] && - ((struct mdhim_bgetrm_t *) msg)->keys[i]) { - free(((struct mdhim_bgetrm_t *) msg)->keys[i]); - } - if (((struct mdhim_bgetrm_t *) msg)->value_lens[i] && - ((struct mdhim_bgetrm_t *) msg)->values[i]) { - free(((struct mdhim_bgetrm_t *) msg)->values[i]); - } - } - - if (((struct mdhim_bgetrm_t *) msg)->key_lens) { - free(((struct mdhim_bgetrm_t *) msg)->key_lens); - } - if (((struct mdhim_bgetrm_t *) msg)->keys) { - free(((struct mdhim_bgetrm_t *) msg)->keys); - } - if (((struct mdhim_bgetrm_t *) msg)->value_lens) { - free(((struct mdhim_bgetrm_t *) msg)->value_lens); - } - if (((struct mdhim_bgetrm_t *) msg)->values) { - free(((struct mdhim_bgetrm_t *) msg)->values); - } - - free((struct mdhim_bgetrm_t *) msg); - break; - case MDHIM_BULK_PUT: - for (i = 0; i < ((struct mdhim_bputm_t *) msg)->num_keys; i++) { - if (((struct mdhim_bputm_t *) msg)->key_lens[i] && - ((struct mdhim_bputm_t *) msg)->keys[i]) { - free(((struct mdhim_bputm_t *) msg)->keys[i]); - } - if (((struct mdhim_bputm_t *) msg)->value_lens[i] && - ((struct mdhim_bputm_t *) msg)->values[i]) { - free(((struct mdhim_bputm_t *) msg)->values[i]); - } - } - - if (((struct mdhim_bputm_t *) msg)->key_lens) { - free(((struct mdhim_bputm_t *) msg)->key_lens); - } - if (((struct mdhim_bputm_t *) msg)->keys) { - free(((struct mdhim_bputm_t *) msg)->keys); - } - if (((struct mdhim_bputm_t *) msg)->value_lens) { - free(((struct mdhim_bputm_t *) msg)->value_lens); - } - if (((struct mdhim_bputm_t *) msg)->values) { - free(((struct mdhim_bputm_t *) msg)->values); - } - - free((struct mdhim_bputm_t *) msg); - break; - default: - break; - } -} - - -/** - * Frees memory taken up by messages except for the keys and values - * - * @param msg pointer to the message to free - */ -void mdhim_partial_release_msg(void *msg) { - int mtype; - - if (!msg) { - return; - } - - //Determine the message type and free accordingly - mtype = ((struct mdhim_basem_t *) msg)->mtype; - switch(mtype) { - case MDHIM_RECV: - free((struct mdhim_rm_t *) msg); - break; - case MDHIM_RECV_BULK_GET: - if (((struct mdhim_bgetrm_t *) msg)->key_lens) { - free(((struct mdhim_bgetrm_t *) msg)->key_lens); - } - if (((struct mdhim_bgetrm_t *) msg)->keys) { - free(((struct mdhim_bgetrm_t *) msg)->keys); - } - if (((struct mdhim_bgetrm_t *) msg)->value_lens) { - free(((struct mdhim_bgetrm_t *) msg)->value_lens); - } - if (((struct mdhim_bgetrm_t *) msg)->values) { - free(((struct mdhim_bgetrm_t *) msg)->values); - } - - free((struct mdhim_bgetrm_t *) msg); - break; - case MDHIM_BULK_PUT: - if (((struct mdhim_bputm_t *) msg)->key_lens) { - free(((struct mdhim_bputm_t *) msg)->key_lens); - } - if (((struct mdhim_bputm_t *) msg)->keys) { - free(((struct mdhim_bputm_t *) msg)->keys); - } - if (((struct mdhim_bputm_t *) msg)->value_lens) { - free(((struct mdhim_bputm_t *) msg)->value_lens); - } - if (((struct mdhim_bputm_t *) msg)->values) { - free(((struct mdhim_bputm_t *) msg)->values); - } - - free((struct mdhim_bputm_t *) msg); - break; - default: - break; - } -} diff --git a/meta/src/messages.h b/meta/src/messages.h deleted file mode 100644 index 9419b9eb0..000000000 --- a/meta/src/messages.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - - -#ifndef __MESSAGES_H -#define __MESSAGES_H - -#ifdef __cplusplus -extern "C" -{ -#endif -#include "range_server.h" - -/* Message Types */ - -//Put a single key in the data store -#define MDHIM_PUT 1 -//Put multiple keys in the data store at one time -#define MDHIM_BULK_PUT 2 -//Get multiple keys from the data store at one time -#define MDHIM_BULK_GET 3 -//Delete a single key from the data store -#define MDHIM_DEL 4 -//Delete multiple keys from the data store at once -#define MDHIM_BULK_DEL 5 -//Close message -#define MDHIM_CLOSE 6 -//Generic receive message -#define MDHIM_RECV 7 -//Receive message for a get request -#define MDHIM_RECV_GET 8 -//Receive message for a bulk get request -#define MDHIM_RECV_BULK_GET 9 -//Commit message -#define MDHIM_COMMIT 10 - -/* Operations for getting a key/value */ -//Get the value for the specified key -#define MDHIM_GET_EQ 0 -//Get the next key and value -#define MDHIM_GET_NEXT 1 -//Get the previous key and value -#define MDHIM_GET_PREV 2 -//Get the first key and value -#define MDHIM_GET_FIRST 3 -//Get the last key and value -#define MDHIM_GET_LAST 4 -/* Use these operation types for retrieving the primary key - from a secondary index and key. */ -//Gets the primary key's value from a secondary key -#define MDHIM_GET_PRIMARY_EQ 5 -#define MDHIM_RANGE_BGET 6 - -//Message Types -#define RANGESRV_WORK_MSG 1 -#define RANGESRV_WORK_SIZE_MSG 2 -#define RANGESRV_INFO 3 -#define CLIENT_RESPONSE_MSG 4 -#define CLIENT_RESPONSE_SIZE_MSG 5 - -//#define MAX_BULK_OPS 1000000 -#define MAX_BULK_OPS 20000000 - -//Maximum size of messages allowed -#define MDHIM_MAX_MSG_SIZE 2147483647 -struct mdhim_t; - -/* Base message */ -struct mdhim_basem_t { - //Message type - int mtype; - int server_rank; - int size; - int index; - int index_type; - char *index_name; -}; -typedef struct mdhim_basem_t mdhim_basem_t; - -/* Put message */ -struct mdhim_putm_t { - mdhim_basem_t basem; - void *key; - int key_len; - void *value; - int value_len; -}; - -/* Bulk put message */ -struct mdhim_bputm_t { - mdhim_basem_t basem; - void **keys; - int *key_lens; - void **values; - int *value_lens; - int num_keys; -}; - -/* Get record message */ -struct mdhim_getm_t { - mdhim_basem_t basem; - //Operation type e.g., MDHIM_GET_EQ, MDHIM_GET_NEXT, MDHIM_GET_PREV - int op; - /* The key to get if op is MDHIM_GET_EQ - If op is MDHIM_GET_NEXT or MDHIM_GET_PREV the key is the last key to start from - */ - void *key; - //The length of the key - int key_len; - int num_keys; -}; - -/* Bulk get record message */ -struct mdhim_bgetm_t { - mdhim_basem_t basem; - //Operation type i.e, MDHIM_GET_EQ, MDHIM_GET_NEXT, MDHIM_GET_PREV - int op; - void **keys; - int *key_lens; - int num_keys; - - //Number of records to retrieve per key given - int num_recs; -}; - -/* Delete message */ -struct mdhim_delm_t { - mdhim_basem_t basem; - void *key; - int key_len; -}; - -/* Bulk delete record message */ -struct mdhim_bdelm_t { - mdhim_basem_t basem; - void **keys; - int *key_lens; - int num_keys; -}; - -/* Range server info message */ -struct mdhim_rsi_t { - //The range server number, which is a number 1 - N where N is the number of servers - uint32_t rangesrv_num; -}; - -/* Generic receive message */ -struct mdhim_rm_t { - mdhim_basem_t basem; - int error; -}; - -/* Bulk get receive message */ -struct mdhim_bgetrm_t { - mdhim_basem_t basem; - int error; - void **keys; - int *key_lens; - void **values; - int *value_lens; - int num_keys; - struct mdhim_bgetrm_t *next; -}; - -/* Bulk generic receive message */ -struct mdhim_brm_t { - mdhim_basem_t basem; - int error; - struct mdhim_brm_t *next; -}; - - -int send_rangesrv_work(struct mdhim_t *md, int dest, void *message); -int send_all_rangesrv_work(struct mdhim_t *md, void **messages, int num_srvs); -int receive_rangesrv_work(struct mdhim_t *md, int *src, void **message); -int send_client_response(struct mdhim_t *md, int dest, void *message, int *sizebuf, - void **sendbuf, MPI_Request **size_req, MPI_Request **msg_req); -int receive_client_response(struct mdhim_t *md, int src, void **message); -int receive_all_client_responses(struct mdhim_t *md, int *srcs, int nsrcs, - void ***messages); -int pack_put_message(struct mdhim_t *md, struct mdhim_putm_t *pm, void **sendbuf, int *sendsize); -int pack_bput_message(struct mdhim_t *md, struct mdhim_bputm_t *bpm, void **sendbuf, int *sendsize); -int unpack_put_message(struct mdhim_t *md, void *message, int mesg_size, void **pm); -int unpack_bput_message(struct mdhim_t *md, void *message, int mesg_size, void **bpm); - -int pack_get_message(struct mdhim_t *md, struct mdhim_getm_t *gm, void **sendbuf, int *sendsize); -int pack_bget_message(struct mdhim_t *md, struct mdhim_bgetm_t *bgm, void **sendbuf, int *sendsize); -int unpack_get_message(struct mdhim_t *md, void *message, int mesg_size, void **gm); -int unpack_bget_message(struct mdhim_t *md, void *message, int mesg_size, void **bgm); - -int pack_bgetrm_message(struct mdhim_t *md, struct mdhim_bgetrm_t *bgrm, void **sendbuf, int *sendsize); -int unpack_bgetrm_message(struct mdhim_t *md, void *message, int mesg_size, void **bgrm); - -int pack_del_message(struct mdhim_t *md, struct mdhim_delm_t *dm, void **sendbuf, int *sendsize); -int pack_bdel_message(struct mdhim_t *md, struct mdhim_bdelm_t *bdm, void **sendbuf, int *sendsize); -int unpack_del_message(struct mdhim_t *md, void *message, int mesg_size, void **dm); -int unpack_bdel_message(struct mdhim_t *md, void *message, int mesg_size, void **bdm); - -int pack_return_message(struct mdhim_t *md, struct mdhim_rm_t *rm, void **sendbuf, int *sendsize); -int unpack_return_message(struct mdhim_t *md, void *message, void **rm); - -int pack_base_message(struct mdhim_t *md, struct mdhim_basem_t *cm, void **sendbuf, int *sendsize); - -void mdhim_full_release_msg(void *message); -void mdhim_partial_release_msg(void *message); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/meta/src/partitioner.c b/meta/src/partitioner.c deleted file mode 100644 index 6f6013b80..000000000 --- a/meta/src/partitioner.c +++ /dev/null @@ -1,1035 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include -#include -#include -#include "partitioner.h" - -#include "unifyfs_metadata_mdhim.h" - -struct timeval calslicestart, calsliceend; -double calslicetime = 0; -struct timeval rangehashstart, rangehashend; -double rangehashtime = 0; -struct timeval serhashstart, serhashend; -double serhashtime = 0; -unsigned long meta_pair[2] = {0}; -//Global hashtable for alphabet used in partitioner algorithm -struct mdhim_char *mdhim_alphabet = NULL; - -/** - * delete_alphabet - * Deletes the alphabet hash table - */ -void delete_alphabet() { - struct mdhim_char *cur_char, *tmp; - HASH_ITER(hh, mdhim_alphabet, cur_char, tmp) { - HASH_DEL(mdhim_alphabet, cur_char); /*delete it (mdhim_alphabet advances to next)*/ - free(cur_char); /* free it */ - } - - mdhim_alphabet = NULL; -} - -long double get_str_num(void *key, uint32_t key_len) { - int id, i; - struct mdhim_char *mc; - long double str_num; - - str_num = 0; - //Iterate through each character to perform the algorithm mentioned above - for (i = 0; i < key_len; i++) { - //Ignore null terminating char - if (i == key_len - 1 && ((char *)key)[i] == '\0') { - break; - } - - id = (int) ((char *)key)[i]; - HASH_FIND_INT(mdhim_alphabet, &id, mc); - str_num += mc->pos * powl(2, MDHIM_ALPHABET_EXPONENT * -(i + 1)); - } - - return str_num; -} - -/* Allocate a copy of a key and return it. The returned key must be freed. */ -void* copy_unifyfs_key(void* key, uint32_t key_len) -{ - void* key_copy = malloc((size_t)key_len); - memcpy(key_copy, key, (size_t)key_len); - return key_copy; -} - -uint64_t get_byte_num(void *key, uint32_t key_len) { - uint64_t byte_num; - - byte_num = *((long *)(((char *)key)+sizeof(long))); - return byte_num; -} - -void partitioner_init() { - // Create the alphabet for string keys - build_alphabet(); -} - -/* - * partitioner_release - * Releases memory in use by the partitioner - * - */ -void partitioner_release() { - delete_alphabet(); - mdhim_alphabet = NULL; -} - -/** - * add_char - * Adds a character to our alphabet hash table - * - * @param id The id of our entry (the ascii code of the character) - * @param pos The value of our entry (the position of the character in our alphabet) - */ -void add_char(int id, int pos) { - struct mdhim_char *mc; - - //Create a new mdhim_char to hold our entry - mc = malloc(sizeof(struct mdhim_char)); - - //Set the mdhim_char - mc->id = id; - mc->pos = pos; - - //Add it to the hash table - HASH_ADD_INT(mdhim_alphabet, id, mc); - - return; -} - -/** - * build_alphabet - * Creates our ascii based alphabet and inserts each character into a uthash table - */ -void build_alphabet() { - char c; - int i, indx; - - /* Index of the character in the our alphabet - This is to number each character we care about so we can map - a string to a range server - - 0 - 9 have indexes 0 - 9 - A - Z have indexes 10 - 35 - a - z have indexes 36 - 61 - */ - indx = 0; - - //Start with numbers 0 - 9 - c = '0'; - for (i = (int) c; i <= (int) '9'; i++) { - add_char(i, indx); - indx++; - } - - //Next deal with A-Z - c = 'A'; - for (i = (int) c; i <= (int) 'Z'; i++) { - add_char(i, indx); - indx++; - } - - //Next deal with a-z - c = 'a'; - for (i = (int) c; i <= (int) 'z'; i++) { - add_char(i, indx); - indx++; - } - - return; -} - -void _add_to_rangesrv_list(rangesrv_list **list, rangesrv_info *ri) { - rangesrv_list *list_p, *entry; - - entry = malloc(sizeof(rangesrv_list)); - entry->ri = ri; - entry->next = NULL; - if (!*list) { - *list = entry; - } else { - list_p = *list; - if (list_p->ri == ri) return; - while (list_p->next) { - list_p = list_p->next; - if (list_p->ri == ri) return; - } - - list_p->next = entry; - } - - return; -} - -/** - * verify_key - * Determines whether the given key is a valid key or not - * - * @param key the key to check - * @param key_len the length of the key - * @param key_type the type of the key - * - * @return MDHIM_ERROR if the key is not valid, otherwise the MDHIM_SUCCESS - */ -int verify_key(struct index_t *index, void *key, - int key_len, int key_type) { - int i; - int id; - struct mdhim_char *mc; - uint64_t ikey = 0; - uint64_t size_check; - - if (!key) { - return MDHIM_ERROR; - } - - if (key_len > MAX_KEY_LEN) { - return MDHIM_ERROR; - } - if (key_type == MDHIM_STRING_KEY) { - for (i = 0; i < key_len; i++) { - //Ignore null terminating char - if (i == key_len - 1 && ((char *)key)[i] == '\0') { - break; - } - - id = (int) ((char *)key)[i]; - HASH_FIND_INT(mdhim_alphabet, &id, mc); - if (!mc) { - return MDHIM_ERROR; - } - } - } - - if (key_type == MDHIM_INT_KEY) { - ikey = *(uint32_t *)key; - } else if (key_type == MDHIM_LONG_INT_KEY) { - ikey = *(uint64_t *)key; - } else if (key_type == MDHIM_FLOAT_KEY) { - ikey = *(float *)key; - } else if (key_type == MDHIM_DOUBLE_KEY) { - ikey = *(double *)key; - } - - size_check = ikey/index->mdhim_max_recs_per_slice; - if (size_check >= MDHIM_MAX_SLICES) { - mlog(MDHIM_CLIENT_CRIT, "Error - Not enough slices for this key." - " Try increasing the slice size."); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} - -int is_float_key(int type) { - int ret = 0; - - if (type == MDHIM_STRING_KEY) { - ret = 1; - } else if (type == MDHIM_FLOAT_KEY) { - ret = 1; - } else if (type == MDHIM_DOUBLE_KEY) { - ret = 1; - } else if (type == MDHIM_INT_KEY) { - ret = 0; - } else if (type == MDHIM_LONG_INT_KEY) { - ret = 0; - } else if (type == MDHIM_BYTE_KEY) { - ret = 1; - } - - return ret; -} - -/** - * get_slice_num - * - * gets the slice number from a key - * slice is a portion of the range served by MDHIM - * each range server servers many slices of the range - * @param md main MDHIM struct - * @param key pointer to the key to find the range server of - * @param key_len length of the key - * @return the slice number or 0 on error - */ -int get_slice_num(struct mdhim_t *md, struct index_t *index, void *key, int key_len) { - //The number that maps a key to range server (dependent on key type) - // printf("getting slice num\n"); - fflush(stdout); - int slice_num; - uint64_t key_num; - //The range server number that we return - float fkey; - double dkey; - int ret; - long double map_num; - uint64_t total_keys; - int key_type = index->key_type; - //The last key number that can be represented by the number of slices and the slice size - total_keys = MDHIM_MAX_SLICES * index->mdhim_max_recs_per_slice; - - //Make sure this key is valid - if ((ret = verify_key(index, key, key_len, key_type)) != MDHIM_SUCCESS) { - mlog(MDHIM_CLIENT_INFO, "Rank: %d - Invalid key given", - md->mdhim_rank); - return MDHIM_ERROR; - } - - //Perform key dependent algorithm to get the key in terms of the ranges served - switch(key_type) { - case MDHIM_INT_KEY: - key_num = *(uint32_t *) key; - - break; - case MDHIM_LONG_INT_KEY: - key_num = *(uint64_t *) key; - - break; - case MDHIM_BYTE_KEY: - /* Algorithm used - 1. Iterate through each byte - 2. Transform each byte into a floating point number - 3. Add this floating point number to map_num - 4. Multiply this number times the total number of keys to get the number - that represents the position in a range - - For #2, the transformation is as follows: - - Take the position of the character in the mdhim alphabet - times 2 raised to 8 * -(i + 1) - where i is the current iteration in the loop - */ - - //Used for calculating the range server to use for this string - // map_num = 0; - // map_num = get_byte_num(key, key_len); - // key_num = floorl(map_num * total_keys); - key_num = get_byte_num(key, key_len); -// printf("key_num is: %ld\n", key_num); -// fflush(stdout); - break; - case MDHIM_FLOAT_KEY: - //Convert the key to a float - fkey = *((float *) key); - fkey = floor(fabsf(fkey)); - key_num = fkey; - - break; - case MDHIM_DOUBLE_KEY: - //Convert the key to a double - dkey = *((double *) key); - dkey = floor(fabs(dkey)); - key_num = dkey; - - break; - case MDHIM_STRING_KEY: - /* Algorithm used - - 1. Iterate through each character - 2. Transform each character into a floating point number - 3. Add this floating point number to map_num - 4. Multiply this number times the total number of keys to get the number - that represents the position in a range - - For #2, the transformation is as follows: - - Take the position of the character in the mdhim alphabet - times 2 raised to the MDHIM_ALPHABET_EXPONENT * -(i + 1) - where i is the current iteration in the loop - */ - - //Used for calculating the range server to use for this string - map_num = 0; - map_num = get_str_num(key, key_len); - key_num = floorl(map_num * total_keys); - - break; - case MDHIM_UNIFYFS_KEY: - /* Use only the gfid portion of the key, which ensures all extents - * for the same file hash to the same server */ - key_num = (uint64_t) UNIFYFS_KEY_FID(key); - break; - default: - return 0; - } - - - /* Convert the key to a slice number */ - slice_num = key_num/index->mdhim_max_recs_per_slice; - - //Return the slice number - return slice_num; -} - -/** - * get_range_server_by_slice - * - * gets the range server that handles the key given - * @param md main MDHIM struct - * @param slice the slice number - * @return the rank of the range server or NULL on error - */ -rangesrv_info *get_range_server_by_slice(struct mdhim_t *md, struct index_t *index, int slice) { - //The number that maps a key to range server (dependent on key type) - uint32_t rangesrv_num; - //The range server number that we return - rangesrv_info *ret_rp; - - if (index->num_rangesrvs == 1) { - rangesrv_num = 1; - } else { - rangesrv_num = slice % index->num_rangesrvs; - rangesrv_num++; - } - - //Find the range server number in the hash table - ret_rp = NULL; - HASH_FIND_INT(index->rangesrvs_by_num, &rangesrv_num, ret_rp); - - //Return the rank - return ret_rp; -} - -/** - * get_range_servers - * - * gets the range server that handles the key given - * @param md main MDHIM struct - * @param key pointer to the key to find the range server of - * @param key_len length of the key - * @return the rank of the range server or NULL on error - */ -rangesrv_list *get_range_servers(struct mdhim_t *md, struct index_t *index, - void *key, int key_len) { - //The number that maps a key to range server (dependent on key type) - int slice_num; - //The range server number that we return - rangesrv_info *ret_rp; - rangesrv_list *rl; - - if ((slice_num = get_slice_num(md, index, key, key_len)) == MDHIM_ERROR) { - return NULL; - } - - ret_rp = get_range_server_by_slice(md, index, slice_num); - rl = NULL; - _add_to_rangesrv_list(&rl, ret_rp); - - //Return the range server list - return rl; -} - -struct mdhim_stat *get_next_slice_stat(struct mdhim_t *md, struct index_t *index, - int slice_num) { - struct mdhim_stat *stat, *tmp, *next_slice; - - next_slice = NULL; - - //Iterate through the stat hash entries to find the slice - //number next after the given slice number - HASH_ITER(hh, index->stats, stat, tmp) { - if (!stat) { - continue; - } - - if (stat->key > slice_num && !next_slice) { - next_slice = stat; - } else if (next_slice && stat->key > slice_num && stat->key < next_slice->key) { - next_slice = stat; - } - } - - return next_slice; -} - -struct mdhim_stat *get_prev_slice_stat(struct mdhim_t *md, struct index_t *index, - int slice_num) { - struct mdhim_stat *stat, *tmp, *prev_slice; - - prev_slice = NULL; - - //Iterate through the stat hash entries to find the slice - //number next after the given slice number - HASH_ITER(hh, index->stats, stat, tmp) { - if (!stat) { - continue; - } - - if (stat->key < slice_num && !prev_slice) { - prev_slice = stat; - } else if (prev_slice && stat->key < slice_num && stat->key > prev_slice->key) { - prev_slice = stat; - } - } - - return prev_slice; -} - -struct mdhim_stat *get_last_slice_stat(struct mdhim_t *md, struct index_t *index) { - struct mdhim_stat *stat, *tmp, *last_slice; - - last_slice = NULL; - - //Iterate through the stat hash entries to find the slice - //number next after the given slice number - HASH_ITER(hh, index->stats, stat, tmp) { - if (!stat) { - continue; - } - - if (!last_slice) { - last_slice = stat; - } else if (stat->key > last_slice->key) { - last_slice = stat; - } - } - - return last_slice; -} - -struct mdhim_stat *get_first_slice_stat(struct mdhim_t *md, struct index_t *index) { - struct mdhim_stat *stat, *tmp, *first_slice; - - first_slice = NULL; - - //Iterate through the stat hash entries to find the slice - //number next after the given slice number - HASH_ITER(hh, index->stats, stat, tmp) { - if (!stat) { - continue; - } - - if (!first_slice) { - first_slice = stat; - } else if (stat->key < first_slice->key) { - first_slice = stat; - } - } - - return first_slice; -} - -int get_slice_from_fstat(struct mdhim_t *md, struct index_t *index, - int cur_slice, long double fstat, int op) { - int slice_num = 0; - struct mdhim_stat *cur_stat, *new_stat; - - if (!index->stats) { - return 0; - } - - //Get the stat struct for our current slice - HASH_FIND_INT(index->stats, &cur_slice, cur_stat); - - switch(op) { - case MDHIM_GET_NEXT: - slice_num = cur_slice; - break; - case MDHIM_GET_PREV: - if (cur_stat && *(long double *)cur_stat->min < fstat) { - slice_num = cur_slice; - goto done; - } else { - new_stat = get_prev_slice_stat(md, index, cur_slice); - goto new_stat; - } - - break; - case MDHIM_GET_FIRST: - new_stat = get_first_slice_stat(md, index); - goto new_stat; - break; - case MDHIM_GET_LAST: - new_stat = get_last_slice_stat(md, index); - goto new_stat; - break; - default: - slice_num = 0; - break; - } - -done: - return slice_num; - -new_stat: - if (new_stat) { - return new_stat->key; - } else { - return 0; - } -} - -int get_slice_from_istat(struct mdhim_t *md, struct index_t *index, - int cur_slice, uint64_t istat, int op) { - int slice_num = 0; - struct mdhim_stat *cur_stat, *new_stat; - - if (!index->stats) { - return 0; - } - - new_stat = cur_stat = NULL; - //Get the stat struct for our current slice - HASH_FIND_INT(index->stats, &cur_slice, cur_stat); - - switch(op) { - case MDHIM_GET_NEXT: - if (cur_stat && *(uint64_t *)cur_stat->max > istat && - *(uint64_t *)cur_stat->min <= istat) { - slice_num = cur_slice; - goto done; - } else { - new_stat = get_next_slice_stat(md, index, cur_slice); - goto new_stat; - } - - break; - case MDHIM_GET_PREV: - if (cur_stat && *(uint64_t *)cur_stat->min < istat && - *(uint64_t *)cur_stat->max >= istat ) { - slice_num = cur_slice; - goto done; - } else { - new_stat = get_prev_slice_stat(md, index, cur_slice); - goto new_stat; - } - - break; - case MDHIM_GET_FIRST: - new_stat = get_first_slice_stat(md, index); - goto new_stat; - break; - case MDHIM_GET_LAST: - new_stat = get_last_slice_stat(md, index); - goto new_stat; - break; - default: - slice_num = 0; - break; - } - -done: - return slice_num; - -new_stat: - if (new_stat) { - return new_stat->key; - } else { - return 0; - } -} - -/* Iterate through the multi-level hash table in index->stats to find the range servers - that could have the key */ -rangesrv_list *get_rangesrvs_from_istat(struct mdhim_t *md, struct index_t *index, - uint64_t istat, int op) { - struct mdhim_stat *cur_rank, *cur_stat, *tmp, *tmp2; - rangesrv_list *head, *lp, *entry; - int slice_num = 0; - unsigned int num_slices; - unsigned int i; - - if (!index->stats) { - return 0; - } - - cur_stat = cur_rank = NULL; - head = lp = entry = NULL; - HASH_ITER(hh, index->stats, cur_rank, tmp) { - num_slices = HASH_COUNT(cur_rank->stats); - i = 0; - HASH_ITER(hh, cur_rank->stats, cur_stat, tmp2) { - if (cur_stat->num <= 0) { - continue; - } - - slice_num = -1; - switch(op) { - case MDHIM_GET_NEXT: - if (cur_stat && *(uint64_t *)cur_stat->max > istat && - *(uint64_t *)cur_stat->min - 1 <= istat) { - slice_num = cur_stat->key; - } - - break; - case MDHIM_GET_PREV: - if (cur_stat && *(uint64_t *)cur_stat->min < istat && - *(uint64_t *)cur_stat->max + 1 >= istat ) { - slice_num = cur_stat->key; - } - - break; - case MDHIM_GET_FIRST: - if (!i) { - slice_num = cur_stat->key; - } - break; - case MDHIM_GET_LAST: - if (i == num_slices - 1) { - slice_num = cur_stat->key; - } - break; - case MDHIM_GET_EQ: - if (cur_stat && *(uint64_t *)cur_stat->max >= istat && - *(uint64_t *)cur_stat->min <= istat) { - slice_num = cur_stat->key; - } - - break; - default: - slice_num = 0; - break; - } - - if (slice_num < 0) { - continue; - } - - entry = malloc(sizeof(rangesrv_list)); - memset(entry, 0, sizeof(rangesrv_list)); - HASH_FIND_INT(index->rangesrvs_by_rank, &cur_rank->key, entry->ri); - if (!entry->ri) { - free(entry); - continue; - } - - if (!head) { - lp = head = entry; - } else { - lp->next = entry; - lp = lp->next; - } - - break; - } - } - - return head; -} - -/* Iterate through the multi-level hash table in index->stats to find the range servers - that could have the key */ -rangesrv_list *get_rangesrvs_from_fstat(struct mdhim_t *md, struct index_t *index, - long double fstat, int op) { - struct mdhim_stat *cur_rank, *cur_stat, *tmp, *tmp2; - rangesrv_list *head, *lp, *entry; - int slice_num = 0; - unsigned int num_slices; - unsigned int i; - - if (!index->stats) { - return 0; - } - - cur_stat = cur_rank = NULL; - head = lp = entry = NULL; - HASH_ITER(hh, index->stats, cur_rank, tmp) { - num_slices = HASH_COUNT(cur_rank->stats); - i = 0; - HASH_ITER(hh, cur_rank->stats, cur_stat, tmp2) { - if (cur_stat->num <= 0) { - continue; - } - - slice_num = -1; - switch(op) { - case MDHIM_GET_NEXT: - if (cur_stat && *(long double *)cur_stat->max > fstat && - *(long double *)cur_stat->min - 1.0L <= fstat) { - slice_num = cur_stat->key; - } - break; - case MDHIM_GET_PREV: - if (cur_stat && *(long double *)cur_stat->min < fstat && - *(long double *)cur_stat->max + 1.0L >= fstat ) { - slice_num = cur_stat->key; - } - - break; - case MDHIM_GET_FIRST: - if (!i) { - slice_num = cur_stat->key; - } - break; - case MDHIM_GET_LAST: - if (i == num_slices - 1) { - slice_num = cur_stat->key; - } - break; - case MDHIM_GET_EQ: - if (cur_stat && *(long double *)cur_stat->max >= fstat && - *(long double *)cur_stat->min <= fstat) { - slice_num = cur_stat->key; - } - - break; - default: - slice_num = 0; - break; - } - - if (slice_num < 0) { - continue; - } - - entry = malloc(sizeof(rangesrv_list)); - HASH_FIND_INT(index->rangesrvs_by_rank, &cur_rank->key, entry->ri); - if (!entry->ri) { - free(entry); - continue; - } - - if (!head) { - lp = head = entry; - } else { - lp->next = entry; - lp = lp->next; - } - - break; - } - } - - return head; -} - -/** - * get_range_server_from_stats - * - * gets the range server based on the stats acquired from a stat flush - * @param md main MDHIM struct - * @param key pointer to the key to find the range server of - * @param key_len length of the key - * @param op operation type ( - * @return the rank of the range server or NULL on error - */ -rangesrv_list *get_range_servers_from_stats(struct mdhim_t *md, struct index_t *index, - void *key, int key_len, int op) { - //The number that maps a key to range server (dependent on key type) -// printf("get range servers from stats"); -// fflush(stdout); - int slice_num, cur_slice; - //The range server number that we return - rangesrv_info *ret_rp; - rangesrv_list *rl; - int float_type = 0; - long double fstat = 0; - uint64_t istat = 0; - - if (key && key_len) { - //Find the slice based on the operation and key value - if (index->key_type == MDHIM_STRING_KEY) { - fstat = get_str_num(key, key_len); - } else if (index->key_type == MDHIM_FLOAT_KEY) { - fstat = *(float *) key; - } else if (index->key_type == MDHIM_DOUBLE_KEY) { - fstat = *(double *) key; - } else if (index->key_type == MDHIM_INT_KEY) { - istat = *(uint32_t *) key; - } else if (index->key_type == MDHIM_LONG_INT_KEY) { - istat = *(uint64_t *) key; - } else if (index->key_type == MDHIM_BYTE_KEY) { - fstat = get_byte_num(key, key_len); - } - } - - //If we don't have any stats info, then return null - if (!index->stats) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - No statistics data available." - " Perform a mdhimStatFlush first.", - md->mdhim_rank); - return NULL; - } - - if (index->type != LOCAL_INDEX) { - - cur_slice = slice_num = 0; - float_type = is_float_key(index->key_type); - - //Get the current slice number of our key - if (key && key_len) { - cur_slice = get_slice_num(md, index, key, key_len); - - if (cur_slice == MDHIM_ERROR) { - - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error: could not determine a" - " valid a slice number", - md->mdhim_rank); - return NULL; - } - } else if (op != MDHIM_GET_FIRST && op != MDHIM_GET_LAST) { - //If the op is not first or last, then we expect a key - - return NULL; - } - - if (float_type) { - slice_num = get_slice_from_fstat(md, index, cur_slice, fstat, op); - } else { - slice_num = get_slice_from_istat(md, index, cur_slice, istat, op); - } - - if (slice_num == MDHIM_ERROR) { - return NULL; - } - - ret_rp = get_range_server_by_slice(md, index, slice_num); - if (!ret_rp) { - mlog(MDHIM_CLIENT_INFO, "Rank: %d - Did not get a valid range server from" - " get_range_server_by_size", - md->mdhim_rank); - return NULL; - } - - rl = NULL; - _add_to_rangesrv_list(&rl, ret_rp); - } else { - if (float_type) { - rl = get_rangesrvs_from_fstat(md, index, fstat, op); - } else { - rl = get_rangesrvs_from_istat(md, index, istat, op); - } - } - - //Return the range server information - return rl; -} - -rangesrv_list *get_range_servers_from_range(struct mdhim_t *md, struct index_t *index, - void *start_key, void *end_key, int key_len) { - //The number that maps a key to range server (dependent on key type) - - int start_slice, end_slice; - //The range server number that we return - rangesrv_info *ret_rp; - rangesrv_list *rl; - - //If we don't have any stats info, then return null - if (!index->stats) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - No statistics data available." - " Perform a mdhimStatFlush first.", - md->mdhim_rank); - return NULL; - } - - gettimeofday(&calslicestart, NULL); - start_slice = get_slice_num(md, index, start_key, key_len); - if (start_slice == MDHIM_ERROR) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error: could not determine a" - " valid a slice number", - md->mdhim_rank); - return NULL; - } - - end_slice = get_slice_num(md, index, end_key, key_len); - if (end_slice == MDHIM_ERROR) { - mlog(MDHIM_CLIENT_CRIT, "Rank: %d - Error: could not determine a valid a slice number", md->mdhim_rank); - return NULL; - } - gettimeofday(&calsliceend, NULL); - calslicetime+=1000000*(calsliceend.tv_sec-calslicestart.tv_sec)+calsliceend.tv_usec-calslicestart.tv_usec; - - long i; - rl = NULL; - - for (i = start_slice; i <= end_slice; i++) { - struct mdhim_stat *cur_stat; - gettimeofday(&rangehashstart, NULL); - HASH_FIND_INT(index->stats, &i, cur_stat); - gettimeofday(&rangehashend, NULL); - rangehashtime+=1000000*(rangehashend.tv_sec-rangehashstart.tv_sec)+rangehashend.tv_usec-rangehashstart.tv_usec; - gettimeofday(&serhashstart, NULL); - ret_rp = get_range_server_by_slice(md, index, i); - gettimeofday(&serhashend, NULL); - serhashtime+=1000000*(serhashend.tv_sec-serhashstart.tv_sec)+serhashend.tv_usec-serhashstart.tv_usec; - - if (!ret_rp) { - mlog(MDHIM_CLIENT_INFO, "Rank: %d - Did not get a valid range server from" - " get_range_server_by_size", - md->mdhim_rank); - return NULL; - } - ret_rp->num_recs = 0; - ret_rp->first_key = NULL; - - } - - for (i = start_slice; i <= end_slice; i++) { - struct mdhim_stat *cur_stat; - gettimeofday(&rangehashstart, NULL); - HASH_FIND_INT(index->stats, &i, cur_stat); - gettimeofday(&rangehashend, NULL); - rangehashtime+=1000000*(rangehashend.tv_sec-rangehashstart.tv_sec)+rangehashend.tv_usec-rangehashstart.tv_usec; - - gettimeofday(&serhashstart, NULL); - ret_rp = get_range_server_by_slice(md, index, i); - gettimeofday(&serhashend, NULL); - serhashtime+=1000000*(serhashend.tv_sec-serhashstart.tv_sec)+serhashend.tv_usec-serhashstart.tv_usec; - if (!ret_rp) { - mlog(MDHIM_CLIENT_INFO, "Rank: %d - Did not get a valid range server from" - " get_range_server_by_size", - md->mdhim_rank); - return NULL; - } - - ret_rp->num_recs += cur_stat->num; - if (ret_rp->first_key == NULL) { - ret_rp->first_key = cur_stat->min; - } - else { - if (unifyfs_compare(ret_rp->first_key, cur_stat->min) > 0 ) { - ret_rp->first_key = cur_stat->min; - } - } - - _add_to_rangesrv_list(&rl, ret_rp); - } - - //Return the range server information - return rl; - -} diff --git a/meta/src/partitioner.h b/meta/src/partitioner.h deleted file mode 100644 index 330d65528..000000000 --- a/meta/src/partitioner.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __HASH_H -#define __HASH_H - -#include "mdhim.h" -#include "uthash.h" -#include "indexes.h" - -/* Used to determine if a rank is a range server - Works like this: - if myrank % RANGE_SERVER_FACTOR == 0, then I'm a range server - if all the keys haven't been covered yet - - if the number of ranks is less than the RANGE_SERVER_FACTOR, - then the last rank will be the range server -*/ - -#ifdef __cplusplus -extern "C" -{ -#endif -//#define RANGE_SERVER_FACTOR 4 // NOW a global variable in partitioner.h -#define MDHIM_MAX_SLICES 2147483647 -//32 bit unsigned integer -#define MDHIM_INT_KEY 1 -#define MDHIM_LONG_INT_KEY 2 -#define MDHIM_FLOAT_KEY 3 -#define MDHIM_DOUBLE_KEY 4 -#define MDHIM_STRING_KEY 5 -//An arbitrary sized key -#define MDHIM_BYTE_KEY 6 -#define MDHIM_UNIFYFS_KEY 7 - -//Maximum length of a key -#define MAX_KEY_LEN 1048576 - -/* The exponent used for the algorithm that determines the range server - - This exponent, should cover the number of characters in our alphabet - if 2 is raised to that power. If the exponent is 6, then, 64 characters are covered -*/ -#define MDHIM_ALPHABET_EXPONENT 6 - -//Used for hashing strings to the appropriate range server -struct mdhim_char { - int id; /* we'll use this field as the key */ - int pos; - UT_hash_handle hh; /* makes this structure hashable */ -}; - -typedef struct rangesrv_list rangesrv_list; -struct rangesrv_list { - rangesrv_info *ri; - rangesrv_list *next; -}; - -void partitioner_init(); -void partitioner_release(); -rangesrv_list *get_range_servers(struct mdhim_t *md, struct index_t *index, - void *key, int key_len); -rangesrv_info *get_range_server_by_slice(struct mdhim_t *md, - struct index_t *index, int slice); -void build_alphabet(); -int verify_key(struct index_t *index, void *key, int key_len, int key_type); -long double get_str_num(void *key, uint32_t key_len); - //long double get_byte_num(void *key, uint32_t key_len); -uint64_t get_byte_num(void *key, uint32_t key_len); -int get_slice_num(struct mdhim_t *md, struct index_t *index, void *key, int key_len); -int is_float_key(int type); - -rangesrv_list *get_range_servers_from_stats(struct mdhim_t *md, struct index_t *index, - void *key, int key_len, int op); -rangesrv_list *get_range_servers_from_range(struct mdhim_t *md, struct index_t *index, - void *start_key, void *end_key, int key_len); - -void* copy_unifyfs_key(void* key, uint32_t key_len); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/meta/src/range_server.c b/meta/src/range_server.c deleted file mode 100644 index 460f1f3c3..000000000 --- a/meta/src/range_server.c +++ /dev/null @@ -1,1512 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ds_leveldb.h" -#include "mdhim.h" -#include "mdhim_options.h" -#include "partitioner.h" -#include "range_server.h" -#include "unifyfs_metadata_mdhim.h" -#include "uthash.h" - -int recv_counter = 0; - -struct timeval resp_put_comm_start, resp_put_comm_end; -double resp_put_comm_time = 0; - -struct timeval resp_get_comm_start, resp_get_comm_end; -double resp_get_comm_time = 0; -struct index_t *tmp_index; - -struct timeval worker_start, worker_end; -double worker_time=0; - -struct timeval worker_get_start, worker_get_end; -double worker_get_time=0; - -struct timeval worker_put_start, worker_put_end; -double worker_put_time=0; - -struct timeval stat_start, stat_end; -double stat_time=0; - -struct timeval odbgetstart, odbgetend; -double odbgettime=0; - -struct timeval bputstart, bputend; -double bputtime=0; - -struct timeval statstart, statend; -double starttime=0; - -int putflag = 1; - -int unifyfs_compare(const char* a, const char* b) { - int rc; - unifyfs_key_t *keya = (unifyfs_key_t *)a; - unifyfs_key_t *keyb = (unifyfs_key_t *)b; - rc = unifyfs_key_compare(keya, keyb); - return rc; -} - -void add_timing(struct timeval start, struct timeval end, int num, - struct mdhim_t *md, int mtype) { - long double elapsed; - - elapsed = (long double) (end.tv_sec - start.tv_sec) + - ((long double) (end.tv_usec - start.tv_usec)/1000000.0); - if (mtype == MDHIM_PUT || mtype == MDHIM_BULK_PUT) { - md->mdhim_rs->put_time += elapsed; - md->mdhim_rs->num_put += num; - } else if (mtype == MDHIM_BULK_GET) { - md->mdhim_rs->get_time += elapsed; - md->mdhim_rs->num_get += num; - } -} - -/** - * send_locally_or_remote - * Sends the message remotely or locally - * - * @param md Pointer to the main MDHIM structure - * @param dest Destination rank - * @param message pointer to message to send - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int send_locally_or_remote(struct mdhim_t *md, int dest, void *message) { - int ret = MDHIM_SUCCESS; - MPI_Request **size_req, **msg_req; - int *sizebuf; - void **sendbuf; - - if (md->mdhim_rank != dest) { - //Sends the message remotely - size_req = malloc(sizeof(MPI_Request *)); - msg_req = malloc(sizeof(MPI_Request *)); - sendbuf = malloc(sizeof(void *)); - sizebuf = malloc(sizeof(int)); - ret = send_client_response(md, dest, message, sizebuf, - sendbuf, size_req, msg_req); - - if (*size_req) { - range_server_add_oreq(md, *size_req, sizebuf); - } else { - free(sizebuf); - } - - if (*msg_req) { - range_server_add_oreq(md, *msg_req, *sendbuf); - } else if (*sendbuf) { - free(*sendbuf); - } - - free(sendbuf); - mdhim_full_release_msg(message); - free(size_req); - free(msg_req); - } else { - //Sends the message locally - pthread_mutex_lock(md->receive_msg_mutex); - md->receive_msg = message; - pthread_mutex_unlock(md->receive_msg_mutex); - pthread_cond_signal(md->receive_msg_ready_cv); - } - - return ret; -} - -struct index_t *find_index(struct mdhim_t *md, struct mdhim_basem_t *msg) { - struct index_t *ret; - - ret = get_index(md, msg->index); - - return ret; - -} - - -/* - * === FUNCTION ====================================================================== - * Name: find_index_by_name - * Description: Search for index by name - * Variables: the pointer to the mdhim structure - * A pointer to a base message that contains - * the name of the index - * ===================================================================================== - */ -struct index_t * find_index_by_name(struct mdhim_t *md, struct mdhim_basem_t *msg) { - struct index_t *ret; - - ret = get_index_by_name(md, msg->index_name); - - return ret; -} - -/** - * range_server_add_work - * Adds work to the work queue and signals the condition variable for the worker thread - * - * @param md Pointer to the main MDHIM structure - * @param item pointer to new work item that contains a message to handle - * @return MDHIM_SUCCESS - */ -int range_server_add_work(struct mdhim_t *md, work_item *item) { - //Lock the work queue mutex - pthread_mutex_lock(md->mdhim_rs->work_queue_mutex); - item->next = NULL; - item->prev = NULL; - - //Add work to the tail of the work queue - if (md->mdhim_rs->work_queue->tail) { - md->mdhim_rs->work_queue->tail->next = item; - item->prev = md->mdhim_rs->work_queue->tail; - md->mdhim_rs->work_queue->tail = item; - } else { - md->mdhim_rs->work_queue->head = item; - md->mdhim_rs->work_queue->tail = item; - } - - //Signal the waiting thread that there is work available - pthread_mutex_unlock(md->mdhim_rs->work_queue_mutex); - pthread_cond_signal(md->mdhim_rs->work_ready_cv); - - return MDHIM_SUCCESS; -} - -/** - * get_work - * Returns the next work item from the work queue - * - * @param md Pointer to the main MDHIM structure - * @return the next work_item to process - */ - -work_item *get_work(struct mdhim_t *md) { - work_item *item; - - item = md->mdhim_rs->work_queue->head; - if (!item) { - return NULL; - } - - //Set the list head and tail to NULL - md->mdhim_rs->work_queue->head = NULL; - md->mdhim_rs->work_queue->tail = NULL; - - //Return the list - return item; -} - -/** - * range_server_stop - * Stop the range server (i.e., stops the threads and frees the relevant data in md) - * - * @param md Pointer to the main MDHIM structure - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_stop(struct mdhim_t *md) { - int i, ret; - work_item *head, *temp_item; - - //Signal to the listener thread that it needs to shutdown - md->shutdown = 1; - - /* Wait for the threads to finish */ - pthread_cond_broadcast(md->mdhim_rs->work_ready_cv); - pthread_join(md->mdhim_rs->listener, NULL); - /* Wait for the threads to finish */ - for (i = 0; i < md->db_opts->num_wthreads; i++) { - pthread_join(*md->mdhim_rs->workers[i], NULL); - free(md->mdhim_rs->workers[i]); - } - free(md->mdhim_rs->workers); - - //Destroy the condition variables - if ((ret = pthread_cond_destroy(md->mdhim_rs->work_ready_cv)) != 0) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Error destroying work cond variable", - md->mdhim_rank); - } - free(md->mdhim_rs->work_ready_cv); - - //Destroy the work queue mutex - if ((ret = pthread_mutex_destroy(md->mdhim_rs->work_queue_mutex)) != 0) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Error destroying work queue mutex", - md->mdhim_rank); - } - free(md->mdhim_rs->work_queue_mutex); - - //Clean outstanding sends - range_server_clean_oreqs(md); - //Destroy the out req mutex - if ((ret = pthread_mutex_destroy(md->mdhim_rs->out_req_mutex)) != 0) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Error destroying work queue mutex", - md->mdhim_rank); - } - free(md->mdhim_rs->out_req_mutex); - - //Free the work queue - head = md->mdhim_rs->work_queue->head; - while (head) { - temp_item = head->next; - free(head); - head = temp_item; - } - free(md->mdhim_rs->work_queue); - - mlog(MDHIM_SERVER_INFO, "Rank: %d - Inserted: %ld records in %Lf seconds", - md->mdhim_rank, md->mdhim_rs->num_put, md->mdhim_rs->put_time); - mlog(MDHIM_SERVER_INFO, "Rank: %d - Retrieved: %ld records in %Lf seconds", - md->mdhim_rank, md->mdhim_rs->num_get, md->mdhim_rs->get_time); - - //Free the range server data - free(md->mdhim_rs); - md->mdhim_rs = NULL; - - return MDHIM_SUCCESS; -} - -/** - * range_server_put - * Handles the put message and puts data in the database - * - * @param md pointer to the main MDHIM struct - * @param im pointer to the put message to handle - * @param source source of the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_put(struct mdhim_t *md, struct mdhim_putm_t *im, int source) { - int ret; - struct mdhim_rm_t *rm; - int error = 0; - void **value; - int32_t *value_len; - int exists = 0; - void *new_value; - int32_t new_value_len; - void *old_value; - int32_t old_value_len; - struct timeval start, end; - int inserted = 0; - struct index_t *index; - - value = malloc(sizeof(void *)); - *value = NULL; - value_len = malloc(sizeof(int32_t)); - *value_len = 0; - - //Get the index referenced the message - index = find_index(md, (struct mdhim_basem_t *) im); - if (!index) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error retrieving index for id: %d", - md->mdhim_rank, im->basem.index); - error = MDHIM_ERROR; - goto done; - } - - gettimeofday(&start, NULL); - //Check for the key's existence -/* index->mdhim_store->get(index->mdhim_store->db_handle, - im->key, im->key_len, value, - value_len); -*/ - //The key already exists - if (*value && *value_len) { - exists = 1; - } - - //If the option to append was specified and there is old data, concat the old and new - if (exists && md->db_opts->db_value_append == MDHIM_DB_APPEND) { - old_value = *value; - old_value_len = *value_len; - new_value_len = old_value_len + im->value_len; - new_value = malloc(new_value_len); - memcpy(new_value, old_value, old_value_len); - memcpy(new_value + old_value_len, im->value, im->value_len); - } else { - new_value = im->value; - new_value_len = im->value_len; - } - - if (*value && *value_len) { - free(*value); - } - free(value); - free(value_len); - //Put the record in the database - if ((ret = - index->mdhim_store->put(index->mdhim_store->db_handle, - im->key, im->key_len, new_value, - new_value_len)) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error putting record", - md->mdhim_rank); - error = ret; - } else { - inserted = 1; - } - - if (!exists && error == MDHIM_SUCCESS) { - gettimeofday(&stat_start, NULL); - update_stat(md, index, im->key, im->key_len); - gettimeofday(&stat_end, NULL); - stat_time += 1000000 * (stat_end.tv_sec - stat_start.tv_sec) + \ - stat_end.tv_usec - stat_start.tv_usec; - } - - gettimeofday(&end, NULL); - add_timing(start, end, inserted, md, MDHIM_PUT); - -done: - //Create the response message - rm = malloc(sizeof(struct mdhim_rm_t)); - //Set the type - rm->basem.mtype = MDHIM_RECV; - //Set the operation return code as the error - rm->error = error; - //Set the server's rank - rm->basem.server_rank = md->mdhim_rank; - - //Send response - ret = send_locally_or_remote(md, source, rm); - - //Free memory - if (exists && md->db_opts->db_value_append == MDHIM_DB_APPEND) { - free(new_value); - } - if (source != md->mdhim_rank) { - free(im->key); - free(im->value); - } - free(im); - return MDHIM_SUCCESS; -} - - -/** - * range_server_bput - * Handles the bulk put message and puts data in the database - * - * @param md Pointer to the main MDHIM struct - * @param bim pointer to the bulk put message to handle - * @param source source of the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_bput(struct mdhim_t *md, struct mdhim_bputm_t *bim, int source) { - putflag = 1; - int i; - int ret; - int error = MDHIM_SUCCESS; - struct mdhim_rm_t *brm; - void **value; - int32_t *value_len; - int *exists; - void *new_value; - int32_t new_value_len; - void **new_values; - int32_t *new_value_lens; - void *old_value; - int32_t old_value_len; - struct timeval start, end; - int num_put = 0; - struct index_t *index; - - gettimeofday(&start, NULL); - gettimeofday(&bputstart, NULL); - exists = malloc(bim->num_keys * sizeof(int)); - new_values = malloc(bim->num_keys * sizeof(void *)); - new_value_lens = malloc(bim->num_keys * sizeof(int)); - value = malloc(sizeof(void *)); - value_len = malloc(sizeof(int32_t)); - - //Get the index referenced the message - index = find_index(md, (struct mdhim_basem_t *) bim); - if (!index) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error retrieving index for id: %d", - md->mdhim_rank, bim->basem.index); - error = MDHIM_ERROR; - goto done; - } - gettimeofday(&bputend, NULL); - bputtime+=1000000 * (bputend.tv_sec - bputstart.tv_sec)\ - + bputend.tv_usec - bputstart.tv_usec; - - for (i = 0; i < bim->num_keys && i < MAX_BULK_OPS; i++) { - *value = NULL; - *value_len = 0; - - gettimeofday(&odbgetstart, NULL); -/* index->mdhim_store->get(index->mdhim_store->db_handle, - bim->keys[i], bim->key_lens[i], value, - value_len); -*/ - if (*value && *value_len) { - exists[i] = 1; - } else { - exists[i] = 0; - } - - exists[i] = 0; - if (exists[i] && md->db_opts->db_value_append == MDHIM_DB_APPEND) { - old_value = *value; - old_value_len = *value_len; - new_value_len = old_value_len + bim->value_lens[i]; - new_value = malloc(new_value_len); - memcpy(new_value, old_value, old_value_len); - memcpy(new_value + old_value_len, bim->values[i], bim->value_lens[i]); - if (exists[i] && source != md->mdhim_rank) { - free(bim->values[i]); - } - - new_values[i] = new_value; - new_value_lens[i] = new_value_len; - } else { - new_values[i] = bim->values[i]; - new_value_lens[i] = bim->value_lens[i]; - - } - - if (*value) { - free(*value); - } - gettimeofday(&odbgetend, NULL); - odbgettime+=1000000 * (odbgetend.tv_sec\ - - odbgetstart.tv_sec) + odbgetend.tv_usec - odbgetstart.tv_usec; - } - - //Put the record in the database - if ((ret = - index->mdhim_store->batch_put(index->mdhim_store->db_handle, - bim->keys, bim->key_lens, new_values, - new_value_lens, bim->num_keys)) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error batch putting records", - md->mdhim_rank); - error = ret; - } else { - num_put = bim->num_keys; - } - - gettimeofday(&stat_start, NULL); - for (i = 0; i < bim->num_keys && i < MAX_BULK_OPS; i++) { - //Update the stats if this key didn't exist before - if (!exists[i] && error == MDHIM_SUCCESS) { - update_stat(md, index, bim->keys[i], bim->key_lens[i]); - } - - if (exists[i] && md->db_opts->db_value_append == MDHIM_DB_APPEND) { - //Release the value created for appending the new and old value - free(new_values[i]); - } - - //Release the bput keys/value if the message isn't coming from myself - if (source != md->mdhim_rank) { - free(bim->keys[i]); - free(bim->values[i]); - } - } - gettimeofday(&stat_end, NULL); - stat_time += 1000000 * (stat_end.tv_sec - stat_start.tv_sec) + \ - stat_end.tv_usec - stat_start.tv_usec; - - free(exists); - free(new_values); - free(new_value_lens); - free(value); - free(value_len); - gettimeofday(&end, NULL); - add_timing(start, end, num_put, md, MDHIM_BULK_PUT); - - done: - //Create the response message - brm = malloc(sizeof(struct mdhim_rm_t)); - //Set the type - brm->basem.mtype = MDHIM_RECV; - //Set the operation return code as the error - brm->error = error; - //Set the server's rank - brm->basem.server_rank = md->mdhim_rank; - - //Release the internals of the bput message - free(bim->keys); - free(bim->key_lens); - free(bim->values); - free(bim->value_lens); - free(bim); - - //Send response - gettimeofday(&resp_put_comm_start, NULL); - ret = send_locally_or_remote(md, source, brm); - - return MDHIM_SUCCESS; -} - -/** - * range_server_del - * Handles the delete message and deletes the data from the database - * - * @param md Pointer to the main MDHIM struct - * @param dm pointer to the delete message to handle - * @param source source of the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_del(struct mdhim_t *md, struct mdhim_delm_t *dm, int source) { - int ret = MDHIM_ERROR; - struct mdhim_rm_t *rm; - struct index_t *index; - - //Get the index referenced the message - index = find_index(md, (struct mdhim_basem_t *) dm); - if (!index) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error retrieving index for id: %d", - md->mdhim_rank, dm->basem.index); - ret = MDHIM_ERROR; - goto done; - } - - //Put the record in the database - if ((ret = - index->mdhim_store->del(index->mdhim_store->db_handle, - dm->key, dm->key_len)) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error deleting record", - md->mdhim_rank); - } - - done: - //Create the response message - rm = malloc(sizeof(struct mdhim_rm_t)); - //Set the type - rm->basem.mtype = MDHIM_RECV; - //Set the operation return code as the error - rm->error = ret; - //Set the server's rank - rm->basem.server_rank = md->mdhim_rank; - - //Send response - ret = send_locally_or_remote(md, source, rm); - free(dm); - - return MDHIM_SUCCESS; -} - -/** - * range_server_bdel - * Handles the bulk delete message and deletes the data from the database - * - * @param md Pointer to the main MDHIM struct - * @param bdm pointer to the bulk delete message to handle - * @param source source of the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_bdel(struct mdhim_t *md, struct mdhim_bdelm_t *bdm, int source) { - int i; - int ret; - int error = 0; - struct mdhim_rm_t *brm; - struct index_t *index; - - //Get the index referenced the message - index = find_index(md, (struct mdhim_basem_t *) bdm); - if (!index) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error retrieving index for id: %d", - md->mdhim_rank, bdm->basem.index); - error = MDHIM_ERROR; - goto done; - } - - //Iterate through the arrays and delete each record - for (i = 0; i < bdm->num_keys && i < MAX_BULK_OPS; i++) { - //Put the record in the database - if ((ret = - index->mdhim_store->del(index->mdhim_store->db_handle, - bdm->keys[i], bdm->key_lens[i])) - != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error deleting record", - md->mdhim_rank); - error = ret; - } - } - -done: - //Create the response message - brm = malloc(sizeof(struct mdhim_rm_t)); - //Set the type - brm->basem.mtype = MDHIM_RECV; - //Set the operation return code as the error - brm->error = error; - //Set the server's rank - brm->basem.server_rank = md->mdhim_rank; - - //Send response - ret = send_locally_or_remote(md, source, brm); - free(bdm->keys); - free(bdm->key_lens); - free(bdm); - - return MDHIM_SUCCESS; -} - -/** - * range_server_commit - * Handles the commit message and commits outstanding writes to the database - * - * @param md pointer to the main MDHIM struct - * @param im pointer to the commit message to handle - * @param source source of the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_commit(struct mdhim_t *md, struct mdhim_basem_t *im, int source) { - int ret; - struct mdhim_rm_t *rm; - struct index_t *index; - - //Get the index referenced the message - index = find_index(md, (struct mdhim_basem_t *) im); - if (!index) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error retrieving index for id: %d", - md->mdhim_rank, im->index); - ret = MDHIM_ERROR; - goto done; - } - - //Put the record in the database - if ((ret = - index->mdhim_store->commit(index->mdhim_store->db_handle)) - != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error committing database", - md->mdhim_rank); - } - - done: - //Create the response message - rm = malloc(sizeof(struct mdhim_rm_t)); - //Set the type - rm->basem.mtype = MDHIM_RECV; - //Set the operation return code as the error - rm->error = ret; - //Set the server's rank - rm->basem.server_rank = md->mdhim_rank; - - //Send response - ret = send_locally_or_remote(md, source, rm); - free(im); - - return MDHIM_SUCCESS; -} - -/** - * range_server_bget - * Handles the bulk get message, retrieves the data from the database, and sends the results back - * - * @param md Pointer to the main MDHIM struct - * @param bgm pointer to the bulk get message to handle - * @param source source of the message - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_bget(struct mdhim_t *md, struct mdhim_bgetm_t *bgm, int source) { - putflag = 0; - int ret; - void **values = NULL; - int32_t *value_lens = NULL; - int i; - struct mdhim_bgetrm_t *bgrm; - int error = 0; - struct timeval start, end; - int num_retrieved = 0; - struct index_t *index; - - gettimeofday(&start, NULL); - if (bgm->op != MDHIM_RANGE_BGET) { - values = (void **) calloc(bgm->num_keys, sizeof(void *)); - value_lens = (int32_t *) calloc(bgm->num_keys, sizeof(int32_t)); - } - //Get the index referenced the message - index = find_index(md, (struct mdhim_basem_t *) bgm); - if (!index) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error retrieving index for id: %d", - md->mdhim_rank, bgm->basem.index); - error = MDHIM_ERROR; - goto done; - } - - if (bgm->op == MDHIM_RANGE_BGET) { - void **ret_keys; - int32_t *ret_key_lens; - int num_ranges = bgm->num_keys / 2; - int out_record_cnt = 0; - leveldb_batch_ranges(index->mdhim_store->db_handle, - (char **)bgm->keys, bgm->key_lens, - (char ***)&ret_keys, &ret_key_lens, - (char ***)&values, &value_lens, - num_ranges, &out_record_cnt); - - if (source != md->mdhim_rank) { - for (i = 0; i < bgm->num_keys; i++) { - free(bgm->keys[i]); - } - } - free(bgm->key_lens); - free(bgm->keys); - - bgm->keys = ret_keys; - bgm->num_keys = out_record_cnt; - bgm->key_lens = ret_key_lens; - - } else { - for (i = 0; i < bgm->num_keys && i < MAX_BULK_OPS; i++) { - switch(bgm->op) { - // Gets the value for the given key - case MDHIM_GET_EQ: - //Get records from the database - - if ((ret = - index->mdhim_store->get(index->mdhim_store->db_handle, - bgm->keys[i], bgm->key_lens[i], &values[i], - &value_lens[i])) != MDHIM_SUCCESS) { - error = ret; - value_lens[i] = 0; - values[i] = NULL; - continue; - } - - break; - /* Gets the next key and value that is in order after the passed in key */ - case MDHIM_GET_NEXT: - if ((ret = - index->mdhim_store->get_next(index->mdhim_store->db_handle, - &bgm->keys[i], &bgm->key_lens[i], &values[i], - &value_lens[i])) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Error getting record", md->mdhim_rank); - error = ret; - value_lens[i] = 0; - values[i] = NULL; - continue; - } - - break; - /* Gets the previous key and value that is in order before the passed in key - or the last key if no key was passed in */ - case MDHIM_GET_PREV: - if ((ret = - index->mdhim_store->get_prev(index->mdhim_store->db_handle, - &bgm->keys[i], &bgm->key_lens[i], &values[i], - &value_lens[i])) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Error getting record", md->mdhim_rank); - error = ret; - value_lens[i] = 0; - values[i] = NULL; - continue; - } - - break; - /* Gets the first key/value */ - case MDHIM_GET_FIRST: - if ((ret = - index->mdhim_store->get_next(index->mdhim_store->db_handle, - &bgm->keys[i], 0, &values[i], - &value_lens[i])) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Error getting record", md->mdhim_rank); - error = ret; - value_lens[i] = 0; - values[i] = NULL; - continue; - } - - break; - /* Gets the last key/value */ - case MDHIM_GET_LAST: - if ((ret = - index->mdhim_store->get_prev(index->mdhim_store->db_handle, - &bgm->keys[i], 0, &values[i], - &value_lens[i])) != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Error getting record", md->mdhim_rank); - error = ret; - value_lens[i] = 0; - values[i] = NULL; - continue; - } - - break; - default: - mlog(MDHIM_SERVER_DBG, "Rank: %d - Invalid operation: %d given in range_server_get", - md->mdhim_rank, bgm->op); - continue; - } - - num_retrieved++; - } - } - gettimeofday(&end, NULL); - add_timing(start, end, num_retrieved, md, MDHIM_BULK_GET); - -done: - //Create the response message - bgrm = malloc(sizeof(struct mdhim_bgetrm_t)); - //Set the type - bgrm->basem.mtype = MDHIM_RECV_BULK_GET; - //Set the operation return code as the error - bgrm->error = error; - //Set the server's rank - bgrm->basem.server_rank = md->mdhim_rank; - //Set the key and value - if (source == md->mdhim_rank) { - //If this message is coming from myself, copy the keys - bgrm->key_lens = malloc(bgm->num_keys * sizeof(int)); - bgrm->keys = malloc(bgm->num_keys * sizeof(void *)); - for (i = 0; i < bgm->num_keys; i++) { - bgrm->key_lens[i] = bgm->key_lens[i]; - bgrm->keys[i] = malloc(bgrm->key_lens[i]); - memcpy(bgrm->keys[i], bgm->keys[i], bgrm->key_lens[i]); - } - - free(bgm->keys); - free(bgm->key_lens); - } else { - bgrm->keys = bgm->keys; - bgrm->key_lens = bgm->key_lens; - } - - bgrm->values = values; - bgrm->value_lens = value_lens; - bgrm->num_keys = bgm->num_keys; - bgrm->basem.index = index->id; - bgrm->basem.index_type = index->type; - - //Send response - gettimeofday(&resp_get_comm_start, NULL); - ret = send_locally_or_remote(md, source, bgrm); - - //Release the bget message - free(bgm); - - return MDHIM_SUCCESS; -} - -/** - * range_server_bget_op - * Handles the get message given an op and number of records greater than 1 - * - * @param md Pointer to the main MDHIM struct - * @param gm pointer to the get message to handle - * @param source source of the message - * @param op operation to perform - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_bget_op(struct mdhim_t *md, struct mdhim_bgetm_t *bgm, int source, int op) { - putflag = 0; - int error = 0; - void **values; - void **keys; - void **get_key; //Used for passing the key to the db - int *get_key_len; //Used for passing the key len to the db - void **get_value; - int *get_value_len; - int32_t *key_lens; - int32_t *value_lens; - struct mdhim_bgetrm_t *bgrm; - int ret; - int i, j; - int num_records; - struct timeval start, end; - struct index_t *index; - - //Initialize pointers and lengths - values = malloc(sizeof(void *) * bgm->num_keys * bgm->num_recs); - value_lens = malloc(sizeof(int32_t) * bgm->num_keys * bgm->num_recs); - memset(value_lens, 0, sizeof(int32_t) *bgm->num_keys * bgm->num_recs); - keys = malloc(sizeof(void *) * bgm->num_keys * bgm->num_recs); - memset(keys, 0, sizeof(void *) * bgm->num_keys * bgm->num_recs); - key_lens = malloc(sizeof(int32_t) * bgm->num_keys * bgm->num_recs); - memset(key_lens, 0, sizeof(int32_t) * bgm->num_keys * bgm->num_recs); - get_key = malloc(sizeof(void *)); - *get_key = NULL; - get_key_len = malloc(sizeof(int32_t)); - *get_key_len = 0; - get_value = malloc(sizeof(void *)); - get_value_len = malloc(sizeof(int32_t)); - num_records = 0; - /* - printf("range server bget op\n"); - fflush(stdout); - */ - //Get the index referenced the message - index = find_index(md, (struct mdhim_basem_t *) bgm); - if (!index) { - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Error retrieving index for id: %d", - md->mdhim_rank, bgm->basem.index); - error = MDHIM_ERROR; - goto respond; - } - - if (bgm->num_keys * bgm->num_recs > MAX_BULK_OPS) { - /* - printf("in range server, total bulk key%ld, recs %ld\n", bgm->num_keys, bgm->num_recs); - fflush(stdout); - */ - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Too many bulk operations requested", - md->mdhim_rank); - error = MDHIM_ERROR; - goto respond; - } - -// mlog(MDHIM_SERVER_CRIT, "Rank: %d - Num keys is: %d and num recs is: %d", -// md->mdhim_rank, bgm->num_keys, bgm->num_recs); - - gettimeofday(&start, NULL); - //Iterate through the arrays and get each record - if (op != MDHIM_GET_NEXT) { - for (i = 0; i < bgm->num_keys; i++) { - for (j = 0; j < bgm->num_recs; j++) { - keys[num_records] = NULL; - key_lens[num_records] = 0; - - //If we were passed in a key, copy it - if (!j && bgm->key_lens[i] && bgm->keys[i]) { - *get_key = malloc(bgm->key_lens[i]); - memcpy(*get_key, bgm->keys[i], bgm->key_lens[i]); - *get_key_len = bgm->key_lens[i]; - //If we were not passed a key and this is a next/prev, then return an error - } else if (!j && (!bgm->key_lens[i] || !bgm->keys[i]) - && (op == MDHIM_GET_NEXT || - op == MDHIM_GET_PREV)) { - error = MDHIM_ERROR; - goto respond; - } - - switch(op) { - //Get a record from the database - case MDHIM_GET_FIRST: - if (j == 0) { - keys[num_records] = NULL; - key_lens[num_records] = sizeof(int32_t); - } - case MDHIM_GET_NEXT: - - if (j && (ret = - index->mdhim_store->get_next(index->mdhim_store->db_handle, - get_key, get_key_len, - get_value, - get_value_len)) - != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Couldn't get next record", - md->mdhim_rank); - error = ret; - - key_lens[num_records] = 0; - value_lens[num_records] = 0; - goto respond; - } else if (!j && (ret = - index->mdhim_store->get(index->mdhim_store->db_handle, - *get_key, *get_key_len, - get_value, - get_value_len)) - != MDHIM_SUCCESS) { - if ((ret = index->mdhim_store->get_next(index->mdhim_store->db_handle,\ - get_key, get_key_len, get_value, \ - get_value_len)) != MDHIM_SUCCESS) { - - key_lens[num_records] = 0; - value_lens[num_records] = 0; - goto respond; - } - } - - break; - case MDHIM_GET_LAST: - if (j == 0) { - keys[num_records] = NULL; - key_lens[num_records] = sizeof(int32_t); - } - case MDHIM_GET_PREV: - if (j && (ret = - index->mdhim_store->get_prev(index->mdhim_store->db_handle, - get_key, get_key_len, - get_value, - get_value_len)) - != MDHIM_SUCCESS) { - mlog(MDHIM_SERVER_DBG, "Rank: %d - Couldn't get prev record", - md->mdhim_rank); - error = ret; - key_lens[num_records] = 0; - value_lens[num_records] = 0; - goto respond; - } else if (!j && (ret = - index->mdhim_store->get(index->mdhim_store->db_handle, - *get_key, *get_key_len, - get_value, - get_value_len)) - != MDHIM_SUCCESS) { - error = ret; - key_lens[num_records] = 0; - value_lens[num_records] = 0; - goto respond; - } - break; - default: - mlog(MDHIM_SERVER_CRIT, "Rank: %d - Invalid operation for bulk get op", - md->mdhim_rank); - goto respond; - break; - } - - keys[num_records] = *get_key; - key_lens[num_records] = *get_key_len; - values[num_records] = *get_value; - value_lens[num_records] = *get_value_len; - num_records++; - } - } - } - else { - for (i = 0; i < bgm->num_keys; i++) { - for (j = 0; j < bgm->num_recs; j++) { - keys[i*bgm->num_recs+j] = NULL; - key_lens[i*bgm->num_recs+j] = 0; - } - } - - num_records = 0; - *get_key = malloc(bgm->key_lens[0]); - memcpy(*get_key, bgm->keys[0], bgm->key_lens[0]); - keys[0] = *get_key; - *get_key_len = bgm->key_lens[0]; - key_lens[0] = *get_key_len; - - error = mdhim_leveldb_batch_next(index->mdhim_store->db_handle, - (char **)keys, key_lens, - (char **)values, value_lens, - bgm->num_keys * bgm->num_recs, - &num_records); - - } - -respond: - - gettimeofday(&end, NULL); - add_timing(start, end, num_records, md, MDHIM_BULK_GET); - - //Create the response message - bgrm = malloc(sizeof(struct mdhim_bgetrm_t)); - //Set the type - bgrm->basem.mtype = MDHIM_RECV_BULK_GET; - //Set the operation return code as the error - bgrm->error = error; - //Set the server's rank - bgrm->basem.server_rank = md->mdhim_rank; - //Set the keys and values - bgrm->keys = keys; - bgrm->key_lens = key_lens; - bgrm->values = values; - bgrm->value_lens = value_lens; - bgrm->num_keys = num_records; - bgrm->basem.index = index->id; - bgrm->basem.index_type = index->type; - - //Send response - gettimeofday(&resp_get_comm_start, NULL); - ret = send_locally_or_remote(md, source, bgrm); - //Free stuff - if (source == md->mdhim_rank) { - /* If this message is not coming from myself, - free the keys and values from the get message */ - mdhim_partial_release_msg(bgm); - } - - free(get_key); - free(get_key_len); - free(get_value); - free(get_value_len); - - return MDHIM_SUCCESS; -} - -/* - * listener_thread - * Function for the thread that listens for new messages - */ -void *listener_thread(void *data) { - //Mlog statements could cause a deadlock on range_server_stop due to canceling of threads - - - struct mdhim_t *md = (struct mdhim_t *) data; - void *message; - int source; //The source of the message - int ret; - work_item *item; - - pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - - while (1) { - if (md->shutdown) { - break; - } - - //Clean outstanding sends - range_server_clean_oreqs(md); - - //Receive messages sent to this server - ret = receive_rangesrv_work(md, &source, &message); - if (ret < MDHIM_SUCCESS) { - continue; - } - //printf("Rank: %d - Received message from rank: %d of type: %d", - // md->mdhim_rank, source, mtype); - recv_counter++; - //Create a new work item - item = malloc(sizeof(work_item)); - memset(item, 0, sizeof(work_item)); - - //Set the new buffer to the new item's message - item->message = message; - //Set the source in the work item - item->source = source; - //Add the new item to the work queue - range_server_add_work(md, item); - } - - return NULL; -} - -/* - * worker_thread - * Function for the thread that processes work in work queue - */ -void *worker_thread(void *data) { - //Mlog statements could cause a deadlock on range_server_stop due to canceling of threads - struct mdhim_t *md = (struct mdhim_t *) data; - work_item *item, *item_tmp; - int mtype; - int op, num_records, num_keys; - - while (1) { - if (md->shutdown) { - break; - } - //Lock the work queue mutex - pthread_mutex_lock(md->mdhim_rs->work_queue_mutex); - pthread_cleanup_push((void (*)(void *)) pthread_mutex_unlock, - (void *) md->mdhim_rs->work_queue_mutex); - - //Wait until there is work to be performed - if ((item = get_work(md)) == NULL) { - pthread_cond_wait(md->mdhim_rs->work_ready_cv, md->mdhim_rs->work_queue_mutex); - item = get_work(md); - } - - pthread_cleanup_pop(0); - if (!item) { - pthread_mutex_unlock(md->mdhim_rs->work_queue_mutex); - continue; - } - pthread_mutex_unlock(md->mdhim_rs->work_queue_mutex); - - //Clean outstanding sends - range_server_clean_oreqs(md); - - gettimeofday(&worker_start, NULL); - while (item) { - //Call the appropriate function depending on the message type - //Get the message type - mtype = ((struct mdhim_basem_t *) item->message)->mtype; - - switch(mtype) { - case MDHIM_PUT: - //Pack the put message and pass to range_server_put - range_server_put(md, - item->message, - item->source); - break; - case MDHIM_BULK_PUT: - //Pack the bulk put message and pass to range_server_put - gettimeofday(&worker_put_start, NULL); - range_server_bput(md, - item->message, - item->source); - gettimeofday(&worker_put_end, NULL); - worker_put_time += 1000000*(worker_put_end.tv_sec-worker_put_start.tv_sec)+worker_put_end.tv_usec-worker_put_start.tv_usec; - break; - case MDHIM_BULK_GET: - gettimeofday(&worker_get_start, NULL); - op = ((struct mdhim_bgetm_t *) item->message)->op; - num_records = ((struct mdhim_bgetm_t *) item->message)->num_recs; - num_keys = ((struct mdhim_bgetm_t *) item->message)->num_keys; - //The client is sending one key, but requesting the retrieval of more than one - if (num_records > 1 && num_keys == 1) { - range_server_bget_op(md, - item->message, - item->source, op); - } else { - range_server_bget(md, - item->message, - item->source); - } - - gettimeofday(&worker_get_end, NULL); - worker_get_time += 1000000*(worker_get_end.tv_sec-worker_get_start.tv_sec)+worker_get_end.tv_usec-worker_get_start.tv_usec; - break; - case MDHIM_DEL: - range_server_del(md, item->message, item->source); - break; - case MDHIM_BULK_DEL: - range_server_bdel(md, item->message, item->source); - break; - case MDHIM_COMMIT: - range_server_commit(md, item->message, item->source); - break; - default: - printf("Rank: %d - Got unknown work type: %d" - " from: %d\n", md->mdhim_rank, mtype, item->source); - break; - } - - item_tmp = item; - item = item->next; - free(item_tmp); - } - - //Clean outstanding sends - range_server_clean_oreqs(md); - if (putflag == 0) { - gettimeofday(&worker_end, NULL); - gettimeofday(&resp_get_comm_end, NULL); - resp_get_comm_time+=1000000*(resp_get_comm_end.tv_sec\ - -resp_get_comm_start.tv_sec)+resp_get_comm_end.tv_usec\ - -resp_get_comm_start.tv_usec; - } - else { - gettimeofday(&resp_put_comm_end, NULL); - resp_put_comm_time+=1000000*(resp_put_comm_end.tv_sec\ - -resp_put_comm_start.tv_sec)+resp_put_comm_end.tv_usec\ - -resp_put_comm_start.tv_usec; - } - worker_time += 1000000*(worker_end.tv_sec-worker_start.tv_sec)+worker_end.tv_usec-worker_start.tv_usec; - } - return NULL; -} - -int range_server_add_oreq(struct mdhim_t *md, MPI_Request *req, void *msg) { - out_req *oreq; - out_req *item; - - pthread_mutex_lock(md->mdhim_rs->out_req_mutex); - item = md->mdhim_rs->out_req_list; - oreq = malloc(sizeof(out_req)); - oreq->next = NULL; - oreq->prev = NULL; - oreq->message = msg; - oreq->req = req; - - if (!item) { - md->mdhim_rs->out_req_list = oreq; - pthread_mutex_unlock(md->mdhim_rs->out_req_mutex); - return MDHIM_SUCCESS; - } - - item->prev = oreq; - oreq->next = item; - md->mdhim_rs->out_req_list = oreq; - pthread_mutex_unlock(md->mdhim_rs->out_req_mutex); - - return MDHIM_SUCCESS; -} - -int range_server_clean_oreqs(struct mdhim_t *md) { - out_req *item; - out_req *t; - int ret = MDHIM_SUCCESS; - int flag = 0; - MPI_Status status; - - pthread_mutex_lock(md->mdhim_rs->out_req_mutex); - item = md->mdhim_rs->out_req_list; - while (item) { - if (!item->req) { - item = item->next; - continue; - } - - pthread_mutex_lock(md->mdhim_comm_lock); - ret = MPI_Test((MPI_Request *)item->req, &flag, &status); - pthread_mutex_unlock(md->mdhim_comm_lock); - - if (ret != MPI_SUCCESS) { - ret = MDHIM_ERROR; - break; - } - - if (!flag) { - item = item->next; - continue; - } - - if (item == md->mdhim_rs->out_req_list) { - md->mdhim_rs->out_req_list = item->next; - if (item->next) { - item->next->prev = NULL; - } - } else { - if (item->next) { - item->next->prev = item->prev; - } - if (item->prev) { - item->prev->next = item->next; - } - } - - t = item->next; - free(item->req); - if (item->message) { - free(item->message); - } - - free(item); - item = t; - } - - pthread_mutex_unlock(md->mdhim_rs->out_req_mutex); - - return ret; -} - -/** - * range_server_init - * Initializes the range server (i.e., starts the threads and populates the relevant data in md) - * - * @param md Pointer to the main MDHIM structure - * @return MDHIM_SUCCESS or MDHIM_ERROR on error - */ -int range_server_init(struct mdhim_t *md) { - int ret; - int i; - - //Allocate memory for the mdhim_rs_t struct - md->mdhim_rs = malloc(sizeof(struct mdhim_rs_t)); - if (!md->mdhim_rs) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while allocating memory for range server", - md->mdhim_rank); - return MDHIM_ERROR; - } - - //Initialize variables for printing out timings - md->mdhim_rs->put_time = 0; - md->mdhim_rs->get_time = 0; - md->mdhim_rs->num_put = 0; - md->mdhim_rs->num_get = 0; - //Initialize work queue - md->mdhim_rs->work_queue = malloc(sizeof(work_queue_t)); - md->mdhim_rs->work_queue->head = NULL; - md->mdhim_rs->work_queue->tail = NULL; - - //Initialize the outstanding request list - md->mdhim_rs->out_req_list = NULL; - - //Initialize work queue mutex - md->mdhim_rs->work_queue_mutex = malloc(sizeof(pthread_mutex_t)); - if (!md->mdhim_rs->work_queue_mutex) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while allocating memory for range server", - md->mdhim_rank); - return MDHIM_ERROR; - } - if ((ret = pthread_mutex_init(md->mdhim_rs->work_queue_mutex, NULL)) != 0) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while initializing work queue mutex", md->mdhim_rank); - return MDHIM_ERROR; - } - - //Initialize out req mutex - md->mdhim_rs->out_req_mutex = malloc(sizeof(pthread_mutex_t)); - if (!md->mdhim_rs->out_req_mutex) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while allocating memory for range server", - md->mdhim_rank); - return MDHIM_ERROR; - } - if ((ret = pthread_mutex_init(md->mdhim_rs->out_req_mutex, NULL)) != 0) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while initializing out req mutex", md->mdhim_rank); - return MDHIM_ERROR; - } - - //Initialize the condition variables - md->mdhim_rs->work_ready_cv = malloc(sizeof(pthread_cond_t)); - if (!md->mdhim_rs->work_ready_cv) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while allocating memory for range server", - md->mdhim_rank); - return MDHIM_ERROR; - } - if ((ret = pthread_cond_init(md->mdhim_rs->work_ready_cv, NULL)) != 0) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while initializing condition variable", - md->mdhim_rank); - return MDHIM_ERROR; - } - - //Initialize worker threads - md->mdhim_rs->workers = malloc(sizeof(pthread_t *) * md->db_opts->num_wthreads); - for (i = 0; i < md->db_opts->num_wthreads; i++) { - md->mdhim_rs->workers[i] = malloc(sizeof(pthread_t)); - if ((ret = pthread_create(md->mdhim_rs->workers[i], NULL, - worker_thread, (void *) md)) != 0) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while initializing worker thread", - md->mdhim_rank); - return MDHIM_ERROR; - } - } - - //Initialize listener threads - if ((ret = pthread_create(&md->mdhim_rs->listener, NULL, - listener_thread, (void *) md)) != 0) { - mlog(MDHIM_SERVER_CRIT, "MDHIM Rank: %d - " - "Error while initializing listener thread", - md->mdhim_rank); - return MDHIM_ERROR; - } - - return MDHIM_SUCCESS; -} diff --git a/meta/src/range_server.h b/meta/src/range_server.h deleted file mode 100644 index bfcbfeb8e..000000000 --- a/meta/src/range_server.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#ifndef __RANGESRV_H -#define __RANGESRV_H - -#include -#include -#include "data_store.h" -#include "messages.h" -#include "indexes.h" - -struct mdhim_t; - -typedef struct work_item work_item; -struct work_item { - work_item *next; - work_item *prev; - void *message; - int source; -}; - -typedef struct work_queue_t { - work_item *head; - work_item *tail; -} work_queue_t; - -/* Outstanding requests (i.e., MPI_Req) that need to be freed later */ -typedef struct out_req out_req; -struct out_req { - out_req *next; - out_req *prev; - void *req; - MPI_Request *message; -}; - -/* Range server specific data */ -typedef struct mdhim_rs_t { - work_queue_t *work_queue; - pthread_mutex_t *work_queue_mutex; - pthread_cond_t *work_ready_cv; - pthread_t listener; - pthread_t **workers; - struct index *indexes; /* A linked list of remote indexes that is served - (partially for fully) by this range server */ - //Records seconds spent on putting records - long double put_time; - //Records seconds spend on getting records - long double get_time; - long num_put; - long num_get; - out_req *out_req_list; - pthread_mutex_t *out_req_mutex; -} mdhim_rs_t; - -int range_server_add_work(struct mdhim_t *md, work_item *item); -int range_server_init(struct mdhim_t *md); -int range_server_init_comm(struct mdhim_t *md); -int range_server_stop(struct mdhim_t *md); -int range_server_add_oreq(struct mdhim_t *md, MPI_Request *req, void *msg); //Add an outstanding request -int range_server_clean_oreqs(struct mdhim_t *md); //Clean outstanding reqs -int unifyfs_compare(const char *a, const char *b); - -#endif diff --git a/meta/src/uthash/LICENSE b/meta/src/uthash/LICENSE deleted file mode 100644 index ad8e16a09..000000000 --- a/meta/src/uthash/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2005-2013, Troy D. Hanson http://troydhanson.github.com/uthash/ -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/meta/src/uthash/README.md b/meta/src/uthash/README.md deleted file mode 100644 index 3adebca4c..000000000 --- a/meta/src/uthash/README.md +++ /dev/null @@ -1,6 +0,0 @@ - -Documentation for uthash is available at: - -http://troydhanson.github.com/uthash/ - - diff --git a/meta/src/uthash/uthash.h b/meta/src/uthash/uthash.h deleted file mode 100644 index 0ae997ebf..000000000 --- a/meta/src/uthash/uthash.h +++ /dev/null @@ -1,947 +0,0 @@ -/* -Copyright (c) 2003-2013, Troy D. Hanson http://troydhanson.github.com/uthash/ -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef UTHASH_H -#define UTHASH_H - -#include /* memcmp,strlen */ -#include /* ptrdiff_t */ -#include /* exit() */ -#include /* int64_t */ - -/* These macros use decltype or the earlier __typeof GNU extension. - As decltype is only available in newer compilers (VS2010 or gcc 4.3+ - when compiling c++ source) this code uses whatever method is needed - or, for VS2008 where neither is available, uses casting workarounds. */ -#ifdef _MSC_VER /* MS compiler */ -#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ -#define DECLTYPE(x) (decltype(x)) -#else /* VS2008 or older (or VS2010 in C mode) */ -#define NO_DECLTYPE -#define DECLTYPE(x) -#endif -#else /* GNU, Sun and other compilers */ -#define DECLTYPE(x) (__typeof(x)) -#endif - -#ifdef NO_DECLTYPE -#define DECLTYPE_ASSIGN(dst,src) \ -do { \ - char **_da_dst = (char**)(&(dst)); \ - *_da_dst = (char*)(src); \ -} while(0) -#else -#define DECLTYPE_ASSIGN(dst,src) \ -do { \ - (dst) = DECLTYPE(dst)(src); \ -} while(0) -#endif - -/* a number of the hash function use uint32_t which isn't defined on win32 */ -#ifdef _MSC_VER -typedef unsigned int uint32_t; -typedef unsigned char uint8_t; -#else -#include /* uint32_t */ -#endif - -#define UTHASH_VERSION 1.9.8 - -#ifndef uthash_fatal -#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */ -#endif -#ifndef uthash_malloc -#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ -#endif -#ifndef uthash_free -#define uthash_free(ptr,sz) free(ptr) /* free fcn */ -#endif - -#ifndef uthash_noexpand_fyi -#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ -#endif -#ifndef uthash_expand_fyi -#define uthash_expand_fyi(tbl) /* can be defined to log expands */ -#endif - -/* initial number of buckets */ -#define HASH_INITIAL_NUM_BUCKETS 32 /* initial number of buckets */ -#define HASH_INITIAL_NUM_BUCKETS_LOG2 5 /* lg2 of initial number of buckets */ -#define HASH_BKT_CAPACITY_THRESH 10 /* expand when bucket count reaches */ - -/* calculate the element whose hash handle address is hhe */ -#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) - -#define HASH_FIND(hh,head,keyptr,keylen,out) \ -do { \ - unsigned _hf_bkt,_hf_hashv; \ - out=NULL; \ - if (head) { \ - HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \ - if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \ - HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \ - keyptr,keylen,out); \ - } \ - } \ -} while (0) - -#ifdef HASH_BLOOM -#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM) -#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0) -#define HASH_BLOOM_MAKE(tbl) \ -do { \ - (tbl)->bloom_nbits = HASH_BLOOM; \ - (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ - if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \ - memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \ - (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ -} while (0) - -#define HASH_BLOOM_FREE(tbl) \ -do { \ - uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ -} while (0) - -#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8))) -#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8))) - -#define HASH_BLOOM_ADD(tbl,hashv) \ - HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) - -#define HASH_BLOOM_TEST(tbl,hashv) \ - HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) - -#else -#define HASH_BLOOM_MAKE(tbl) -#define HASH_BLOOM_FREE(tbl) -#define HASH_BLOOM_ADD(tbl,hashv) -#define HASH_BLOOM_TEST(tbl,hashv) (1) -#define HASH_BLOOM_BYTELEN 0 -#endif - -#define HASH_MAKE_TABLE(hh,head) \ -do { \ - (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \ - sizeof(UT_hash_table)); \ - if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \ - memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \ - (head)->hh.tbl->tail = &((head)->hh); \ - (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ - (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ - (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ - (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ - HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ - if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \ - memset((head)->hh.tbl->buckets, 0, \ - HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ - HASH_BLOOM_MAKE((head)->hh.tbl); \ - (head)->hh.tbl->signature = HASH_SIGNATURE; \ -} while(0) - -#define HASH_ADD(hh,head,fieldname,keylen_in,add) \ - HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add) - -#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \ -do { \ - replaced=NULL; \ - HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced); \ - if (replaced!=NULL) { \ - HASH_DELETE(hh,head,replaced); \ - }; \ - HASH_ADD(hh,head,fieldname,keylen_in,add); \ -} while(0) - -#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ -do { \ - unsigned _ha_bkt; \ - (add)->hh.next = NULL; \ - (add)->hh.key = (char*)keyptr; \ - (add)->hh.keylen = (unsigned)keylen_in; \ - if (!(head)) { \ - head = (add); \ - (head)->hh.prev = NULL; \ - HASH_MAKE_TABLE(hh,head); \ - } else { \ - (head)->hh.tbl->tail->next = (add); \ - (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ - (head)->hh.tbl->tail = &((add)->hh); \ - } \ - (head)->hh.tbl->num_items++; \ - (add)->hh.tbl = (head)->hh.tbl; \ - HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \ - (add)->hh.hashv, _ha_bkt); \ - HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \ - HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \ - HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \ - HASH_FSCK(hh,head); \ -} while(0) - -#define HASH_TO_BKT( hashv, num_bkts, bkt ) \ -do { \ - bkt = ((hashv) & ((num_bkts) - 1)); \ -} while(0) - -/* delete "delptr" from the hash table. - * "the usual" patch-up process for the app-order doubly-linked-list. - * The use of _hd_hh_del below deserves special explanation. - * These used to be expressed using (delptr) but that led to a bug - * if someone used the same symbol for the head and deletee, like - * HASH_DELETE(hh,users,users); - * We want that to work, but by changing the head (users) below - * we were forfeiting our ability to further refer to the deletee (users) - * in the patch-up process. Solution: use scratch space to - * copy the deletee pointer, then the latter references are via that - * scratch pointer rather than through the repointed (users) symbol. - */ -#define HASH_DELETE(hh,head,delptr) \ -do { \ - unsigned _hd_bkt; \ - struct UT_hash_handle *_hd_hh_del; \ - if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \ - uthash_free((head)->hh.tbl->buckets, \ - (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ - HASH_BLOOM_FREE((head)->hh.tbl); \ - uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ - head = NULL; \ - } else { \ - _hd_hh_del = &((delptr)->hh); \ - if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \ - (head)->hh.tbl->tail = \ - (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ - (head)->hh.tbl->hho); \ - } \ - if ((delptr)->hh.prev) { \ - ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ - (head)->hh.tbl->hho))->next = (delptr)->hh.next; \ - } else { \ - DECLTYPE_ASSIGN(head,(delptr)->hh.next); \ - } \ - if (_hd_hh_del->next) { \ - ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \ - (head)->hh.tbl->hho))->prev = \ - _hd_hh_del->prev; \ - } \ - HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ - HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ - (head)->hh.tbl->num_items--; \ - } \ - HASH_FSCK(hh,head); \ -} while (0) - - -/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ -#define HASH_FIND_STR(head,findstr,out) \ - HASH_FIND(hh,head,findstr,strlen(findstr),out) -#define HASH_ADD_STR(head,strfield,add) \ - HASH_ADD(hh,head,strfield,strlen(add->strfield),add) -#define HASH_REPLACE_STR(head,strfield,add,replaced) \ - HASH_REPLACE(hh,head,strfield,strlen(add->strfield),add,replaced) -#define HASH_FIND_INT(head,findint,out) \ - HASH_FIND(hh,head,findint,sizeof(int),out) -#define HASH_ADD_INT(head,intfield,add) \ - HASH_ADD(hh,head,intfield,sizeof(int),add) -#define HASH_REPLACE_INT(head,intfield,add,replaced) \ - HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced) -#define HASH_FIND_ULINT(head,findint,out) \ - HASH_FIND(hh,head,findint,sizeof(uint64_t),out) -#define HASH_ADD_ULINT(head,intfield,add) \ - HASH_ADD(hh,head,intfield,sizeof(uint64_t),add) -#define HASH_REPLACE_ULINT(head,intfield,add,replaced) \ - HASH_REPLACE(hh,head,intfield,sizeof(uint64_t),add,replaced) -#define HASH_FIND_PTR(head,findptr,out) \ - HASH_FIND(hh,head,findptr,sizeof(void *),out) -#define HASH_ADD_PTR(head,ptrfield,add) \ - HASH_ADD(hh,head,ptrfield,sizeof(void *),add) -#define HASH_REPLACE_PTR(head,ptrfield,add) \ - HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced) -#define HASH_DEL(head,delptr) \ - HASH_DELETE(hh,head,delptr) - -/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. - * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. - */ -#ifdef HASH_DEBUG -#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0) -#define HASH_FSCK(hh,head) \ -do { \ - unsigned _bkt_i; \ - unsigned _count, _bkt_count; \ - char *_prev; \ - struct UT_hash_handle *_thh; \ - if (head) { \ - _count = 0; \ - for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \ - _bkt_count = 0; \ - _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ - _prev = NULL; \ - while (_thh) { \ - if (_prev != (char*)(_thh->hh_prev)) { \ - HASH_OOPS("invalid hh_prev %p, actual %p\n", \ - _thh->hh_prev, _prev ); \ - } \ - _bkt_count++; \ - _prev = (char*)(_thh); \ - _thh = _thh->hh_next; \ - } \ - _count += _bkt_count; \ - if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ - HASH_OOPS("invalid bucket count %d, actual %d\n", \ - (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ - } \ - } \ - if (_count != (head)->hh.tbl->num_items) { \ - HASH_OOPS("invalid hh item count %d, actual %d\n", \ - (head)->hh.tbl->num_items, _count ); \ - } \ - /* traverse hh in app order; check next/prev integrity, count */ \ - _count = 0; \ - _prev = NULL; \ - _thh = &(head)->hh; \ - while (_thh) { \ - _count++; \ - if (_prev !=(char*)(_thh->prev)) { \ - HASH_OOPS("invalid prev %p, actual %p\n", \ - _thh->prev, _prev ); \ - } \ - _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ - _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \ - (head)->hh.tbl->hho) : NULL ); \ - } \ - if (_count != (head)->hh.tbl->num_items) { \ - HASH_OOPS("invalid app item count %d, actual %d\n", \ - (head)->hh.tbl->num_items, _count ); \ - } \ - } \ -} while (0) -#else -#define HASH_FSCK(hh,head) -#endif - -/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to - * the descriptor to which this macro is defined for tuning the hash function. - * The app can #include to get the prototype for write(2). */ -#ifdef HASH_EMIT_KEYS -#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ -do { \ - unsigned _klen = fieldlen; \ - write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ - write(HASH_EMIT_KEYS, keyptr, fieldlen); \ -} while (0) -#else -#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) -#endif - -/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */ -#ifdef HASH_FUNCTION -#define HASH_FCN HASH_FUNCTION -#else -#define HASH_FCN HASH_JEN -#endif - -/* The Bernstein hash function, used in Perl prior to v5.6 */ -#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _hb_keylen=keylen; \ - char *_hb_key=(char*)(key); \ - (hashv) = 0; \ - while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \ - bkt = (hashv) & (num_bkts-1); \ -} while (0) - - -/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at - * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ -#define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _sx_i; \ - char *_hs_key=(char*)(key); \ - hashv = 0; \ - for(_sx_i=0; _sx_i < keylen; _sx_i++) \ - hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ - bkt = hashv & (num_bkts-1); \ -} while (0) - -#define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _fn_i; \ - char *_hf_key=(char*)(key); \ - hashv = 2166136261UL; \ - for(_fn_i=0; _fn_i < keylen; _fn_i++) \ - hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; \ - bkt = hashv & (num_bkts-1); \ -} while(0) - -#define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _ho_i; \ - char *_ho_key=(char*)(key); \ - hashv = 0; \ - for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ - hashv += _ho_key[_ho_i]; \ - hashv += (hashv << 10); \ - hashv ^= (hashv >> 6); \ - } \ - hashv += (hashv << 3); \ - hashv ^= (hashv >> 11); \ - hashv += (hashv << 15); \ - bkt = hashv & (num_bkts-1); \ -} while(0) - -#define HASH_JEN_MIX(a,b,c) \ -do { \ - a -= b; a -= c; a ^= ( c >> 13 ); \ - b -= c; b -= a; b ^= ( a << 8 ); \ - c -= a; c -= b; c ^= ( b >> 13 ); \ - a -= b; a -= c; a ^= ( c >> 12 ); \ - b -= c; b -= a; b ^= ( a << 16 ); \ - c -= a; c -= b; c ^= ( b >> 5 ); \ - a -= b; a -= c; a ^= ( c >> 3 ); \ - b -= c; b -= a; b ^= ( a << 10 ); \ - c -= a; c -= b; c ^= ( b >> 15 ); \ -} while (0) - -#define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _hj_i,_hj_j,_hj_k; \ - unsigned char *_hj_key=(unsigned char*)(key); \ - hashv = 0xfeedbeef; \ - _hj_i = _hj_j = 0x9e3779b9; \ - _hj_k = (unsigned)keylen; \ - while (_hj_k >= 12) { \ - _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ - + ( (unsigned)_hj_key[2] << 16 ) \ - + ( (unsigned)_hj_key[3] << 24 ) ); \ - _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ - + ( (unsigned)_hj_key[6] << 16 ) \ - + ( (unsigned)_hj_key[7] << 24 ) ); \ - hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ - + ( (unsigned)_hj_key[10] << 16 ) \ - + ( (unsigned)_hj_key[11] << 24 ) ); \ - \ - HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ - \ - _hj_key += 12; \ - _hj_k -= 12; \ - } \ - hashv += keylen; \ - switch ( _hj_k ) { \ - case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \ - case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \ - case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \ - case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \ - case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \ - case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \ - case 5: _hj_j += _hj_key[4]; \ - case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \ - case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \ - case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \ - case 1: _hj_i += _hj_key[0]; \ - } \ - HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ - bkt = hashv & (num_bkts-1); \ -} while(0) - -/* The Paul Hsieh hash function */ -#undef get16bits -#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ - || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) -#define get16bits(d) (*((const uint16_t *) (d))) -#endif - -#if !defined (get16bits) -#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ - +(uint32_t)(((const uint8_t *)(d))[0]) ) -#endif -#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned char *_sfh_key=(unsigned char*)(key); \ - uint32_t _sfh_tmp, _sfh_len = keylen; \ - \ - int _sfh_rem = _sfh_len & 3; \ - _sfh_len >>= 2; \ - hashv = 0xcafebabe; \ - \ - /* Main loop */ \ - for (;_sfh_len > 0; _sfh_len--) { \ - hashv += get16bits (_sfh_key); \ - _sfh_tmp = (uint32_t)(get16bits (_sfh_key+2)) << 11 ^ hashv; \ - hashv = (hashv << 16) ^ _sfh_tmp; \ - _sfh_key += 2*sizeof (uint16_t); \ - hashv += hashv >> 11; \ - } \ - \ - /* Handle end cases */ \ - switch (_sfh_rem) { \ - case 3: hashv += get16bits (_sfh_key); \ - hashv ^= hashv << 16; \ - hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)] << 18); \ - hashv += hashv >> 11; \ - break; \ - case 2: hashv += get16bits (_sfh_key); \ - hashv ^= hashv << 11; \ - hashv += hashv >> 17; \ - break; \ - case 1: hashv += *_sfh_key; \ - hashv ^= hashv << 10; \ - hashv += hashv >> 1; \ - } \ - \ - /* Force "avalanching" of final 127 bits */ \ - hashv ^= hashv << 3; \ - hashv += hashv >> 5; \ - hashv ^= hashv << 4; \ - hashv += hashv >> 17; \ - hashv ^= hashv << 25; \ - hashv += hashv >> 6; \ - bkt = hashv & (num_bkts-1); \ -} while(0) - -#ifdef HASH_USING_NO_STRICT_ALIASING -/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads. - * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error. - * MurmurHash uses the faster approach only on CPU's where we know it's safe. - * - * Note the preprocessor built-in defines can be emitted using: - * - * gcc -m64 -dM -E - < /dev/null (on gcc) - * cc -## a.c (where a.c is a simple test file) (Sun Studio) - */ -#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86)) -#define MUR_GETBLOCK(p,i) p[i] -#else /* non intel */ -#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0) -#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1) -#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2) -#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3) -#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL)) -#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__)) -#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24)) -#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16)) -#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8)) -#else /* assume little endian non-intel */ -#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24)) -#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16)) -#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8)) -#endif -#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \ - (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \ - (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \ - MUR_ONE_THREE(p)))) -#endif -#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) -#define MUR_FMIX(_h) \ -do { \ - _h ^= _h >> 16; \ - _h *= 0x85ebca6b; \ - _h ^= _h >> 13; \ - _h *= 0xc2b2ae35l; \ - _h ^= _h >> 16; \ -} while(0) - -#define HASH_MUR(key,keylen,num_bkts,hashv,bkt) \ -do { \ - const uint8_t *_mur_data = (const uint8_t*)(key); \ - const int _mur_nblocks = (keylen) / 4; \ - uint32_t _mur_h1 = 0xf88D5353; \ - uint32_t _mur_c1 = 0xcc9e2d51; \ - uint32_t _mur_c2 = 0x1b873593; \ - uint32_t _mur_k1 = 0; \ - const uint8_t *_mur_tail; \ - const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \ - int _mur_i; \ - for(_mur_i = -_mur_nblocks; _mur_i; _mur_i++) { \ - _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \ - _mur_k1 *= _mur_c1; \ - _mur_k1 = MUR_ROTL32(_mur_k1,15); \ - _mur_k1 *= _mur_c2; \ - \ - _mur_h1 ^= _mur_k1; \ - _mur_h1 = MUR_ROTL32(_mur_h1,13); \ - _mur_h1 = _mur_h1*5+0xe6546b64; \ - } \ - _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4); \ - _mur_k1=0; \ - switch((keylen) & 3) { \ - case 3: _mur_k1 ^= _mur_tail[2] << 16; \ - case 2: _mur_k1 ^= _mur_tail[1] << 8; \ - case 1: _mur_k1 ^= _mur_tail[0]; \ - _mur_k1 *= _mur_c1; \ - _mur_k1 = MUR_ROTL32(_mur_k1,15); \ - _mur_k1 *= _mur_c2; \ - _mur_h1 ^= _mur_k1; \ - } \ - _mur_h1 ^= (keylen); \ - MUR_FMIX(_mur_h1); \ - hashv = _mur_h1; \ - bkt = hashv & (num_bkts-1); \ -} while(0) -#endif /* HASH_USING_NO_STRICT_ALIASING */ - -/* key comparison function; return 0 if keys equal */ -#define HASH_KEYCMP(a,b,len) memcmp(a,b,len) - -/* iterate over items in a known bucket to find desired item */ -#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \ -do { \ - if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \ - else out=NULL; \ - while (out) { \ - if ((out)->hh.keylen == keylen_in) { \ - if ((HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) break; \ - } \ - if ((out)->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,(out)->hh.hh_next)); \ - else out = NULL; \ - } \ -} while(0) - -/* add an item to a bucket */ -#define HASH_ADD_TO_BKT(head,addhh) \ -do { \ - head.count++; \ - (addhh)->hh_next = head.hh_head; \ - (addhh)->hh_prev = NULL; \ - if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \ - (head).hh_head=addhh; \ - if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \ - && (addhh)->tbl->noexpand != 1) { \ - HASH_EXPAND_BUCKETS((addhh)->tbl); \ - } \ -} while(0) - -/* remove an item from a given bucket */ -#define HASH_DEL_IN_BKT(hh,head,hh_del) \ - (head).count--; \ - if ((head).hh_head == hh_del) { \ - (head).hh_head = hh_del->hh_next; \ - } \ - if (hh_del->hh_prev) { \ - hh_del->hh_prev->hh_next = hh_del->hh_next; \ - } \ - if (hh_del->hh_next) { \ - hh_del->hh_next->hh_prev = hh_del->hh_prev; \ - } - -/* Bucket expansion has the effect of doubling the number of buckets - * and redistributing the items into the new buckets. Ideally the - * items will distribute more or less evenly into the new buckets - * (the extent to which this is true is a measure of the quality of - * the hash function as it applies to the key domain). - * - * With the items distributed into more buckets, the chain length - * (item count) in each bucket is reduced. Thus by expanding buckets - * the hash keeps a bound on the chain length. This bounded chain - * length is the essence of how a hash provides constant time lookup. - * - * The calculation of tbl->ideal_chain_maxlen below deserves some - * explanation. First, keep in mind that we're calculating the ideal - * maximum chain length based on the *new* (doubled) bucket count. - * In fractions this is just n/b (n=number of items,b=new num buckets). - * Since the ideal chain length is an integer, we want to calculate - * ceil(n/b). We don't depend on floating point arithmetic in this - * hash, so to calculate ceil(n/b) with integers we could write - * - * ceil(n/b) = (n/b) + ((n%b)?1:0) - * - * and in fact a previous version of this hash did just that. - * But now we have improved things a bit by recognizing that b is - * always a power of two. We keep its base 2 log handy (call it lb), - * so now we can write this with a bit shift and logical AND: - * - * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) - * - */ -#define HASH_EXPAND_BUCKETS(tbl) \ -do { \ - unsigned _he_bkt; \ - unsigned _he_bkt_i; \ - struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ - UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ - _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ - 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ - if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \ - memset(_he_new_buckets, 0, \ - 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ - tbl->ideal_chain_maxlen = \ - (tbl->num_items >> (tbl->log2_num_buckets+1)) + \ - ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \ - tbl->nonideal_items = 0; \ - for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \ - { \ - _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \ - while (_he_thh) { \ - _he_hh_nxt = _he_thh->hh_next; \ - HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \ - _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \ - if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \ - tbl->nonideal_items++; \ - _he_newbkt->expand_mult = _he_newbkt->count / \ - tbl->ideal_chain_maxlen; \ - } \ - _he_thh->hh_prev = NULL; \ - _he_thh->hh_next = _he_newbkt->hh_head; \ - if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \ - _he_thh; \ - _he_newbkt->hh_head = _he_thh; \ - _he_thh = _he_hh_nxt; \ - } \ - } \ - uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ - tbl->num_buckets *= 2; \ - tbl->log2_num_buckets++; \ - tbl->buckets = _he_new_buckets; \ - tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \ - (tbl->ineff_expands+1) : 0; \ - if (tbl->ineff_expands > 1) { \ - tbl->noexpand=1; \ - uthash_noexpand_fyi(tbl); \ - } \ - uthash_expand_fyi(tbl); \ -} while(0) - - -/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ -/* Note that HASH_SORT assumes the hash handle name to be hh. - * HASH_SRT was added to allow the hash handle name to be passed in. */ -#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) -#define HASH_SRT(hh,head,cmpfcn) \ -do { \ - unsigned _hs_i; \ - unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ - struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ - if (head) { \ - _hs_insize = 1; \ - _hs_looping = 1; \ - _hs_list = &((head)->hh); \ - while (_hs_looping) { \ - _hs_p = _hs_list; \ - _hs_list = NULL; \ - _hs_tail = NULL; \ - _hs_nmerges = 0; \ - while (_hs_p) { \ - _hs_nmerges++; \ - _hs_q = _hs_p; \ - _hs_psize = 0; \ - for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \ - _hs_psize++; \ - _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - if (! (_hs_q) ) break; \ - } \ - _hs_qsize = _hs_insize; \ - while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \ - if (_hs_psize == 0) { \ - _hs_e = _hs_q; \ - _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_qsize--; \ - } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \ - _hs_e = _hs_p; \ - _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ - ((void*)((char*)(_hs_p->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_psize--; \ - } else if (( \ - cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \ - DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \ - ) <= 0) { \ - _hs_e = _hs_p; \ - _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ - ((void*)((char*)(_hs_p->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_psize--; \ - } else { \ - _hs_e = _hs_q; \ - _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_qsize--; \ - } \ - if ( _hs_tail ) { \ - _hs_tail->next = ((_hs_e) ? \ - ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \ - } else { \ - _hs_list = _hs_e; \ - } \ - _hs_e->prev = ((_hs_tail) ? \ - ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \ - _hs_tail = _hs_e; \ - } \ - _hs_p = _hs_q; \ - } \ - _hs_tail->next = NULL; \ - if ( _hs_nmerges <= 1 ) { \ - _hs_looping=0; \ - (head)->hh.tbl->tail = _hs_tail; \ - DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ - } \ - _hs_insize *= 2; \ - } \ - HASH_FSCK(hh,head); \ - } \ -} while (0) - -/* This function selects items from one hash into another hash. - * The end result is that the selected items have dual presence - * in both hashes. There is no copy of the items made; rather - * they are added into the new hash through a secondary hash - * hash handle that must be present in the structure. */ -#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ -do { \ - unsigned _src_bkt, _dst_bkt; \ - void *_last_elt=NULL, *_elt; \ - UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ - ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ - if (src) { \ - for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ - for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ - _src_hh; \ - _src_hh = _src_hh->hh_next) { \ - _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ - if (cond(_elt)) { \ - _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \ - _dst_hh->key = _src_hh->key; \ - _dst_hh->keylen = _src_hh->keylen; \ - _dst_hh->hashv = _src_hh->hashv; \ - _dst_hh->prev = _last_elt; \ - _dst_hh->next = NULL; \ - if (_last_elt_hh) { _last_elt_hh->next = _elt; } \ - if (!dst) { \ - DECLTYPE_ASSIGN(dst,_elt); \ - HASH_MAKE_TABLE(hh_dst,dst); \ - } else { \ - _dst_hh->tbl = (dst)->hh_dst.tbl; \ - } \ - HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ - HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \ - (dst)->hh_dst.tbl->num_items++; \ - _last_elt = _elt; \ - _last_elt_hh = _dst_hh; \ - } \ - } \ - } \ - } \ - HASH_FSCK(hh_dst,dst); \ -} while (0) - -#define HASH_CLEAR(hh,head) \ -do { \ - if (head) { \ - uthash_free((head)->hh.tbl->buckets, \ - (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ - HASH_BLOOM_FREE((head)->hh.tbl); \ - uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ - (head)=NULL; \ - } \ -} while(0) - -#define HASH_OVERHEAD(hh,head) \ - (size_t)((((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \ - ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \ - (sizeof(UT_hash_table)) + \ - (HASH_BLOOM_BYTELEN))) - -#ifdef NO_DECLTYPE -#define HASH_ITER(hh,head,el,tmp) \ -for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \ - el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL)) -#else -#define HASH_ITER(hh,head,el,tmp) \ -for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \ - el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL)) -#endif - -/* obtain a count of items in the hash */ -#define HASH_COUNT(head) HASH_CNT(hh,head) -#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0) - -typedef struct UT_hash_bucket { - struct UT_hash_handle *hh_head; - unsigned count; - - /* expand_mult is normally set to 0. In this situation, the max chain length - * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If - * the bucket's chain exceeds this length, bucket expansion is triggered). - * However, setting expand_mult to a non-zero value delays bucket expansion - * (that would be triggered by additions to this particular bucket) - * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. - * (The multiplier is simply expand_mult+1). The whole idea of this - * multiplier is to reduce bucket expansions, since they are expensive, in - * situations where we know that a particular bucket tends to be overused. - * It is better to let its chain length grow to a longer yet-still-bounded - * value, than to do an O(n) bucket expansion too often. - */ - unsigned expand_mult; - -} UT_hash_bucket; - -/* random signature used only to find hash tables in external analysis */ -#define HASH_SIGNATURE 0xa0111fe1 -#define HASH_BLOOM_SIGNATURE 0xb12220f2 - -typedef struct UT_hash_table { - UT_hash_bucket *buckets; - unsigned num_buckets, log2_num_buckets; - unsigned num_items; - struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ - ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ - - /* in an ideal situation (all buckets used equally), no bucket would have - * more than ceil(#items/#buckets) items. that's the ideal chain length. */ - unsigned ideal_chain_maxlen; - - /* nonideal_items is the number of items in the hash whose chain position - * exceeds the ideal chain maxlen. these items pay the penalty for an uneven - * hash distribution; reaching them in a chain traversal takes >ideal steps */ - unsigned nonideal_items; - - /* ineffective expands occur when a bucket doubling was performed, but - * afterward, more than half the items in the hash had nonideal chain - * positions. If this happens on two consecutive expansions we inhibit any - * further expansion, as it's not helping; this happens when the hash - * function isn't a good fit for the key domain. When expansion is inhibited - * the hash will still work, albeit no longer in constant time. */ - unsigned ineff_expands, noexpand; - - uint32_t signature; /* used only to find hash tables in external analysis */ -#ifdef HASH_BLOOM - uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ - uint8_t *bloom_bv; - char bloom_nbits; -#endif - -} UT_hash_table; - -typedef struct UT_hash_handle { - struct UT_hash_table *tbl; - void *prev; /* prev element in app order */ - void *next; /* next element in app order */ - struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ - struct UT_hash_handle *hh_next; /* next hh in bucket order */ - void *key; /* ptr to enclosing struct's key */ - unsigned keylen; /* enclosing struct's key len */ - unsigned hashv; /* result of hash-fcn(key) */ -} UT_hash_handle; - -#endif /* UTHASH_H */ diff --git a/meta/tests/single_tests/Makefile b/meta/tests/single_tests/Makefile deleted file mode 100644 index e9f1fb25c..000000000 --- a/meta/tests/single_tests/Makefile +++ /dev/null @@ -1,93 +0,0 @@ -include ../../Makefile.cfg -CLIBS += -L../../src -CINC += -I../../src -I../../src/uthash -all: put-get bput-bget put-del bput-bdel put-getn \ - put-getp puts-gets bput-bgetn bput-bgetp \ - bput-bget_secondary put-get_secondary \ - put-get_secondary_local bput-bget_secondary_local \ - put-getn_secondary put-getn_secondary_local \ - put-del_secondary put-getp_secondary put-get_2secondary_local \ - put-del_secondary_local plfs-put-get index_name range_test \ - range_bget - -put-get: put-get.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -plfs-put-get: plfs-put-get.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-get_secondary: put-get_secondary.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-get_secondary_local: put-get_secondary_local.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-get_2secondary_local: put-get_2secondary_local.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -puts-gets: puts-gets.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-getn: put-getn.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-getn_secondary: put-getn_secondary.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-getn_secondary_local: put-getn_secondary_local.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-getp_secondary: put-getp_secondary.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - - -put-getp: put-getp.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-del: put-del.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-del_secondary: put-del_secondary.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -put-del_secondary_local: put-del_secondary_local.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -bput-bget: bput-bget.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -bput-bget_secondary: bput-bget_secondary.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -bput-bget_secondary_local: bput-bget_secondary_local.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -bput-bgetn: bput-bgetn.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -bput-bgetp: bput-bgetp.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -range_test: range_test.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -range_bget: range_bget.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -bput-bdel: bput-bdel.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -index_name: index_name.c - $(CC) $< $(CINC) $(CLIBS) $(CFLAGS) -o $@ - -clean: - rm -rf put-get bput-bget put-del bput-bdel\ - put-getn put-getp range_test\ - puts-gets bput-bgetn \ - bput-bgetp bput-bget_secondary \ - put-get_secondary put-get_secondary_local \ - bput-bget_secondary_local put-getn_secondary_local \ - put-getn_secondary put-del_secondary put-getp_secondary \ - put-get_2secondary_local put-del_secondary_local plfs-put-get index_name \ - range_test range_bget - diff --git a/meta/tests/single_tests/bput-bdel.c b/meta/tests/single_tests/bput-bdel.c deleted file mode 100644 index 056af2728..000000000 --- a/meta/tests/single_tests/bput-bdel.c +++ /dev/null @@ -1,144 +0,0 @@ -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define KEYS 50 -int main(int argc, char **argv) { - int ret; - int provided; - int i; - struct mdhim_t *md; - int **keys; - int key_lens[KEYS]; - int **values; - int value_lens[KEYS]; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm, *bgrmp; - char *db_path = "./"; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_CRIT; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; //(data_store.h) - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); - mdhim_options_set_debug_level(db_opts, dbug); - - //Initialize MPI - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - //Quit if the MPI doesn't support multiple thread mode - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - //Initialize MDHIM - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - keys = malloc(sizeof(int *) * KEYS); - values = malloc(sizeof(int *) * KEYS); - for (i = 0; i < KEYS; i++) { - keys[i] = malloc(sizeof(int)); - *keys[i] = (i + 1) * (md->mdhim_rank + 1); - printf("Rank: %d - Inserting key: %d\n", md->mdhim_rank, *keys[i]); - key_lens[i] = sizeof(int); - values[i] = malloc(sizeof(int)); - *values[i] = (i + 1) * (md->mdhim_rank + 1); - value_lens[i] = sizeof(int); - } - - //Insert the records - brm = mdhimBPut(md, (void **) keys, key_lens, - (void **) values, value_lens, KEYS, - NULL, NULL); - brmp = brm; - if (!brm || brm->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - brm = brmp; - } - - //Delete the records - brm = mdhimBDelete(md, md->primary_index, - (void **) keys, key_lens, - KEYS); - brmp = brm; - if (!brm || brm->error) { - printf("Rank - %d: Error deleting keys/values from MDHIM\n", md->mdhim_rank); - } - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error deleting keys\n", md->mdhim_rank); - } - - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - brm = brmp; - } - - //Try to get the records back - should fail - bgrm = mdhimBGet(md, md->primary_index, - (void **) keys, key_lens, - KEYS, MDHIM_GET_EQ); - bgrmp = bgrm; - while (bgrmp) { - if (bgrmp->error < 0) { - printf("Rank: %d - Error retrieving values\n", md->mdhim_rank); - } - - for (i = 0; i < bgrmp->num_keys && bgrmp->error >= 0; i++) { - - printf("Rank: %d - Got key: %d value: %d\n", md->mdhim_rank, - *(int *)bgrmp->keys[i], *(int *)bgrmp->values[i]); - } - - bgrmp = bgrmp->next; - //Free the message - mdhim_full_release_msg(bgrm); - bgrm = bgrmp; - } - - ret = mdhimClose(md); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - for (i = 0; i < KEYS; i++) { - free(keys[i]); - free(values[i]); - } - - free(keys); - free(values); - - return 0; -} diff --git a/meta/tests/single_tests/bput-bget.c b/meta/tests/single_tests/bput-bget.c deleted file mode 100644 index 2348306cf..000000000 --- a/meta/tests/single_tests/bput-bget.c +++ /dev/null @@ -1,369 +0,0 @@ -#include -#include -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -//#define KEYS 100 -//#define TOTAL 100000000 -#define GEN_STR_LEN 1024 - -extern double memgettime, ssdgettime, get_other_time, find_table_time; -extern double imemgettime, maytime, get_result_time; -extern double synctime, myseektime, roomtime, \ -batchtime, key_put_time, addtime, \ -bgtime, bartime, nbstoretime, newnodetime,\ - nbnexttime, findtime, judgetime, \ -heighttime, allfindtime, recordtime, \ -inserttime, waittime, block_reader_time, \ -seek_result_time, get_match_time, get_decode_time; -extern double valassigntime, keyptrtime, get_internal_time, find_tale_time, seek_iter_time; - -extern long nr_mem_get, nr_ssd_get, nr_hit, nr_miss; -extern double mem_get_time, ssd_get_time, cache_get_time, \ - read_compact_time, read_cache_time, read_block_time, \ - seek_block_time, mem_put_time, writeahead_time, \ - write_compact_time, sstable_time, tablecache_time; - - -typedef struct { - unsigned long fid; - unsigned long nodeid; - - unsigned long offset; - unsigned long addr; - unsigned long len; -}meta_t; - -typedef struct { - unsigned long fid; - unsigned long offset; -}ulfs_key_t; - -typedef struct { - unsigned long nodeid; - unsigned long len; - unsigned long addr; -}ulfs_val_t; - -extern double localgetcpytime; -extern double localrangetime; -extern double localbpmtime; -extern double localmalloctime; -extern double resp_get_comm_time; -extern double resp_put_comm_time; -extern double msgputtime; -extern double msggettime; -extern double dbgettime; -extern double dbbputtime; -extern double localcpytime; -extern double packputtime; -extern double packgettime; -extern double stat_time; -extern double packretgettime; -extern double packretputtime; -extern double packmpiputtime; -extern double localassigntime; - -int init_meta_lst(meta_t *meta_lst, ulfs_key_t **key_lst,\ - ulfs_val_t **value_lst, long segnum, long transz, int rank, \ - int size); - - -int main(int argc, char **argv) { - int ret; - int provided; - struct mdhim_t *md; - int **keys; - int **values; - int total = 0; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm, *bgrmp; - struct timeval start_tv, end_tv, put_end; - - double get_time = 0, put_time = 0; - - int c, serratio, bulknum, size, path_len; - long transz, segnum, rangesz; - char db_path[GEN_STR_LEN] = {0}; - char db_name[GEN_STR_LEN] = {0}; - int dbug = MLOG_CRIT; //MLOG_CRIT=1, MLOG_DBG=2 - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; //(data_store.h) - MPI_Comm comm; - - static const char *opts = "c:t:s:r:n:p:d:"; - - while ((c = getopt(argc, argv, opts)) != -1) { - switch(c) { - case 'c': - bulknum = atoi(optarg); break; - case 's': - serratio = atoi(optarg); break; - case 't': - transz = atol(optarg); break; - case 'r': - rangesz = atol(optarg); break; - case 'n': - segnum = atol(optarg); break; - case 'p': - strcpy(db_path, optarg); break; - case 'd': - strcpy(db_name, optarg); break; - } - } - - int *key_lens; - int *val_lens; - // Create options for DB initialization - - db_opts = malloc(sizeof(struct mdhim_options_t)); - - db_opts->db_path = db_path; - db_opts->db_create_new = 1; - db_opts->db_value_append = MDHIM_DB_OVERWRITE; - - db_opts->rserver_factor = serratio; - db_opts->max_recs_per_slice = 1024 * 1024 *50; - db_opts->num_paths = 0; - db_opts->num_wthreads = 1; - - path_len = strlen(db_opts->db_path) \ - + strlen("manifest") + 1; - - char *manifest_path; - manifest_path = malloc(path_len); - sprintf(manifest_path, "%s/%s", db_opts->db_path, "manifest"); - db_opts->manifest_path = manifest_path; - db_opts->db_name = db_name; - db_opts->db_type = LEVELDB; - db_opts->db_key_type = MDHIM_UNIFYFS_KEY; - db_opts->debug_level = MLOG_CRIT; - db_opts->max_recs_per_slice = rangesz; - db_opts->rserver_factor = serratio; - - //Initialize MPI with multiple thread support - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - //Quit if MPI didn't initialize with multiple threads - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - //Initialize MDHIM - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - meta_t *meta_lst = (meta_t *)malloc(segnum*sizeof(meta_t)); - ulfs_key_t **key_lst = \ - (ulfs_key_t **)malloc(segnum*sizeof(ulfs_key_t *)); - ulfs_val_t **val_lst = \ - (ulfs_val_t **)malloc(segnum * sizeof(ulfs_val_t *)); - - key_lens = (int *)malloc(segnum * sizeof(int)); - val_lens = (int *)malloc(segnum * sizeof(int)); - - long i; - for (i = 0; i < segnum; i++) { - key_lens[i] = sizeof(ulfs_key_t); - val_lens[i] = sizeof(ulfs_val_t); - } - int rank; - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(md->mdhim_comm, &size); - MPI_Barrier(MPI_COMM_WORLD); - - init_meta_lst(meta_lst, key_lst, val_lst,\ - segnum, transz, md->mdhim_rank, size); - - - gettimeofday(&start_tv, NULL); -// printf("rank:%d, mdihm_rank is %d\n", rank, md->mdhim_rank); -// fflush(stdout); - while (total != segnum) { - //Insert the keys into MDHIM - brm = mdhimBPut(md, (void **) (&key_lst[total]), key_lens, - (void **) (&val_lst[total]), val_lens, bulknum, - NULL, NULL); - brmp = brm; - if (!brmp || brmp->error) { - printf("Rank - %d: Error inserting keys/values into\ - MDHIM\n", md->mdhim_rank); - } - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - brm = brmp; - } - - total += bulknum; - } - MPI_Barrier(MPI_COMM_WORLD); - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { -// printf("Committed MDHIM database\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - total = 0; - gettimeofday(&put_end, NULL); - put_time = 1000000*(put_end.tv_sec-start_tv.tv_sec) + put_end.tv_usec-start_tv.tv_usec; - while (total != segnum) { - //Get the values back for each key inserted - bgrm = mdhimBGet(md, md->primary_index,\ - &key_lst[total], key_lens, - bulknum, MDHIM_GET_EQ); - bgrmp = bgrm; - while (bgrmp) { - if (bgrmp->error < 0) { - printf("Rank: %d - Error retrieving values", md->mdhim_rank); - } - - for (i = 0; i < bgrmp->num_keys && bgrmp->error >= 0; i++) { - -// printf("Rank: %d - Got key: %d value: %d\n", md->mdhim_rank, -// *(int *)bgrmp->keys[i], *(int *)bgrmp->values[i]); -/* printf("Rank: %d - num_keys is %ld, offset:%ld\n", md->mdhim_rank, - bgrmp->num_keys, ((ulfs_key_t *)(bgrmp->keys[i]))->offset); - fflush(stdout); -*/ - } - - bgrmp = bgrmp->next; - //Free the message received - mdhim_full_release_msg(bgrm); - bgrm = bgrmp; - } - - total += bulknum; - } - MPI_Barrier(MPI_COMM_WORLD); - gettimeofday(&end_tv, NULL); - get_time = 1000000*(end_tv.tv_sec - put_end.tv_sec) + end_tv.tv_usec - put_end.tv_usec; - //Quit MDHIM - ret = mdhimClose(md); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - -if (md->mdhim_rank == 0) { -/* for (i = 0; i < KEYS; i++) { - free(keys[i]); - free(values[i]); - } - - free(keys); - free(values); -*/ -} - MPI_Barrier(MPI_COMM_WORLD); - if(md->mdhim_rank == 0) { - printf("put time is %lf, get time is %lf, \ - network_put is %lf, network_get is %lf, \ - ,dbputtime:%lf, dbgettime:%lf, packputtime:%lf, \ - packgettime:%lf, localcpytime:%lf, \ - resp_put_comm_time:%lf, \ - resp_get_comm_time:%lf, \ - stat_time:%lf, packretputtime:%lf, \ - packretgettime:%lf, \ - localgetcpytime:%lf, \ - packmpiputtime:%lf, \ - localassigntime:%lf, \ - localmalloctime:%lf, \ - localbpmtime:%lf, \ - localrangetime:%lf\n", \ - put_time/1000000,\ - get_time/1000000, \ - msgputtime/1000000, msggettime/1000000,\ - dbbputtime/1000000, \ - dbgettime/1000000, packputtime/1000000, \ - packgettime/1000000, localcpytime/1000000, \ - resp_put_comm_time/1000000, \ - resp_get_comm_time/1000000, \ - stat_time/1000000, \ - packretputtime/1000000, \ - packretgettime/1000000, \ - localgetcpytime/1000000, \ - packmpiputtime/1000000, \ - localassigntime/1000000, \ - localmalloctime/1000000, \ - localbpmtime/1000000, \ - localrangetime/1000000); - - printf("mem_get_time:%lf, ssd_get_time:%lf, \ - read_compact_time:%lf, read_cache_time:%lf, \ - read_block_time:%lf, seek_block_time:%lf, hit:%ld, miss:%ld, nr_mem_get:%ld, nr_ssd_get:%ld, sstabletime:%lf, tablecache_time:%lf, cache_get_time:%lf, get_other_time:%lf, getresulttime:%lf, findtime:%lf, internaltime:%lf, decodetime:%lf, seekresulttime:%lf, matchtime:%lf, blockreadtime:%lf, seekitertime:%lf\n\n", \ - mem_get_time/1000000, ssd_get_time/1000000, \ - read_compact_time/1000000, read_cache_time/1000000, \ - read_block_time/1000000, seek_block_time/1000000, nr_hit, \ - nr_miss, nr_mem_get, nr_ssd_get, sstable_time/1000000, \ - tablecache_time/1000000, cache_get_time/1000000, \ - get_other_time/1000000, \ - get_result_time/1000000, find_table_time/1000000,\ - get_internal_time/1000000,\ - get_decode_time/1000000, \ - seek_result_time/1000000, \ - get_match_time/1000000, \ - block_reader_time/1000000, \ - seek_iter_time/1000000); - - printf("mem_put_time:%lf, writeahead_time:%lf, \ - write_compact_time:%lf\n", mem_put_time/1000000, \ - writeahead_time/1000000, write_compact_time/1000000); - - - fflush(stdout); -// printf("Took: %u seconds to insert and get %u keys/values\n", -// (unsigned int) (end_tv.tv_sec - start_tv.tv_sec), TOTAL); -} - MPI_Finalize(); - return 0; -} - -int init_meta_lst(meta_t *meta_lst, ulfs_key_t **key_lst,\ - ulfs_val_t **value_lst, \ - long segnum, long transz, int rank, int size) { - - long i=0; - for (i = 0; i < segnum; i++) { - meta_lst[i].fid = 0; - -// meta_lst[i].offset = i * transz + rank * transz * segnum; - meta_lst[i].offset = i * transz * size + rank * transz; - meta_lst[i].nodeid = rank; - meta_lst[i].addr = i * transz; - meta_lst[i].len = transz; - fflush(stdout); - - key_lst[i] = (ulfs_key_t *)malloc(sizeof(ulfs_key_t)); - key_lst[i]->fid = meta_lst[i].fid; - key_lst[i]->offset = meta_lst[i].offset; - - value_lst[i] = (ulfs_val_t *)malloc(sizeof(ulfs_val_t)); - value_lst[i]->addr = meta_lst[i].addr; - value_lst[i]->len = meta_lst[i].len; - value_lst[i]->nodeid = meta_lst[i].nodeid; - } - return 0; -} diff --git a/meta/tests/single_tests/bput-bget_secondary.c b/meta/tests/single_tests/bput-bget_secondary.c deleted file mode 100644 index 4c20e28ba..000000000 --- a/meta/tests/single_tests/bput-bget_secondary.c +++ /dev/null @@ -1,255 +0,0 @@ -#include -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define KEYS 10000 -#define TOTAL_KEYS 10000 -#define SLICE_SIZE 100000 -#define SECONDARY_SLICE_SIZE 100000 -#define PRIMARY 1 -#define SECONDARY 2 - -uint64_t **keys; -int *key_lens; -uint64_t **values; -int *value_lens; -uint64_t ***secondary_keys; -int **secondary_key_lens; - -void start_record(struct timeval *start) { - gettimeofday(start, NULL); -} - -void end_record(struct timeval *end) { - gettimeofday(end, NULL); -} - -void add_time(struct timeval *start, struct timeval *end, long double *time) { - long double elapsed = (long double) (end->tv_sec - start->tv_sec) + - ((long double) (end->tv_usec - start->tv_usec)/1000000.0); - *time += elapsed; -} - -void gen_keys_values(int rank, int total_keys) { - int i = 0; - for (i = 0; i < KEYS; i++) { - keys[i] = malloc(sizeof(uint64_t)); - *keys[i] = i + (uint64_t) ((uint64_t) rank * (uint64_t)TOTAL_KEYS) + total_keys; - /* If we are generating keys for the secondary index, then they should be distributed differently - across the range servers */ - secondary_keys[i] = malloc(sizeof(uint64_t *)); - *secondary_keys[i] = malloc(sizeof(uint64_t)); - **secondary_keys[i] = i + rank; - key_lens[i] = sizeof(uint64_t); - secondary_key_lens[i] = malloc(sizeof(uint64_t)); - *secondary_key_lens[i] = sizeof(uint64_t); - values[i] = malloc(sizeof(uint64_t)); - value_lens[i] = sizeof(uint64_t); - *values[i] = rank; - } -} - -void free_key_values() { - int i; - - for (i = 0; i < KEYS; i++) { - free(keys[i]); - free(values[i]); - free(*secondary_keys[i]); - free(secondary_keys[i]); - free(secondary_key_lens[i]); - } -} - -int main(int argc, char **argv) { - int ret; - int provided; - int i; - struct mdhim_t *md; - int total = 0; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm, *bgrmp; - struct timeval start_tv, end_tv; - char *db_path = "./"; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_CRIT; //MLOG_CRIT=1, MLOG_DBG=2 - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; //(data_store.h) - long double put_time = 0; - long double get_time = 0; - struct index_t *secondary_index; - struct secondary_bulk_info *secondary_info; - int num_keys[KEYS]; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_LONG_INT_KEY); - mdhim_options_set_max_recs_per_slice(db_opts, SLICE_SIZE); - mdhim_options_set_server_factor(db_opts, 4); - mdhim_options_set_debug_level(db_opts, dbug); - - //Initialize MPI with multiple thread support - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - //Quit if MPI didn't initialize with multiple threads - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - gettimeofday(&start_tv, NULL); - - //Initialize MDHIM - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - key_lens = malloc(sizeof(int) * KEYS); - value_lens = malloc(sizeof(int) * KEYS); - keys = malloc(sizeof(uint64_t *) * KEYS); - values = malloc(sizeof(uint64_t *) * KEYS); - secondary_key_lens = malloc(sizeof(int *) * KEYS); - secondary_keys = malloc(sizeof(uint64_t **) * KEYS); - memset(secondary_keys, 0, sizeof(uint64_t **) * KEYS); - - /* Secondary key entries */ - //Create the secondary global index - secondary_index = create_global_index(md, 2, SECONDARY_SLICE_SIZE, LEVELDB, - MDHIM_LONG_INT_KEY, NULL); - /* Primary key and secondary key entries */ - MPI_Barrier(MPI_COMM_WORLD); - total = 0; - - for (i = 0; i < KEYS; i++) { - num_keys[i] = 1; - } - while (total != TOTAL_KEYS) { - //Populate the primary keys and values to insert - gen_keys_values(md->mdhim_rank, total); - secondary_info = mdhimCreateSecondaryBulkInfo(secondary_index, - (void ***) secondary_keys, - secondary_key_lens, num_keys, - SECONDARY_GLOBAL_INFO); - //record the start time - start_record(&start_tv); - //Insert the primary keys into MDHIM - brm = mdhimBPut(md, (void **) keys, key_lens, - (void **) values, value_lens, KEYS, NULL, - secondary_info); - //Record the end time - end_record(&end_tv); - //Add the final time - add_time(&start_tv, &end_tv, &put_time); - brmp = brm; - if (!brmp || brmp->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - brm = brmp; - } - - free_key_values(); - total += KEYS; - mdhimReleaseSecondaryBulkInfo(secondary_info); - } - - /* End primary key and secondary key entries */ - - MPI_Barrier(MPI_COMM_WORLD); - /* End secondary key entries */ - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Retrieve the primary key's values from the secondary key - total = 0; - - while (total != TOTAL_KEYS) { - //Populate the keys and values to retrieve - gen_keys_values(md->mdhim_rank, total); - start_record(&start_tv); - //Get the values back for each key inserted - for (i = 0; i < KEYS; i++) { - bgrm = mdhimBGet(md, secondary_index, (void **) secondary_keys[i], - secondary_key_lens[i], - 1, MDHIM_GET_PRIMARY_EQ); - } - end_record(&end_tv); - add_time(&start_tv, &end_tv, &get_time); - bgrmp = bgrm; - while (bgrmp) { - if (!bgrmp || bgrmp->error) { - printf("Rank: %d - Error retrieving values starting at: %llu", - md->mdhim_rank, (long long unsigned int) *keys[0]); - } - - //Validate that the data retrieved is the correct data - for (i = 0; i < bgrmp->num_keys && !bgrmp->error; i++) { - if (!bgrmp->value_lens[i]) { - printf("Rank: %d - Got an empty value for key: %llu", - md->mdhim_rank, *(long long unsigned int *)bgrmp->keys[i]); - continue; - } - } - - bgrm = bgrmp; - bgrmp = bgrmp->next; - //Free the message received - mdhim_full_release_msg(bgrm); - } - - free_key_values(); - total += KEYS; - } - - free(key_lens); - free(keys); - free(values); - free(value_lens); - free(secondary_key_lens); - free(secondary_keys); - MPI_Barrier(MPI_COMM_WORLD); - - //Quit MDHIM - ret = mdhimClose(md); - gettimeofday(&end_tv, NULL); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - printf("Took: %Lf seconds to put %d keys\n", - put_time, TOTAL_KEYS * 2); - printf("Took: %Lf seconds to get %d keys/values\n", - get_time, TOTAL_KEYS * 2); - - return 0; -} diff --git a/meta/tests/single_tests/bput-bget_secondary_local.c b/meta/tests/single_tests/bput-bget_secondary_local.c deleted file mode 100644 index 50cd3b459..000000000 --- a/meta/tests/single_tests/bput-bget_secondary_local.c +++ /dev/null @@ -1,260 +0,0 @@ -#include -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define KEYS 10000 -#define TOTAL_KEYS 10000 -#define SLICE_SIZE 100000 -#define SECONDARY_SLICE_SIZE 10000 -#define PRIMARY 1 -#define SECONDARY 2 - -uint64_t **keys; -int *key_lens; -uint64_t **values; -int *value_lens; -uint64_t ***secondary_keys; -int **secondary_key_lens; - -void start_record(struct timeval *start) { - gettimeofday(start, NULL); -} - -void end_record(struct timeval *end) { - gettimeofday(end, NULL); -} - -void add_time(struct timeval *start, struct timeval *end, long double *time) { - long double elapsed = (long double) (end->tv_sec - start->tv_sec) + - ((long double) (end->tv_usec - start->tv_usec)/1000000.0); - *time += elapsed; -} - -void gen_keys_values(int rank, int total_keys) { - int i = 0; - for (i = 0; i < KEYS; i++) { - keys[i] = malloc(sizeof(uint64_t)); - *keys[i] = i + (uint64_t) ((uint64_t) rank * (uint64_t)TOTAL_KEYS) + total_keys; - /* If we are generating keys for the secondary index, then they should be distributed differently - across the range servers */ - secondary_keys[i] = malloc(sizeof(uint64_t *)); - *secondary_keys[i] = malloc(sizeof(uint64_t)); - **secondary_keys[i] = i + rank; - key_lens[i] = sizeof(uint64_t); - secondary_key_lens[i] = malloc(sizeof(uint64_t)); - *secondary_key_lens[i] = sizeof(uint64_t); - values[i] = malloc(sizeof(uint64_t)); - value_lens[i] = sizeof(uint64_t); - *values[i] = rank; - //The secondary key's values should be the primary key they refer to - } -} - -void free_key_values() { - int i; - - for (i = 0; i < KEYS; i++) { - free(keys[i]); - free(values[i]); - free(*secondary_keys[i]); - free(secondary_keys[i]); - free(secondary_key_lens[i]); - } -} - -int main(int argc, char **argv) { - int ret; - int provided; - int i; - struct mdhim_t *md; - int total = 0; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm, *bgrmp; - struct timeval start_tv, end_tv; - char *db_path = "./"; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_DBG; //MLOG_CRIT=1, MLOG_DBG=2 - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; //(data_store.h) - long double put_time = 0; - long double get_time = 0; - struct index_t *secondary_local_index; - struct secondary_bulk_info *secondary_info; - int num_keys[KEYS]; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_LONG_INT_KEY); - mdhim_options_set_max_recs_per_slice(db_opts, SLICE_SIZE); - mdhim_options_set_server_factor(db_opts, 4); - mdhim_options_set_debug_level(db_opts, dbug); - - //Initialize MPI with multiple thread support - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - //Quit if MPI didn't initialize with multiple threads - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - gettimeofday(&start_tv, NULL); - - //Initialize MDHIM - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - key_lens = malloc(sizeof(int) * KEYS); - value_lens = malloc(sizeof(int) * KEYS); - keys = malloc(sizeof(uint64_t *) * KEYS); - values = malloc(sizeof(uint64_t *) * KEYS); - secondary_key_lens = malloc(sizeof(int *) * KEYS); - secondary_keys = malloc(sizeof(uint64_t **) * KEYS); - memset(secondary_keys, 0, sizeof(uint64_t **) * KEYS); - - /* Primary and secondary key entries */ - MPI_Barrier(MPI_COMM_WORLD); - total = 0; - secondary_local_index = create_local_index(md, LEVELDB, - MDHIM_LONG_INT_KEY, NULL); - for (i = 0; i < KEYS; i++) { - num_keys[i] = 1; - } - while (total != TOTAL_KEYS) { - //Populate the primary keys and values to insert - gen_keys_values(md->mdhim_rank, total); - secondary_info = mdhimCreateSecondaryBulkInfo(secondary_local_index, - (void ***) secondary_keys, - secondary_key_lens, num_keys, - SECONDARY_LOCAL_INFO); - //record the start time - start_record(&start_tv); - //Insert the primary keys into MDHIM - brm = mdhimBPut(md, (void **) keys, key_lens, - (void **) values, value_lens, KEYS, - NULL, secondary_info); - //Record the end time - end_record(&end_tv); - //Add the final time - add_time(&start_tv, &end_tv, &put_time); - if (!brm || brm->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - while (brm) { - if (brm->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brmp = brm->next; - //Free the message - mdhim_full_release_msg(brm); - brm = brmp; - } - - free_key_values(); - mdhimReleaseSecondaryBulkInfo(secondary_info); - total += KEYS; - } - - /* End primary and secondary entries */ - - - MPI_Barrier(MPI_COMM_WORLD); - /* End secondary key entries */ - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats for the secondary index so the client figures out who to query - ret = mdhimStatFlush(md, secondary_local_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - //Retrieve the primary key's values from the secondary key - total = 0; - while (total != TOTAL_KEYS) { - //Populate the keys and values to retrieve - gen_keys_values(md->mdhim_rank, total); - start_record(&start_tv); - //Get the values back for each key inserted - for (i = 0; i < KEYS; i++) { - bgrm = mdhimBGet(md, secondary_local_index, - (void **) secondary_keys[i], secondary_key_lens[i], - 1, MDHIM_GET_PRIMARY_EQ); - } - - end_record(&end_tv); - add_time(&start_tv, &end_tv, &get_time); - while (bgrm) { - /* if (!bgrm || bgrm->error) { - printf("Rank: %d - Error retrieving values starting at: %llu", - md->mdhim_rank, (long long unsigned int) *keys[0]); - } */ - - //Validate that the data retrieved is the correct data - for (i = 0; i < bgrm->num_keys && !bgrm->error; i++) { - if (!bgrm->value_lens[i]) { - printf("Rank: %d - Got an empty value for key: %llu", - md->mdhim_rank, *(long long unsigned int *)bgrm->keys[i]); - continue; - } - } - - bgrmp = bgrm; - bgrm = bgrm->next; - mdhim_full_release_msg(bgrmp); - } - - free_key_values(); - total += KEYS; - } - - free(key_lens); - free(keys); - free(values); - free(value_lens); - free(secondary_key_lens); - free(secondary_keys); - MPI_Barrier(MPI_COMM_WORLD); - - //Quit MDHIM - ret = mdhimClose(md); - gettimeofday(&end_tv, NULL); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - printf("Took: %Lf seconds to put %d keys\n", - put_time, TOTAL_KEYS * 2); - printf("Took: %Lf seconds to get %d keys/values\n", - get_time, TOTAL_KEYS * 2); - - return 0; -} diff --git a/meta/tests/single_tests/bput-bgetn.c b/meta/tests/single_tests/bput-bgetn.c deleted file mode 100644 index 63976672e..000000000 --- a/meta/tests/single_tests/bput-bgetn.c +++ /dev/null @@ -1,220 +0,0 @@ -#include -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define KEYS 1000000 -#define TOTAL_KEYS 1000000 -#define SLICE_SIZE 1000000 - -uint64_t **keys; -int *key_lens; -uint64_t **values; -int *value_lens; - -void start_record(struct timeval *start) { - gettimeofday(start, NULL); -} - -void end_record(struct timeval *end) { - gettimeofday(end, NULL); -} - -void add_time(struct timeval *start, struct timeval *end, long double *time) { - long double elapsed = (long double) (end->tv_sec - start->tv_sec) + - ((long double) (end->tv_usec - start->tv_usec)/1000000.0); - *time += elapsed; -} - -void gen_keys_values(int rank, int total_keys) { - int i = 0; - for (i = 0; i < KEYS; i++) { - keys[i] = malloc(sizeof(uint64_t)); - *keys[i] = i + (uint64_t) ((uint64_t) rank * (uint64_t)TOTAL_KEYS) + total_keys; - key_lens[i] = sizeof(uint64_t); - values[i] = malloc(sizeof(int)); - *values[i] = 1; - value_lens[i] = sizeof(int); - } -} - -void free_key_values() { - int i; - - for (i = 0; i < KEYS; i++) { - free(keys[i]); - free(values[i]); - } -} - -int main(int argc, char **argv) { - int ret; - int provided; - int i; - struct mdhim_t *md; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm; - struct timeval start_tv, end_tv; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_CRIT; //MLOG_CRIT=1, MLOG_DBG=2 - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; // (data_store.h) - int size; - long double flush_time = 0; - long double put_time = 0; - long double get_time = 0; - int total_keys = 0; - int round = 0; - char *paths[] = {"./"}; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_paths(db_opts, paths, 1); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_LONG_INT_KEY); - mdhim_options_set_max_recs_per_slice(db_opts, SLICE_SIZE); - mdhim_options_set_server_factor(db_opts, 1); - mdhim_options_set_debug_level(db_opts, dbug); - - //Initialize MPI with multiple thread support - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - //Quit if MPI didn't initialize with multiple threads - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - //Initialize MDHIM - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - key_lens = malloc(sizeof(uint64_t) * KEYS); - value_lens = malloc(sizeof(int) * KEYS); - keys = malloc(sizeof(uint64_t *) * KEYS); - values = malloc(sizeof(int *) * KEYS); - MPI_Comm_size(md->mdhim_comm, &size); - MPI_Barrier(MPI_COMM_WORLD); - //record the start time - start_record(&start_tv); - while (total_keys != TOTAL_KEYS) { - //Populate the keys and values to insert - gen_keys_values(md->mdhim_rank, total_keys); - //Insert the keys into MDHIM - brm = mdhimBPut(md, (void **) keys, key_lens, - (void **) values, value_lens, KEYS, - NULL, NULL); - // MPI_Barrier(MPI_COMM_WORLD); - - //Iterate through the return messages to see if there is an error and to free it - brmp = brm; - if (!brmp || brmp->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brm = brmp; - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - - } - - free_key_values(); - total_keys += KEYS; - round++; - } - - //Record the end time - end_record(&end_tv); - //Add the final time - add_time(&start_tv, &end_tv, &put_time); - MPI_Barrier(MPI_COMM_WORLD); - //Get the stats - start_record(&start_tv); - ret = mdhimStatFlush(md, md->primary_index); - // MPI_Barrier(MPI_COMM_WORLD); - end_record(&end_tv); - add_time(&start_tv, &end_tv, &flush_time); - - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats from MDHIM database\n"); - } else { -// printf("Got stats\n"); - } - - total_keys = 0; - while (total_keys != TOTAL_KEYS) { - //Populate the keys and values we expect to retrieve - gen_keys_values(md->mdhim_rank, total_keys); - start_record(&start_tv); - //Get the keys and values back starting from and including key[0] - bgrm = mdhimBGetOp(md, md->primary_index, - keys[0], sizeof(uint64_t), - KEYS, MDHIM_GET_NEXT); - // MPI_Barrier(MPI_COMM_WORLD); - end_record(&end_tv); - add_time(&start_tv, &end_tv, &get_time); - //Check if there is an error - if (!bgrm || bgrm->error) { - printf("Rank: %d - Error retrieving values starting at: %llu", - md->mdhim_rank, (long long unsigned int) *keys[0]); - goto done; - } - - //Validate that the data retrieved is the correct data - for (i = 0; i < bgrm->num_keys && !bgrm->error; i++) { - assert(*(uint64_t *)bgrm->keys[i] == *keys[i]); - assert(*(int *)bgrm->values[i] == *values[i]); - } - - //Free the message received - mdhim_full_release_msg(bgrm); - free_key_values(); - total_keys += KEYS; - round++; - } - - free(key_lens); - free(keys); - free(values); - free(value_lens); -done: - MPI_Barrier(MPI_COMM_WORLD); - //Quit MDHIM - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - gettimeofday(&end_tv, NULL); - - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - printf("Took: %Lf seconds to put %d keys\n", - put_time, TOTAL_KEYS); - printf("Took: %Lf seconds to get %d keys/values\n", - get_time, TOTAL_KEYS); - printf("Took: %Lf seconds to stat flush\n", - flush_time); - - return 0; -} diff --git a/meta/tests/single_tests/bput-bgetp.c b/meta/tests/single_tests/bput-bgetp.c deleted file mode 100644 index 5750d4426..000000000 --- a/meta/tests/single_tests/bput-bgetp.c +++ /dev/null @@ -1,217 +0,0 @@ -#include -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define KEYS 100000 -#define TOTAL_KEYS 100000 - -int **keys; -int *key_lens; -int **values; -int *value_lens; - -void start_record(struct timeval *start) { - gettimeofday(start, NULL); -} - -void end_record(struct timeval *end) { - gettimeofday(end, NULL); -} - -void add_time(struct timeval *start, struct timeval *end, long *time) { - *time += end->tv_sec - start->tv_sec; -} - -void gen_keys_values(int rank, int total_keys) { - int i = 0; - for (i = 0; i < KEYS; i++) { - keys[i] = malloc(sizeof(int)); - //Keys are chosen to fit in one slice - *keys[i] = i + (rank * TOTAL_KEYS) + total_keys; - key_lens[i] = sizeof(int); - values[i] = malloc(sizeof(int)); - *values[i] = *keys[i]; - value_lens[i] = sizeof(int); - } -} - -void free_key_values() { - int i; - - for (i = 0; i < KEYS; i++) { - free(keys[i]); - free(values[i]); - } -} - -int main(int argc, char **argv) { - int ret; - int provided; - int i; - struct mdhim_t *md; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm; - struct timeval start_tv, end_tv; - char *db_path = "./"; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_CRIT; //MLOG_CRIT=1, MLOG_DBG=2 - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; // (data_store.h) - int size; - long flush_time = 0; - long put_time = 0; - long get_time = 0; - int total_keys = 0; - int round = 0; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); - mdhim_options_set_debug_level(db_opts, dbug); - - //Initialize MPI with multiple thread support - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - //Quit if MPI didn't initialize with multiple threads - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - //Initialize MDHIM - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - key_lens = malloc(sizeof(int) * KEYS); - value_lens = malloc(sizeof(int) * KEYS); - keys = malloc(sizeof(int *) * KEYS); - values = malloc(sizeof(int *) * KEYS); - MPI_Comm_size(md->mdhim_comm, &size); - while (total_keys != TOTAL_KEYS) { - //Populate the keys and values to insert - gen_keys_values(md->mdhim_rank, total_keys); - //record the start time - start_record(&start_tv); - //Insert the keys into MDHIM - brm = mdhimBPut(md, - (void **) keys, key_lens, - (void **) values, value_lens, - KEYS, NULL, NULL); - // MPI_Barrier(MPI_COMM_WORLD); - //record the end time - end_record(&end_tv); - //add the time - add_time(&start_tv, &end_tv, &put_time); - - //Iterate through the return messages to see if there is an error and to free it - brmp = brm; - if (!brmp || brmp->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brm = brmp; - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - - } - - free_key_values(); - total_keys += KEYS; - round++; - } - - //Get the stats - start_record(&start_tv); - ret = mdhimStatFlush(md, md->primary_index); - // MPI_Barrier(MPI_COMM_WORLD); - end_record(&end_tv); - add_time(&start_tv, &end_tv, &flush_time); - - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats from MDHIM database\n"); - } else { -// printf("Got stats\n"); - } - - total_keys = 0; - while (total_keys != TOTAL_KEYS) { - //Populate the keys and values we expect to retrieve - gen_keys_values(md->mdhim_rank, total_keys); - start_record(&start_tv); - //Get the keys and values back starting from and including key[0] - bgrm = mdhimBGetOp(md, md->primary_index, - keys[KEYS - 1], sizeof(int), - KEYS, MDHIM_GET_PREV); - // MPI_Barrier(MPI_COMM_WORLD); - end_record(&end_tv); - add_time(&start_tv, &end_tv, &get_time); - //Check if there is an error - if (!bgrm) { - printf("Rank: %d - Empty bgrm: %d\n", md->mdhim_rank, *keys[KEYS-1]); - } - if (!bgrm || bgrm->error) { - printf("Rank: %d - Error retrieving values starting at: %d\n", md->mdhim_rank, *keys[KEYS-1]); - goto done; - } - - //Validate that the data retrieved is the correct data - for (i = 0; i < bgrm->num_keys && !bgrm->error; i++) { - assert(*(int *)bgrm->keys[i] == *keys[KEYS - 1 - i]); - assert(*(int *)bgrm->values[i] == *values[KEYS - 1 - i]); - } - - //Free the message received - mdhim_full_release_msg(bgrm); - free_key_values(); - total_keys += KEYS; - round++; - } - - free(key_lens); - free(keys); - free(values); - free(value_lens); -done: - //Quit MDHIM - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - gettimeofday(&end_tv, NULL); - - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - printf("Took: %ld seconds to put %d keys\n", - put_time, TOTAL_KEYS); - printf("Took: %ld seconds to get %d keys/values\n", - get_time, TOTAL_KEYS); - printf("Took: %ld seconds to stat flush\n", - flush_time); - - - return 0; -} diff --git a/meta/tests/single_tests/grey_sort.c b/meta/tests/single_tests/grey_sort.c deleted file mode 100644 index 6bebe772f..000000000 --- a/meta/tests/single_tests/grey_sort.c +++ /dev/null @@ -1,169 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "db_options.h" - -#define KEYS 100000 -#define KEY_SIZE 100 -#define NUM_KEYS 10000000 -int main(int argc, char **argv) { - int ret; - int provided; - int i, j, fd; - struct mdhim_t *md; - void **keys; - int key_lens[KEYS]; - char **values; - int value_lens[KEYS]; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm; - struct timeval start_tv, end_tv; - char filename[255]; - mdhim_options_t *mdhim_opts; - struct mdhim_stat *stat, *tmp; - - //Initialize MPI with multiple thread support - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - //Quit if MPI didn't initialize with multiple threads - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - mdhim_opts = mdhim_options_init(); - mdhim_options_set_db_path(mdhim_opts, "./"); - mdhim_options_set_db_name(mdhim_opts, "mdhimTstDB"); - mdhim_options_set_db_type(mdhim_opts, LEVELDB); - mdhim_options_set_key_type(mdhim_opts, MDHIM_BYTE_KEY); - - //Initialize MDHIM - md = mdhimInit(MPI_COMM_WORLD, mdhim_opts); - sprintf(filename, "%s%d", "/scratch/hng/input/input", md->mdhim_rank); - if ((fd = open(filename, O_RDONLY)) < 0) { - printf("Error opening input file"); - exit(1); - } - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - //Start the timing - gettimeofday(&start_tv, NULL); - - //Read in the keys from the files and insert them - for (j = 0; j < NUM_KEYS; j+=KEYS) { - //Populate the keys and values to insert - keys = malloc(sizeof(void *) * KEYS); - values = malloc(sizeof(char *) * KEYS); - for (i = 0; i < KEYS; i++) { - keys[i] = malloc(KEY_SIZE); - ret = read(fd, keys[i], KEY_SIZE); - if (ret != KEY_SIZE) { - printf("Error reading in key\n"); - } - - key_lens[i] = KEY_SIZE; - values[i] = malloc(1); - *values[i] = 'a'; - value_lens[i] = 1; - } - - //Insert the keys into MDHIM - brm = mdhimBPut(md, (void **) keys, key_lens, - (void **) values, value_lens, KEYS); - brmp = brm; - if (!brm || brm->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - brm = brmp; - } - - for (i = 0; i < KEYS; i++) { - free(keys[i]); - - } - free(keys); - for (i = 0; i < KEYS; i++) { - free(values[i]); - - } - free(values); - } - - close(fd); - ret = mdhimStatFlush(md); - if ((ret = im_range_server(md)) != 1) { - goto done; - } - - //Iterate through my range server stat hash entries to retrieve all the slices - HASH_ITER(hh, md->mdhim_rs->mdhim_store->mdhim_store_stats, stat, tmp) { - if (!stat) { - continue; - } - - bgrm = mdhimBGetOp(md, stat->min, KEY_SIZE, - KEYS, MDHIM_GET_NEXT); - //Check if there is an error - if (!bgrm || bgrm->error) { - printf("Rank: %d - Error retrieving values", md->mdhim_rank); - goto done; - } - - sprintf(filename, "%s%d", "/scratch/hng/output/output_slice_", stat->key); - - if ((fd = open(filename, O_WRONLY | O_CREAT)) < 0) { - printf("Error opening output file"); - exit(1); - } - - for (i = 0; i < bgrm->num_records && !bgrm->error; i++) { - ret = write(fd, bgrm->keys[i], KEY_SIZE); - if (ret != KEY_SIZE) { - printf("Error writing key\n"); - } - } - - close(fd); - //Free the message received - mdhim_full_release_msg(bgrm); - } - - gettimeofday(&end_tv, NULL); - -done: - MPI_Barrier(MPI_COMM_WORLD); - //Quit MDHIM - ret = mdhimClose(md); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - printf("Took: %u seconds to sort and output %u keys/values\n", - (uint32_t) (end_tv.tv_sec - start_tv.tv_sec), NUM_KEYS); - return 0; -} diff --git a/meta/tests/single_tests/index_name.c b/meta/tests/single_tests/index_name.c deleted file mode 100644 index 17d20985a..000000000 --- a/meta/tests/single_tests/index_name.c +++ /dev/null @@ -1,279 +0,0 @@ -/* - * ===================================================================================== - * - * Filename: index_name.c - * - * Description: Testing Index Naming - * - * Version: 1.0 - * Created: 11/26/2014 12:35:26 PM - * Revision: none - * Compiler: gcc - * - * Author: Aaron Caldwell (), caldwellfans@gmail.com - * Organization: - * - * ===================================================================================== - */ - -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -#define SLICE_SIZE 100 -#define SECONDAERY_SLICE_SIZE 5 - -int main(int argc, char **argv) { - int ret; - int provided=0; - struct mdhim_t *md; - uint32_t key, key2, key3, **secondary_keys, **secondary_keys2, **secondary_keys3; - int value, *secondary_key_lens, *secondary_key_lens2, *secondary_key_lens3; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - struct index_t *secondary_local_index, *secondary_local_index2, *secondary_local_index3, *secondary_local_index_by_name; - struct secondary_info *secondary_info, *secondary_info2, *secondary_info3; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if ( provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode.\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimInxName"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); //Key_type = 1 (int) - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if(!md) { - printf("ERROR initializing MDHIM\n"); - exit(1); - } - - key = 100 * (md->mdhim_rank + 1); - value = 500 * (md->mdhim_rank + 1); - - secondary_keys = malloc(sizeof(uint32_t *)); - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + 1; - secondary_key_lens = malloc(sizeof(int)); - secondary_key_lens[0] = sizeof(uint32_t); - - secondary_keys2 = malloc(sizeof(uint32_t *)); - secondary_keys2[0] = malloc(sizeof(uint32_t)); - *secondary_keys2[0] = md->mdhim_rank + 1; - secondary_key_lens2 = malloc(sizeof(int)); - secondary_key_lens2[0] = sizeof(uint32_t); - - secondary_keys3 = malloc(sizeof(uint32_t *)); - secondary_keys3[0] = malloc(sizeof(uint32_t)); - *secondary_keys3[0] = md->mdhim_rank + 1; - secondary_key_lens3 = malloc(sizeof(int)); - secondary_key_lens3[0] = sizeof(uint32_t); - - //Create a secondary index on only one range server - secondary_local_index = create_local_index(md, LEVELDB, MDHIM_INT_KEY, - "Test1"); - secondary_local_index2 = create_local_index(md, LEVELDB, MDHIM_INT_KEY, - "Test2"); - secondary_local_index3 = create_local_index(md, LEVELDB, MDHIM_INT_KEY, - "Test3"); - - secondary_info = mdhimCreateSecondaryInfo(secondary_local_index, - (void **) secondary_keys, - secondary_key_lens, 1, - SECONDARY_LOCAL_INFO); - - secondary_info2 = mdhimCreateSecondaryInfo(secondary_local_index2, - (void **) secondary_keys2, - secondary_key_lens2, 1, - SECONDARY_LOCAL_INFO); - - secondary_info3 = mdhimCreateSecondaryInfo(secondary_local_index3, - (void **) secondary_keys3, - secondary_key_lens3, 1, - SECONDARY_LOCAL_INFO); - - - brm = mdhimPut(md, &key, sizeof(key), &value, sizeof(value), NULL, secondary_info); - - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - // Release the received message - mdhim_full_release_msg(brm); - - // Insert a new key with the second secondary key - key2 = 200 * (md->mdhim_rank + 1); - brm = mdhimPut(md, &key2, sizeof(key2), &value, sizeof(value), NULL, secondary_info2); - - if (!brm || brm->error) { - printf("Secondary Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - // Release the received message - mdhim_full_release_msg(brm); - - // Insert a new key with the third secondary key - key3 = 300 * (md->mdhim_rank + 1); - brm = mdhimPut(md, &key3, sizeof(key3), &value, sizeof(value), NULL, secondary_info3); - - if (!brm || brm->error) { - printf("Secondary Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - // Release the received message - mdhim_full_release_msg(brm); - - // Commit the database - ret = mdhimCommit(md, md->primary_index); - if(ret != MDHIM_SUCCESS) { - printf("Error commiting MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - // Get the stats for the secondary index so the client figures out who to query - ret = mdhimStatFlush(md, secondary_local_index); - if(ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - // Get the stats for the secondary index so the client figures out who to query - ret = mdhimStatFlush(md, secondary_local_index2); - if(ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - // Get the stats for the secondary index so the client figures out who to query - ret = mdhimStatFlush(md, secondary_local_index3); - if(ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - secondary_local_index_by_name = NULL; - - MPI_Barrier(MPI_COMM_WORLD); - - printf("[RANK %d] - Attempting to get secondary_local_index '%s'\n", md->mdhim_rank, secondary_local_index->name); - secondary_local_index_by_name = get_index_by_name(md,secondary_local_index->name); - if(secondary_local_index_by_name && strcmp(secondary_local_index_by_name->name,secondary_local_index->name)==0) { - printf("[RANK %d] - Found secondary_local_index %s\n",md->mdhim_rank, secondary_local_index_by_name->name); - } else { - printf("[RANK %d] - Error finding secondary_local_index by name '%s'\n", md->mdhim_rank, secondary_local_index->name); - } - - // Get the primary key values from the secondary local key - value = 0; - bgrm = mdhimGet(md, secondary_local_index, - &secondary_keys[0][0], - secondary_key_lens[0], - MDHIM_GET_PRIMARY_EQ); - - if(!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - }else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - - printf("[RANK %d] - Attempting to get secondary_local_index '%s'\n", md->mdhim_rank, secondary_local_index2->name); - secondary_local_index_by_name = get_index_by_name(md,secondary_local_index2->name); - if(secondary_local_index_by_name && strcmp(secondary_local_index_by_name->name,secondary_local_index2->name)==0) { - printf("[RANK %d] - Found secondary_local_index %s\n",md->mdhim_rank, secondary_local_index_by_name->name); - } else { - printf("[RANK %d] - Error finding secondary_local_index by name '%s'\n", md->mdhim_rank, secondary_local_index2->name); - } - - // Get the primary key values from the secondary local key - value = 0; - bgrm = mdhimGet(md, secondary_local_index, - &secondary_keys[0][0], - secondary_key_lens[0], - MDHIM_GET_PRIMARY_EQ); - - if(!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - }else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - - printf("[RANK %d] - Attempting to get secondary_local_index '%s'\n", md->mdhim_rank, secondary_local_index3->name); - secondary_local_index_by_name = get_index_by_name(md,secondary_local_index3->name); - - if(secondary_local_index_by_name && strcmp(secondary_local_index_by_name->name,secondary_local_index3->name)==0) { - printf("[RANK %d] - Found secondary_local_index %s\n",md->mdhim_rank, secondary_local_index_by_name->name); - } else { - printf("[RANK %d] - Error finding secondary_local_index by name '%s'\n", md->mdhim_rank, secondary_local_index3->name); - } - - // Get the primary key values from the secondary local key - value = 0; - bgrm = mdhimGet(md, secondary_local_index, - &secondary_keys[0][0], - secondary_key_lens[0], - MDHIM_GET_PRIMARY_EQ); - - if(!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - }else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - - - ret = mdhimClose(md); - free(secondary_keys[0]); - free(secondary_keys); - free(secondary_key_lens); - free(secondary_keys2[0]); - free(secondary_keys2); - free(secondary_key_lens2); - free(secondary_keys3[0]); - free(secondary_keys3); - free(secondary_key_lens3); - mdhim_options_destroy(db_opts); - mdhimReleaseSecondaryInfo(secondary_info); - mdhimReleaseSecondaryInfo(secondary_info2); - mdhimReleaseSecondaryInfo(secondary_info3); - - if(ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/mdhim_manifest_1_0_1 b/meta/tests/single_tests/mdhim_manifest_1_0_1 deleted file mode 100644 index 6d83f083f7f78cf30996f3ee0de41938cfe770af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56 ocmZQ%fB=W2s12*M7#J3mLuf{zFbK0i -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define KEYS 1000000 -//#define TOTAL_KEYS 2083334 -#define TOTAL_KEYS 1000000 -#define SLICE_SIZE 1000000 - -uint64_t **keys; -int *key_lens; -uint64_t **values; -int *value_lens; - -void start_record(struct timeval *start) { - gettimeofday(start, NULL); -} - -void end_record(struct timeval *end) { - gettimeofday(end, NULL); -} - -void add_time(struct timeval *start, struct timeval *end, long double *time) { - long double elapsed = (long double) (end->tv_sec - start->tv_sec) + - ((long double) (end->tv_usec - start->tv_usec)/1000000.0); - *time += elapsed; -} - -void gen_keys_values(int rank, int total_keys) { - int i = 0; - for (i = 0; i < KEYS; i++) { - keys[i] = malloc(sizeof(uint64_t)); - *keys[i] = i + (uint64_t) ((uint64_t) rank * (uint64_t)TOTAL_KEYS) + total_keys; - key_lens[i] = sizeof(uint64_t); - values[i] = malloc(sizeof(int)); - *values[i] = 1; - value_lens[i] = sizeof(int); - } -} - -void free_key_values() { - int i; - - for (i = 0; i < KEYS; i++) { - free(keys[i]); - free(values[i]); - } -} - -int main(int argc, char **argv) { - int ret; - int provided; - int i; - struct mdhim_t *md; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm; - struct timeval start_tv, end_tv; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_CRIT; //MLOG_CRIT=1, MLOG_DBG=2 - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; // (data_store.h) - int size; - long double flush_time = 0; - long double put_time = 0; - long double get_time = 0; - int total_keys = 0; - int round = 0; - char *paths[] = {"/tmp/"}; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_paths(db_opts, paths, 1); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_LONG_INT_KEY); - mdhim_options_set_max_recs_per_slice(db_opts, SLICE_SIZE); - mdhim_options_set_server_factor(db_opts, 1); - mdhim_options_set_debug_level(db_opts, dbug); - - //Initialize MPI with multiple thread support - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - //Quit if MPI didn't initialize with multiple threads - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - //Initialize MDHIM - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - key_lens = malloc(sizeof(uint64_t) * KEYS); - value_lens = malloc(sizeof(int) * KEYS); - keys = malloc(sizeof(uint64_t *) * KEYS); - values = malloc(sizeof(int *) * KEYS); - MPI_Comm_size(md->mdhim_comm, &size); - MPI_Barrier(MPI_COMM_WORLD); - //record the start time - start_record(&start_tv); - while (total_keys != TOTAL_KEYS) { - //Populate the keys and values to insert - gen_keys_values(md->mdhim_rank, total_keys); - //Insert the keys into MDHIM - brm = mdhimBPut(md, md->primary_index, (void **) keys, key_lens, - (void **) values, value_lens, KEYS); - // MPI_Barrier(MPI_COMM_WORLD); - - //Iterate through the return messages to see if there is an error and to free it - brmp = brm; - if (!brmp || brmp->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brm = brmp; - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - - } - - free_key_values(); - total_keys += KEYS; - round++; - } - - //Record the end time - end_record(&end_tv); - //Add the final time - add_time(&start_tv, &end_tv, &put_time); - MPI_Barrier(MPI_COMM_WORLD); - //Get the stats - start_record(&start_tv); - ret = mdhimStatFlush(md, md->primary_index); - // MPI_Barrier(MPI_COMM_WORLD); - end_record(&end_tv); - add_time(&start_tv, &end_tv, &flush_time); - - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats from MDHIM database\n"); - } else { -// printf("Got stats\n"); - } - - total_keys = 0; - while (total_keys != TOTAL_KEYS) { - //Populate the keys and values we expect to retrieve - gen_keys_values(md->mdhim_rank, total_keys); - start_record(&start_tv); - //Get the keys and values back starting from and including key[0] - bgrm = mdhimBGetOp(md, md->primary_index, keys[0], sizeof(uint64_t), - KEYS, MDHIM_GET_NEXT); - // MPI_Barrier(MPI_COMM_WORLD); - end_record(&end_tv); - add_time(&start_tv, &end_tv, &get_time); - //Check if there is an error - if (!bgrm || bgrm->error) { - printf("Rank: %d - Error retrieving values starting at: %llu", - md->mdhim_rank, (long long unsigned int) *keys[0]); - goto done; - } - - //Validate that the data retrieved is the correct data - for (i = 0; i < bgrm->num_keys && !bgrm->error; i++) { - assert(*(uint64_t *)bgrm->keys[i] == *keys[i]); - assert(*(int *)bgrm->values[i] == *values[i]); - } - - //Free the message received - mdhim_full_release_msg(bgrm); - free_key_values(); - total_keys += KEYS; - round++; - } - - free(key_lens); - free(keys); - free(values); - free(value_lens); -done: - MPI_Barrier(MPI_COMM_WORLD); - //Quit MDHIM - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - gettimeofday(&end_tv, NULL); - - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - printf("Took: %Lf seconds to put %d keys\n", - put_time, TOTAL_KEYS); - printf("Took: %Lf seconds to get %d keys/values\n", - get_time, TOTAL_KEYS); - printf("Took: %Lf seconds to stat flush\n", - flush_time); - - return 0; -} diff --git a/meta/tests/single_tests/plfs-put-get.c b/meta/tests/single_tests/plfs-put-get.c deleted file mode 100644 index d32d76465..000000000 --- a/meta/tests/single_tests/plfs-put-get.c +++ /dev/null @@ -1,165 +0,0 @@ -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -#define SLICE_SIZE 1 - -struct plfs_record { - unsigned long long int logical_offset; - unsigned long long int size; - char dropping_file[PATH_MAX]; - unsigned long long int physical_offset; -}; - -FILE *open_output(int rank) { - FILE *file; - char rank_str[4]; - char file_str[4]; - char char_str[2]; - int i, j; - char filename[PATH_MAX]; - - //Opens the file and coverts the rank to characters - sprintf(rank_str, "%d", rank); - memset(file_str, 0, 4); - memset(file_str, 'a', 3); - j = strlen(file_str) - 1; - for (i = strlen(rank_str) - 1; i >= 0; i--) { - sprintf(char_str, "%c", rank_str[i]); - file_str[j] = strtol(char_str, NULL, 10) + 'a'; - j--; - } - - sprintf(filename, "plfs-output/plfs%s", file_str); - printf("file string is: %s\n", filename); - file = fopen(filename, "r"); - if (!file) { - printf("Error opening the input file"); - } - - return file; -} - -struct plfs_record *parse_input(FILE *file) { - struct plfs_record *rec; - int ret; - - rec = malloc(sizeof(struct plfs_record)); - ret = fscanf(file, "%llu %llu %s %llu", &rec->logical_offset, &rec->size, - rec->dropping_file, &rec->physical_offset); - if (!ret || ret == EOF) { - printf("Error parsing file\n"); - exit(1); - } - - printf("Parsed record with logical_offset: %llu, size: %llu, dropping_file: %s," - " physical_offset: %llu\n", - rec->logical_offset, rec->size, - rec->dropping_file, rec->physical_offset); - - return rec; -} - -long long get_key(unsigned long long int lo) { - unsigned long long int ret = ((unsigned long long int) lo/SLICE_SIZE) * SLICE_SIZE; - return ret; -} - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - struct plfs_record *rec = NULL; - FILE *file; - unsigned long long int key; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - //Set MDHIM options - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimTstDB"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_LONG_INT_KEY); - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - mdhim_options_set_max_recs_per_slice(db_opts, SLICE_SIZE); - mdhim_options_set_server_factor(db_opts, 10); - mdhim_options_set_value_append(db_opts, 1); - - //Initialize MDHIM - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - file = open_output(md->mdhim_rank); - if (!file) { - printf("Error opening file\n"); - goto done; - } - - rec = parse_input(file); - if (!rec) { - printf("Error parsing file\n"); - goto done; - } - key = get_key(rec->logical_offset); - printf("Inserting key: %llu\n", key); - brm = mdhimPut(md, &key, sizeof(key), - rec, sizeof(struct plfs_record), NULL, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - mdhim_full_release_msg(brm); - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - bgrm = mdhimGet(md, md->primary_index, &key, sizeof(key), - MDHIM_GET_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %llu from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - -done: - ret = mdhimClose(md); - free(rec); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-del.c b/meta/tests/single_tests/put-del.c deleted file mode 100644 index 8ff546abf..000000000 --- a/meta/tests/single_tests/put-del.c +++ /dev/null @@ -1,83 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - int key; - int value; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - char *db_path = "./"; - char *db_name = "mdhimTstDB"; - int dbug = MLOG_CRIT; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; // (data_store.h) - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); - mdhim_options_set_debug_level(db_opts, dbug); - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the keys and values - key = 20 * (md->mdhim_rank + 1); - value = 1000 * (md->mdhim_rank + 1); - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), - NULL, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - brm = mdhimDelete(md, md->primary_index, &key, sizeof(key)); - if (!brm || brm->error) { - printf("Error deleting key/value from MDHIM\n"); - } else { - printf("Successfully deleted key/value into MDHIM\n"); - } - - //Get the values - value = 0; - bgrm = mdhimGet(md, md->primary_index, &key, sizeof(key), MDHIM_GET_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - ret = mdhimClose(md); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-del_secondary.c b/meta/tests/single_tests/put-del_secondary.c deleted file mode 100644 index 781a8b078..000000000 --- a/meta/tests/single_tests/put-del_secondary.c +++ /dev/null @@ -1,115 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -#define SLICE_SIZE 100 -#define SECONDARY_SLICE_SIZE 5 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, **secondary_keys; - int value, *secondary_key_lens; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - struct index_t *secondary_index; - struct secondary_info *secondary_info; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimTstDB"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); //Key_type = 1 (int) - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the primary keys and secondary keys - key = 100 * (md->mdhim_rank + 1); - value = 500 * (md->mdhim_rank + 1); - secondary_keys = malloc(sizeof(uint32_t *)); - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + 1; - secondary_key_lens = malloc(sizeof(int)); - secondary_key_lens[0] = sizeof(uint32_t); - //Create a secondary index - secondary_index = create_global_index(md, 2, - SECONDARY_SLICE_SIZE, LEVELDB, - MDHIM_INT_KEY, NULL); - secondary_info = mdhimCreateSecondaryInfo(secondary_index, - (void **) secondary_keys, - secondary_key_lens, 1, - SECONDARY_GLOBAL_INFO); - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), - secondary_info, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - //Release the received message - mdhim_full_release_msg(brm); - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - brm = mdhimDelete(md, secondary_index, secondary_keys[0], secondary_key_lens[0]); - if (!brm || brm->error) { - printf("Error deleting key/value from MDHIM\n"); - } else { - printf("Successfully deleted key/value into MDHIM\n"); - } - - //Get the primary key values from the secondary key - this should fail - value = 0; - bgrm = mdhimGet(md, secondary_index, secondary_keys[0], secondary_key_lens[0], - MDHIM_GET_PRIMARY_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - free(secondary_keys[0]); - free(secondary_keys); - free(secondary_key_lens); - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-del_secondary_local.c b/meta/tests/single_tests/put-del_secondary_local.c deleted file mode 100644 index 1b12d4416..000000000 --- a/meta/tests/single_tests/put-del_secondary_local.c +++ /dev/null @@ -1,118 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -#define SLICE_SIZE 100 -#define SECONDARY_SLICE_SIZE 5 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, **secondary_keys; - int value, *secondary_key_lens; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - struct index_t *secondary_local_index; - struct secondary_info *secondary_local_info; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimTstDB"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); //Key_type = 1 (int) - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the primary keys and secondary keys - key = 100 * (md->mdhim_rank + 1); - value = 500 * (md->mdhim_rank + 1); - - //Create a secondary index - secondary_local_index = create_local_index(md, MDHIM_INT_KEY, - md->primary_index->id, NULL); - secondary_keys = malloc(sizeof(uint32_t *)); - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + 1; - secondary_key_lens = malloc(sizeof(int)); - secondary_key_lens[0] = sizeof(uint32_t); - secondary_local_info = mdhimCreateSecondaryInfo(secondary_local_index, - (void **) secondary_keys, - secondary_key_lens, 1, - SECONDARY_LOCAL_INFO); - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), - NULL, secondary_local_info); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - //Release the received message - mdhim_full_release_msg(brm); - mdhimReleaseSecondaryInfo(secondary_local_info); - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - brm = mdhimDelete(md, secondary_local_index, secondary_keys[0], - secondary_key_lens[0]); - if (!brm || brm->error) { - printf("Error deleting key/value from MDHIM\n"); - } else { - printf("Successfully deleted key/value into MDHIM\n"); - } - - //Get the primary key values from the secondary key - this should fail - value = 0; - bgrm = mdhimGet(md, secondary_local_index, - secondary_keys[0], secondary_key_lens[0], - MDHIM_GET_PRIMARY_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - free(secondary_keys[0]); - free(secondary_keys); - free(secondary_key_lens); - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-get.c b/meta/tests/single_tests/put-get.c deleted file mode 100644 index d3c9bc390..000000000 --- a/meta/tests/single_tests/put-get.c +++ /dev/null @@ -1,85 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - int key; - int value; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhim"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); //Key_type = 1 (int) - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - mdhim_options_set_server_factor(db_opts, 1); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the keys and values - key = 100 * (md->mdhim_rank + 1); - value = 500 * (md->mdhim_rank + 1); - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), - NULL, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - mdhim_full_release_msg(brm); - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the values - value = 0; - bgrm = mdhimGet(md, md->primary_index, &key, sizeof(key), MDHIM_GET_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-get_2secondary.c b/meta/tests/single_tests/put-get_2secondary.c deleted file mode 100644 index a843dff17..000000000 --- a/meta/tests/single_tests/put-get_2secondary.c +++ /dev/null @@ -1,111 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -#define SLICE_SIZE 100 -#define SECONDARY_SLICE_SIZE 5 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, secondary_key; - int value; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - struct index_t *secondary_local_index; - struct secondary_info *secondary_info; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimTstDB"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); //Key_type = 1 (int) - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the primary keys and values - key = 100 * (md->mdhim_rank + 1); - value = 500 * (md->mdhim_rank + 1); - - //Create a secondary index on only one range server - secondary_local_index = create_local_index(md, LEVELDB, - MDHIM_INT_KEY); - secondary_info = mdhimCreateSecondaryInfo(NULL, NULL, 0, - secondary_local_index, &secondary_key, - sizeof(secondary_key)); - secondary_info2 = mdhimCreateSecondaryInfo(NULL, NULL, 0, - secondary_local_index, &secondary_key2, - sizeof(secondary_key2)); - secondary_key = md->mdhim_rank + 1; - brm = mdhimPut(md, - &key, sizeof(key), - &value, sizeof(value), secondary_info); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - //Release the received message - mdhim_full_release_msg(brm); - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats for the secondary index so the client figures out who to query - ret = mdhimStatFlush(md, secondary_local_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the primary key values from the secondary local key - value = 0; - bgrm = mdhimGet(md, secondary_local_index, &secondary_key, sizeof(secondary_key), - MDHIM_GET_PRIMARY_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-get_2secondary_local.c b/meta/tests/single_tests/put-get_2secondary_local.c deleted file mode 100644 index 6ecb7b52c..000000000 --- a/meta/tests/single_tests/put-get_2secondary_local.c +++ /dev/null @@ -1,173 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -#define SLICE_SIZE 100 -#define SECONDARY_SLICE_SIZE 5 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, key2, **secondary_keys, **secondary_keys2; - int value, *secondary_key_lens, *secondary_key_lens2; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - struct index_t *secondary_local_index, *secondary_local_index2; - struct secondary_info *secondary_info, *secondary_info2; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimTstDB"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); //Key_type = 1 (int) - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the primary keys and values - key = 100 * (md->mdhim_rank + 1); - value = 500 * (md->mdhim_rank + 1); - - secondary_keys = malloc(sizeof(uint32_t *)); - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + 1; - secondary_key_lens = malloc(sizeof(int)); - secondary_key_lens[0] = sizeof(uint32_t); - - secondary_keys2 = malloc(sizeof(uint32_t *)); - secondary_keys2[0] = malloc(sizeof(uint32_t)); - *secondary_keys2[0] = md->mdhim_rank + 1; - secondary_key_lens2 = malloc(sizeof(int)); - secondary_key_lens2[0] = sizeof(uint32_t); - - //Create a secondary index on only one range server - secondary_local_index = create_local_index(md, LEVELDB, - MDHIM_INT_KEY, NULL); - secondary_local_index2 = create_local_index(md, LEVELDB, - MDHIM_INT_KEY, NULL); - secondary_info = mdhimCreateSecondaryInfo(secondary_local_index, - (void **) secondary_keys, - secondary_key_lens, 1, - SECONDARY_LOCAL_INFO); - secondary_info2 = mdhimCreateSecondaryInfo(secondary_local_index2, - (void **) secondary_keys2, - secondary_key_lens2, 1, - SECONDARY_LOCAL_INFO); - brm = mdhimPut(md, - &key, sizeof(key), - &value, sizeof(value), - NULL, secondary_info); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - //Release the received message - mdhim_full_release_msg(brm); - - //Insert a new key with the second secondary key - key2 = 200 * (md->mdhim_rank + 1); - brm = mdhimPut(md, - &key2, sizeof(key2), - &value, sizeof(value), - NULL, secondary_info2); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - //Release the received message - mdhim_full_release_msg(brm); - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats for the secondary index so the client figures out who to query - ret = mdhimStatFlush(md, secondary_local_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - //Get the stats for the secondary index so the client figures out who to query - ret = mdhimStatFlush(md, secondary_local_index2); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the primary key values from the secondary local key - value = 0; - bgrm = mdhimGet(md, secondary_local_index, - secondary_keys[0], - secondary_key_lens[0], - MDHIM_GET_PRIMARY_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - - //Get the primary key values from the secondary local key - value = 0; - bgrm = mdhimGet(md, secondary_local_index2, secondary_keys2[0], - secondary_key_lens2[0], - MDHIM_GET_PRIMARY_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - - ret = mdhimClose(md); - free(secondary_keys[0]); - free(secondary_keys); - free(secondary_key_lens); - free(secondary_keys2[0]); - free(secondary_keys2); - free(secondary_key_lens2); - mdhim_options_destroy(db_opts); - mdhimReleaseSecondaryInfo(secondary_info); - mdhimReleaseSecondaryInfo(secondary_info2); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-get_secondary.c b/meta/tests/single_tests/put-get_secondary.c deleted file mode 100644 index ef27c2027..000000000 --- a/meta/tests/single_tests/put-get_secondary.c +++ /dev/null @@ -1,134 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -#define SLICE_SIZE 100 -#define SECONDARY_SLICE_SIZE 5 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, **secondary_keys; - uint32_t skey; - int value, *secondary_key_lens; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - struct index_t *secondary_index; - struct secondary_info *secondary_info; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimTstDB"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); //Key_type = 1 (int) - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Set the primary keys and values - key = 100 * (md->mdhim_rank + 1); - value = 500 * (md->mdhim_rank + 1); - //Set the secondary keys and values - secondary_keys = malloc(sizeof(uint32_t *)); - - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + 1; - secondary_key_lens = malloc(sizeof(int)); - secondary_key_lens[0] = sizeof(uint32_t); - - //Create the secondary remote index - secondary_index = create_global_index(md, 2, SECONDARY_SLICE_SIZE, LEVELDB, - MDHIM_INT_KEY, NULL); - //Create the secondary info struct - secondary_info = mdhimCreateSecondaryInfo(secondary_index, - (void **) secondary_keys, - secondary_key_lens, - 1, SECONDARY_GLOBAL_INFO); - //Put the primary and secondary keys - brm = mdhimPut(md, - &key, sizeof(key), - &value, sizeof(value), - secondary_info, - NULL); - - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - mdhim_full_release_msg(brm); - - //Put another secondary key - skey = 2 * (md->mdhim_rank + 1); - brm = mdhimPutSecondary(md, - secondary_index, - /*Secondary key */ - &skey, sizeof(skey), - /* Primary key */ - &key, sizeof(key)); - - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - //Release the received message - mdhim_full_release_msg(brm); - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the primary key values from the secondary key - value = 0; - - bgrm = mdhimGet(md, secondary_index, - secondary_keys[0], secondary_key_lens[0], - MDHIM_GET_PRIMARY_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - free(secondary_keys[0]); - free(secondary_keys); - free(secondary_key_lens); - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-get_secondary_local.c b/meta/tests/single_tests/put-get_secondary_local.c deleted file mode 100644 index be01f2f29..000000000 --- a/meta/tests/single_tests/put-get_secondary_local.c +++ /dev/null @@ -1,123 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -#define SLICE_SIZE 100 -#define SECONDARY_SLICE_SIZE 5 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, **secondary_keys; - int value, *secondary_key_lens; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - struct index_t *secondary_local_index; - struct secondary_info *secondary_info; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimTstDB"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); //Key_type = 1 (int) - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the primary keys and values - key = 100 * (md->mdhim_rank + 1); - value = 500 * (md->mdhim_rank + 1); - - //Create a secondary index on only one range server - secondary_local_index = create_local_index(md, LEVELDB, - MDHIM_INT_KEY, NULL); - secondary_keys = malloc(sizeof(uint32_t *)); - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + 1; - secondary_keys[1] = malloc(sizeof(uint32_t)); - *secondary_keys[1] = md->mdhim_rank + 2; - secondary_key_lens = malloc(sizeof(int) * 2); - secondary_key_lens[0] = sizeof(uint32_t); - secondary_key_lens[1] = sizeof(uint32_t); - secondary_info = mdhimCreateSecondaryInfo(secondary_local_index, - (void **) secondary_keys, - secondary_key_lens, 2, - SECONDARY_LOCAL_INFO); - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), - NULL, secondary_info); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - //Release the received message - mdhim_full_release_msg(brm); - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats for the secondary index so the client figures out who to query - ret = mdhimStatFlush(md, secondary_local_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the primary key values from the secondary local key - value = 0; - bgrm = mdhimGet(md, secondary_local_index, - &secondary_keys[0][0], - secondary_key_lens[0], - MDHIM_GET_PRIMARY_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->value_lens[0]) { - printf("Successfully got value: %d from MDHIM\n", *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - mdhimReleaseSecondaryInfo(secondary_info); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - free(secondary_keys[0]); - free(secondary_keys[1]); - free(secondary_keys); - free(secondary_key_lens); - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-getn.c b/meta/tests/single_tests/put-getn.c deleted file mode 100644 index a66f83c0f..000000000 --- a/meta/tests/single_tests/put-getn.c +++ /dev/null @@ -1,117 +0,0 @@ -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - int key; - int value; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - int i; - int keys_per_rank = 100; - char *db_path = "./"; - char *db_name = "mdhimTstDB"; - int dbug = MLOG_CRIT; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; //(data_store.h) - struct timeval start_tv, end_tv; - unsigned totaltime; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); - mdhim_options_set_debug_level(db_opts, dbug); - gettimeofday(&start_tv, NULL); - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the keys and values - for (i = 0; i < keys_per_rank; i++) { - key = keys_per_rank * md->mdhim_rank + i; - value = md->mdhim_rank + i; - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), - NULL, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Rank: %d put key: %d with value: %d\n", md->mdhim_rank, key, value); - } - - mdhim_full_release_msg(brm); - } - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats - ret = mdhimStatFlush(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the values using get_next - for (i = 0; i < keys_per_rank; i++) { - value = 0; - key = keys_per_rank * md->mdhim_rank + i - 1; - bgrm = mdhimBGetOp(md, md->primary_index, - &key, sizeof(int), 1, MDHIM_GET_NEXT); - if (!bgrm || bgrm->error) { - printf("Rank: %d, Error getting next key/value given key: %d from MDHIM\n", - md->mdhim_rank, key); - } else if (bgrm->keys[0] && bgrm->values[0]) { - printf("Rank: %d successfully got key: %d with value: %d from MDHIM\n", - md->mdhim_rank, - *((int *) bgrm->keys[0]), - *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - } - - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - gettimeofday(&end_tv, NULL); - totaltime = end_tv.tv_sec - start_tv.tv_sec; - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - printf("Took %u seconds to insert and retrieve %d keys/values\n", totaltime, - keys_per_rank); - - return 0; -} diff --git a/meta/tests/single_tests/put-getn_secondary.c b/meta/tests/single_tests/put-getn_secondary.c deleted file mode 100644 index a83b5aae6..000000000 --- a/meta/tests/single_tests/put-getn_secondary.c +++ /dev/null @@ -1,150 +0,0 @@ -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define SECONDARY_SLICE_SIZE 6 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, **secondary_keys; - int value, *secondary_key_lens; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - int i; - int keys_per_rank = 100; - char *db_path = "./"; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_DBG; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; //(data_store.h) - struct timeval start_tv, end_tv; - unsigned totaltime; - struct index_t *secondary_index; - struct secondary_info *secondary_info; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); - mdhim_options_set_debug_level(db_opts, dbug); - - gettimeofday(&start_tv, NULL); - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Create the secondary remote index - secondary_index = create_global_index(md, 2, SECONDARY_SLICE_SIZE, LEVELDB, - MDHIM_INT_KEY, NULL); - //Put the primary keys and values - for (i = 0; i < keys_per_rank; i++) { - key = keys_per_rank * md->mdhim_rank + i; - value = md->mdhim_rank + i; - //Create the secondary info struct - secondary_keys = malloc(sizeof(uint32_t *)); - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + i; - secondary_key_lens = malloc(sizeof(int)); - secondary_key_lens[0] = sizeof(uint32_t); - - secondary_info = mdhimCreateSecondaryInfo(secondary_index, - (void **) secondary_keys, - secondary_key_lens, - 1, SECONDARY_GLOBAL_INFO); - brm = mdhimPut(md, - &key, sizeof(key), - &value, sizeof(value), - secondary_info, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Rank: %d put secondary key: %u with value: %d\n", md->mdhim_rank, - *secondary_keys[0], key); - } - - mdhimReleaseSecondaryInfo(secondary_info); - mdhim_full_release_msg(brm); - free(secondary_keys[0]); - free(secondary_keys); - free(secondary_key_lens); - } - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats for the primary index - ret = mdhimStatFlush(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the stats for the secondary index - ret = mdhimStatFlush(md, secondary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the secondary keys and values using get_next - for (i = 1; i < keys_per_rank; i++) { - value = 0; - key = md->mdhim_rank + i - 1; - bgrm = mdhimBGetOp(md, secondary_index, - &key, sizeof(uint32_t), 1, MDHIM_GET_NEXT); - if (!bgrm || bgrm->error) { - printf("Rank: %d, Error getting next key/value given key: %d from MDHIM\n", - md->mdhim_rank, key); - } else if (bgrm->keys && bgrm->values) { - printf("Rank: %d successfully got key: %d with value: %d from MDHIM\n", - md->mdhim_rank, - *((int *) bgrm->keys[0]), - *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - } - - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - gettimeofday(&end_tv, NULL); - totaltime = end_tv.tv_sec - start_tv.tv_sec; - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - printf("Took %u seconds to insert and retrieve %d keys/values\n", totaltime, - keys_per_rank); - - return 0; -} diff --git a/meta/tests/single_tests/put-getn_secondary_local.c b/meta/tests/single_tests/put-getn_secondary_local.c deleted file mode 100644 index 5277c493c..000000000 --- a/meta/tests/single_tests/put-getn_secondary_local.c +++ /dev/null @@ -1,158 +0,0 @@ -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define SLICE_SIZE 10 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, **secondary_keys; - int value, *secondary_key_lens; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm, *bgrmp; - int i; - int keys_per_rank = 100; - char *db_path = "./"; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_DBG; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; //(data_store.h) - struct timeval start_tv, end_tv; - unsigned totaltime; - struct index_t *secondary_local_index; - struct secondary_info *secondary_info; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); - mdhim_options_set_debug_level(db_opts, dbug); - mdhim_options_set_max_recs_per_slice(db_opts, SLICE_SIZE); - mdhim_options_set_server_factor(db_opts, 4); - - gettimeofday(&start_tv, NULL); - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - - //Create a secondary index on only one range server - secondary_local_index = create_local_index(md, LEVELDB, - MDHIM_INT_KEY, NULL); - //Put the keys and values - for (i = 0; i < keys_per_rank; i++) { - key = keys_per_rank * md->mdhim_rank + i; - value = md->mdhim_rank + i; - //Create the secondary info struct - secondary_keys = malloc(sizeof(uint32_t *)); - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + i + 1; - secondary_key_lens = malloc(sizeof(int)); - secondary_key_lens[0] = sizeof(uint32_t); - secondary_info = mdhimCreateSecondaryInfo(secondary_local_index, - (void **) secondary_keys, - secondary_key_lens, 1, - SECONDARY_LOCAL_INFO); - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), NULL, - secondary_info); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Rank: %d put secondary key: %d with value: %d\n", md->mdhim_rank, - *secondary_keys[0], key); - } - - mdhim_full_release_msg(brm); - mdhimReleaseSecondaryInfo(secondary_info); - free(secondary_keys[0]); - free(secondary_keys); - free(secondary_key_lens); - } - - - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats - ret = mdhimStatFlush(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the stats for the secondary index - ret = mdhimStatFlush(md, secondary_local_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the values using get_next - for (i = 0; i < keys_per_rank; i++) { - value = 0; - key = md->mdhim_rank + i; - bgrm = mdhimBGetOp(md, secondary_local_index, - &key, sizeof(uint32_t), 1, - MDHIM_GET_NEXT); - while (bgrm) { - if (!bgrm || bgrm->error) { - printf("Rank: %d, Error getting next key/value given key: %d from MDHIM\n", - md->mdhim_rank, key); - } else if (bgrm->keys[0] && bgrm->values[0]) { - printf("Rank: %d successfully got key: %d with value: %d from MDHIM\n", - md->mdhim_rank, - *((int *) bgrm->keys[0]), - *((int *) bgrm->values[0])); - } - - bgrmp = bgrm; - bgrm = bgrm->next; - mdhim_full_release_msg(bgrmp); - } - } - - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - gettimeofday(&end_tv, NULL); - totaltime = end_tv.tv_sec - start_tv.tv_sec; - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - printf("Took %u seconds to insert and retrieve %d keys/values\n", totaltime, - keys_per_rank); - - return 0; -} diff --git a/meta/tests/single_tests/put-getp.c b/meta/tests/single_tests/put-getp.c deleted file mode 100644 index 62ca4fcb5..000000000 --- a/meta/tests/single_tests/put-getp.c +++ /dev/null @@ -1,104 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - int key; - int value; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - int i; - int keys_per_rank = 5; - char *db_path = " "; - char *db_name = "mdhim"; - int dbug = MLOG_CRIT; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; // (data_store.h) - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); - mdhim_options_set_debug_level(db_opts, dbug); - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the keys and values - for (i = 0; i < keys_per_rank; i++) { - key = keys_per_rank * md->mdhim_rank + i; - value = md->mdhim_rank + i; - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), - NULL, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Rank: %d put key: %d with value: %d\n", md->mdhim_rank, key, value); - } - } - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats - ret = mdhimStatFlush(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the values using get_prev - for (i = keys_per_rank; i > 0; i--) { - value = 0; - key = keys_per_rank * md->mdhim_rank + i; - bgrm = mdhimBGetOp(md, md->primary_index, - &key, sizeof(int), 1, MDHIM_GET_PREV); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %d from MDHIM\n", key); - } else if (bgrm->keys[0] && bgrm->values[0]) { - printf("Rank: %d successfully got key: %d with value: %d from MDHIM\n", - md->mdhim_rank, - *((int *) bgrm->keys[0]), - *((int *) bgrm->values[0])); - } - } - - ret = mdhimClose(md); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/put-getp_secondary.c b/meta/tests/single_tests/put-getp_secondary.c deleted file mode 100644 index d91b5ca89..000000000 --- a/meta/tests/single_tests/put-getp_secondary.c +++ /dev/null @@ -1,150 +0,0 @@ -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define SECONDARY_SLICE_SIZE 5 - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - uint32_t key, **secondary_keys; - int value, *secondary_key_lens; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - int i; - int keys_per_rank = 100; - char *db_path = "./"; - char *db_name = "mdhimTstDB-"; - int dbug = MLOG_CRIT; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - int db_type = LEVELDB; //(data_store.h) - struct timeval start_tv, end_tv; - unsigned totaltime; - struct index_t *secondary_index; - struct secondary_info *secondary_info; - MPI_Comm comm; - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, MDHIM_INT_KEY); - mdhim_options_set_debug_level(db_opts, dbug); - - gettimeofday(&start_tv, NULL); - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Create a secondary index - secondary_index = create_global_index(md, 2, SECONDARY_SLICE_SIZE, LEVELDB, - MDHIM_INT_KEY, NULL); - - //Put the keys and values - for (i = 0; i < keys_per_rank; i++) { - key = keys_per_rank * md->mdhim_rank + i; - value = md->mdhim_rank + i; - secondary_keys = malloc(sizeof(uint32_t *)); - secondary_keys[0] = malloc(sizeof(uint32_t)); - *secondary_keys[0] = md->mdhim_rank + i + 1; - secondary_key_lens = malloc(sizeof(int)); - secondary_key_lens[0] = sizeof(uint32_t); - secondary_info = mdhimCreateSecondaryInfo(secondary_index, (void **) secondary_keys, - secondary_key_lens, 1, - SECONDARY_GLOBAL_INFO); - brm = mdhimPut(md, &key, sizeof(key), - &value, sizeof(value), - secondary_info, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { -// printf("Rank: %d put key: %d with value: %d\n", md->mdhim_rank, key, value); - } - - mdhimReleaseSecondaryInfo(secondary_info); - mdhim_full_release_msg(brm); - free(secondary_keys[0]); - free(secondary_keys); - free(secondary_key_lens); - } - - MPI_Barrier(MPI_COMM_WORLD); - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the stats for the primary index - ret = mdhimStatFlush(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - //Get the stats for the secondary index - ret = mdhimStatFlush(md, secondary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats\n"); - } else { - printf("Got stats\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - - //Get the secondary keys and values using get_prev - for (i = keys_per_rank; i > 0; i--) { - value = 0; - key = md->mdhim_rank + i + 2; - bgrm = mdhimBGetOp(md, secondary_index, - &key, sizeof(int), 1, MDHIM_GET_PREV); - if (!bgrm || bgrm->error) { - printf("Rank: %d, Error getting prev key/value given key: %d from MDHIM\n", - md->mdhim_rank, key); - } else if (bgrm->keys[0] && bgrm->values[0]) { - printf("Rank: %d successfully got key: %d with value: %d from MDHIM\n", - md->mdhim_rank, - *((int *) bgrm->keys[0]), - *((int *) bgrm->values[0])); - } - - mdhim_full_release_msg(bgrm); - } - - ret = mdhimClose(md); - mdhim_options_destroy(db_opts); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - gettimeofday(&end_tv, NULL); - totaltime = end_tv.tv_sec - start_tv.tv_sec; - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - printf("Took %u seconds to insert and retrieve %d keys/values\n", totaltime, - keys_per_rank); - - return 0; -} diff --git a/meta/tests/single_tests/puts-gets.c b/meta/tests/single_tests/puts-gets.c deleted file mode 100644 index 3973bef0e..000000000 --- a/meta/tests/single_tests/puts-gets.c +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -int main(int argc, char **argv) { - int ret; - int provided = 0; - struct mdhim_t *md; - char *key; - int value; - struct mdhim_brm_t *brm; - struct mdhim_bgetrm_t *bgrm; - mdhim_options_t *db_opts; - int i; - MPI_Comm comm; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, "./"); - mdhim_options_set_db_name(db_opts, "mdhimTstDB"); - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_key_type(db_opts, MDHIM_STRING_KEY); - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) { - printf("Error initializing MDHIM\n"); - exit(1); - } - - //Put the keys and values - for (i = 0; i < 2; i++) { - key = malloc(100); - sprintf(key, "%c", (int) '0' + (md->mdhim_rank + 1) + i); - value = 500 * (md->mdhim_rank + 1) + i; - brm = mdhimPut(md, key, strlen(key) + 1, - &value, sizeof(value), - NULL, NULL); - if (!brm || brm->error) { - printf("Error inserting key/value into MDHIM\n"); - } else { - printf("Successfully inserted key/value into MDHIM\n"); - } - - //Commit the database - ret = mdhimCommit(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error committing MDHIM database\n"); - } else { - printf("Committed MDHIM database\n"); - } - - //Get the values - value = 0; - bgrm = mdhimGet(md, md->primary_index, - key, strlen(key) + 1, MDHIM_GET_EQ); - if (!bgrm || bgrm->error) { - printf("Error getting value for key: %s from MDHIM\n", key); - } else { - printf("Successfully got value: %d from MDHIM for key: %s\n", *((int *) bgrm->values[0]), key); - } - - free(key); - } - ret = mdhimClose(md); - if (ret != MDHIM_SUCCESS) { - printf("Error closing MDHIM\n"); - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return 0; -} diff --git a/meta/tests/single_tests/range_bget.c b/meta/tests/single_tests/range_bget.c deleted file mode 100644 index 73dd8c836..000000000 --- a/meta/tests/single_tests/range_bget.c +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://gihub.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define MANIFEST_FILE_NAME "mdhim_manifest_" -#define GEN_STR_LEN 1024 - -struct timeval putstart, putend; -struct timeval calstart, calend; -struct timeval putreleasestart, putreleaseend; -double puttime; -double putbw; -double putops; -double caltime; -double putreleasetime = 0; - -struct timeval getstart, getend; - -double gettime; -double getbw; -double getops; - -typedef struct { - unsigned long fid; - unsigned long nodeid; - - unsigned long offset; - unsigned long addr; - unsigned long len; -}meta_t; - -typedef struct { - unsigned long fid; - unsigned long offset; -}ulfs_key_t; - -typedef struct { - unsigned long nodeid; - unsigned long len; - unsigned long addr; -}ulfs_val_t; - -int init_meta_lst(meta_t *meta_lst, ulfs_key_t **key_lst, ulfs_val_t **value_lst, \ - long segnum, long transz, int rank, int size); -void init_get_key_lst(ulfs_key_t **get_key_lst,\ - int *get_key_lens, int *get_val_lens,\ - int key_cnt, long gettransz, int rank, int size); - -int main(int argc, char **argv) { - int c, serratio, bulknum, ret, provided, size, path_len; - - long transz, segnum, rangesz, gettransz; - - char db_path[GEN_STR_LEN] = {0}; - char db_name[GEN_STR_LEN] = {0}; - - MPI_Comm comm; - - struct mdhim_t *md; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm, *bgrmp; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - - static const char * opts = "c:t:s:r:n:p:d:g:"; - - while((c = getopt(argc, argv, opts)) != -1){ - switch (c) { - - case 'c': /*number of batched key-value pairs in each bput*/ - bulknum = atoi(optarg); break; - case 's': /*server factor same as MDHIM*/ - serratio = atoi(optarg); break; - case 't': /*transfer size*/ - transz = atol(optarg); break; - case 'g': - gettransz = atol(optarg); break; - case 'r': /*the key range for each slice*/ - rangesz = atol(optarg); break; - case 'n': /*number of transfers*/ - segnum = atol(optarg); break; - case 'p': /*path of the database*/ - strcpy(db_path, optarg); break; - case 'd': /*name of the database*/ - strcpy(db_name, optarg); break; - } - } - - printf("gettransz:%ld,transz:%ld,num:%d\n", gettransz, transz, segnum); - fflush(stdout); - - db_opts = malloc(sizeof(struct mdhim_options_t)); - - db_opts->db_path = db_path; - db_opts->db_name = "ulfsDB"; - db_opts->manifest_path = NULL; - db_opts->db_type = LEVELDB; - db_opts->db_create_new = 1; - db_opts->db_value_append = MDHIM_DB_OVERWRITE; - - db_opts->rserver_factor = serratio; - db_opts->db_paths = NULL; - db_opts->num_paths = 0; - db_opts->num_wthreads = 1; - - path_len = strlen(db_opts->db_path) + strlen(MANIFEST_FILE_NAME) + 1; - - char *manifest_path; - manifest_path = malloc(path_len); - sprintf(manifest_path, "%s/%s", db_opts->db_path, MANIFEST_FILE_NAME); - db_opts->manifest_path = manifest_path; - db_opts->db_name = db_name; - db_opts->db_type = LEVELDB; - - db_opts->db_key_type = MDHIM_UNIFYFS_KEY; - db_opts->debug_level = MLOG_CRIT; - db_opts->max_recs_per_slice = rangesz; - db_opts->rserver_factor = serratio; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - meta_t *meta_lst = (meta_t *)malloc(segnum*sizeof(meta_t)); - ulfs_key_t **key_lst = (ulfs_key_t **)malloc(segnum*sizeof(ulfs_key_t *)); - ulfs_val_t **val_lst = (ulfs_val_t **)malloc(segnum * sizeof(ulfs_val_t *)); - - int *key_lens = (int *)malloc(segnum * sizeof(int)); - int *val_lens = (int *)malloc(segnum * sizeof(int)); - - long i; - for (i = 0; i < segnum; i++) { - key_lens[i] = sizeof(ulfs_key_t); - val_lens[i] = sizeof(ulfs_val_t); - } - - int glb_size, glb_rank; - MPI_Comm_size(MPI_COMM_WORLD, &glb_size); - MPI_Comm_rank(MPI_COMM_WORLD, &glb_rank); - init_meta_lst(meta_lst, key_lst, val_lst, segnum,\ - transz, glb_rank, glb_size); - - MPI_Comm_size(md->mdhim_comm, &size); - MPI_Barrier(MPI_COMM_WORLD); - - gettimeofday(&putstart, NULL); - long total_keys = 0, round = 0; - - //Insert the keys into MDHIM - brm = mdhimBPut(md, (void **)(&key_lst[total_keys]), key_lens, - (void **) (&val_lst[total_keys]), val_lens, segnum, - NULL, NULL); - //Iterate through the return messages to see if there is an error and to free it - brmp = brm; - if (!brmp || brmp->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - - gettimeofday(&putreleasestart, NULL); - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brm = brmp; - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - - } - gettimeofday(&putreleaseend, NULL); - putreleasetime = 1000000*(putreleaseend.tv_sec-putreleasestart.tv_sec)\ - + putreleaseend.tv_usec - putreleasestart.tv_usec; - - round++; - - MPI_Barrier(MPI_COMM_WORLD); - gettimeofday(&putend, NULL); - puttime = 1000000*(putend.tv_sec - putstart.tv_sec) + putend.tv_usec -putstart.tv_usec; - puttime/=1000000; - putbw = (sizeof(ulfs_key_t)+sizeof(ulfs_val_t))*segnum*size/puttime; - putops = segnum/puttime; - gettimeofday(&calstart, NULL); - ret = mdhimStatFlush(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats from MDHIM database\n"); - } else { - } - gettimeofday(&calend, NULL); - caltime = 1000000*(calend.tv_sec-calstart.tv_sec)+calend.tv_usec-calstart.tv_usec; - caltime = caltime/1000000; - - total_keys = 0; - - ulfs_key_t **get_key_lst = (ulfs_key_t **)malloc(2 * segnum\ - * transz / gettransz * sizeof(ulfs_key_t *)); - int *get_key_lens =\ - (long *)malloc(2 * segnum * transz / gettransz * sizeof(int)); - int *get_val_lens = \ - (long *)malloc(2 * segnum * transz / gettransz * sizeof(int)); - - init_get_key_lst(get_key_lst, get_key_lens, get_val_lens,\ - segnum * transz / gettransz,\ - gettransz, glb_rank, glb_size); - - gettimeofday(&getstart, NULL); - //Get the keys and values back starting from and including key[0] - - total_keys = 0; - - bgrm = mdhimBGet(md, md->primary_index,\ - &get_key_lst[total_keys], get_key_lens, - segnum * transz / gettransz* 2, MDHIM_RANGE_BGET); - bgrmp = bgrm; - while (bgrmp) { - if (bgrmp->error < 0) { - printf("Rank: %d - Error retrieving values", md->mdhim_rank); - } - for (i = 0; i < bgrmp->num_keys; i++) { - /* printf("Rank: %d - Got key: %ld, num_keys is %ld\n", md->mdhim_rank, - ((ulfs_key_t *)bgrmp->keys[i])->offset, bgrmp->num_keys ); - fflush(stdout); - */ - } - - bgrmp = bgrmp->next; - //Free the message received - mdhim_full_release_msg(bgrm); - bgrm = bgrmp; - } - - MPI_Barrier(MPI_COMM_WORLD); - gettimeofday(&getend, NULL); - gettime = 1000000*(getend.tv_sec - getstart.tv_sec)+getend.tv_usec-getstart.tv_usec; - gettime/=1000000; - getops = segnum/gettime; - - if (md->mdhim_rank == size - 1) { - printf("puttime is %lf, putops is %lf, rank is %d\n",\ - puttime, putops, md->mdhim_rank); fflush(stdout); - printf("gettime is %lf, getops is %lf, rank is %d\n",\ - gettime, getops, md->mdhim_rank); fflush(stdout); - } - - free(meta_lst); - - free(key_lens); - for (i=0; ifid = meta_lst[i].fid; - key_lst[i]->offset = meta_lst[i].offset; - - - value_lst[i] = (ulfs_val_t *)malloc(sizeof(ulfs_val_t)); - value_lst[i]->addr = meta_lst[i].addr; - value_lst[i]->len = meta_lst[i].len; - value_lst[i]->nodeid = meta_lst[i].nodeid; - - } - return 0; -} - -void init_get_key_lst(ulfs_key_t **get_key_lst,\ - int *get_key_lens, int *get_val_lens,\ - int key_cnt, long gettransz, int rank, int glb_size) { - long i; - for (i = 0; i < key_cnt; i++) { - get_key_lst[2 * i] = (ulfs_key_t *)malloc(sizeof(ulfs_key_t)); - get_key_lst[2 * i]->fid = 0; -// get_key_lst[2 * i]->fid = rank; -// get_key_lst[2 * i]->offset = (long)i * gettransz + rank * gettransz * key_cnt; -// get_key_lst[2 * i]->offset = (long)i * gettransz; - get_key_lst[2 * i]->offset = (long)i * gettransz * glb_size + rank * gettransz; - get_key_lens[2 * i] = sizeof(ulfs_key_t); - get_val_lens[2 * i] = sizeof(ulfs_val_t); - - get_key_lst[2 * i + 1] = (ulfs_key_t *)malloc(sizeof(ulfs_key_t)); - get_key_lst[2 * i + 1]->fid = 0; - get_key_lst[2 * i + 1]->offset = get_key_lst[2 * i]->offset + gettransz - 1; - get_key_lens[2 * i + 1] = sizeof(ulfs_key_t); - get_val_lens[2 * i + 1] = sizeof(ulfs_val_t); - - - } -} - - diff --git a/meta/tests/single_tests/range_bget.sh b/meta/tests/single_tests/range_bget.sh deleted file mode 100644 index 81ceeead6..000000000 --- a/meta/tests/single_tests/range_bget.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -x - -ulimit -c unlimited -export MPICH_MAX_THREAD_SAFETY=multiple - -nnodes=1 -nprocs=1 -# determine number of nodes in our allocation -nodes=$SLURM_NNODES -SEGNUM=1024 -BULKNUM=$SEGNUM -srun --clear-ssd -n${nprocs} -N${nnodes} ./range_bget -c ${BULKNUM} -s 16 -t 1048576 -g 1048576 -r 1048576 -n ${SEGNUM} -p /l/ssd/ -d db 2>&1|tee range_${SLURM_NNODES}.log - diff --git a/meta/tests/single_tests/range_test.c b/meta/tests/single_tests/range_test.c deleted file mode 100644 index bea723082..000000000 --- a/meta/tests/single_tests/range_test.c +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2017, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -/* - * - * Copyright (c) 2014, Los Alamos National Laboratory - * All rights reserved. - * - */ - -#include -#include -#include -#include -#include -#include -#include "mpi.h" -#include "mdhim.h" - -#define MANIFEST_FILE_NAME "/mdhim_manifest_" -#define GEN_STR_LEN 1024 - -struct timeval putstart, putend; -struct timeval calstart, calend; -struct timeval putreleasestart, putreleaseend; -double puttime; -double putbw; -double putops; -double caltime; -double putreleasetime = 0; - -struct timeval getstart, getend; - -double gettime; -double getbw; -double getops; - -typedef struct { - unsigned long fid; - unsigned long nodeid; - - unsigned long offset; - unsigned long addr; - unsigned long len; -}meta_t; - -typedef struct { - unsigned long fid; - unsigned long offset; -}ulfs_key_t; - -typedef struct { - unsigned long nodeid; - unsigned long len; - unsigned long addr; -}ulfs_val_t; - -int init_meta_lst(meta_t *meta_lst, ulfs_key_t **key_lst, ulfs_val_t **value_lst, \ - long segnum, long transz, int rank); - -int main(int argc, char **argv) { - int c, serratio, bulknum, ret, provided, size, path_len; - - long transz, segnum, rangesz; - - char db_path[GEN_STR_LEN] = {0}; - char db_name[GEN_STR_LEN] = {0}; - - MPI_Comm comm; - - struct mdhim_t *md; - struct mdhim_brm_t *brm, *brmp; - struct mdhim_bgetrm_t *bgrm, *bgrmp; - mdhim_options_t *db_opts; // Local variable for db create options to be passed - - static const char * opts = "c:t:s:r:n:p:d:"; - - while((c = getopt(argc, argv, opts)) != -1){ - switch (c) { - - case 'c': /*number of batched key-value pairs in each bput*/ - bulknum = atoi(optarg); break; - case 's': /*server factor same as MDHIM*/ - serratio = atoi(optarg); break; - case 't': /*transfer size*/ - transz = atol(optarg); break; - case 'r': /*the key range for each slice*/ - rangesz = atol(optarg); break; - case 'n': /*number of transfers*/ - segnum = atol(optarg); break; - case 'p': /*path of the database*/ - strcpy(db_path, optarg); break; - case 'd': /*name of the database*/ - strcpy(db_name, optarg); break; - } - } - - db_opts = malloc(sizeof(struct mdhim_options_t)); - - db_opts->db_path = db_path; - db_opts->db_name = "ulfsDB"; - db_opts->manifest_path = NULL; - db_opts->db_type = LEVELDB; - db_opts->db_create_new = 1; - db_opts->db_value_append = MDHIM_DB_OVERWRITE; - - db_opts->rserver_factor = serratio; - db_opts->db_paths = NULL; - db_opts->num_paths = 0; - db_opts->num_wthreads = 1; - - path_len = strlen(db_opts->db_path) + strlen(MANIFEST_FILE_NAME) + 1; - - char *manifest_path; - manifest_path = malloc(path_len); - sprintf(manifest_path, "%s/%s", db_opts->db_path, MANIFEST_FILE_NAME); - db_opts->manifest_path = manifest_path; - db_opts->db_name = db_name; - db_opts->db_type = LEVELDB; - - db_opts->db_key_type = MDHIM_UNIFYFS_KEY; - db_opts->debug_level = MLOG_CRIT; - db_opts->max_recs_per_slice = rangesz; - db_opts->rserver_factor = serratio; - - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - - if (!md) { - printf("Error initializing MDHIM\n"); - MPI_Abort(MPI_COMM_WORLD, ret); - exit(1); - } - - meta_t *meta_lst = (meta_t *)malloc(segnum*sizeof(meta_t)); - ulfs_key_t **key_lst = (ulfs_key_t **)malloc(segnum*sizeof(ulfs_key_t *)); - ulfs_val_t **val_lst = (ulfs_val_t **)malloc(segnum * sizeof(ulfs_val_t *)); - - int *key_lens = (int *)malloc(segnum * sizeof(int)); - int *val_lens = (int *)malloc(segnum * sizeof(int)); - - long i; - for (i = 0; i < segnum; i++) { - key_lens[i] = sizeof(ulfs_key_t); - val_lens[i] = sizeof(ulfs_val_t); - } - init_meta_lst(meta_lst, key_lst, val_lst, segnum, transz, md->mdhim_rank); - - MPI_Comm_size(md->mdhim_comm, &size); - MPI_Barrier(MPI_COMM_WORLD); - - gettimeofday(&putstart, NULL); - long total_keys = 0, round = 0; - while (total_keys < segnum) { - //Insert the keys into MDHIM - brm = mdhimBPut(md, (void **)(&key_lst[total_keys]), key_lens, - (void **) (&val_lst[total_keys]), val_lens, bulknum, - NULL, NULL); - //Iterate through the return messages to see if there is an error and to free it - brmp = brm; - if (!brmp || brmp->error) { - printf("Rank - %d: Error inserting keys/values into MDHIM\n", md->mdhim_rank); - } - - gettimeofday(&putreleasestart, NULL); - while (brmp) { - if (brmp->error < 0) { - printf("Rank: %d - Error inserting key/values info MDHIM\n", md->mdhim_rank); - } - - brm = brmp; - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - - } - gettimeofday(&putreleaseend, NULL); - putreleasetime = 1000000*(putreleaseend.tv_sec-putreleasestart.tv_sec)+putreleaseend.tv_usec-putreleasestart.tv_usec; - - total_keys += bulknum; - round++; - } - MPI_Barrier(MPI_COMM_WORLD); - gettimeofday(&putend, NULL); - puttime = 1000000*(putend.tv_sec - putstart.tv_sec) + putend.tv_usec -putstart.tv_usec; - puttime/=1000000; - putbw = (sizeof(ulfs_key_t)+sizeof(ulfs_val_t))*segnum*size/puttime; - putops = segnum/puttime; - gettimeofday(&calstart, NULL); - ret = mdhimStatFlush(md, md->primary_index); - if (ret != MDHIM_SUCCESS) { - printf("Error getting stats from MDHIM database\n"); - } else { - } - gettimeofday(&calend, NULL); - caltime = 1000000*(calend.tv_sec-calstart.tv_sec)+calend.tv_usec-calstart.tv_usec; - caltime = caltime/1000000; - total_keys = 0; - - gettimeofday(&getstart, NULL); - //Get the keys and values back starting from and including key[0] - - total_keys = 0; - while (total_keys < segnum) { - bgrm = mdhimBGetRange(md, md->primary_index, - key_lst[total_keys], key_lst[total_keys + bulknum - 1],\ - sizeof(ulfs_key_t)); - bgrmp = bgrm; - while (bgrmp) { - if (bgrmp->error < 0) { - printf("Rank: %d - Error retrieving values", md->mdhim_rank); - } - for (i = 0; i < bgrmp->num_keys; i++) { -/* printf("Rank: %d - Got key: %ld, num_keys is %ld\n", md->mdhim_rank, - ((ulfs_key_t *)bgrmp->keys[i])->offset, bgrmp->num_keys ); - fflush(stdout); -*/ - } - - bgrmp = bgrmp->next; - //Free the message received - mdhim_full_release_msg(bgrm); - bgrm = bgrmp; - } - total_keys += bulknum; - } - MPI_Barrier(MPI_COMM_WORLD); - gettimeofday(&getend, NULL); - gettime = 1000000*(getend.tv_sec - getstart.tv_sec)+getend.tv_usec-getstart.tv_usec; - gettime/=1000000; - getops = segnum/gettime; - - if (md->mdhim_rank == size - 1) { - printf("puttime is %lf, putops is %lf, rank is %d\n",\ - puttime, putops, md->mdhim_rank); fflush(stdout); - printf("gettime is %lf, getops is %lf, rank is %d\n",\ - gettime, getops, md->mdhim_rank); fflush(stdout); - } - - free(meta_lst); - - free(key_lens); - for (i=0; ifid = meta_lst[i].fid; - key_lst[i]->offset = meta_lst[i].offset; - - value_lst[i] = (ulfs_val_t *)malloc(sizeof(ulfs_val_t)); - value_lst[i]->addr = meta_lst[i].addr; - value_lst[i]->len = meta_lst[i].len; - value_lst[i]->nodeid = meta_lst[i].nodeid; - } - return 0; -} - - - diff --git a/meta/tests/single_tests/range_test.sh b/meta/tests/single_tests/range_test.sh deleted file mode 100644 index df592c30d..000000000 --- a/meta/tests/single_tests/range_test.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -ulimit -c unlimited -export MPICH_MAX_THREAD_SAFETY=multiple - -nodes=$SLURM_NNODES -BATCH_CNT=1024 - -for BULK_NUM in ${BATCH_CNT}; do - srun --clear-ssd -n${SLURM_NNODES} -N${SLURM_NNODES} ./range_test -c ${BATCH_CNT} -s 1 -t 16384 -r 1048576 -n 131072 -p /l/ssd/ -d db -done - diff --git a/meta/tests/tester/inTestAppend.txt b/meta/tests/tester/inTestAppend.txt deleted file mode 100644 index 74aff27db..000000000 --- a/meta/tests/tester/inTestAppend.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Put first copy of record -put 08642 abcdefg - -# Get original copy -get 08642 - -# Append by using the -a flag in the tester program -put 08642 ABCEDFG - -# Returned value should be concatenated -get 08642 diff --git a/meta/tests/tester/inTestBasic.txt b/meta/tests/tester/inTestBasic.txt deleted file mode 100644 index 3eb794c60..000000000 --- a/meta/tests/tester/inTestBasic.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Key is 6_digits * rank, value is 4*30=120 chars -# for string/byte 6_digit && 0rank -put 123456 abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456 -get 123456 - -flush - -# Key is 6_digits * rank + (1 to n), value is 40 chars -# for string/byte 6_digit && 0rank && 0i -bput 999 987654 1234ABCDEFGHIJKLMNOPQRSTUVWXYZ_+=$%*!@~ZYXWVUTSRQPONMLKJIHGFEDCBA3456 -bget 999 987654 -del 123456 - -flush - -# key is 5_digits * rank + (1 to n), value is 241 -# for string/byte 5_digit && 0rank && 0i -bput 999 56789 YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456i - -bdel 999 56789 - diff --git a/meta/tests/tester/inTestBulk.txt b/meta/tests/tester/inTestBulk.txt deleted file mode 100644 index 04be33115..000000000 --- a/meta/tests/tester/inTestBulk.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Put a good size numberor key/values -bput 99999 56789 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ - -# Get all the above key/values -bget 99999 56789 - -# Required to do next ops -flush - -# Get a small set using the bulk get next operation -bgetop 500 56789 1 diff --git a/meta/tests/tester/inTestBulkLarge.txt b/meta/tests/tester/inTestBulkLarge.txt deleted file mode 100644 index 2869329f0..000000000 --- a/meta/tests/tester/inTestBulkLarge.txt +++ /dev/null @@ -1,4 +0,0 @@ -#23456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 - -# data value of 2040 -bput 99999 dataValueOf2040 abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ11111222223333344444555556666677777 diff --git a/meta/tests/tester/inTestBulkLargeErr.txt b/meta/tests/tester/inTestBulkLargeErr.txt deleted file mode 100644 index 0ab8fe8e1..000000000 --- a/meta/tests/tester/inTestBulkLargeErr.txt +++ /dev/null @@ -1,9 +0,0 @@ -#23456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 - -# data value of 2040 -bput 999999 dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040dataValueOf2040 abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ11111222223333344444555556666677777 - -#Error: bulk put message too large. Bput is over Maximum size allowed of 2147483647. -#Error: Packing message failed before sending. -# -# at src/messages.h MAX_BULK_OPS set to 1000000 diff --git a/meta/tests/tester/inTestErr1.txt b/meta/tests/tester/inTestErr1.txt deleted file mode 100644 index 2ef49ad83..000000000 --- a/meta/tests/tester/inTestErr1.txt +++ /dev/null @@ -1,24 +0,0 @@ -# Basic test deck should be run first and DB should not be removed. - -# Simple bget should work -bget 10 987654 - -# Get using an op othern than EQ should fail if no flush has been done -get 123456 1 - -# This should enable the command below to work -flush -get 123456 1 - -# Should fail -get 13579 0 - -# Should work as we are not using op=EQ (gets the next value in the DB after -# the seed) -get 13579 1 - -# Should fail -bdel 10 24680 - -# Should fail as incorrec operator -get 123456 9 diff --git a/meta/tests/tester/inTestLarge.txt b/meta/tests/tester/inTestLarge.txt deleted file mode 100644 index 2bdd1d0cb..000000000 --- a/meta/tests/tester/inTestLarge.txt +++ /dev/null @@ -1,21 +0,0 @@ -#23456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345 -# Key for string/byte 505_digit && 0rank -put abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz12340abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333 This_is_the_value_for_a_long_key - -get abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz12340abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333 - -# data element of size 1015 -put dataElementOfSize1015 abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ11111222223333344444 - -get dataElementOfSize1015 - -# data value of 2040 -put dataValueOf2040 abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz1234_abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ11111222223333344444555556666677777 - -get dataValueOf2040 - -# data element of size 505 -put dataElementOfSize505 abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456YXWVUTSRQPONMLKJIHGFEDCBA3456ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012abcdefghijklmnopqrstuvwxyz12340abcdefghijklmnopqrstuvwxyz1234ABCDEFGHIJKLMNOPQRSTUVWXYZ5678zyxwvutsrqponmlkjihgfedcba9012ZYXWVUTSRQPONMLKJIHGFEDCBA3456AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGGHHHHHIIIIIJJJJJKKKKKLLLLLMMMMMNNNNNOOOOOPPPPPQQQQQRRRRRSSSSSTTTTTUUUUUVVVVVWWWWWXXXXXYYYYYZZZZZ111112222233333 - -get dataElementOfSize505 - diff --git a/meta/tests/tester/inTestNext.txt b/meta/tests/tester/inTestNext.txt deleted file mode 100644 index dac7cb296..000000000 --- a/meta/tests/tester/inTestNext.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Insert small set, later used to text get OPS -bput 6 nptest.txt -flush -# Test differ get ops: EQ (0), NEXT(1), PREV(2), FIRST(3) and LAST (4) -get gt1.txt -get gt2.txt -get gt3.txt -get gt4.txt -get gt5.txt diff --git a/meta/tests/tester/inTestOps.txt b/meta/tests/tester/inTestOps.txt deleted file mode 100644 index e560d2fb6..000000000 --- a/meta/tests/tester/inTestOps.txt +++ /dev/null @@ -1,122 +0,0 @@ -# Large number of operations testing different operations. Maximum of nodes should be four as rank is multiplied -# by key_seed and begins to generate too large values for keys. - -# Put several sets of sequences of 99999 values -bput 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -# Verify we got the correct values we put in. For FLOAT type keys, because of magnitude of key_seed do not generate unique keys -# therefore verify is turned off on inTestOps3.txt -bget 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bget 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bget 99999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush - -# Test operations of bulkgetop (1) NEXT and (2) PREV -# This test is turned off for BYTE keys as the NEXT/PREV operations do not generate consistent NEXT/PREV values. -# FLOAT values also have a problem generating unique keys therefore a smaller number for this request is tested. -bgetop 9999 25468001 1 -bgetop 9999 25478001 2 - -# Test getting the FIRST value with different keys, should get the same key/value -get 567891 3 -get 199135790 3 -get 25468001 3 - -# Put more sequences -bput 99999 299135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 25246802 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 256782 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush -# Get LAST value, should get the same key/value -get 25468001 4 -get 199135790 4 -get 567891 4 - -# Put more sequences -bput 99999 399135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 35246803 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 356783 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bput 99999 499135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 45246804 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 456784 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -# Delete one sequence -bdel 99999 299135790 -bdel 99999 25246802 -bdel 99999 256782 - -# Put more -bput 99999 599135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 55246805 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 556785 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bput 99999 991357900 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 55468000 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 167890 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush - -# Using the tester's ngetn functions issue 999999 consecutive get NEXT operations starting with key 0 -# This is also turned off for BYTE keys as NEXT operation does not generate consistent values. -ngetn 999999 0 0 - -# Get FLAST (4) and FIRST (3) key/value -get 25468001 4 -get 199135790 4 -get 567891 4 -get 567891 3 -get 199135790 3 -get 25468001 3 - -# Delete an intermediate sequence -bdel 99999 499135790 -bdel 99999 45246804 -bdel 99999 456784 - -# Get and verify values from first set of sequences. DO NOT verify last sequence as it overlaps and does not verify -# This is not true for strings as they generate unique keys. -bget 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bget 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bget 99999 567891 # ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -# Delete several sets -bdel 99999 399135790 -bdel 99999 35246803 -bdel 99999 356783 - -bdel 99999 599135790 -bdel 99999 55246805 -bdel 99999 556785 - -bdel 99999 991357900 -bdel 99999 55468000 -bdel 99999 167890 - -flush -# Get FLAST (4) and FIRST (3) key/value -get 25468001 4 -get 199135790 4 -get 567891 4 -get 567891 3 -get 199135790 3 -get 25468001 3 - -# Delete that last set of sequences so there should be nothing left in DB -bdel 99999 199135790 -bdel 99999 25468001 -bdel 99999 567891 - -flush - -# These should generate ERROR as there is nothing left in DB -get 11468001 4 -get 119135790 4 -get 117891 4 -get 117891 3 -get 119135790 3 -get 11468001 3 diff --git a/meta/tests/tester/inTestOps3.txt b/meta/tests/tester/inTestOps3.txt deleted file mode 100644 index 4fd52caa2..000000000 --- a/meta/tests/tester/inTestOps3.txt +++ /dev/null @@ -1,93 +0,0 @@ -bput 9999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 9999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 9999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bget 9999 199135790 # AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bget 9999 25468001 # abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bget 9999 567891 # ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush - -bgetop 999 25468001 1 -bgetop 999 25469001 2 - -get 567891 3 -get 199135790 3 -get 25468001 3 - -bput 9999 299135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 9999 25246802 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 9999 256782 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush -get 25468001 4 -get 199135790 4 -get 567891 4 - -bput 9999 399135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 9999 35246803 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 9999 356783 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bput 9999 499135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 9999 45246804 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 9999 456784 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bdel 9999 299135790 -bdel 9999 25246802 -bdel 9999 256782 - -bput 9999 599135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 9999 55246805 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 9999 556785 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bput 9999 991357900 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 9999 55468000 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 9999 167890 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush -get 25468001 4 -get 199135790 4 -get 567891 4 -get 567891 3 -get 199135790 3 -get 25468001 3 - -bdel 9999 499135790 -bdel 9999 45246804 -bdel 9999 456784 - -bget 9999 199135790 # AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bget 9999 25468001 # abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bget 9999 567891 # ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bdel 9999 399135790 -bdel 9999 35246803 -bdel 9999 356783 - -bdel 9999 599135790 -bdel 9999 55246805 -bdel 9999 556785 - -bdel 9999 991357900 -bdel 9999 55468000 -bdel 9999 167890 - -flush -get 25468001 4 -get 199135790 4 -get 567891 4 -get 567891 3 -get 199135790 3 -get 25468001 3 - -bdel 9999 199135790 -bdel 9999 25468001 -bdel 9999 567891 - -flush -get 11468001 4 -get 119135790 4 -get 117891 4 -get 117891 3 -get 119135790 3 -get 11468001 3 diff --git a/meta/tests/tester/inTestOps5.txt b/meta/tests/tester/inTestOps5.txt deleted file mode 100644 index 976a63175..000000000 --- a/meta/tests/tester/inTestOps5.txt +++ /dev/null @@ -1,96 +0,0 @@ -bput 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bget 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bget 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bget 99999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush - -bgetop 99999 25468001 1 -bgetop 99999 25468001 2 - -get 567891 3 -get 199135790 3 -get 25468001 3 - -bput 99999 299135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 25246802 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 256782 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush -get 25468001 4 -get 199135790 4 -get 567891 4 - -bput 99999 399135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 35246803 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 356783 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bput 99999 499135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 45246804 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 456784 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bdel 99999 299135790 -bdel 99999 25246802 -bdel 99999 256782 - -bput 99999 599135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 55246805 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 556785 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bput 99999 991357900 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 55468000 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 167890 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush - -ngetn 999999 0 0 - -get 25468001 4 -get 199135790 4 -get 567891 4 -get 567891 3 -get 199135790 3 -get 25468001 3 - -bdel 99999 499135790 -bdel 99999 45246804 -bdel 99999 456784 - -bget 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bget 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bget 99999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bdel 99999 399135790 -bdel 99999 35246803 -bdel 99999 356783 - -bdel 99999 599135790 -bdel 99999 55246805 -bdel 99999 556785 - -bdel 99999 991357900 -bdel 99999 55468000 -bdel 99999 167890 - -flush -get 25468001 4 -get 199135790 4 -get 567891 4 -get 567891 3 -get 199135790 3 -get 25468001 3 - -bdel 99999 199135790 -bdel 99999 25468001 -bdel 99999 567891 - -flush -get 11468001 4 -get 119135790 4 -get 117891 4 -get 117891 3 -get 119135790 3 -get 11468001 3 diff --git a/meta/tests/tester/inTestOps6.txt b/meta/tests/tester/inTestOps6.txt deleted file mode 100644 index b3bfec594..000000000 --- a/meta/tests/tester/inTestOps6.txt +++ /dev/null @@ -1,96 +0,0 @@ -bput 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bget 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bget 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bget 99999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush - -#bgetop 99999 25468001 1 -#bgetop 99999 25468001 2 - -get 567891 3 -get 199135790 3 -get 25468001 3 - -bput 99999 299135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 25246802 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 256782 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush -get 25468001 4 -get 199135790 4 -get 567891 4 - -bput 99999 399135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 35246803 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 356783 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bput 99999 499135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 45246804 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 456784 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bdel 99999 299135790 -bdel 99999 25246802 -bdel 99999 256782 - -bput 99999 599135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 55246805 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 556785 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bput 99999 991357900 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bput 99999 55468000 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bput 99999 167890 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -flush - -#ngetn 999999 0 0 - -get 25468001 4 -get 199135790 4 -get 567891 4 -get 567891 3 -get 199135790 3 -get 25468001 3 - -bdel 99999 499135790 -bdel 99999 45246804 -bdel 99999 456784 - -bget 99999 199135790 AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz_AbCdEfGhIjKlMnOpQrStUvWxYz -bget 99999 25468001 abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz -bget 99999 567891 ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ - -bdel 99999 399135790 -bdel 99999 35246803 -bdel 99999 356783 - -bdel 99999 599135790 -bdel 99999 55246805 -bdel 99999 556785 - -bdel 99999 991357900 -bdel 99999 55468000 -bdel 99999 167890 - -flush -get 25468001 4 -get 199135790 4 -get 567891 4 -get 567891 3 -get 199135790 3 -get 25468001 3 - -bdel 99999 199135790 -bdel 99999 25468001 -bdel 99999 567891 - -flush -get 11468001 4 -get 119135790 4 -get 117891 4 -get 117891 3 -get 119135790 3 -get 11468001 3 diff --git a/meta/tests/tester/inTestRand.txt b/meta/tests/tester/inTestRand.txt deleted file mode 100644 index 5364ad47e..000000000 --- a/meta/tests/tester/inTestRand.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Put n=40000 set of random records, key_size (for string/byte) of 128 chars -# value_size of 2040 chars. Last param makes sizes to be exact. If a 0 -# is used instead then sizes are 1 char up to x_size. -nput 40000 500 2040 1 - -flush - -# get a sequence of n record starting starting with a random value or zero if -# the second parameter is set to zero. The last parameter works in a similar -# manner as stated above. -ngetn 5000 500 1 diff --git a/meta/tests/tester/mdhimtst b/meta/tests/tester/mdhimtst deleted file mode 100644 index c8f8cd9c7110fa09c970b7a365bb8e4616a3fe45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821363 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

rpYnlqhyIE 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 v6#B_Bowe_E#sF&5!eSs`vPqV^{17Nw5vvYZbg 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%0D*K#_;Ya-rJg7u)#=JoOolP-@-SmG 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

=8s-$Qu9+)cH4bwWFg)Y?f^QupKE{Vm&^$ zp`OHt5qKPdq+cO`|AIJa{{h;RfylNFjCgVH4n``S|^BsK^|;8OZLZ_E-h6%L$%OOza}kPXHeMB%JqJSN(aE zXSI8)hUPEFZma=&t1kZ-T+y!6!xRfd@3#J4^5eYv)~?a}Q15;Pgzkuh)q2O-PiC-zx_3(3=g$ z-zze|4p=h&K0)l5TMWkEFVc4amWc2KcEFuv@JPQ6qi!=;UMyICBVegVO2i6HuXRd2;ubw1xnHWd{~?iDCg`X~ zxzULLhpoTQkePXVNfgQs7LW5z5{*Aauy~z!l4$&7ufd$jBE6E}WmLsvk^Tk2;)UkPqQ$do z4Q5@Xk;1(luw+)IU>2)=s%o^5*DS#;`sJq-sq6reGGK4jh;U+>LnGQ>13tReEl1Rr zu^m?hkludgQ`x}Zsc&tr)(5$Tkd-4-d|(C>AD=|J5VCg>P<#{}Gfr`Brolaz=AR4# z6HN$v?NA8Q5imL?i0>2XVk@bOzOs9aZfW}5=$?3{rL_+zeRCZePKG z?zbD=BhzyU7P8w{BcI3pfTf=9C%WU0fMs{|SF)QawZ{O_8(}+*0X|Um#zCc74R~*r z;CHa1xW7U92(1>R3w}=qlK8+3CiZMXy5RT22$=c3QX#v|KswyS@4!S8!p{wawp~7i zma*Dd;&h{6(=mn7rQBNDo@;Po;u2v?@cpEa-zQK^*9Qnpz5~|lLYQ0!HHhslK;wl; z@+j3qgCn_t2G?UmAFDk$PjGwh7g9css&CDv{XIf)`#ey@2WBuaXY`$l+fD=&w^L}y zeEp?F8gB69ThV)WAX|K3nhD=A17DjTpY*KE2g#}AZ^5;2y)+uK+XVBkR}~mOMQu;d zD8oM8Ms{D9yQF=(jf{ar0Mex177s9=(!ee+rQHocTBu%1GnOy4)G4naO{@cq>M~$2 zYde%t-Df6R%04F6kEfW|t`@DkHoz8P zWwu_n?pnAOhHCU^3$rC#Q>k8j@+C`m9@nvP*ol)NDHF&6KOpn(3Dj8 zReC0XWQrZsB~GOD3X*6911?F>(z}TCAR<)exD+|4h^V!<$}WJ*Mw?QQ8KXm?M{!xW zFR~~qv6AwkNA+0|)KeLuL|%VY1&GkGJ{e#F(USvx#ROIUVuSp|=*TxX!Q!W0=E4~k ze}m064pnqfjVOv+d<2<-3&Z_I{B^~vx)g~Cs_6<$^f!~xC8<s2KVH_5O%HFpp-FHh?ZLk7k=3&E0(3L$n%~5gEgbuy^-sk8r=*h>&U{(yR#J zzcq#!6*TmMqB5qVB8W88w0(kl1G$;-@(jNV)7-b*F@^2{!|>mzPNZ_rsP@m zdYn0zc_{YjI1ET*D0M?!+0TRpvd~{qp~lPrv+O`q7}7e(7$}2DXo&nFQiw3_rBKm` z_i44^RE`c7#QS4O@)FGGNs<#yw1PO(I44OS;U|v3k-ioOsJpA_>}1Fv3B!+1louTs=3x-3 z#9D|A)PbD-x)@Vv*G?U#P}^XTdkLiY=MN4!wPLzt+&`5@c9eQ!h=2$&M4~K%AQCbD zAs{EKSS4$M)*gOFV%qd~0)~cPs~SV+5>*mniR*3sJP#NgMs^w+KH-Z~xJ6lG0u>UY zrci%%ekE=m7LW>K0###;CQvo&l0*$u1gX?P{t9V?4fcs?!1RhCW5z;LrZF&qbeKsH zg#r_Uh^mXH6g3-(6fum9h>n8@*^{KYA0elVk;VWWWx@iv9&N4;gTxr%V@&bLHrCH9 zvyK@Ts%Y!F#pWeUCvzLzN&;|M0A|=B0ElHfy1`rppG%7vRKt8rZMw_!K)OirGZK2{_rkrr|{c*fcQum?Tm(vac~K^)rMPvzVNf21v=k0F|@SAd}F; z)*39w#E;pqYLt`s(17%}ia=Pg${G%seT+Fy6*JFqqWcp~^kYPc;Yo8NW;Z!W{ws25 z7C^(g`k$4QQeA(#J?CalpL8bkVdoc(nMks-oS~ZqiEAa zViJ7w`m4i40!sb*5!?3003*2^`a`Kz!%s-9s!%m5-q72y#f%`S@I*NVN z%>qnKhP@?+*Jxwh!N#H`1#BysfN8@REPler`4qd=Q0wEVUP4KBl~N&O>ZO>f#JHt3 zmBA-4My#m_g|Wg(^SAO}Qtiqj6H68I$m(oXzP#fI2<^`J% zgHR0J{H7eu3t{GYp}Ri~hb_#jod~(w`F}{Yn}&lisK|1H?Eb?+Wh&NB^)HH%bkL&3 zNQF3bShSEZ{WHs!j)G=hxJc!k;Fo0cAf$zhl2>YoF>ur{qlJqagks@h(g~nkZm zVrKu>XB8TK)b-JwOm4myWAy{?o!<@FqoYyOQ-SC@8il}B)h-MB$!br&d7)ap!KD>Zg%$P$63-V#T zZqP_3FD##n&tk?bq6Vg6`zUa@d6W>F;k}cJKEaqI;IWe?7>0sO67~&N?dGx&enpVN zj2Xnx?EaNHrGeO=CGduqj;Io|3FZ=0jWn0|yNNiGsz616-A@43nP#39)2WqYs%7|z z{*h(F&m34k-#Km|gnQgKM#KoT`ez1`*NeL${lh6v?--#h^O& zA36~YiwojGMlR8z290SxrXlt3b0YqjKw)0?DMM69n+J+5RDXgg6>T&xxWu$Vv$LT} zk=-;q6HCkrN{le!DN*Jn^ao~TsRe|QOX}dCkY-~T(U zTTAE}Sg}&z`x|3H_~d9T2(KKD1{p(Qu(_<+HVqi(hHa|ka#%+p#=tTQF?r*NK9%`r zd*d!DfM(J9nad?(L1cCY`}a})8CS6R=!8ufeULmd`nnl}!H)B(c`^99``r-X(hWf_ zVbx(&^rBmxU>2oC`-W&h55#n2d2C0P_wa-Nz}hoNCVlradD*dPf!oDWarmucA%2E+ ztQghBs1;krM$gy`cT6{9ZAZ&aB{Rf^i}3J=i@!*)M3upBK>Yjx7yS~5J+VOEn0SX{ zB!0YpjY!+Zh6F?J8oOfwU1IEzDLFR|l_;>cp9Y#oE~AlVtd#Iu8!<+K8#ALEtbOG~ z2fGeR9opS+TM|0t8{iX+fT@*cMkQR7&scnd`&2FFMYHOl{V%0S;I>p0QdX4gu=@pP zyD_6;z9i1T#v{^5i-?6LVHXQc%#nVq6if4@qKFz|o+puNnkT8&%gvL$dFM;WlF5nL zae4C(=1m~|iFwnQnk~)9t6M%s+cfQa3~&wqk!^{8iKQjQiABp7EG=D_Z!rUjHx#)` zWX#f{8xji_EJ$2EZp^$fqvMP77cQFbj$c}|ymWQq=!DS;V=s=NWQ|dN#e(@u6WuFT zEGdwn<`*E06N~OOEAvZy(M2m{c9b)M z$c&#g$;_!Ylol;@#}_TfgAD$nIIQR{T9z-7taL9b&Y!=~gm&4=A|%0u3`|AK-LeAN z7K9-Yg6erIR=SH;EGJSr=-pRkcQ4C@JJ4bDm)Xob39BCKl%8 z`=4UnoNPf|{pqIMU$FnO@KpCizLgahu&@TU(#?{a*>%;mg{&_Rx3j!zmgG!hWzBXE zD|6zb;-^1KolUG2X!*wBx%?CE(Fb+oF)b~;k1NZ5PYZi#T{~~qher+52SqVk+qIs2 z-ts9c)e|+(i@b%cY;N(qg>Sc$=qYitu3lDxM0PB=oiAZsc|yykb!Rfht?s0=Pb#W$ zkm0VNIuTAq_?{pq!XH;Oh;V8y3vD|U?^uSoS1Ty}(V*-TSLLxwysxq~&Ut!P^zoJw z$AL3jc+#0#)>R*+@sn(I>XrP=E2a9N7=2RL3Da30YJhf1)1IIm+#dS6W+9?2$Gvo@W#Giw4XbuufDW2M!si*weQy?it%d9R!& zfRufl$bPS!$a;_y*{4<5ed3pSu2b=L)~$eD!V_MeG)K2bo!ZJH5?^$%1Sd~CQwUl| zYW$PrG-gAkIjpRjg{HEy)TAI zy_6brTWB^bZe=f7ctOi&EQGfm=1J^8mGjf461(Rd3#mS}g$?3y98z!&H_mj`hiiIL z&j)zAhn0hSw^e~%efc5cUVb(E*20^8v}JoXR-H*pE<;@x+|=J&tVGrYH<5LVmB>2p zCbDj^5?Ky#4N)JviL869*{rmIC8B|e+VTSG)14NeeYBJ%m*W`vKd@rrP&D~~VU${kJdi7bRjy?>1x3BL=@KFU2T zzM8qJ*`T(T(@GLY@g%)}q@Ea-Gn3gGJZx7Lck6>9PcSv94-YS8b5mJl8|&Iouct=NLJkr%r?TH$Qt|EP zNucSQVopST*tMNEvZGbhmXC^g9HRDi`Bjp+|yKMc8Qyr}9FSczre1^Ilib2xwoigtA52{l%33rLOIz@rjF?AkWRb5BKEJ z2b)LLot4$yB`IjOIC%t`?nH*hl+r~k98@6JdotI9f+#`e^D^cc5wn6Yy)I)8l3=1K zr%*$GC+nsU)cDhlt}VYSon`klHu8u@eOLs(V;*UArP!D8J}IUP!=fIVKx!`YjV zmWIkye5c~uiSKIN8Nm*&s+-9t?%>z&W90>WM=pELmb!af1~fGbZD3`GYQ~SybE4Vf zt9YB8b@#FtZO!aHH#+k(D|hOnBH4IeeU?30rO(y)J1x007wyeV@*L(P^@&mJKnbrt zvw3D^W7=;^xxIcb@$}1eoW{d;{g41?Al$A~EC0BzPKI6ai6i*pn|K7q3*t|&D?ogc zp3PRYvllE0d>t8u>+ zs|HUFPdZ$m$39ubQ(HD1z0Q8`IpR*@QhpBYVu{uG2!SH_1ex2}_gxOLPb;ZWo69jb z>6b^1PiJAgE(e)>9(O}ddV!IfG#VqfRq8`E77E0C zB0tNzLGOhk{u5S@0r?RIWPKI*&AzZegDq>-`^T_i-tgtGSw0m`1|_d+pdyz~;Ahx( zAwYdgG2p`<_PK>Ou%<3No41_7SkQ+?vTrPP>=X1D+fo6Qd%hAxoa@T7*~!)VFg6im7_MN3v^!y6 z`s_|b`s_|JD#=M*zuE}4RfdELq0KaQiI#oZqD1Y|r5R#;3b#fa#AFGzLXYf9eEW5ne=o zQ31_Om4A*XeNYefTBX1e%PO*$F57tqSgO)LuxFelBy5E~L}RPliRv4@if9H@FSKeKwm8ygNeBt zzGJskwR4b^%CF#MJdH;dr}6X2u9Ro=fiW9hC)nat7G3RPMX4+%o0`z8ft6ysUs|mX zjvjZAU79d~%|%t8@r}u8JNY*}&Go20B#NiivRkV_Yp9divJ=^==FiZS+daqG=Bjqs zYlAdak^s|zr6-JJN2)L*e8%lZTV~m7c+FL;S2Ya!8Job`CT_P6KdSc!vr{L!T5f04 z+s|aVnz+M0{29F;Vx1zku8LRlIb*MYZU{eA!Bzw%2du zQT4Sb^XE#;Vcp2ExM1Po{Owv#O&P1JEch>G^MWV5KeHWboOrH2#lAF$kLIK6Qyk0q zAn4;U2rcCU#pmEPGd&(xyyMS&BP4d*6i*&7KLMg-=a!?#eq(7)WE-m5c;aTH#W%>5 zNj#k7V3-p5mDJgKLIhNOI4HV7^nEv)1VjX`l6j;GQ0YB(*O?aj4`rW)Rju+vp|d4O zM{EVut1NR3pe0xjs65vRoR|7=vK}JB>CZ7pL}dGO6j21fRv{Q6k~93tPgj9hosAGw3^$sf7P|$vr{V(eL<@xR+{B?AGklMFMZM{JH6_k&m zqqc_rlOBejP}e@yOkRl<3zp1ZxR4g{P~-&Vld}NfqUBPRf|`Zo&yX$*>6JhQ9la99 z3_t|=yb`7ElI8P-i-PV7-MQ>+xs%<&G3c|{XXUBvPL4VLtO(Sp?^Jxdk&uv|h_ySG9DlHu96;G|Ly`nP1#Rob{9S+yB zn>OV&vG>dBSbYdjec=?F=Vm>t?QAvvR>CX63!+!{|E7FcZmBEna7iM&p zElk2_WwVlWLzpw?48qH3$r0&PHJq4w}=M0&^E`d&>HOth)tZOUx@NaiCU5C0jm^`A1CmzW! zW%rfAt_!VWWeF^_m8QYagxMZ;DR{&Wo#LhUa|c^kz%GTR`_t^)1x)cAjMI}qpq4-VlTX%MYT5ZfuBQGJeyZcxN9+gVXE%H zWaGS?y}Zurae3IIdaK^AC;Te><+O!4%UHK|ETC_M)8zV*?BI=P&O0m>Q)x9!^#pu7 z$zlS)9-8u06#^es;2qy->*;u9{s! z?vL3mSaf8c*J$l=zS#^)!<5{ayI0+^oh}^>JSX(CsuPeF9l;xbZ&LM?f8Ap47U6b z_tdi&SA)W*J7ZLQmQ#x*NLSu|_+vdY!nNrfzl5i=4V64j?;E``gGV2JycVWI5r0%4 z5P7`zM3y7{Fk3*brPy{>+Wx0gEGFTdRq5~+%w}ciy9oP{CcS@mcJo^9PAcB$s;@^! zyY};|5C7i9`yQ`F?}4~fS1nI!a_z5o?Zszp?$OM$h3xOFxzAZwY2szIY=2ethz0#t z#ibuS+)|&*BT@>VP=iGG6dF zL}D4Nqc~O!4-@|u&PX@xw6Qxe$3pBkS7EBq2S!~rkK18cY_s#k6xU*Y$2nf84~k7L zElq4nDJ`NJn6)nFw%p=HJc@PkzK^cqF4t|(fSUTE`dRG1D(ZOdId)4Bk2|t{|6K0M zDm+@bIFT3bb(PplX#||Bz>HWOgoOxflk*kTWlg-_h?JS>PZqh-)~98%k2}?o)EBXp zZ9rOjUwvt2dMTTIh?PNUwV<8s6$?zP`lfnzvXZABWIY?^p~ZYxvYKz_) zL*5&#tF!4OmQn?8u!uTdns1*45eVnoS!0#+FfIUu?~kV6B|mTa{lSvRyi@RV)h^;TVJK@Nw@;C?_jHG2HRML+yeC{ zh-7(C{=Rad-boXNAWywf?iI>{>z2!@(%B)dk+(sGxOWCSrKUN|}m6&OifJa3|U5zq|5$~QIztNuTu={v;d9}og z8QNgsc%$4w#Ob{;p0Hzz@pRiyjHiFmUiBNih6(&{@KLOsU+gZTjVWv{1r8_Q;2={| zZKFY97(ooBAC5A^It3&C9sY@*?~yP!P=893hq2?=}|TT=~H{7DCh?OxYbGh<4wCpqot(W#hanKhN|V9iHYuHL1;qeZeI zykR7p*2+IwbSeu<*ulCaur3X*ku2AJX3nXsIcG*SLiamgS~+#6ehT>qaqmbr{Sf~o zmoLUfTq<&|C}+8Vb>*Uv)K~fhTRJ1Jl=~BC~-aQC~>eg`g)z#WZu>Km`HYk zVN-{E1K2flvI_4mHnN#reTad%-w7gG1rZ_HtUQ5@_OclTY;^%_rV-g}N;MnhX4iNh#g~2xlU2P zgopN*nij{pyIm=>o=|^t*<)1&k??H8W=WWKoIh2ToW^G^(u=~%_`|z+CA*=O_W-%h z|H5C{=~DDh1Y6CUpTkGpax6YzA@fQ4;I6zkdrxb{{EpR58SLj&R+7!aQXze>S{m4+ zrcV2 zR?C;nZnKH zh|}bdIE*Za_*I2}_5UH2nh99%2L1Rjj=ty?$4}|Uf6bUMw4z^6{(MDim=`{OXrL~X z$_$FoXFWg@2B<%2TS&hE^qDl^SFG^AzN3`e17TX!__*}Z&?w<-Zb5A> z{f}*-ya~Nn$sq~WvaOh}UYg77aOY?8>{YinZph8WA4HfooK>Mqyw^{fFrO`IyLfsF ztb=Ag2xYPt*RT*QM+QgJR{4Xg$lpXV`5T*%hK5y!6Z0uVNN*r^y<2J2c=I;#LHfw( z$y3wEPkHfG$BQSi{Fuwa+A?WF*oJN4cKW1kk1hb5`}I*VsAG3A?ddBY-$&Tv@8X@y z)?nKi8_vatjD#;ZFChH?&@voj=#zJ{`GKPNx z>zmE4CoWX8;%r)YfGcy|Z}VrS^9jgD4WSjIV#%*Nds)|JVhJ_q@zu)D{7h#7Kek#7 zPa^oUV9?h>YZ&%LCGE|bxP(^n0sPy^Q{TlddppjAWIPUJ53cdG_AnI=L0LpMz)3GV zog$BRCXAurLWL9l`+_UkYIrA7-`58T5qZrgB6mpXux=64I(5+ewi|slLP&+D){rU60KpYv#*?jiqfdNBa_qgenME@C?U#3p=v4= zOCLDgjyb{U1 zB&bJA6=yu5K$v83<|xiM2x1!%jchNJ`o!Z_%2-Cbg}W=sI9M!tqcnlcol?-`>y4gz zLd@8!Ytb7A^Z~Z1Ra35mzvTfSySH4``7n)yfkvJ8ma96CBO2L$QBLd;R6I@@MQ>nI z96`MSenHMsb6y!aJ{?UI{n1zS#~+2uN)$T_*=DiSAMNEvfBap_dwaRBKmJ6y%BZWq zSO?^yK?j&>5aw!PZpll*Qh48(NyPa;#p&5vJoQ!*}hoglbtUpV>z*Pe-+q@zS=|r*LX4mD&b0fAOwyd zPR`+Y}a6AJMjM61WQ=xl=0Q-2B-E74NyRw)bO zVJhCf4x8-nL3em_Nm-7R%JRim?N7f7`!9?)B>!-BNENfg$Y^ZJqml-=IV8`Tp^}v@ zq!R-7lqp^KmQ>Yy%1GE1IlsaRH->~`TZK?^)%)3sY;69pRjKa#o;cvz;BtB7UoNIG zkuABm!J{`c>IAS~SX+$=G+b;w{f)sGgBjYjnw2<(y;sdH^|CMF_1RukjZWb$ zj@h;6vK+aO9$?E;S$Hb$rg@(@I>J^}^Q3y$OuNG)Y8V`K)rdUQ@w};y$2)o1 zD%8=fnytb{p%Z1;Wd&?L8h;t8aO(piR2>ITuobDSJJqqw$)dgYkmII33QoMEfHS7hJJ)!t0i`4Zdb>2MJx#e~4~{ zN6{DmBI3JHzs4bQ2YK{xFe`y1sDEAky?h4ScOy<|VM%}^WFgsGHsW}n3zDCimbcpj z*#l$jE?BwDT77^0J@&lJjV`!YGt+W+H|dGdf^C%ArP_0F=aiWn(ovj$lau1u!T+#` z#gZZL#<~KdU+>qweBfa^tJ1R0CwuSUI_tiXXV^(gGtYOi*$qhkVjY$SMhAYOk#KIQ zq(&HVCp0gPsbN6g!yVU&f2`aINBeci`3LeR8yTNQ#?LJ@2s3#b5^t((HmIovHE*}D z4eRQ7+ZDBMZ{Mf)>&Cu@i5`L>QtoVByjk#~KU(WLa0eQnTg%TQ+z2bnJF7G|GmU?9 zRR-MOE@nNn>t42s=E;wE1ZsKeMo=JkK6f+k3EKWU4QINFdKePfkJ|LmjmGGBjy8*@ zk?M$m9@r+jNiI*y2>~A%c^oBouk&I10L?gE`^~*qO>x2ToSB5v zlGW@QpxTOj4gX$SDAK z&JkKOr?_1AxLjw{z?+TzTeb?eMgv;~sZGTaGvRIM4%*(Gpu`wEkfes6sVd-!j(Nj# zcA-~NryZYJ%NylT8Y0?q5Tj60@>`3SkCp>Dftmtj_f|m-N>;u_sX!;Zy&(0ms%H3o zn<0Ov^u!3qoZ9o5Ik_#Y1gkn4Ul@tuyxADsEvytGMe)!A-Mu(#6S3pE$Ls6s?`3!3 zoE`t8I&?P?lL)M=N%(_xUcg6e!6yA~5YmECBUqU&nw90k9#I?Cy>33}n!OMUF)Um- zGT^Pn97S@nara?%s0!yL`!2%5IJ6ZXW%ziT_XWD~twytEdv}n4M8RHGDr>2itt43} z=5=};R%@qlz*x5&_^H)e(Z6&^+`mdQ)@}a=Z&rshD}hV6pLS=d{nQ_>>=5%)j;)e> z_u^$M<$kVO7s^dt-!kxj^+e9~y(VCd2@i9$rsa*#tD15vwseyZk2vQ@v1i>)AM7ud zx~Td&rJL9jJfV6*eM%{gB2GVZ#9#Ve%5r?tIMsUXl@>IW$ ztt3N`9>BC2+B{D>hnveF!D`?f2qA6r+cG*NW60QF#rEliGLkbR?q-n>>nKy)og(hN z4sknBQ8?+;4=VA=@0+~1)-lWBD%~{Rku%z5cVs#8_})KURa5KP{lt5X`)ilf*5V^^ z*TZt2hNJBhTq!w)MKye&2f7f2x30l@M-~1!$g3wr;<+8{cG1BEvYbonu)lZTux&5t z@e!UE?YtBWBg^+MYhXe%Yk{cssbDWV2=&~(8fTW{w(zIfWnLWW#eT9S)wTD!DKnF1 zx=O+2f)}wWhv7$NVq}}cwGDRh(?E6}D`o@N=3p<*CAnr5!VBBRhE?;owz@U|SkmyN zYa45}(0VdF)isnyRCvlze?gB@FP64j%2JED-TrX6bJpY zU0`(WHrI}p6#H_l+z;skd!mLDI3%Wq(>a(_zpkP|^16k$HR(g6@0*;qC~ZIM+U(gh zYaYC%j^t@$?S5QYsLgWlK24bpkB6_CGGl2i42M=a)`c@? zbxU2Ci5^Kz0fNmpVxcH2{S))@*!wb2k5n}WnRhqNWuc-KX+@se+8X@MBAiVIVnrCg zOknxik7Wxe8)&BN^o{;z|4mnvVR4ERyEvm7-p-aMuy8k9j+3sk%g}4HTo_$>3-VyB zfa>gJaDBilU*X)sY&bT-qiWe4C*S#NPdR^y_k)w%&HtX5vivO8o2~UNthgByHy`;n zjykxrQgR&kBsRV1!n_`VGr&8xduzZQ{Mz<2xMW| zq_lEZEt-86C2m^h*U&IIAv0bqH=EhHO0k}Vt+~nx=5#B_#ZaC-zGz$qjpAqdsGA&F zv%jfX;7Uu*<4;36tOa~z6IR1}7hO%=SHtrPYq!(kN}P(wb8NG>JncG%^FJ`~dy}R6 zbfr)Ng48E8?;j9#h)xSD>TiKzJkGm!(Hg>qlPcKzCca(p^h%d9jvbHs^G{ zx`iAXbM6PzunWOIx8uhrHA`@+qX14b0$6f28dZm147Fo}!`bo>%&>;Z8Th#ouZH$) zI6-#hbeKY}duOEMNJAfJPCW{y%@!Cny5$%q$R8Xg{M^6@RyMR1emm%jb_Z1UEIXE{;Vrj&rnva^ z9-PB+zcapQq-!dl;aK#h9t8ed;WyVU>%fd3^u-kMvp@5>f&Wh&LXcguvbd;hzB~U1 z+oq;24cH(+fBj!Qh46ztQqzfU5~L3&DM9+wqD6l@h5b#V#er8WVVv9HmFiQ1(Ij~n8 z(9ApXc;W4}Eo==GZ0jaAmB*dJ32g_Knkl7;`Dv~~4<6XF)v@1J!o3j+60m0$TDLtj ztqBwi09tY+aHlK9vyBzhvDFE@FCU(k3?DEicKmwetBm6huqf~5v7W{p2b=9=i=k=K zp`=cw*b^I9pV?H~L>s%Itu?4S`z(~hEJxm~Oh;Kt#thVtGg*bDY#tQHp0s4N=^bOA zZ4dU@cHoy_Wam9usTR3AG$>Norb*CzH8_zGH6t#4WJ^n-qYy`jBHBPdP7J|@!||R5 z0O34pMmjGo*$Nwng|yM0UP$WkKj8d1`RW|C=jx}V2%47wUmA4$Ibt8to%1NK1?5dm ztQ^it@NF_2HaOT0;^n{GnU3<@>s-XZQcNdxY!IDIe*^}Q+@KpGOr}g)go_>`=hz=H zG32{pv7ojxeyAnIg&%tqFmGi$7N?PQtRJ>e&dqYwY{zlydCn%Bbf$Fz{JS`|mvdE4 z&V=bMS5Y4K{E1C<;-J^^dg2%TfJ9b#7g^4u;cP{8KU5*=#Yyb!TMr=SHx?`xL=?{C zW$W=!0YmTuY~8ZvXQ~7LGVuzi{EbX>X*pfMnxqeDhZU@>9ZTRTpCnFU<<0mFG`32& zvng&I+fU=0HWy9-w%nRqQtVUp6F|QhClgrD*6;NR5&9=V-Sua%$M0R&a17Y1*ZHuY zhmjRQn~7_9+&q{e7tYl#WS?|`^b7rk@t@5X)SRt%c}_W!?W_yxrFG51Lp<#cL^e9e zX8sO8?={G+;a=#~CeJkXq6VECp7*%&6w?9CLkuUXL)>r}Vo9}#+fVbnXL;dD;LW$R572hL2A_ep6G5!?U42_qcv}PmibOrCE(|{9$9Yc^w;* zz^-n9)y0-O`C?GAzf}KJBg^1Dow3nib9QfT_VGH%)E%@!STK${@hAU$9k8#>%ivDybQV07>VbsdC(dkexe}^Sh zH)XKL;kqhe&s)%^huK$^32cML6R=)@{6-Kvl6fghN&!O%%?MzCcKRNDrJz0`$O z5DelYy2h4c$*{gkKc-O~-I1r4kI?BB-V~6xQ-e-fyh2wazjXl%> zv+NMs($c&4ZK~lj(sQ=}UEOv)8NBD^$FabBY3BCgoW#ZruG`UT{j^ygoLs>n3m$jI z&(oRq(prP3g;=)hf6yZJ7dnN3C9RSrv8)ASrB-vYAq_MHR<#jtidzld6rKdR2g>wU z!5lRd9tweMMX>?ZO{}<@wO8tIps)AfT;UfuSd83HmeVRo`2}AQJ{#=O5#LnYpUEsh z1ozzIViRdC{5(dIRQWZKH$?nVY_u5#?#2W;j4-^Rwc)^cdT!y%JK()7V8_?Cd#Bp( zdH0n5r55!nD{JH5pzvQ;0~`5Kz9IJqe%69TLYF$`PQ90f(A?K@YE~^y5Dks-WMQP^ zq>NSn4#R#e{~dq)M2*L@pJC^5THWzX?A*m9rX(U0us*lO_tT&ga251!&Jt3Jtvbb* z)4{abx_gbuP5nADuAwzk34RvczP2^7uYdnr@#o zJGtM4R_N9Y%Xl7Aw)Ej(hQXQPLuSL@>9}UYD4vXK03z7PY6O1^jAI+vK1dJW^iT$VTh=E&aWq;uS~< z{ykjf#VN18+Wq*k)r1R3T!RBBlJPrU0l1W0C1T+SZ7>QE1*9KDL>OG~h?wV#h>H~kt?bca{_wzdv+MgwE^A@bmA|8&xf*a6Y!&J}KFx%dHAW_NvX z#GlULcUc%&bKxH-r=LbRQsV5Jrt{bh_6;@ctIp1bw59`%_ndzFl>T6+D4bt`+ZSlx zUrk5lr)DswD2^@=`efR;_>A8D@!eNls{~r zoH1un6Ml#Na9SQ1^sTPx$x(cEjy-DvP=AdL9f=s{^0C{^Qz`b93Z)J9Q6wB^72Y|! zZ~zIXj*jRt^^f4*hPnd_(p_8hUj#+au6iRQFBy&E>va#b$Wj=fS!G%2;s-c$>dG8t zE7Q{+X1!CXt8c}Ys?=OxUb?#VNM~paF5uRZ!>3 zs7CsECOm%$+D=##jYvIRp%y`RAh+H(rjaddXVb8ldCdZmyBe36G;7`2C9oy5N07a( z!Wao`M-WYg^IO^7u)ufK{LWydBa7|?S)Ga>JFU0^zbVT37EAdVHpuBapSO0&io1Vm9l&Q}HeWM7EXw>}C6ibZ8m}0qW?X%vs&+NTF}7__w&ho*D0c}LJX;)N7nbAeDsrFTyWI1noVxK z?UL8&^@!Rr7t>;9{~^!MI-Wl6Fk?Zf_1@EJPP^wxe*XSL`mTkk!XMIgbnUk^x`g7x|GR9sV|7EhH83J!(LbhnATip7KKAoBWFF*cCi7x@nGh+1$q@2VSRZ;>7+% zaNvA;No2)Q=bu({dap4%S*+5N;o5J{D$FWOx{ltV8@O;T+2zO5chj$w6SKHL=HJ7z zQC^PiyP_u3JJ3+GvY*%M95TIZFxR(9FH(nM-d2p)2O_RrDs~Gd+R+*;KkTJgPo&$& z4K?2wLMPFS4xfEN{5Nv;{be$9rNQ zxw@y-{0cqOHc`DYNb@qhE&hC3^9Re)s?SBDO255M8T|>pyKETg!!l}g=x7?4B^r|S zhbBV<^Z)1#R_}hGymlKUw+^G!Tejx%Trb4QGhB$%Wj7#AC)KaX>4IHv%n}aVnAK;! zborjLY;M}(#sIwyjB9No;oEMjUy>oU+mK`OrTW~_W6wW-?c9UpK94*k|>^!ZrzsNC9P?{ z^=}sqowd!3=_fo~J7zWgwxYeZ?zWmyE8?0n`61YSXVg?y)QtJnHZ@-y_TDx%3*I|% zO6}-Xb9tTj(pkFrTQzLOZ*ug^<5v%!{}p-`l>B$a`TR(bu0-hKkba5st0i>b;1d2m z+K4&z)8lEg&b{!$BPTscH){S)_Zb(^g~8g}*Ak!yeYfAl-{kn#+4>an8G2f`8GWmO zZ#|BE|AHHiezNufdMC2x09w}2w_VKh+JkGdzoLZFwZnTS_t8&9KL5qSg~jvx7SMD~ zF$bI|rJUHNniH3wqfY#RFO~kgPSB6dN7bG>^V}Nx4LaY&T(RnlbIs51{&kMtd-;eS zQ*F6oF8!qL#w(9LpYCt0=Ii7WXhHcF-E2OOKO40As<{Kt*UqRtf!;efd1>v+^B<%{ zU9(Jme0j)`pi$yd>Z5qWH`WnLg|`kh>fo=?@BK+k#k!xp_)teRK*K7ab* zam%od8Qvk;WBd&^(f-bm6<2oAmm=so%DjEQ?*6$49sN9gJmc4W=gyrsaPr)Nd;92l zWFNgW^~US3ztMN@3=+;*xwenrlsI?B+$W#^am{u&@=vHItgbz?_KYvjq|a2G-&cFk zjJfoQz}IKp@`Xd_EhJtu(p0anlYNN^DVKDmkps$5`Lbxd>fy>m~z|K=ha*=q?bM<)SIOnJonId%7)NcW8uQ`Li)I3 zRB1c2wcH!gM-ZD&TF~0t8I{Y6=q_v2)7o2XY{wK`Ztm)Ap=RAZU5ndVT3e`9Wnm+I zrPBN+v^>ADIa<=yv#5M}Uuz%J&F^V#ozc3K82VagwRTW*nd{5#ZIxbX(An2f?r!W| zSc%Ff%q~|N7q^yM*(!g5vC^}+Qf^vWrZ!P$xvjUgC#o#$>uu>;!rpbZp3zGip7V|F zk{)VNZfdNwvX!3J#rU>PL|=7S9JMr+7j{)x10K+aBU^hq8{3U5a%wT(hb&Y4hQ2(% zlU!8C47YK(k9o)q@@UX0iCUXG(`BAYqvnOJ&5Ozuiuq?jYt-1=)i%gb@8CeWX;f}r z*x1%Ns2TfXTk`qo}w4_dIZf&E~byOCReqRrDQ+r)`QR2}J;z~IxO)}`&OooUy~9eus6XGBe{3n)I$YDZ(wB28hXx3M?s;LyAJ zdWraSX>R;5o!e7M>Z&Db>gnh-QbipcXf2MN!BPf%28)mCsizUH}2{Wff^V_I8=wIUI6ty(VNMBs_N`?o4lyI3o0oz<&+?cL)Q*FFNDxX2)BB^7_2lX)x z*O`q?rc$`ts3Y3ZAQ>Q3Ja%l*@52{SO{A*5qpL+bk;l1NPH>%2xt1GEG81zN8`Y#` zs1N_w=;1&7aS8*WFb~R(afvI-{wltFfh-vSBK`xub>CL_?j7 z(frfc-OZB;MKrrR35aTCyr~tbJxZD+fF3Iw_nJGoyd_iR-o^zH%{MfqQT?$&H zeLTKeCP~q>#i(m;TgM`<~W+hI_R9y)!u?q zNYZ7*oJcdH8(E%8pt;=E67_cVW?P$EB+-T~J(FPuS)7zeL|^!A>Y`IddspXzI`a>m z7RayW?ufF6*y$TW(|8h@m3%XJ(4@vWSz2yhY))kup@Rn_Pi+;-d@B`kGG;4wEYobz zWs;kmz_?(KKdDeRwa$F*xo*O^@e{^P96zyc-z-ff(;Ise`9b5y@5krnz8;!kk`696 zw$pqQEzoh39%Iez6lKz_ytXe_sF!;=@h5lnv>eyd)sahjdCJ`UG!zj}@29mk_l~E0 zB#3)2K@*M3Gz5|}F3zdRq{s=Rs;RVgm&Z376>}DmlMxBJ8(Wx^Hq1yHqT|gW$>z|g zTp?=OsqkQ;B}awEhq?SPW3=5&Aw09R@+r8|Y>K#x`f`4I*OD?-5B=Xt%K~^Yp_xx` zl@mIrc5r3zm!Oj>#XxH6<4;48LUM{K(+t)c&5BPbXIp70W0nogU42Q$W>QC{=h~=; z=Q~W*v?(;a3iNL%v#UqJxkKROOj-A_pn3AgHAq|@;o?!SAXTCdj=1xrpDgpg=IYxaWitV63v%M z(Re}i$pgwx8_9%20X0*B(0Y;1tUL-#P-tepbdt) znr%J;KRH6p#mI$Up*cR6t z6)DZ0l_;5`_}s_CgwBN(UZEz}RWPMT%z}eb%?r4sdrhVdoWlL!YS1Vlr>P@T2WUPN zq0tlP*1w{p@BK%#A~MsA(PCo;WGOZp`Z+VzQW#VE+83R`rzIQMg7&T^UONw#nq5P2 zLT4Lw8VG2>wl8uU)7k|LMkPmQ#iWzWF5RUd6!Q6B^-O{*5iP9DuG`N^0!^-K)BAUC+Ni6%uFz_f}? z$Qbfh7^B?msWZyi$tRlyF14P(Y41wb#g&%6ZfmZIW`#=BOJ{OQXD>Hf%-l(X7W!nw z0-kitS3OU=?=E}m}At} z(#>CqjLd<~N_!X0#wI9IpFsVdn8;1b#FMAan3j)Ph=3Zjc8*J$HPb-qG&3EgbV)Zw zuz=3`v^J)cs0XcQa4}Ojd=_L&Jn5KkQzqqS4)Gb7LTqbqquI|SE|;IO8qb7u z-Pgp$?4I?dFpoqg@? zJWm*1ljm}WAt&uKTYI`9UUBovQM!~)5l!VzI%$nxNc~GpRHt;|OLJQXS4bmG<$OP2 zoN<%xP7qg8_cZqVklNN>^3)U}eG`d;qjNx83k_&<(x9Gf?4=x#%k6D6OOY1kmQEKG zOA9GTEXmarhn#e(xgKFM`i+~h&S6rjdzW;vl&)F$thJEO-OOiXtj$9|sw`^jrV|fc zSNBL!o0?&b#&(*=B)1dtg+7CACuEb~mDS&_FLeP?iXJ6dQFN6K_{Vu+7DK1&tRt(8TLjCCAS z_wd<&{9$}5Zye+sl?t~rx6g=q2{SL`EYQwU-a$Qa0?7l4oiCOu^xdjxNo7f6GFX#i zw9qvvZZZSf#7}kC$ttwI;%jIlGuI%A<5OqOo;GLNRPumt`1SNq9y&~2bKWXR8yRBc z&w`F#9;C#@wMewo9Mxs&hD0XrB$Y`iwYPNB<)AT4H*!oZvo_J4$yH+xn5l|px~@gE zPqBBm&##nQTKPr~mjDfjN-}eCEUEdAuLMkynryYwr7Ne7Zd;6xcpl`FH7S^yqS|U| zZJkdA*G$FM%0bW}G0(L`d&wXt@61}2lFh52uJ*;|@>a$z^~J~rURsxGD!p5760Si)Ue(hyHAu$y|G+!Q3K6(Ql7Zx@(*hR^ zAtfGsgLIObk;NAEfQe9IO5COqNlWV{@~n+d<&6(n{v}4 zx^+c&OnLnorQX)3E-;HCbI{x>qY=aRW_t{CLYk}zj4G`Gn5*0tG3s5okVi|~e6u7p zBEFQMD~UE*Nwjx0_L^&Ux_~eDbQ{8^rF=C)ce=Sp^)`a6I*bKAzzfpk_G02NC&su! zE9!;w&5fwViGOt4huK;1UqAmdTVH z4tAoysbg!05zOl2p zwY{Am@tDCkpOy%N*tp9oeC^ed@W}*4Q&>06<#bDwF6~L-bi>A%t$O>+ZQ0k^O}7oo z@|ZzB492Y&^UO_yrNiu)dxq>fNoh);*^k)inw(~3x`Z?LQu33JH&K*wjYY5X^S&4A) zVle3#IiEc9Y?a9gtuD;XDkckW(lR zel=n)x`b2N4Owe@V>jI}w+{ADP4S9BEb`;17Mi!{@6_2g+yNR9eGGwSnfYdV=NqGR z7UEksgPo#lrfxT5$4)zrDs|eiM8#_-x<6DgHx+3Wqc+WhSiV)sbBpDsPU$vJ)NC&K zwj*3IcXdq!W=f(fA9||gnxA&k9UQkl~RR6vEtr$U*{6e z7WDwFw+0zACmWu0X~yVjqZfBDm&zX~B->JFcx07KwdupODx{SlEga1xoIXM~tCA<^ z$rCunTu=*o7glc^I>O6dQl!_4`2N?z_COnZ)3n^u#I3rQ(7*H?#%*jO9_%XL;qB?7 z8wb>$)XeIrjhn>=(@t%-D{{zv;{b9?JT5xL*d< zG*+2urewi^N898Y*+ZfS`(yf&Cy3;NG}K$>NIPA0&<*lrJU4aIeRzH@VD4upw-xC@ zephEREfnciBF*B`fM?)Dr=64{v&yEjO7258wMZ+fRP%*lx)aqRH=^kNHGVsbd*4h< zx2l+h2NGD!^?>g2;*VBZJgxJIC|R6KI;hAOk%S)DCQBsq=#Y|=+?Sy_&rEDxJ#BP9 zyqm5x>9G^9vXeeA?P!nl&(BsX5h;x4e^tPN(N1bg_q;G~xv`S$C72WFaMU2~Prxl8|ZW%8=wYViFlU!1fX zIY&$WCGMF?M3*qf8ylKDDi_KgnxHgIZ1i9WS1(D_@RcSep1(}&$q|0N#?0#G?U|$- z=}r|f4|dP0*z8dDlC09-O>K^3Zb%Bmkn^>U@lW$XXCs?8E-ABU7T00l>sf~M4CdVl05bO=Ml3crs_sIa|C$BUR=+R#C`fBn#5;HAb ziBm#MJvvOu%?MKi>2m;B$a!T<9<6kDQ9;lo9ML}cigHPt)W4oq9$Mc~tzxQu0zIt^wDwf365xI+st3GKMI}J~SPB1E z6P?{ZfSt9r9pE|@#fgIb7wijc6A*n#M4LsGXw{I~BlfI4V($S6SJ{L8deG7)=v_3T zH@Nw~AyK@!z$2{aNP!tEY8QBx6`d{cQrQlTR+<;L6XxXK6>@Aq)e3+=Q&A4^Pb$g) z{zXMOz>)OkKmSJ+2DpuiaytuLr=kqt!z%JB2!4K3&E)|fR#C|(DkZMifBjIhZwUeX zA4N%jrA^Qs!UQ8jqj3Y(+SF*U@n!?)yigOQXa^-K0`9D$7|>RR zH%mM#t>06v0^qggM5N)AN@_^T=s0gC(ThV6|Wk7U;YL!5Aw-tRh zQ5Hl4s#Op8Efp2OeUFOjKbw0FxE~a)nrP+S{hy`BC7u_BMm1M<)gF>VQ_QbLxJwFu z7Wjb`Rnt0Bo8$p6QBm&O0$0%QR`@^a?gZF>Kb9sNX_FYxYI$=74&9?#1;Cl~1xo&p zY<;px0(X=%D~Y-Ue#wfGHuhhiI}h%4%H06iTbpPOi&n0AWf?4Pr1W{fqg2!YSQJsB z>$}!qol21JTBcT9+FV_W0qay$0z6nnFQ(>X3LwZ-PADC zW5UoaYDtwoFMG)M&}jSs@cU{Y4~Xtal-)AHxIzlpEbuA~JqAREC?>!Z|J|=FLrr3U zF&}Vhuu)5QuyIS*yZPclm-PfNWpn9% zP{qu~;>>31R1A28ic0YFJoVF`hJ|xG(K0hG^ez*<;4}seF?(=`s87V)}j>|96pW=>!9~N<~G$ z>s6Ekyjev>z?W5&8zJ#+tGyBf&QOszi~f(Dx=B138ZF)z_-6vGBi%Mp>lxX$HW0{1N>`sDn`BiK$GrW!OW1>bF3EN zma0`ohoaVKd4T#xp#@e97{Vizy9fv(8UZv%xm<}fDN+0HNSS!1>jYE){Jn~D506YV zek)s=rbca*h{nn`Fmr+X3rds+gcdoq=D~BUI|+i~LRHLMEbvPziUC)vs02TsQ$M|# z>tt#DZ`pD$*NsT*?kigwxnM%X+{_I*R74L3=%)*9PU*`K-B9n4P@k49WexBv8dkk)b4XMVLns0gxfO7(M0J&>EdHv% zbynnRp-8S%kBWc@l0v4j;d+orUAl2n+MQbB1;CF~l>1=oMDJtS(m*(5n?#h6ZD4GG zyQD;Uz@I2l=@$Ymk$2e%qKlL$bEUv*R1^cQRgsr+gmmbr#Cfi6;1fkgT?}}ZiZTxh z94X$iCh*Q0OlFC|t5g&tzL!;$aXaB@@%TDv!sNhrt8DxLsNPrExB*~v5nmVp?<{>2 z8pN=PlyIAF3DU-0pA%CJvZXo(JBlI14puO68>A3aEJMC*l;bo?*a`8YB4CHxz}C$Y z1~m=<&F)_2H@ho#?M(29!zQO#!h@s?4j-ZiRN1WYLg7U8FggBPo# z1;7#8CS^s-{1dlJ;9q4+qJ6ecL`TY&ZZ`qWP?5K?^3CO8Zklq}!`vH6XF zxKl%k0iRM)8Sr;1ivKL|6DxuTHsBZmPf@2b?y!SX4-1i5%R>)Y2`=!FgqtMiTpYmn zYd^$*$7rr{uBWUCuOoFe281^>yTYN0v|>%*uc~Ga5S zpzeD!Gx`EyQMuDqJ_3UGi4+0Avqb84%HtcPkDrp9JfpdZT`dfm(N+ua zITaP%XlOLKp^(VsMtQGQq7q;#Sv1742Qx#W5@0HS)DT9|>C_MqolYsGhS)=*siEtg zJFJFAhkA~%%++(99U2|twOJzNf+#|5ZuHvtwjT4^__p4a&OLI6#8aNu1pZjI8$~O> z^ve0mo|fI(9nmra_?-!fNLsov!^RbABM+F;TuwHsX1slSS?!;&6SjWPqrj_L8<^bAyL9)|3wj8E(O17 zRP*Y2$C~245{&(5ZlkQhXC!*oIBwJ~TZaYZ)NRuZG?Y{v> zezhJ)R#5-#zH_3!w`{|XaLa%rN^V_95FD`sdAttfQ)M9Uki6oM+0VS`aQc3`kKf0< z@37YZT42cU6jhd=N-sQ6Q?pICbqCw}+M*mVmU!v!47B%XC z+XVW5IVCgD*(^rikKZ-nrZW+oLH{!;FdU?2u781Z7&>Kr?$Hef*EJG_eE6*3hew;Q z{^F3xO8`9&f`zxG;zi$ik{7>Ki(Moh@~>RdDNNk{p^R+s&huyoMUSNA2)EhI(_+ zMbhf)8`Sz4Y4zs~YK>w*pVB4YGS30GQ7GYVoAnZ*-e`0IuBT!)ps3(}zto-S2<%*{ z#prd!5pt@`$#(r6@u{@hNhZ7Xx1KDmN*mPrd}(##2DN@!X2Y%J1Wa=*;CK~fCJ3A& zTN+k>qy-ChPqZ!nEbx65E5AFRKN27-_=tuSfwvS5xc2F@0}s!=DwTT8^N1#&_wb%*gGWY zPs^5)>DB=^bNN{Ye|OeOi;)b3z|CC$e``v>&g989W9B)APVG@3XtN6t0x%Iyr6)ygdm+{a)UZe(D|&N8gnarweB z_x=vcu!zSs4a?ANSlF|yn!omTO#|HhP=`|kV5*83iwsapHvuF<{5#2*5oMIs-}P=z19}kEKrPuvw;)7}dq2o4nR3%gB4qVUxr!6( z*u76L?i&2NL=8wkCPT4|UGxf>aXV$v1{REan~OUb3Bye-mbsC!453{oF|Z8rAQ+Y* z3b@O%YW|{3C?r6Xhy;(_|5Fv?W`Has0spru28kt8ZeB@*w4y|uib1xiB@&Bz*zodj zlgM)w#vMiz%iQF!4B5c|Vj0e77(pz<{E28;hH$Y6U>R1kxYx`wW;|fH{2>7Xz+TQ4X_N>LHukKj5CO3&eUr%fM6oW-zVmwxp);iOKw+!DJu4+U<4z?+n59{wRarCDHJk^}zq{!r4RyX;!veO7()fWJ~qSH?uHg zFk0#4<|gMrDP^!S8!#-88X(3b4O@_p(!Q<-L~_UtzTCseK)m(TiB0kdOyG@8O6%dONP|A502b^cI>%4FWoaNT8 zvmc6+|F+HorkuT+Gy~4EIFM-;2b^Vbz*!atoMo}=?91Zhe_3Y%Q_ij-&49BkMrMDZ z_Yh*hRI<5cz<(A8{AY2%e-^v`uMxi=v;G67{Qo^^2K;9+{7*T{;()U(hO?+)stgtf zoMo}=?A0>Z*UFZL>1_g^up(Cri-rd@#3EoS#1*eB^DaxtI~E5*WN{!w79&IqS0TYJ zBByCP5H%CH{=XnE8~s_fJnn%%5E-#;EpGyBuWtl+=LOu^`lUAU9&w`y7RWU3;3C!D zq^d^{h=5vQ2KuL-sl2Nkmzy%f%N&s_qY;Q~*wBG(oc*DyfYz%>Ha$0YhJt?iRn1y>ELt=qGu zta$d4dKd$aR;>~s+z2cMTp}J>uCY21$jXgB_yBl_9HMj_D)0s?5~Q0tLDCsSl!sQk z93qi67f>f#tCjJ!GM}xL^|i8}tu@Ejn&WD%7QtHCQi1^QR8j6Ofm;npK%j(HOOx-) zma+k@KUuY%l^0nspT3&+cB;>IgdI7LsMY(eYuC^kHOgA8! zs7>;KQ&r?m`ZzRGo5X<2Ra69o8#Gz~tw$dBG$H7gExjDa!)(A+gch3WG?2pg1-@xT?*R@?^r=EWn<(!StQudz1muGpgm6qa3nvWTEw2)$+^H z)0zV<8~q$Oy|G5`Rp`?~1TE?=lWwSPDyopX*&8Xx4^tBbKzzF^@FFO*j#sTb;A$0l zr%hig1FdhURzo!p(Ud-e1$c{Um0c}3zg(NdfY+(01o&MQdFzT;4&`kVz^hc`jjj$k z)Td2iz?CY>xlXT>Lp3$Y5vq2;GgVZ7iNJrUr~tU{FerM-2lrO0l?N=Us08j0RFnt& zR7Ist#LPBoE)Te?ib~a@gIRiE3$S0g8{ol!iZXyUIj#oD_C zz&BJ>|AD}Gqa+?0zkp>Gc_S0trz=q&@DUZ2!2OYm@(P7}Xw+9XMDPr?mj^7U$m=e+ z(68hfz&BOY02k_%C`rLCsG*^kdbLPcj_DgC$ z27E?E-tf6a4&AFwVnD0q4IlL2<5mmMYI*&!t2qC8+2ZUyS@w|<$lc*{s(;m1*x22dlLAE%1A^)f?$X)%NMek^e$f6VQfC-e)$DBNw+r%t2R&VluT}U`?Sg!DGN$*{vF%k%EQc=FCI!I$O_Khi zpGmFhce@UH7pYzzaG~hYIO-7ys=&|!5vbt8qD3`m4;$fQ0*muFp({gEjuWA(lf3BkX*94B(G$~_R zW&qx!A}@75cOKmM<|e)71@3>Vxjdld_EP6_XTbfRN|XclX6j@H&~kgHRG&KwqFN=& z0wNJZBJaHK6U_k;zM)H6fR@O+4g}HN8rodIAE~GaZX24nIs*}M#T5s&?Ibpq0q?Bw z#(w6^UEwrNP}#-t+Xt>(F@PfPs|QK z9~D1Y2KF%U@G@LFKNt?0_~xE$YvULCz@fG3rDNh^Q$y)}sW$FO*lhzivwT z1$?jVFPExY3}2!S6ac@gqTB-l=Wdzk2NvTX`ig4h0avT22qJuCIPiKPh@i#60sl~$ zN`PRbc^WVhFIf{9p4UX1d^+GJ;m1PzhSGbh#gJF9hhW$q@W+-45H18_-amj&DTd<>6mKvA=k3@(^ej%kegiumJdD73I1{C4M|5TdM4bwoXJx zZIf(CblG+Z9Iu~!^Ug=UxjfA6rQF5+1)gR_@Bn71JOCdTPv~6(z~@v{1bjh7F`)I+ zn~mY;O348i?RA15*Sy5<2^_W+k`Qksa62nHSm0zUnj$c7MFoNLt!SCR%dO~J0>5WP z$kySStr*!l&x+0$c!L$8H=nnn(UPToY_>WC;(MVqg&_0jd(IB<@mddYZrda)W!aJ@ zO5_SD6%zei;IFMHQM3QvBx#0S`r}bEVGoQf0~I=!WtJsD-xV&Th}ulQOcIddpB~_! zzM~X&ihsJx|FrPiZ$!s{dupC@fap8Q17M?V1=y~l68dbEc2Euw-qT}xIR8cMj2s~H z6?mBcsnpcYYA!xXI%P`r&beO#-cPma5lW{O!EftiJ)E>2d8=g*m4yiR>sClyx5yT9 zw=<3wy_CK=8wB)&XNjvs|6#|zTL{(c-{k8XI|2QmePj*8vYMTj#ZIbSkPpW(rmOLd zm+DHj3-aMOdbJwgxx$xf7vw`ppnt0I;Y+=#c0oSW#~(kVPVgDpRJ$Nwt;}SY*{b=s zqu(yb2c9+3z8YVf98a|i^5J+S!?haU!@`$p7v#fnOas;Uwi0`(c0oQI$B?haH&ggh z?Sgzbj)}h--}SqS@p!JH{it(0HS&3pfsGB zo-OaQk>17q*a6wbOg4Ov9lT}lWYK~Gy|aCti161m1Fv!8mA#Yj+EujjR?pYhg(ua> ze`peDbf?GEEoQFKgcbnpOLN5^%F)+tE5NPv9fG2pQJ*^xqIZ=jKTY0tiDgR_^(TSv z$d=c1cxlGk%YU}LjBhXFY7G}7d&+hUedhG7R?}+u9^1(4^Lts@80u=Yy;5{&$%Mc5 zc!!9#jLweCoA-NlN2~(*eX3Fq_^68Fp9%b}6}=(Q2JV&o*3twvsH_0N%_#)7Ox_~r z%fe&>D*|4tE)_uZQ!9ewzgJNa5CH^c6F7d5YBh`#Xy4;%SRkVFY%9PEMa1C&!(n<} z<8}&(keCORtOSU#HXl?0h|FfqyGe^M_7u*+1dyW8X|)T8nrHWsdN@eU0O44=6EQZZ z*HtCT=$Ro{(@Wu9O4z9o`wQ`9TJGO>LJ@lR2(F3rJ z;OW6G*oNxFk_Ci;P&DX+IW`)24VQ@=Uc(59Kx+HfOT%#CL}d-`UzkA|QI7z^@?Zs2 z6bAX=qi_-a3_j{6c9vx6RM~D~Yu9ahoHQxOma_=lA~Nbaz*ZG`^G&xLx=@=G054Zj z4)AL#DgYj!FUfe70`5Ci%b(}vkZs~k>OPCtsdov>9^wmKe0vYB0&Pxp(;8^Auv(k- z#QmPQvzw;ITYCj8{lD}WuL>f8>o3%C64%K#KEP!v@|F;%$)P^kQh8tePOC{TMCYq^ z4)9_Xd8NBT4&9(l3V?5^NMCQu$~!}W84W~Nsa78FZ58QDh?d9;5ky~Ctqh=jchIYa ze@N@S)I%@S|CA=Fx9tFbEr;kYdJpyA5v$1J%vLd8+yf=8ckICg-6NFi@%dEo^%C{D z0Qes&%H1Jwl)l&J%@ICP9$IfHQ6BJp6?t>OaItZcY|XOks-lNeEgaEG;nXF?6o^z&v5d!%M2>RgDA;i}qZq-EHLk6&OjtIAm zYTlA{{;FYn4Dpsn7f3t2okcYd2;+h0LeGlUKV(bY1X!zYzvM;>++N=W@oGGlCQD_@ z`S_;bk7Y~GkGB>EFolZnIB7mZ)nY)X1ujJEggK)=766y2DECc)4_J{qGk~b1P4a;4 zDysL1yo-~wq&3VBjk+V?OO?qhx7BjT;}LzPS^(_OCvNqCYgE(#c)N<~_m)RlP5M-< zeu2OpMkaw%Dt8fhm=!%B@I@>7P@sJj<3;Sdo`>tuqI(j{%Wlejy-YywVo&e)lA?Nj zEM7vy2$NQ~HR3qJB+<5VyB=PV$o1(>;cnGzmI2p_i0`kIVbCV8>?g16C(jFJO9^5d z*=`Zltigr-;%E%SduXijRO!kSWb0@^Y*P`tLEbJ8kssBE$tA!yRW#?1!vBeEDO-TZ zE!~|%)Oci58=b-VpvC^tvqV}iQ>_^A&nohk_y3kd8*9R1z!O!J16-q`BKqZPn%3f4fry+kgQ`W`bW%a+ zsN%r9z83Mng0UW^m zya_c}xvIQs*zN-mVV>S3T82XqVd_q4xqXy6gbW~z)FHPUQ-?54F}0@-xqX&8C3|ntA>ppfapM-VTrWE%{yBflC=Q zu`ESExJLN_v|iHWJX2DS(&XjXwIah=juPnyL%MD-&&vt(Fc}&{sl0)4o~0^T;VI&D z01s35gdl3t63L-NQ1mn(y6y$84~9vGH`h#;0qay0W7O=SW#!FTc*$`e)ylY98&g>w zv-hN(yz`!0e}TS?wG9jv0Kc?dBBDBd zc3A@LztG!D^{P_8qt-KkDe4zCfI15+DZQ6Gy;a*L?%gh1y2Pjj{=Ucp4^Cf`2u{={ z4f6$FYDG5k1nn(aEwbgwVqa+vCQ96+%fNMxa%BKPZ`wU5$6t_b=wk3TF@`^|IwG|y zUiqVC!^hyji_(w=6`a8<0)cUcza)xG(50!XRdpDzkRo|nwlo3&_p`6>T`%xeD{>PG zq8F4X5BP5t6+yI4iHdg%e9VeIn>zz;{GnBPx&&_Pr1!80p|y!Ea|Z)E-6G_k13p`w zs(0ywcRzkFp(14F0v@ScF(Ay)X$figamou|8&T0s4GeCdQUl(_8U(Zk>(^)SWvl5L zgfE|HlLFwTJ0y)Mnr#H`rlJDiSt{~^@wxLL+E=ymu15#Tp^37kQ|>xh#6q-CwR3=Q zBiN0vOZ!h`%iRdP(T*DBp#qPyBG4T0fCFgI%?lG`+*81M-dd0pEmE-q15W55ekRD@Hz zX&z!g_!L+QA0w?7t5yMUxr%c5i)N4RsyPPyKt(0MTXxe{fOo2>1o)bYa)86?pjZMN zuA&^^aVjbSW_E|7*Y|#ac?5Wt23SIX+wKCQJYdEK2y+Ljxl+>H{_C5|_~zo+)?Zbv_-Yw97+SQb`L&2JjsokPYwD7|c~rK6CJ&1ZxWm&QFnWe& z5ZHxL62UGyD=^Q1=tT`A4`{jT!TnR68|uORx)lNbQAHWRf2pVeaJWXC2ef`RBw4Zl z!W^_|82VcEwta%&k=4pTYrndr2`wyLty5(h>C)+>0JvC1xeEloWJRAFlTbY@+rV}1 zvyK*jE#pIxZDQ577FcIRu9vUMq1rtVNC9w16%{|(D>*uJZ*2v*vx>Z->vQKpw2^9g zQ~DktwjJP;+KxUNfSsS(c7XftnPh?{h^zat zGfjjvLI6)xQ5Fz6Fsj%=I%yRIxSq_uB@V$b87zpQ2c)Y=^ol^(2n<}GsJ=;v{-B=M z-z-ER3_O?fdo7PTLKjdS1CG@!SNaFAgD#?W=%BA@;&bSrW7Mr2a-1qAz)iKjVnCZt zujGyuGbhWI=f=0h&PbF#$qo>Fm~1HzO9ftPMaUL8SmLfqv6|Fbbffz95!0LWi5BqXYkKQ#e0Jg|6s=fIFZ?mF11wL#= zg1n8~;~?%lV5@2s!Tnt;^0~dr7$>cdQZ4U(<#uvttZf2YORPwcZVnMtmMvc9cYT6f z6$MQ8_03EE0sY|1|8Vi^j(yk8IU-243-UcH?OvBHbub`(vDf@Z9lV`Dd{vl4(q1?3 z3$ovFE&@V3u*5n>h-ay-0-$}{J_m@e2a}WMiNZaqn7dEl4nq@H0#3qQLACOL=cuR% z?t87s=k`htpE|Zq#vr;}iM%Q-%AqdX@J!}Ul&*>V-Vr9 zvw`VmJFziVZN)1E4p@;J2Z$@u1l@j|Ul6^NzUiKTez4nK75%r>#RA~yVTm!C z>i~CGQDKb0c`C}41m0~$uDdYzftu5=H1DEXMR1>DMLxIJZ6l?%butFgSS9jC+uy~L z5w^+c0`aleKxczECr!~ka1#`eyLmWN^iuk!djk5wZhJ`dpO!6+Ho%WmlvB77da^K7 z;OA77!>3xWwj$SEnER!2=K()fQ4!onDN)hq_PXs|5U5rRq7hc)dh{#N`U|w9I3umg z)wMu8QJSE8;3g;_cdc$KdMSO=Jpuh-x2+cawd!I4@Ff-H0AEv4;dcUe8jhaKjTU%@ z6}j%h++9kP2YgvYMR4QWn{;mTxxH?CRtT(#Wz8reSHW@GePtrI%Ef8-l zP0&4X6BLlUdH6uArSwhr1oVU5wp{FfSzRmuKChx2;7ckhyeu&Fn))^yC*F0-Hn5U} zxhs_@5BP$Lis0T_iHbhA*KJP;fpszl(I1rC>wv4|(2s4C{lx6yYTnZV@n+Hl-2*p4 z0lC|4Z;Q2*zUiKTez4oXH$ebjhyza)SzvBIMh@k*NkNcqjuCXcYy&@V#-SG51h890 zS-|sDln1;>MOi_*fdC%XM7(BRDO);E=`jJTW&17J26Bl*kJ=`H&#EX3_&XKl0so*Pq)r4;bh{vUXmW|2C#@bJ zte9M4XFdF@9e&QG?|kfg8jGTCHkJ#k?PW`zUOfam<3$*_^F7MZ8_s&e_c#Ws2P)s` z4@KBn4~RjUB_n2K^w2zts>xyBH|xAxc{w_ zV?R)}3?TfV7ZqKtSEco+p~(>%xPbOzdhQTeJmV^4NHn)aMEF%OiTXr@KaD}6)grn@ zwj`?NL5+Hl2ecl<@Zba`if0J4PQ|`cvF}vuJLUB+((*5xOu)5bmVP4Y-P?s40-%Hg z+E_A(#X6pW;|n#s3>^Q875R>PLk1pLb8~!ib70PP-W-^-oj1ofH>XqU7!Fc1!0)7*0VC6a#Sr{IQ8GC^ z+Uos}zrSPv`#DW^0q}GcWdYAtQ33F)D#`-l#$9dH8%^4)C)#HKk^yPFMbsC4ZqG`z zPjVRIo0SVI7VU;Zl7YB&dozs*I40nf9o;NA)=0z@7uF2IMSRV`9Fpg9wOSZwJY zqGK2pGc-EH(_1GM_Ntb00q~Jw2{*kR`(uGS>6PG|g9ILKMYv6ItQ8$Euwq4v1unND zHyAjD&ni$R0IgH8?^NtN75h%bzEd%rI#ZqU&L(i`SDL8|AVQ(DNqe@BM-;FFr* z9AY_8?dK3nzZF&EhSxml09&8Vbk!mx^Ad4@^;QYKNuA295omLsfuFy#t?-wdKCvRW zZfhgscS8o2ao~WV%V3Ue6fcWx8GFhHZlO-gJq;WD?(lk10FFp)0zIs6;!0pAMqPdrv%L5*) zq5|Ml73JY)!HNJ;1cAvC>DofHFj->FclO>Mf`x2C<)pFZot=??$u9=~QyLsfQ zujO?wwD2(r${*krb~N}z-Wa+@TB9jVQoU;&uUY0M33?6EmM01P)ubgFZM;lizZG2| z5EcW2?{I1IIoXb)uLn({?`rMSS37)<+Ev5GkKSnj$BvOU+tW(pb9>V0a2vXwe^VlU zTecY4*#EocFAunl*dSK{cT-Uw5MEO&KsZ^806e$1807WLN04BVTj ztulbfEUmHtV`;_HsHp^RWFwZdr6rGSR3^$XxD1l^xC=@n8}M~?ZBFgRNvRzzTWSTk zLPc|~5%{)>3V>H{k`M%baJ0_zAP;kslqd%GO;!X58#KKDPEm6)p!LA31K)#;??DD0 zbSrn}9D$cvkvk-P?ku>GLF#94!+-92;k15x!{sq2-#k(6Cu&d+yuOG2g&*|Z)qVYN z2A&up+yR*px)E+Bp9gtOw(JG)2m0xdxkJUVy){?fy%aZB%mgP<3M>PjW@`a%qb9f+ z@HeE{P#QeIs0wZee7t%V1D+uwZU&4_r_m4il~gle+i%{28h)Q>{Rgz8$?NT$v_`1a zo=2SOw+lXZ*jxJMWZB|mf&C`!yLo_@swfNiRTa$x{Gp1nfcJ@rS0>3t@xvndu{QRW z4^!lj{n}3fu%cS?0RKZp1vv5zD+2t1ioAOu$j1z6g0lhkXQ$-6&cpu6N|^;*s-ip~ zKEX32ng@8JZ3Xw%SrH&o7g(9XV+_yG{O-01Jjh!u)%!cGf3GY2CV8}eN`BH!bA$ig zR$ngzy&sAm{nGG0fuJIhJIOrb_-LLgfC}G(p}7w5=lX%1dcd31V9__|J%Mx$@(eIi zKFl*lwnL-E`vRY-AMJ_pWA}fk4>928>O&5&S4G}D@e3ztJU~F)`13dPMlm3Qt%=Tg zD8ddLqSxIYim+qTQSYb2`!&Nx;w8MMPZm5BVP`8jNZ+P<$nCf<}ave4*O$|KQ;U zD*A8ih7`Xf-2=-sc_Z&gngutE|&o}Rl`}ptyNS2+*d_eczl=@ z0V11$`!Vp?7RVt3DBTOBl=;-;2G26TX#ATGEfOw3mdVg!Dq$Zcbl{;5!kO&#xM`lm1bukAg?tFkDCJL{Y002;T@@%~*0X zpgHo!hTkNQ)-$$B_-G3Ae|zccWdeGEzxV37lnv-z(C>zFp`&M3E6{8jnKY+r1nf~! zJ>VV^54HNdK!g}5W7iHB zhr!i~Ta0$Kf|5k6l--;Ak!plygl=#~=vE;NfsVs-*;wY1vCQQvNaR<`7ONHP+mG`V z03Xz3WdMJyq5|L>D#`%9m!3o}`-V;P_$t?_Itdg2dsLJIyg@|#x)tzU zDq9?VxOGzSn{AV9L$77QqWx4@9?<^vyb>U+5YsT=l*M5Ii}E1K4!u6{5c)Lt0lp^= zQ?gtpYK1ValW?e&Wld0aRI+W6?e^(47M{PH9_=)M29Ha_9YYNlo8^&f<5N-DTb$*I zWsTswGyw13=NIJAG}&$(Ev_9toc`Vl1ShHP9KZn;6##D*(a@-`&h;$7G*_ChPwi<5 zDD~$I0pC&wa@CB@&?ebN#~9t@cD3G?&figN()0lMITd9A(K~@r{-hASFI&t@*#9sk z=XnYHABmiN1KdUp$M6MzW{|25@K9})fqPS}2ym8)vVgIQGHx~y1d5%fplWSWW5aE- zS_Z^TvaN|~#|_*iJNKxt;-3IrO|E4q{zw$*h9clkRFnsN+S2zAVCPkBmjnF0it>Q3 zr&Y1@rnd7cF4{H;e1F*nZkYN_@@PGLyF{DrrEMZ`v=zB2b%{7J4Pv)N?HAt__)jZx znb7(=X)=`l){^(19D}bRYxE%d7~hD?cL8 z5|!OZpaq+>guBnXdUCCCxNC*`4mDQ-2h4FZ*Iu85`8iSJHo!ThisuQu){1^6@Gn;6 zlDmG6if)v(lWpnxO#!dycRdd&T8ac+ERj4eTdYN~|BUTWz_(Qt1O7ur1;A}=fPnbm zoqe>AKghScHqN>Zt`q8CsEI7#ODZY={#8X;I8tM|0nt@~l0-i46(UUV*nco3=LsJB z$QMoBfUl}A8NffOr~vqhiZXC-bM-g_h|~qnZSZ)GXz^^0A%iLl&G4=sO}MUF;Gxb) z8OU!Bvu$}x zWuMqPLERw+?ovZB;G-(?h#!+fFKQF7VBeKPOZCH>1;D*WC$UfmP7^p*zjo)v38F)k zC=a;166Jg%FU=s@TZuA&|mvN|bNNmKS-zA8H0-FcpNHn^go~mXZOlP$yzQ#LlWM5*Z?8nHwTJ zyFcX_@ar4q*`>Z0U$vqQapE6hXgjO+toZ)C_KsK7qog&mMhjQ}rZ>9q8>#q!@3Zj% zj#dxKpq;6r7!dt4Br4C9qv)n|m!U7H86dI|>K3yHPo>P90eOX zN8uQ}GfRK${8J(eDdHH06`$OIca|Ot>ET$Nv|&Bq1Jlmm ze#lWAL#B-)c98avqC39aZs4v$+7HmmDxuhreENnQ;Bbw3+yF2>|4PjO*I!vB1id)L z28>{b(jR*PMyzB35MhU^&7FR#z4>>8gsj0u^h`O9ylDw;p!lott(0(5?Sgzbj##R# zIbIXKRJ-8X0^KaHKSi{*0F+6EL^;4cr8%_%EU735c&dsDSOkAvMcxS%=H$#C@ee*F zxzRzY7K5qJiUjFqouEgwNdfRx73BawRZ#)(OG6SFMGT0aSX0DT$_AuZbN>ucTy!Dt*lmXG*N>uWRP;*{rH;EQ!1o#`u6a#)+MH!Gk zV@2-?oGcj#%@}7%o7Jl3btahKlqQ%2K#K%JuE7X+TJ%!-W^xGV2PX|TjB0i^k}$zb z?Sg!#N;~}an92umTm3mnX|%vETaguxlt0^n zEQq#Nw~IcJSHJM+m#IntwjZsF0S}O8aTMK}e(ZFK(ELHNHT|oGjTz__(e3H>*!jM; z?`9fq57BFSi2k-&atJ|mOI*gZn~&{94=!=R!w38EvwBzU6^Z&y*=|ICU5s9k#4fxc zlehK<{J6E>C4@$;I7^i{luxg49@PQ4tN)I~@u_TwMiU0AwMp49)gG`B90m9pE!tP} zU|=w>wTgO zh)z+Wl27DK+&)njM1Rm|y$e!kZ7H_6V1Y-e{TOhvipqfajofg0bl)G18NmKb+Z5hk zXGMP%XjAOXEw6~z_=y{x_yH|<&gahg+}?TD)uP%X`e?vah1{+EbHsf_MD0wy1@wb; zh~IXieKk9GiJertAm2!-)C09*3xKbxDEEoL0sZNQmlzPuR;@hXUsP1@6M1#*6J6A?-s`@gYG;l}}*;_|ry zZPvX~cePLst}5hiIc^~)U=`&U&<~c+5u%Uw)$C03+XeYnOS|vOmZn+2qx604(iDNC z7#(Njv42efZ_mwh5H!#+_4M3dB`2A{~AFnyvdh>lRAoKNJ9G!TuD3pg%E z;87x@ISFu$h-eLPeLr@7FT%}PxN6wS)n*X`=^y0ii1blYh7IZW?&05Y?hTPR3DQ@hpDe%{FXp^#G26n(kaKPt<8|kh#fi(Kl#}O_-hrF0bdpoPKMauLcFJOdn*lmUJ^nyQVtEL zg(8ncm^C-Rm&K2Zil-AYvQiM%57iM(f)XmW}Wb43By ztFaicQAHWpzsQPi5%^EphNkU97@0Uvi>O|K>#XPp0?*z`Te-1}&Rn7s*2X0phE=p<>s3C(nJC?}%UG!;C(NrdbMVje1eWo%*x9T*xAh-tR?PcP3N zF@T*{G^nC$l+JuEec&w){2U@h1egkGbwAuc*}Cul?ipS+ttb5)B9b;&@)P*OTy8WN zW3Z2mLGIT5xk8ODz}O4u2gfAhMGC9gc@$kNd4V0*AMn6_H9q_-Bh@bG-*U0{v~20D z1UP+^&ITocm#e4%*s`^@a(xB&kCZzP_yr}(f!h*!69kB!Q=$wYUOuO;2T_-DX8SgjgTf>jlkQhS`2uwipqc!M1%zr_K&np;m747Vk1`xe$zGsM3AAu zk0|ez44OCRv4eN|X;{M~xB?>`U1%LG!l_AG3*K4-#E1oT3l$iI+)a3g#GBGL^&HR- z);U~6vZ~ox>*SZ(1^K`O`_=e97QR%wAYZqn?lMhb0q_kKoK1w1EP18sN@rQt3#hC>-H|1{6>hmgn?gHV=>@sD$2nA#+s4L{sNcEHZ&gY z6owa+DRzAV^BzKj9tJJ?0CHDxF1vQ4B&kEISF0Cf_t@c zH+(G6`t7X_;rHH3lm*e{O5{~5v|yeK47g31V!$S4^1NhCqyX+xFo5tpRKalK=aLqh z(dP_cXNh`ILOeDxC6_*MXLXDaq=*0!j=6yb=V!@J0gTY?L3s5iaW$Q;__o9!kQuiOog<%AMOuW_x-C$cy+swhSJY6B<*YJy?3$T zMuRa1`^XsNZq}XxztlE`9|(wz;MXgN zjNbGDM3CIft!(&=m~+#chy#I?!f&w<<0|kDNzpGcUaL#;k4Y|um`vO zxk?5QuaQ$Vfcp{UuJ`?}ujcpU(FiRIqOU8FH^$*nzi9Ee0{*fx#effrh|bZg`?2$% zA~frQ9GoAu$>V=W|1C%9@xMLFkKJ%!dvTl||Jw%g_#emcLk)WT@3vto z9BvdUdi?J;liS~D(I+iUj7TB+ne&6rK!=-#*g@}yCMYEPJt-}kpr#LC$Nn~{49ey)5*8v^!iV!tu@3 z@#293msn9X?j425j9|gLD|rlf*cjMr0Q{VYhSMho_}q{EStrR$7!w`kp7~G zn1Y+0F8epyrU(TIrdiDm zr<5q?dzo{&5fikk75Z9XO|=Uay4&s5_}&selt;CJh!9XS)XuzC=*DrR)YOTx4gUPX zslRGAUzK+6%a)!{0N%29VweW&_XM7`kBVHUK(xhPXp#qnR&ZqcdKu`gQwPev1779$ zL|G7hONnwmkyj=l%1Ie8Ew=i`Y9@wxLmq zHYu*4&E>-JHQCZA1$_DdjJF)%iw8nf0{p>25aj@0S5XP@pDN1jad4tAPPT!c2E(bJ zs8e}BXi=5;?`Zpa8R#9pFWf8w?y?_54S;`CQ4tVvlEIgjVdr=arwE8hO*`z^u#0}! z-c2vx{Vd#1h3zjvz9q5Up)tn&63F=)Pz-pVh>W9%agv_TZ$v6 zMG^!4hlq@UKg-Ssw%xT-M7L`(#lIAY{L;A@aJ;12up!xBOA8av?Z4MM{QSdm_rEa` z$^IHq42byYwin8Nx_VliE3j3z8%Hbuv26G`(HIEeH>vyM!RzuZrOQUyt^-VU`9GGq z{=Xx?F>8J#GF#IPFG@FmqTSs9xRn$pYmOGYmlkXN zg#uSw(HeosC2M|8l7~tO&H~)fod#IucJBSssp&*ccM?ekF6ehtX@p1#I?o6(a4<0$ zA$I;EqltaNj0HbUL+qfmLQelpoc@QcNI<9&*SlUN&zHa!X@$gqXR9cK%CObYFju;H zzHIpualp1h8V;5&pQv3Q10JiQ464BPe8Yay&43F;CGo43dpmDsWkY zE=J{ZMuE|Rl&(K6!ww3ZrWHWU#?NR;;kXX4*WLS*ujitT4D!fLc({K zVFz`>b~dCuFj!Ip#_~`f;K6xpfB%8_wOay zCYyAAjRxGLLhk0}-=e>Z)i-tm`a%2XNsJJ(6I|B*RrrVMbmaeb4Q*0fL7VOntY))O zZ1t?iCfZ;)6IakCrn%|5uq^;SKQ2ist#w}$IAy$wW(u5VMJ)o)ny9VZZh^T|)m$F% z6gAfXb4M$81I#sA(HR1Fod9zUw+sB#igpuc4pgTaKHI4boO(%}s)tj@s|WRPs%%Am z4(eTV*GlX+Y7Sz+H7Y6r{zODPX954lHv6~0PgN8HjvkA=lzId%R#6PNTt#KTH6mh@ z!1s!bX1445Uy_|yRW}A4E(tU3V%cfdEXJ1#yhTMBBz8Z|Vi{fgxQGlJc5Hu_j*@;p zTKhW&oT8#kLEy~Hr zm7!YT-)h1dP-DmvovM)&7$yv_pd9?E@paf&>@uYYgZIUp@8$_`ALmab7Fbj=!} zYd9|)7RT)|{VPv_ZdC%k7b}+&NLUp`4*j zo3yFMwOo$hBwM=O3ixvs<=znZkrlZe?i1xf^qOkb`$XOnDmo;g9xYq)2(a_e+F*BY8zf1z zX~0CcIR{jXs9?@V%$Rdd7>_v|vmO<5LVdH=8e`V#s@jO>-goc!-uLT2x<-vPYtC7- zs%F(%JH4({-9u2cges~#3GiA={kiTObswot*85I+dvX&zIY>Q<2`^Ksmj1r2R7|*~ znycFya9gEf!ZAu!=+xzwBD_+mnD7CmDuj%f+_Mqd;MEdtWP>*Vka3l*kkE#>mhdUt z(2e>j=>8cflP&ukR4&Mpx1vG^6G^&8;|b}S4ITp++1(Hga||H1p{-+RX;q#F`hE8% zJjeMe_$+ZHw7P43-5P54M~+u+Z-jD#*cE+PNk=v&wC2jbxw7Atva5SXbYWN96+)Vo z-JRjFQ>4r;Jf(y0>1HdAqGYsWr)5)ioxJPY%joY%I)?s_L{a8j$S`XLYy@`$`o^Bo z7y9-Tx<}siaV1>ugEDj)piIU_;!D6r&_{O|#h2vii|fl?@PU12EL^$ykXv_)^orzb z!mYO?RTu&|Xn<1H6fL8QiiAZ~RPhyghiKoU99s=nMLEJzN)@jHyjiIn;q6KltNGnu z{mv5()>ifOz?#bw+L(CT1G_?nZK4{&-Bov;ue-+A?d2Wn=4iEvh7hi$y35r4zNP*w z0Op*05Q1^E1|_D_byQPKI8Z6IHyV^tMm$Z$Vh+{3j2Q8qR*YWT5SLx={{{~k*S7NJ zAa%OO$_MP&}dvIeiB@=y|D7WlAZpT%?fQNlB}>FMkVoDSW1Z?E9_|S z$7N4}J({YPhR%oFwJ1Yrh%)R;we&Cvabx_LZa7Hn4S6@H)6sqwO4-;d)9H2(MPEOn9GCg_XBWbv%VK@ZJPE zb*?&9B;0N*dQf+Vr>HKyX8-$&a#Td~GS!}Lwk=Y`cC?mEyIZ)r(N{Y(#0@+xpjdsMMUe1#Qr`!f^$=a85jJPTvM=`9Q6&E~D(Q7y`ZbZ3`o?OOOPU}3gn zK_2mL>*yEiR8WkQ(S8d!8?*Wq&^sHSdP2s@wA>V8HfHr_fVx5BQ-2#E)0AoXJh<0X ztgtv8U!2g&-QuN~5DctPhoX}oqf9arE1!du+(9@BjwN!ej8$)ALawJoj(KAm7FR+t zgWRAiuCh2?rNbEm^I8H1=6NZEvx6E;yooc~-fU)tT8$uarVDR2v%+O;1l>8w*=`e1 z@g^q$ne{`PHvf3%V`}1>k$cj698F7@RMx9KGuvJ|eznxken?|_&!`9PaYsTwP4aLt z0AogN71-JMi-Z3WPptF?wwM050CezBXncTn9q!ZAt} zX>PZHsUrE6mcf7xmKp_kgr$xHyx3A#0zP1=$oX^qOipw3^Z>Y(kgQBoU*qcmZ?qJl z4PYJNZ&r%1k2+S%e(w${vB?S}AQ_%;SXPb|hDGEEkIc%k!dQtM;U!r)R;~moa)b|N zQb)*XBN>eFP@PnDk@NStvlz^cDhG!1#&E=(L-Ko?5rfG|WH<(nv&e9x z;5Vm{;f@2xd1SaN!EquP&i!k_@E&D{na~b%nc=Y=_wLZSWVkFPBT4+D*=)j9N8WX$ z102Y-PqIy*eJ~5rMGhM?qB~~fUHfkhOqnlHhB75(euRwZN_+{}2>M9hC|}K&H8H<7 zK^gLeG8tV#o0yN$E@}57^E-OG0uRk_`vW&-I6y592RaR~f_DVrsi=Eq~a9@-%zYYRC#ZuP*-e##!0KcNJjGIkncuK_ z5m(=_QfswK{n`kn_%#Kv#ZuZ0fT!RLoipdVpTMe0jqxMz zn%xoYN+?6GOHw9dBbi$P8^JkuI&?Eu)qJ@KayKl(7s_OG1#R*=2cw$JPhsnqMcAZF zMpw`#uXD7k*&Kjbush07%qf%66|~9gk3d&7n&RHQ_B*Ai*B<+0dkVl6$q~YWj-lGe2t3L`>uJTH3-t9Y%ACM1-P_S2llx{c=M8^3bzCD zcUA&VV7o)XhA2(CtpJZv<=!wHg-d6sNPHdOgO>Ucu(P@p)1|j8<@Rk0T>1w}`Dmkz zOb1qX(UzrM0ryd=mT;(2C0G9-T%w}3(Ugdo%>(!4bJ3ZXQ6{T>xoGyu9a96>q9pH{ zy&dfyM;Xd?l*!nLqOgsGcWwL%-96An`a<705y-pk+oD}plp!A}ld+Nb60i~Uu>#$< zXMOAv&0ZSuV>}Zdg?D`%iFOAs!bi%?vNn<*p$*sw{x~glAFJ)BcI+S@-QNK|?ul{< zxn&XBb#cmKc7^KCSVUJSQ>`m>Nx~KE3U#wRTxKLzTy#%3NEEL&ab7?V-d{vdD3j3@ zoFMbz(g!HzI8E5EQyOYXWc>lRx0E{!RP>1|DiUs@t;)V4ZzGH$U9YW5g#T8`OXEZS zt5#>B)g`Lf+dePFr5CGyI&C)s zWnh<~qP?_Lk#Lq$wN%tg6;<_!t>sA+;j-GQ;w#Egr**PYt+({ZY=y)(tCun1A4=5{ z(yrX;5dH&R8D+%Q2X9|3L+Mae9ut0{RK2gL-tEkANRQH1F`-pd_7!<^e+m@Lw2E9? zlW?iYiV#{`b-pd{=r{?%I$ejdM7Uzt)T+FUF|XNk0P>e>yCUHSol{|%lwSf;RbZad z0k)RuMaWj-z<(CQfqbCd!&Te;D!JSInOQ>ov3g!h&sSdFiV<%PPQH$ckU!jEv=N`7 zVlm!iz%0^}SOsY@~c?n5aQ;a5s|(=fMeYVK^5W-V+E(?ygroENm52^}#*E%(_dy1d4ZphhDC~yK8TbJbBZ2-N=CBDdgt?SFHkoyc} z$QR0R15Dx)(8aaFF|F4B_mFbFMH#Y5nT)PrKX1bveO%Y4KdzMFURurn9ysxAgHmpT z2rpkH4V*0XpS%^!b{lECB4Ov1(spw4Sp|@)0*4_g+DR4V2-!*;nAzeE;=WKlUaiH1 z*D96&39$3Z^eL_fJls;Q?ppZ5-$atlfH32e|E)fg(e6;~OH7z)=f9QhEXcov(j?se zE2dt>C?&0RzYNX1qA{>XPqOz-qLzQ)NW5-Py ztD{?v1I}zE>C<`X4weegH*`akYH*HKz^29?C70$><6`7U9q6aFnXqoQ$3v zjWT4DG93A8ImiukVpH~FH`wIeVZI)tcQ4A2FO+!-GKnu?8^N4A7t7*hT^=REeO65! zlH@iP@B>S^&iaaqR8*_2%D$rVpDW5y5r4Bpo-g}~yr%(Qp-Vq$*J8q5)uX!EfOlES z^=MsO+C@cTSL7Agc;DKhhtsOJ`Wn*RAi{~@`b6Hf`a9Y$hxVZfLYa(>WFiD?1Sbf) zL3#SZcyUUQcYT}=-%eeGkCZvb#v$<~U?b?`0<>G^Z>e?J>Z-wk+w?VYz3QrwEv9}Ve?v{g*_j8fk1 z0|P*X#{Nzar*d(8UJG^nfs00vnDI#jSz)(B``J>6?RpwxZ-I4%9XckP4`EqbRa|3% z&4;bnE6&?vVSpVY?~d%5kh@Gf?jKSqlhGBNx4h24(WcuC@~$s$!G|vw;R|JcgpBA) zd6?q#3 z6+McsCGRt2-?fx{qujJApiuT-j*q5TOVmaT!Xe|6oA3%xa75_8a6jUaUy zL1M-~II2c4?V|m^fDY*x#%%z1R?0gP?|^vktZ|PCuhTe`2{Yaw-@*z#mRwE9z>D+8 zx3DLi6CxKme|cChTQ3ONN>t5gahgS4Ait_@N0@2ne+q33#&f(KS3(YX;<{^Z56G9b zUEUSx30Ky&E)iy2@;~6V8RQ4pc7&OB{!^u`9hc0vNVtEljJ$g0iY(@wy}%pw?3{fE zQ&3`efj8`-Ia@(znF(Zl5oS8=zb3^&;(V)?!TFmdzavPY3{IKuaGn|5jZj^Wl$n4s zq>D1sAVXb8qs~r|Pc_>Ab0POMO4$tvi+D4Ote%4bx9gp@3@j)r`dAee2?wj9g0INS z@xG!Q6*Z`$I$u#;>YDvOd(9MIj#7qtjb16WHcFug_fjfu3a z`bKT#9emg|dSoW(XVBDFHPy3k?V!ns(Q~?KIO3sdF;940rYSMIl^okxSsNp2^by-p zu6O(WV~>>i6{Q4_aDs-pLfEKO$?cPz66h;k5$aR8O-}-6iKU@)In^B#9;{S7;dG?} z9@P6D)cYQIG2kc;g6_~LNz`6Ndv$-t}=j>^3jLN6Ii)(Z_&|ppOGF$!c`6l?YGnlR6|* z`PF9Ew|gM}w6=>0yRMZA%M)Y5)j*l|a})Pcu`*$-RDp1xOiSWJRIGd~;JWZtY!dcY zDkjV;RUj-Y6%$TV%G+W)!5keHb9;fZPI;|9M~phE-??=F_e9w)n%t!WJ9DO$BfJ2V z`JCM)z}H$a!do(8cLKj)#R%WXh`k5=xfLV)E+h5}a61i7j&K=J#y)$C& zYK}_?Zp%QsE!}o!V<68**~zSo4!s6;=+%)Fr-3Y* zPntQPnU&<rl$cfHUw2jiP@df^QF^l;bDi_e#|g{-RU~NQ=2ZY;CgkTi`xG zDbrl#3EHG!HI!nXaJ*7gTlGN6brvqpLn&iKxPIHzO^FfV21aC$q9EqlO{ zt=`vGMZ(XN@_OR8%CXgvYRkJHVk;_6rVYdgYO~tWfCpKM-m=W$(g+o)8V(vuZaTh0 zm#npVT5E!;c2RSi*{oO>yhHd5$X~B6lnC!us{8=po0cN{P$@5$Q1{g;QY5@xsRDKX z%Tk0^w|AcXC!}xERxuUXR$eq2c)X8I5ol z3pN$)u8N9;Q&myHSL7v5Ur~;VPE+0Gw(z8@dgQGDUs2vyR7*v+YhF_J71dA?Tge{i zzqXl!yF=COn6O1dQt?AlfxH$k0NK4Q$5#AowLCmK6*@0a-QFDO0Ywa?S>A7e>#n=P z>2q5yMdfeMCHQE5gr|DidZD5l+)SmkAjm zN!Oet94(>LVSra)=5;j}6VgWD*32DY6OrN2*oab$5oW{wJ1#Tq5)}rWF%*in`=Ecu zKrQe{?Q`AYjLdZ~c$f8ykW)a;oje=xh#}q+PSw!l8CyI1ygTk1NV8LNw`RibO_&kB zT=4F#2NwD^y5LKMTenZUBSSuc(%atVezx^c2-l5nD-~ zxT*ycObfp!Ljvvm-x%Eo_V&}b#f1ER23aD6m+6pK2zS--t@DSx;tzS9KjamE$h||; zP*^@eJ5!g-B(?x=TaDCso{WMTgn~wP)>gf z;-6}>nD9%b%7lL?6%%f)T`qH;a>4{s@n=wAz4WrRJ2R5Ji&@fWXA5CAQdc|LWya2I zp(#3S^sNJ@`>XTb8VLo9ll^f>VWi@@oglj34=Ni~YshDt@Qu)Q1O2@!MdK`Gtu_QEZg0kAi zv7#>*+&JhwJ*}p%4*D{3L49)}cNa=IF%y2Tl(%U4G5+UNBqsb?DIO;@b4K`l^!g~p z7U2S=3WU@2gUe;Y*Oe+v!DoAyUy3_inXtD~1;UM$DibcLAN=xqM?d?iQ$<3y3hoSk zyBynHt*Xk+@a036-Y&GeGttHI3F}KCF7)rs*LB~+lrIUZAe!#szc&<`0A=icM$NqZoCjZAU z^Szpj3F&&^weUwE{i1C}__2=MWFDBZP zF=$8X;KhX5F+L22s9omEWi709hVMpS4tQVfPwnCi^6N0qxg?Pxw9~3U$mu2f4QE9? z95fp!@qrp0oiQh=TltNVMz+v&5)ed3A7K|?}DVfl_uvB;azyFB`fJ+ zzzOyPrmiEtq9PUDsfr4|B5wisigHx+kSeP9ioClyUs0Zl?o&l|z9Mfg@Dq`+&H0LkP!T^vqo0^ym~rMJlc|%wOFTp@o#R+K5$}x>mMQgOXL`)Zy}eE zzoSC$6OxraI(uV6_AZfgyZ2{qXTmzyy956oedSjq1n#rE=`&b2c7? z|5D03#`eRdy;a0ZWt>Eug7Wn;gnw;L8Pb5_`;%r9O9X$-CqBGVEm9 zCw2nugZ8^XVRw{)XZRH9sUmz^Uc~Qx3_Nq~2kAj5J4DmFbm%ps4eM*^rpnP*oKZ&R42-FFY$P>NC@r z(CYS6Bzn*XrAa%)>w=SYLdaJD1K(2c5TqYP*-5?!Z1M-u%=W8!d5ka7EDi7F{Sq6` zUJZV;9|;LvTJXiYC$y6#!Vx%xNNVxFb)W5C&~`<_OgsO%-U{tf(<`HtP!P^ms=$}U zs46g1R)h2!+A1cTqg2^fxPw=(ll` z_+6a^F(EZc>~8U5Hw>0XS`P@%P^y-Yy=)sbcNvE6@$2`*cS81DdQ5mWq)kgV?4w}F zJ^+geGX^{IUY9DxAYn#3mWs8(XmKF3gUUH!-nU82a2YwPB}GqS61<@k#D6m$Wwt=C zl4Eq>D=S{WbG+s70I5rK(8h9*nc2Qyx8`te*%gwLP#O=v18$@9Ziwr2Gel0LXjCFR zTd5ktPn0SVE&wIpo!P@x9?*0##23|UWythUYcb)L+7s{eOk-zitNb;NvC#b)0$ryM zPIH9KO63VT9D#4hTME)!pzIJ`)c%fxx44LPKCLzUqj&B$oArU#3So^>F?|_rDZ+!5 z%F(^!EJb*_QhCCeN_nR_c7lm2^u6k?Okhi#gmrc{N;%jNexX!hA)tLa;GHw5=t6B( zB>YjST3?a3-BZ!U+A2r*jZ$S_k+%);Ya=NtFWoJP#|W#TY#W_k+YNY4eZ-LCw@Yqr zsqFywwv@YsE`fLVs+TeC_10D~742#%R}mw?4w(GFPHco`h9lm_s-kv&jinJI=HQuA zPsbj;JN8)1%ZpdQby}93*IuO6I{QQ3_55bEe;8$GQc@;kBQiEzUHhR|M{4g%gs18q zOyxAd>DY||&pv%cMJhU371jHSy#4wSc=CjL6ccW&ifXB78NIcv?X+Clxxpx9KfMib ziu&y>g!f>k6Q1M9K1n!A&6R1+2Ebbgv!Lj1>o?&WN)-ru!Cc$uu=ezFKD;%*_Tm1y z;WbmP3H~*!pWYtuB+R^xvU4=KBeu;0qt#}U9*Dc%{N18W`&sV0~hSH@gPw{8mlb(Fjjg!!doiz*2rcUg*%PxS&D zCOzhCF{_c&g(DkUp=`&{NyywmKNQ2lFU&N9&PO(OEqF(m+tBQOluJg3b?jiiqnX5` zxFA0}OSp>8p%UR5ph5?kfTri6bWzQAflOWXWw*(*8rLDE}H@H*MuT zp1uOfVjfCoHIQBf?KjgqK+QFL z7=ttorCA$40n?iN^s(#YsSr5}<&u$neYsg1Brd`QSsR33DODo;4peAu1TfJK!?Qr?Cz^ z^PuiCwN;VuBc;mJ{hOtzdrQ^rZM$znnyt-YvmM0Q%y8~RpigXX<_~qOiuQ)v$kDZk z?){mnO*~azhB_C$xkY0TGX``@4k&J4E`T&0;K7mop$hVD`>WCZPL!clN|}s};DK@= zI(Zt(z%yK5q)6%eSKuV_&V_8XzbeiVK7>~C%;qxhnGM^~gv@=yd)1nEaPnK#u+@Xw zs^SLHZ#9Ii?$%b`R2=JstV1*ogF=R+|K1VkA4uOVtyF7fZ+q#3(L zV@8a4lDZueo~2aI?JQfdXUWnEz2z4wrlJfjtr56(K1$IQe0gL(t}oSK%OP-2#-N{@K5$uD**>C{EAKFlUA0{QCv-Q7Dez z&N?ByL)Jocx(q)hhVxoRqB2IE&y5G1u2f8Tv{E_36F?=}xV|!r(0>K<0Cbn%Lui7( zPS3R8+oBY0PkW=r4log#hQwRjQ6tPaak6))`Uy^SSuHgzAtZc6V_#qv*Z^+H*_j?P zF$m?(*uV+b_*i3>S+#SjT~H5?qjx@}2(6gUy1rzhH3LUi4WWq9*6i*-g-rWWB=>PwDrkWvN08l`gV#7IjKGQfd{AM}`AH>Y&B z?}l?bA3Dvux?}>*X>pY$q^m6FG_hysu7niM9D3Q z^@}sS$r`L*VO0{|t5i()p0yO=J4)r~9)GexUg#s_Tn*$odd$e1mE(p!w3^&@vZ&o= zfpyMr(&v`M^~^-VoJ8JD9pv4U9eH<#7Llb#q73zfGCabIuHa*_x^AiV(I`7d&Dp#_ z`dM7=VlP+83qK)I_eKjDFv6Xb$`ev=U<_Y|qTf++*0J6e+6-@I9qUV4D}-w(71NiE zEJZj_sT|$g+fszXmGagJJ?1mQ_O7^m~|a-tJn{vNvXF0(}Tck zcsoNRMk%?3u&h)K;Z;hN2>EDaUM!%-I4wSm;Zd-4d{_7te`a0 z;Z_Jb6i%L^CeP?o9ZcQYFHdK!qknK+_2jUsSUWkm;h1l3Sq2NOkei16ybqN<>+3Er3hy#<>fJY%rKjI&Ny=~3(bAEog^){Ss;(`i(iN1 zG~Xqf#2sjQ`sQR_83~Eb(SgZ(mvNc&7+jV&54PYEsqywwgiFpOiTJ(0d=%9#n!d5# zL41nYm5{ygWQtFy64F)YJ~Wm*&^Gj~Hecc~YJ>w}=xezt!{@Bkatg2Wg$vqrU$Y?Z z`n(l<*mDuSP^JVK`Vz1aJa5dwYi&=Uls*Z1Y2$k3SXUHE=d1BKH$;wM0MdL?+N5DCu2s8frKk#>G-&Ai4O1X0;jMU#k zX|q)76_kPH!H#dab}DM}IC$DMLtj8N`ydtUR4*OFSQ(gpiP=?Domru9Jt9hd^ zo|AQ4bA*|3UDzC0&I_9Z!)V7;o%rkPDDw&^IA9?ImHq(urbVQ;S%B`OC&kdGKT#Zq#s2V*%S^)%UfDl;XW_p zO_)*Uzv5Pc681(8XYI|Qlk0(Ql6Rvp4DBbQ3?1?*ld+K;^a3`52f%wd6EG?Hl1v-a zm(s~vB`AV!}Kq`;tr%OhtvgyPwbD;IdYPa22JBgzGDnrz6{1ijXTY zaC^vj`~b7OJ!Jit3~wHDvCeqO3MO1#4d)1ZD^(;Mpj3|T?P4iHhAwbtOpj-xm6;{X zD?^YS498X79_hhwOc~5~p&91tm)Y;C7s}Nxl&f4QcZQE$KV_z&bRN5qehZf~k6o(V zHgnm9+gc~Ro)0b^5MYy+8Il5PC zDZ)mjyoExKIXGr4IsP*;^S~Vgx19`=+bl40t6+N?nAxTt0;UIn=UaP2qz0wjZxW7F zs)q1(rAmbNfeJm@3TQeI;)`nb0b=^4#x^FjJ*o9$;_a@qKV03;9}IZ6rQG=cfK9#a zM(Gu24Uis<%YVKGE{5cjD9s6?fa3y>4S}I~8{(g#l%XN~L8%(TRiIF$`T*`?DZ;^^ zLZcN>-Ui}}YBmwR9IQUYgtl|_Oh>=y@yL4)N&DZbqI@UEejwYPj?ubDk77B(x0T8h za?k<^W(=gyLCFNe`m79Z5)A8etQEp}O2zc$aZ3@trc{pZeQYVh-<0wa3_WI;t8FUo z1b5p>HsSDaFA5}>H!&9Ppv*jnJS=?<$t(Yc1fN6VGU*R-**u5DB~qW+OA#))&Yu90 z0hmbbqQm5euCax-piD@&CHGXGqN|m;Z_I?_et<7u3h=yr-!) zR)cVBT|^lgE6QYa1#QlNj?49Sy+k-)slw}kUs=kXXjF8aiWCX&SE@`!Us%djMCr#> zBqn@WsWKrIO5mx}IvKmV7eK)us;ES`?v|;rJm*>u@ES|~xuPN!u~q0Ja;t8UD*6(o z*%W^Q?yS}dD*~=*sZ9Y-veYSnb1db$*&n*6qvU-R>&JqZduzhWl!^&&P^v)qgiwma4t zFPUY8=ctt&;T)w3gtsb{qk9ioijbiT?DX__1q`xT>ztqU8O|N~vAA{uO35Y3`sbwK zEG6%@pNn?)pp+99;V)aI!t$*wzX8tJTB$Pucl(D@)pWn8x{HJhRdXugmhb8>9?GxEnl!g|=@{wvDDm#O#^4 zF{6bQI&1`qyTPhaNW2a>nTmu*so1oLn4wB+u(AXCZ)~`KFQF5k>Y&7j!uRt~iplc< zZ?)8IfR9+}QNR~0#csB-?z5L&EmZ{E*HZNTd`odK-nEq5o6pdTuTV-D=C*u`%1_$G z5+Qv_PJ3C{5s>p) zS~3K(zES3S|03La-Hs3;eUV=KKdQmr?x;PC+1a(B%9tY_V%2m0vRiGVmW_#R z7h}Thwbyy}n!_T~(CrRa0u?SH$~*L0l~pQj8%lAj-HejEChK===Zl1| zD-{!ds8ms*4M!Wm_9#2bJ66-rD3IxdE1l)nBDd<@7_FUNCcUicD!I{^4a@hd2L-|> zlqwRwtyF=2F0d3KM>KE`$#7kTR@_uszb?a@O_gE3Ua zB4iw8=OX-@1{)#u)&=MHUeIT@TlSAjIdt51+sP9@x0z7xKygO5U@ppLoZKjJpW;d; z@3wD1yGE3u8z{<8&jIlS4)pJXUaLsMfz{{;cZ@?2Qbu!?N+p3g1PSibBbr%VHsGx}?0P~_cc)uG)4 zl%ZKonT(BOR0B4Gqs?x-?D**Vav`q&a}mB!CZj88lh^5Ewf=tyTR$wqCS@|Zf;MBs ze7sK165+&wX=mjH+GBP|;gu+b+I`2Ax&x(9_w1TdPoorSE}v2rDF1QZZ*KNDyp+8QsgVjQPC~iQBh@x*Sm_}yNcht3VSzQ zdsp#$=iQX}PUYzoyCSD8|Lp=x!Q&Ow^O%r5kal;saFE!Cgyb->7YWIMVm}g+ojFT8 z6%(>^i5$l-dVnN+a_j@Xsja4K-~MC5FR@ z5f2%}2v!KYBMwH4k=sgRQz!!32v&MyY5%6Hy})pBR*M^q9K$AeI~;w6&6s4o7$d{E z!C3`8S{tRDLJ8S1(awx`muAM8kkdf28OQi%?P4vbu64fFcfOXx&Q6FfLiR_TaJwUv z+nb&ksxc^e%ffmicsafk&QK~QoTXHe@HVAl!aG3O2YqDj!%o1gmiYbp>K?VUy+}(D8oES(L_rsCT zP?{9kgd|4~0x!@14)Kl<)lUYISXmQg4dG~|N`#X@glXj&8Ei_@&DTFb8sINnl` z^EV88*HtK)H(9?Cyvz{7=ah;GUstL~xIn4+8^9kdMfj6aMZ#Y}b&Mv<1ED5a@V}AK z-Nj4)XF%ju)mI?ASE(Z5i%J#f?uV8lq}ze?$*5h3R$OnaU!391dSjhYmGnvYpc>8- zKBZKV@Li?ybni<`5i)dv=}wOaA%>XJ>{RV9?GNhnv*tvjX6 zJd}(0S(m{Op|8m=xX{G+I1>kd)@AKoQX`{LX43Lu;h%Z96q3)NG^wEo6FidzQp4L2 z{{*FcM{@e1K@vaUf;<8zTor01r>_mTtEC8IP@!xQP~HaOi_`2|^(ns;n(d_ycq#f= z+=twx_ak}27nLd!)~arA!`c_pC!^#7Vtq!2Hw%dMv#b@u>y?V>%RQDNd{(JE-Fwqg zgdZtYB>Yqb-x7@ByU?uK}*HXFBTxsep=3 z*H%S$VN&E=70D4kuT-sX%U|J;zFk|zgik0{Cj3dMn9%maySw`W(!Zk&JtpgcFbvjk zlnC$JixH}Q3GmUuO1Tm76&0!IPE}O)6?tBl;K^9^C?!kPWXB>1k zS>1#$gEF~{_ksmcQlVcG|ted_&*~=nc0vLT~QRao$#)WYtfF;PJEF! zN72W*2oia>{f%hb_mwh>&{hhr>HM;VF(WzM(bp7i%})S1Jj zAHg`xhurrl<#S8xzshK`RGp{onx+*jjW z+5zzBA!#S%D0c$jd6sfJxCUCWwH)>P5|7@8nhJ!6D^(_(uF4C(J#X+faqP(##P{vc zYi=9bJkS~-q#^lf(Yb9{nE^Su^_ts;73)gbcg35K?cm%BDCOaPU*gBX$!lMPuPRkf z_%|G2MT)SyQuVz72cQ)F8xt>3u{uINT{Ewu;J#&hl%k(-XQk@TM~}K`$h?DDXQzux zNEhYpIqc;#wo8QUn*3bjs>GQ-^>g|p3eEd{*sbriTlIwOi&03t$WGL|Q}hk=?<4JJ zJfJ2O+7YEZ*Kk`MfIuCLQYOl|ZCKd>p_9N84pFL}kO3Ac#<*5}@M7KM80=sS%Fhze z<{s7nAq};Qn(vQTu~zGSt6p$!z{6~5oE_aF!Y{4Z`_u5Ml zF1fMf;#?WGqV1!}bK1;qgN45V%9Py>wZW}eSK}GbbS_GD`{cI9ZPK%FIdMC^MCxLD zDVm&Ka*gzX$j>On!B^YNrn_`BW$7+cNXohz$78`vM!5{4Jw5qNC9+d-wW9<(y+Y;? zdnHP*xE9={DPL#PaW<#Ko0vig>9#xzYi}0H*1nOw2v@CdWG=B+s`%!v^281L#JL*u z?PaWuH&Al8@i9))Z{xBVZd@YuZ+ofQcLs5x^|euwckg1sa^Z@5{!5bYK&U&?Nwr=6 zKal$kWoVbDOh#95m){1q4*L_EyW{%4C_^?WlhGBlIR|Uvq|qsQHP$qNIlESn?bYJt-2H~puM4KT>{t!@MLsX9(UkYYziFDhxP{Mtl&zxw2F$vgzS{uM!0SY<+>EO+1MF6PtpFC83H>h-c+NrqtSZlXljHB zv({{qC*fiznNZ1GS!=fIQ09{DZi?20LmQy%Dlac@x7L(s?dh+|VIkSNSMy%sZGcId zmKV#uGT+_K`b=Dx>G(BZ|9w+?@*)!94oc+-$0$`KY*K0{;i*a$&jOrdDZ*=%DqRow ztfgKCeBV-pzblm^?4-k1B3xOiTwg%OQo2pZu$ouxld#U-48mJ!`=URkO6~|U!tU_- zBa!|Rv_BGg4$8$Gk?6oSoJ?ExKCm6}uDyF6*p`)ny?b(2^=yoK&Sql{>jsOdMA{xE z&A*53g(x>So%rT{{d>pD5ePZ8SyOb%Xp?I<&Q%a1#_7wznhC$+V)S2)ij&BJ877aRX#JCP;b5gg<4{sqo)V znW0Z(nAXrv4DAWXMcgJDO33iZ^d}r{8xl4vRbnK$h@~N+4en3|_dabn^ie=AVsV1- zGnJ}gyt#81(Uq3FYY>O+o@X4^#vHU)gh(T5#$yUqDNc$*ogDn;c` zYdoFJ&71omd3WBHVXXOff^M15@OT8`;?%lx6sZaxW)dZznN2usCRa7Ko zD|wf!|8;SGyBym+i~DGK)^fs_)ZRZ)3bpqEDOErz6yb1C@+|89Xy({d?%ycQlN;yH z_aRRoK2skm^x;41Lxn!vsySj#aHcR#+6)jrGu} z{@S^ia3fVz-V|_WOHnsFDJzCyrRRZT9{v7yztjbDh9$Q4D!#o6?Ts8}TN0lPPTu!= zGhh)TV+;^av!lfU+zKer!^?f+)Lhb%?-no>jG0sO{Ngv%iGvWs^G>~1N-zDkwW1GK>_F?jE3HYj}p_>-jw zm(>|qvm)S{mLl9zsr)v8jJCK+$oQt80hPde5%1h8;+o}UpqRLTRwArYWM|>SrB~$r8yW3!uHE05O{;=D-eGdWyff$c+z1~ z)RW9dxFYL@a0}hmON85j3cVdPpy_KUT~sqh`6wOU`r&9cNqve5Z67hA(#V zv=rf+O63VZRw^cpth4Op3YH?=Sg8`BjYU3>t0k4nGdvS4H3jf+OA(%~RLme=Y$?K< zl*%!#_gji^zEb%G2c*-{hT5C4-4GGZP?-{hpKGvc2pNtfm9k<3QL{U2v-h(8w}KD6 z0Tqh(pw=zC7L|Hy{&O9Fx?jr4e)G+U6n0U!h7f+GRE3bvB{`TCyWT6lTNU4}3U5Fv zdbd#-132AMyaBPdK-d#fht2;x_e(MR!-pi)#{5q{mA3yM^V=s6NdoPI4^JX&HN1(X z9p0<(7LmNQoTAQt`@~M5ebD}s!&5!)pp?yP4qu-zn-}@r_fO?y^U~{6)3+YDE}a0; zn^Bt0t3T$*K$L;a>rsf$M=6_^STdUznOAT{W-8&2N|ic5_1bEpM7R;C(0&$B{vMPr zs#y*)_3A)Oc!)aSZC*6?qPEI^3b?+u@>0PtjLoSiB{37;pj4iaBPF|oJ2KlsdNfMz zf~=3r@a97itRHBt5T2k^Okd8k6yY^W<>=l#OA$VzRG#p0rSPT|+Z8thnGZm)W6UFl za}$Z-+)QFPrV_4n!*SIeH9oa#I5(LX&U%$1*Ee~R<+>)6>zPolV?w!p3FW#algS!KtcU9Au!+9bj7u3h=>~J-GmqTAhE~sxQYyf+stfp@j zUoNPxglARUMMPinzGgSh!yq>qW#|nYlsN-3qAO@~F0Ma=Qtr+Of1Q#VmXU5hHHFVN zE9E*xMbE3EBH^VI*{c3Oho@Cxp*^d} z+n9Ytc`Eu%BT(x{zf9A`WEnL*fpCZv30BRGcNxNZW%FR>uQCr&cyf`F=EDAj1oSpV=BL^1NDCJN)5eg2micZF~J`<%#O@Yp{ zs_UMC@ttYMnUKMj2fsfxGs<%i+JxlrGu{cwsM4Q=QHd8)qTk8{Z#XGYtdNdBm#4>vhV9G(B-xrKR{oI})WQ7+zd3u%dm$$^F+SK*gfA;q<7NW6uW<8# zP~(w>m<8lq?T=pgk#n`tTOGYV#PDcgZOH;6 zw80(9;I5xwa&1gj_-57a_BvedN587xtlx z8}=uW!njCe{~)|yqf|r4bdx+fVTHkw@#pGYS$Crv*AX%BXA4&nIemCceW(!9Z1PZq zl|C9w-QVpTtoT0EyFRp^oHBny>E7FuKN{Dw_x4pjAaDUT?#Fcl&k=sARGyHE1Gl0F zL;4bwycK2riVSaVMOnYrS|NN$shGaJXeq)El*-Y)Z!AUlhf;aMwunyPaVR^%L}G3U zd4hNf=NZGjj;X^Vnc;YT;Q7mNS5Hp|>i$b{ug>vl)<(hj4 zz5fEGISWq4$%)+#Jk0qW;vFF>-?f5=Ib>GG6?F8$ zE=pOvgtkNV4B(2>(uf2OVzl2?-OjHAIL=aTKYsV+_49z zU3m$mWLd)RmC6%xQU*4ZYB6gITSc{5DgzF)6yae?K`hVZ$O8yvmL(~@Lo$1KBrX7h`nPe!Uam@7{uQ#MYya^>byG_Z*k_L3^u3X zN$PqHA^V;jrdYAPuK5m4u23IpT!UPD+(6}cc?^8G3Z*0y!qe1;3L(uVhbdO<8m(|6 zeAqtm;G+v}ykgUJYcf*7{V1#D=fiRRHY*p*!#v7yqp7CvLYy5kazTCUAfNG6(|0w} zPDU=Mk59dL&a9?yG@_W13+kJWGYvy5`hrhUPlVhoJp=jQoI;s9AtSniHaUi?0muyp z;WceiPCh(;Bj5#Xm10A;>=(DGyOz#Ig6!i9}c z%JZ_TT24aclq|^r(01stW5~i9P(n-Qw^xX1RTi{sQ>ewU_%{0Tn~f@v7RLcGj?%?> zEw1i_)FuE7)LW>_4C#;FG@)EV-YeQ1^>kaV2Vzr{CRn@)WlEI^5Qk8db|tJNa_Ke8J_yfvl$Q zJ?P8G1@-YdV@Z9S;auP383vY{VW|~RidIit6bJ%dU`KM_a{v1C}jCMaOH`V#1S^ z%G2*Bm5N^j{L)f{-zeqfKUy9Q56m<^9{4QvD*r3sZzz+L$V#Wbrv4b{pcz?$gw|q( z7FSW_-uZ?;vvo$%4A?*_VwL)rOf%G$-OhvD>#gNEzc?78nWM;Z3$)-!1e4{Xn0#-c zG|~MDcm*gB-JwA^8JFp@?6H1Gyva&~PwK3X343TD%j}+AK3;m`tj~J>J(SuZDNxgG zs@%(X7oj7ZE!8r|wZ2?1LvTzO_-guca491f)W_>wO4P^o#2}I91YmhN>^y{0j?!`kvECx5nG!>AQarI zit3;AJn}N$WJsT&t>S+I-exH(T2;Fi6LwQ7Prnk$xiCv=umM8a)<6SlO-^^q zC)Xd=n^0Ccw5^L4+n_YjssV0PZE+|JeY`H$`CaxVpKDOkBW+&=h30?;XlJpP!8nWA z+IU`q#~f05dQ43_>x}U-*p@JM3d(AkU?*QLxZ*kCIb_xJy$5|6xu8B?=hC1)t`7!@ zygP+9L)Qx^MJ}-uXdkpc2kmat5S9pgcTA1RkgWyS-%^_bj;#*`QBsaQ;E<7b+s{C|D^SWtN4R3A zR9L3TN`SpA)f;eMOVt7%WT|TAE>UwuLYkFnLim})C5+?7yprz(o? z0{qQV3RO|wHy6{~5S5DA;faVBnI?qom(ppn1YlQ7tq8b>rS=3IZK-PJ&QNnjLYkFnLimhI73e`{ z)m@+mn_J2?cMcR>ql)5d0l%;m;nzy#eRDC*?WX2pcDQ0G!r@AJ)8reNp~BEKxdAft zquMmN8*Rzk#_^hI%cIjO)L@O9neCR`OxxBhzs==;J22dE|z@a zy0wbLguDrrlLO&!mEzlOqc@Z)5YnuiX9z#FQb1aC0s6a&lzIVfWGNsm*lJZ3DN+I6 zh%7NFsyKk(D#up4s-oNwK&vSC=Zf-FWLtTY&o^J=xAHc(ond?*l%aPnQ}bWz#UyB) zj#4JpQGlme3P=mKI!Hx|RPdCgR2+bPi~Dw zLm3J^HUG6<41~tLP)g_vfE7z=%mLVHR~0Ez!L^q9^Hw>wI$c}kW&v77Ug)PnoGjF}S4D zi$PssrS1UaqqjiPrKfyeF7MwZq}g^+qxHe6@@De8hzGl6Zghz^P^b2#THBj_eb@JO zT{p_yC@+B0-&J|3n#ivzQY2itT`C-Srb@+~R3t}eTY3H82GV?(9-4%d*$1*bRWzV} zsKdMcIULtdLn+gdaM|jQKH2I_ZB-;(PFr~oF4&3&7SGnvut5Vd=Li>Js|(!NQr#&L z-mX-c4|=}W2R`Ms@N8l;lyb0gV@BQGRZ)>}yeg`r?jEYBj=C?iR5jhP>dq04Ro%7J z-CY&c`nqfXTz8(jC#vpx>gGc}dAFUf+j}C)m{6g-O^lGel?Ql-x41qHK|c>d**2QG zr7N>Gu5kcm-VpvTk7WyVpNUcyFX3p7Nr5prQK^`4bsd6&A13dK8~uIMnj`!{sWM@E zYmRWZQssL9pI0j8Jnp7Wl{t?~O2veul=7zdKsfUtN*TMmTOLE@=`8s=CE-OP`EOJ* zL+}4~asyi0p`RWRAEV_@s;DfF)9&7o5KiWD!H?*`OzOnk!Hwe znkH}%+80rV@-t-`Ad}?hu#MmkkjzD|U)A21*2iP5eNak<;uEg3aHlBLBY-bk%JrYR z?^WGJLO%7A7w4$^epOUQ-8jgiEWUTI#;nQoe34kI`=`lp_Y=a;m7F zx*xQZuiMLGzU~_8W^aRe>}T|oFYtu&*kh2%j3wd!@>s5c$SGd z|Sv_n5VBDPP>D~$ca+JTB6XfKcX%Kbd{ z3i|=g%vX#e&5(E3>icN_9m-H1qf8rXBgt0*8^JslV~ob@Sb0ZliX5OKMZyb}ie2Z~ z>Ub5&5!zPX(VDG})K+=I*Oe-K3b=zlVe}RP6&<6kY6#y^s_ZNBX6osXwoZEw7OsTI z1FASC{6MK%+G?jx$Aq>YUQWFl3g)9s=8AlAZBJ-nQ}XUG+=h0Kp$yF-%4BRLFS`Y7 z1YeGe;mc(0S&4AL(y2qi+{|_j+O9~rH`>XDxews+mO35qNlU#5NP~gf1DZQg&E*K$ zO5FUZ*$tuJF3)y*sRISNd7P!_<`b6k-SlTJ+@lRSu@jb6QHADaSc>Leu#|7kOJsiU zhR|FlD&KigxfE{Rh_ZvZi|Ej6W7ac`kN55_&O)Q}QOfC_u&CbGvyZ1*ihZ1KDZh{2 z;lcIQJY#qprax2{ytC38FtRI3=4tvxXUMw~XMMEW24!gNQD$drBgxYN8^Qd2IojQ} z2pg2SFKa_`h#NWSM{s>}C|8rq=1=bP2xlr)xE^rz&Xn?|HWjU;t%`)_DOL6rc}bay zHr7@-!b_E^^A&kR>?_Js(M77L)>q`^XU~AtT+;py7Q{LNcf&As!;bGs>n;r zzM>ozy{d`|z9MhU`HH+lmoHL7Tdyt4uGZ6*4M;r$vX}P5o6f#&zOJW1t3j-WYs_N8 zkxG>a-_YLI(jyy2Z&^-%N@Hzx=~xjga?CaD?f{KH}Hd2 zjBvh+P1k4;FwE;=(j}`^W;rJxJ58SLSawFc?kGd6l`?2PF)7MtUZxlrvh)a{l95SNP6ipIX zsZ1O>Qt+X~n{O($W0P9bnDIvJ^rSL*%H$ElCr;RZvM|>Qv-56y?i7s|y_L$;hRV1x zlbb3{4Wpub!i<_QWjN{R8bj?ixH4|y@UhbPMpVZ)G>#q77~N*H%hg2RM)Jx8v_-oJ z9y6h-|0dEVFW7i9wP9Q|P4J|q(TyV-_LnPXNUc&~UF1hJPG}gH_!HgJ>RRez^mr?B z{FJ5<2UR9V!zD&kl5$Pas`7x5oawn(dp$!nPD6(l2)S3hTV>G1@#CX~sN_c+IAw%< zmB32!xMT{uVP3c}l_bXNNo7(~K{f%>F(v+t3!rF3snyN{g3~Oi_KDwfp8=T9dMxdQ}n^d-)xiDeGLAd%<;OeBt z5mQr}uQ*rtA2BYy&_-?vvPy@`kc@%K72Ip%CQcraHrq0Dsi7&lJX1AMXo_x;^LMIu zSi|HIIrH*I3$*vgou5#ysjTGe)t{XMxR^K6Roag<9m3NcZJsZqWHVluRW#ypBO$|*WqUB{vN@bg5*+x;CT1;A5zjv$DVs=HQmg9+& zX@6!?Lu$Dwsbo{jJYl$89umw||A}BO#-^y9ypCOM)o@em8c|y#z7CV`eFn zB!m04I*j>Zb0=Sn_p-x59%JrNnJ?zF$`IGKs(r~C^F>!TUv$sph;=g9)`5eCPdYXvf$%ufWls9PT!er~&2CPZ|;Rkz_NuK~nAbG2;#var53HbG>2z z{Tri^QW-O$GHGI?NXsu4CN*Z2!4ZW=M6DcUnR?PL#V{Sv0t z0qq2#c6>jgPjLlryDi@`Q%*Bcdw=>*nzGdafW zEaQibmcv^#ob_~Xk*G&YB}dhFCPdMZt47fg!f-D*Sulr7&Ms23qtSZ!UTAdU%mDoTPrN zb6J!6U4aYs)Ms87&YCmLY*PQ#xvELMk8WP6m)WGgg?r5=^}5U@N$Tc9J6YpR(QCRj z@zl4W?gL~7C?l~kXFl_ySE^QYUYVttJ7sKcl+2-2%atnWbl!K)BY!?%e`A~ z9z#r(r^^#rL4tTjWz*B;0-5D)qlV+6=*u2aG+34}GWog5YEExlFC|Wv*IcPFW!xp0 zE4e9pC6Qyjb;@XyBxYVi%8;L#%;XrRj4J~vqc)QtkTT5o22h`-jQO%2Gr9F&s3Ny+ zDoymrxVtP#%`RnBm|e`~c0QFtl30ceupELT~{;m%*#HUceu;u6|{zT);h?1w1^nfVbA8-|*25 zjnM&8)l_6wSTx0BWQ9gM$)ac*4ZbRhzS}}h0m7JNuw#SVewqW*DIf-!XDzc);kvj9 z^@0dbnH-r_Z5pF$-eb?yVD1sQX3VXjuBIJP+1xw@8!Qzr;-=^TsZ~33oYm?Y63CoZ zBooNinPkB;hj}wI4IzQt6iOfuCL|vjy(l%VKrHX0C3+4uBSWRjyJLpIVjkeH@12B7 zr>9-GJIb1Oxxvc0hlkUgE4r8;b}l%J`FH2CE@t!gtL%y~7wlpl9k^;2^JM3$F6N7z z3)#hdgL};`=9e>mVug)2PfMrCkR_(cgG9?XmUX`gXaI9CZC9{!^Y zjtYO59Fex+;bEvU$>E_zt9tACy->P7)0;5K39T9PvM6&;U&#YD+w^Z$o5~t*HD|fR z6+$rg+?c_?2u?ju4iCnG2F& zUzbbvxbmUYoaANR?&wgLWT-Tsnfpo#A)oCb%h93s(G_a*Sy`8x<=h9>_Hc5sN;@}0 z?&D}DpLNmoX-^r+GxePU7i>N|ByiQ{vtyjAn$PAs7qa>60r#5CXCG%SNj@|0<;kYn zrf9e=m)eeI@IO<(s3)jC-{ z=`p_u!}RryWDA?Verr`5C{LwY9i2wF#3Uh@z7EachXrTS*9>{-GE<#psysS9%?i@j za`M_?Dx0P+^O(GC^kb(sQIkyE4Wx#9AM+)ld=h4kM+x5C99OoJQ$*(WVrNvb>@PL4 ze4XuTxu(nY7OAAB?JBrg&K52w3ZiaFRvo)Sn`qrt{^tP=U#a__2Q*1O`~Us}8Xl?a z1AeBUF`6Hf6m+UqH3hZTlsPOBF)sP)JuWRqlaSJu;G_B2hHw#@5@*;Cj3rk*??Ow-o3Nq#tM zoi@>0+b`;={fUxGkkHN&$osN6f_YMCip&F?YIj^8wYr8ouCH5>yyH4q?!%~*cU-$l z&Lf9AuBDQjtMq*Z`pCw7SzRWl-h(P~>T1$NbLu~EJkopBT|gxFss&VbX`DD^QdB{W zcdiFXUC&bH6+%tUr%J^hkmrM})xl>oml!AnGs_+sJX3Jm^CYe8 zr}tt>b*!l}gIvH04nFUwY??tL-9(0etM6T&ReLX74&DT7sqzfz7Kx*><`Ech^IKeV$<-TNDCU?G9Y; zT-6=;1m{9_2R`4uW_RHGGnZs@HDA}5^|>k9&1}(}U5BuO*(Eb0S|H=wHoE>4`QqG_ z7IQ}Zmv3P+Uj&mmOJ0g9=9zpp$Ii13*?DH(T%hN{Zc-UHV(N%-a>S7SW@^J5hL1My z1Kc*tO&mX|p|L^U%PAKIXD*DGFjbiSGR(*^%mdz6QxoPlyzlsS~CwEb^xbj{xqGW*Qmo+x9K{H*fosCPu! z8D-ka{{KaCnfWufkmheWlq;h&FZP?iWl*Ly`~OhMn&!`BR`YikO7m3A{GE$(7RuvM zo`N!!vj2~lhg0V743tlxd&-7?cxHTFDem1Ajcq87R-LB7YJ18&KYk@}4U4kAQy#<=ZGfs3O11 z-%`K!MmY@S{wT{R_eJUU=QQwVqr3*?bto@Fc_~V_{lCD!jq)Ruzf_TLhi^ITfO2`1 z8=+hp<+3PUd;hoF)6Z?;->xVJSMk@C+ZS>br(Lm1`+=*c5!eOgz9{QZ4n|o->Beix zZYi@Y%9T;Bi_(?f4SbBU2IaUa@+W~m1LgTBZ>S>wZuivU?rWsw0+gM4xSpi-zbd~D z^lXQ6#Z6K@Ig~>-PV3`P_Am!O`TKdpwEX9KX}Qt*Y5C}yY59Avv~>Uf-?q0s{EDmi zSMHg5JPhSCD4$0;8RbDJ_eVJfrQ6^4!7oHv1G}TD*ylJj^hh<;Af97Uy88dB{BgZg z4e?rO$#K3G<9!>(`6-m!q2xSp?f>uAw`QNz!UcWP^6q|V`4-B0lygvW9uC?lm79lo z$a%UN<|pTADrNuwpSCv${o4!WjVNzJS&OoQaxlswO6z%wj#wux?_D=78K<9}I5CbK z*AFnRa}c*%QU0ISKM8i}2lLDk@Xz(xg^TvQKqfz zf9j!JU&zHMsn@){-2725?NTr8rc(C**J!tKyOf)Y@?n%#GDZKbJb&ND+|-!A-YC1E z?27Ua_|qBnRNDTh{r_G1X3Bko`8ylsohTndc_GS6P^QxMf3^1aEoS@n^1#IWt&Orr zm$YtPnGXH^Rr!aZ_c4@@K<^VMp9BBK|3llGz{gdU{o}VyfwHIUJ7H5qC^OlbBFZ#v zS^{Z1G%1wL$t0Pyp-E<#Nz#@@gCL6{1Vj`N2nqbKzUli+g`t-ASP$7Oyd5bC$!FKQjdbAJe*+T!PYgcoAHe-qa8>> z*L}~Y2l#26CV!<4{=SWTeh%Y*0^tF$7hI0-Mot7V^%HLg@pC1@9p~ux0};LrIWrsI z58qbb9|`;+#Nz`2{QMB%j}a;w{B_^21iv>By8MEe`e`llVQxA2_x6fk1^KiA?_UM( z#=nc4cla^yzlwM!zP=6q-VJ^~MriCSCxTBvsh^I39bpl|N6Ghwp9zHhz)!&U7JNS* zp;8BbU4F(cvNz%fl=|sh^!rN@_G8?bpK1B1^o>{#EJL^sdgg@)4?=hx!ZShl3xv%G zS0Qxsb0mN*p@*4^zKy=*(qBGHk#8aV9Lk+Rx!DbXpE}^*$M+v0)VJ2(P4%;(H}^9d zeio&Cdu`j=@hixM7ZBcwe&3JrWbO?z_XPbJbnMVu>WM>cnD=gcH;$pp zfuBkDOr$>s+~muRUk-V)Bf>oq-iFYnpDMlCkQ1Au9^CksLeIDo;lq0>#S;jRfgS7= zgpY!51mo#D`2IbFQ}O>D=r&9<{x?By(iz3Ndko=v=rvzLcr)x!7e?5V?lpERykCKE zWd!{mkOK!Gyx;&W;UySG#WEXVGuLUt^az4)0Gucya{2;bYSI zSC#VmS+$18BOgNugOv2sli>Rd!rvq8KiH+z?@s_X=}pDolzZ>F8sF55iMJ-E_~{7U zR82fXcUG-ZT!3&CcDQe#+z+Ch|A{E?@rP>sD1KALKMCbXBkV%xfv=l?Q!djl8j)X< zZkPQw_&V-ULZRiJ+u;r}9h8lg+S-+V=uBJ4xB_Ar-HzZ?2$&}~4tRRsMu zM`*m62@R8rG&~;R`Stq!N`(3?_`5IS-;VGOgbyGLDD~4;2@T5;o_UmhUwE{JTjBc( zghzqS}|N6%G2m9^vu8 z7ot8J@jZ#q<=19#(3c_H6roFR_?mWm913ZyF`SS0kRLbxJ>dHW!ewZOV-ePakEsX4 zCu0;}hv8KGj$fh?qT)9$*7wU0o`~>Y2%Y4-%3~DSX@!P~<26hooQ*JsaPT;NKZa1h z1%C~ncfil^8FcuVbVgTcT$4_~Nk8qfz=y75@$DVV8AoO#R-4_`L`>AS^GGrl-U9@|g6d;&1A`s$b*% z>~k7EiO}Tp6nr=N{Kn}@=l-3F-&v<=jHvjZM?GAO@JfVxAfB5Z%o?7V?pi^B;p!cO z@5i|j@%^L5&w6$tfh@b{y}H}|qWI7fNT-cCbvIjn!fE$|>^{q#}edvgmLddNGN z!oIwQYs@EdbtX4XZ*Fh4FEe*Red8f~E31B^OTXr}^>=l59MaX{&E;==-KaOWV?!_T z)37hEZw4~?0$mgu`jVn|`Am13Bj8i6yU&~3)!RjX=^|D7+eu&OUABX6?C|Dh)}%V~ zbTL?J4c%wvesmL{^bKA*BwLn?W;FNYEXBM0uag)5!C28#xHA|_` zpShB>Cev1+sO&M!SDwx7$h7sZPLbOyU$kky=K9w0MP5eD(Cg>ZT z+yzh}--180f{*ekPJiwAhtEt1emLUqFW-VcZhT&%{Of}cvL^l3nF&HXuNA=C@{N3F z5za`Y z^|6nn`fcLHV2kx)&4@AX{D;tmV&pb^20ed{< zaGe@{vkyqftJw!g;0@!2N#Ddb zU%Er%f4~C5dffDXMejI1hMVV&XOwze5)z%=j?rn|k>##kK2i@J||l@J||l zl-}EqiEl!VY{yT$r129kY5bf9J_{4igmhy>DE`RbH2%onG-8DxQ$Lt^2Huw9GiJ&^ zj`(AUKif&a!bC*41JaK6M0`bqzn}QKCY&<^6R%7>LwRsS{3~A7 z_{R6Z(7W*ukBEQCdm4Z9Z---qzj+@2yta#RT2~J9tm=7Y??%4RAD8yni1_b6tno)y zn3x*6@!JsJt^Zqh(UvYhuylOGrzax)pCmN?Iah@nz{E3L*GI&!|E&uC?XYKK=-v3N zySo_Ewrs8w_h>}^4L?@NP2V*bhdWei{L3BY&R0o0TtekCf!~5keo?=3Ha1XXtrgFo z7dI!oRQibrHT|lGHNN@lrf=|4VHxLcW}@g-8O>Hk&$C~aQBI8h7RG0hK9;Z{`CR60 z;u(F*epyBm(dbcOd^7LdeG@h$pUbFLjNW6vEb}(^j6M^_xA2Uf62`am^^Y*Vm1p#d zFupbE2?-mL&t={=p3wvBmu2+Zv}S$}>2x5GH~E;AonFUq{_JTuQ)Fx5UOtC)Yn z_zs?#7sL3Do|*5$_)eag$HMr|o|&J*_%5EAcf$Cto|#X=_->w=C&Kvdo{|4yd=LAp z|GCWD)BkLLDD(ERzxtocyuJO;_J=aB!v5-iF7x*BKieP5ynXGj{^v4pKmW7+q0HOg z{_1}&^A7Mon-4rbXL?(E_ths1Bq7V0S>78Tgh2YjH8Z0`yB{QYal6+EUfk{tgmb#% z^$GeEJSWn}8Q$*R=-)E}a{l-^h5j@CC~zZ}))UTrk_!{`DR`pte-4pw{%1S=_7cJ8 zc;nC~4X0}bFV6q}5YFk2LjN}O_tS?`_4c^%*~x1~x<<@D3qFI367-4IBl6et{zf75 zk2NF&F+Jc7`o{I}D(b=Lx2l)z?oBxLQ$`iYd|JWhyTXmupoBA@w;g)A`by{%M{2rb z^qrsGK>xCn?*72NSG2u`K+k##r(1qhLgK%RNu$Q#%M?Ei_-B9*9i#Z(z?T3YX;FM1 z;Ku+TKTh#;fuBV93@?x;rk|`4e0OgM#(z_9S;9-T*SZM&^MrG`yo)s5Q$2ky5dPG@ z(5FqhJReJcHk%HZe6Iwbp|2{R2f*jMz{f6EoXgM8UBYK4Z;iwMQP2-xkr2A;Hj%)4 z0`$Y^Z~E5ro&r7&d{D`~X9eHZ8y;RHNCogeg8$%+2|>6X`I(@wRK0xw`iVOdLf0;T zX)R9WE=9jv1b#pSULAoiiojbU@Xtozt0VBf2>dL_a3A0D6l{KfDYSKRbNzT{uz!0U>4E4e6hrP_t> z|CfILhSHlEZXxgr;5&fNS-@N0RC*dA^85&R&cWx<0A&7y4&DiT2smY1p6h{E{73me z2K-jw!(P20W<35W0_R`7;&dx!DE$WTSxR`RdRPVep*c$bCD30CJaLfXuK<55g3tS) z&t0SR^i>|d>q6=Qcopy@@KNB+!1=n18Kl<@KD9`YHNg2S0`o}>D}Uo!^fTZ&;ID%I zwFrEBT81&7*6Wndw`OVtz5{^q^6M4<9{BVD9|it9;QX`gOh0^s(w{s-Upx!k`;OxO z1pT`Pze(}^Q9+f|ftgS27R4_EpA&$O-KzKxz~=(OxqezvKNY}l0X_lT*!i9$yi~jY zE&~4>;hdkryENUqz<+C67?t9)dj$T82%K+amwJ0#`5y@WpN*hj1NyONlzuDF-$6Ln z!}#;sPYfSEW5N7g`o=939|xaZ!H0hknd!Y}mH!RE-v&McJTp^Y9I~a-SNull$3dTu z!0!U?y`c18r*X^AY$}M34}$Bb{5M)Z zra$mmGsY9Z7i+TKQo>8M?@5G9{p`3h zFO}~5pdYSLdLuXZchfjO;CzoP(+@6E{JX%n*jDjaLh+k{R{>A< zDZVf8LBdPr^J35s-lg<3eB}9Q1pYekVbIS9{h?%llyU*z4|o=M`Q6Ijl=oV~xg7_` zwS8lte**XfaMSMZ0UrhaNzflWr*ygM2Ekp?L|1}r{aE1*NnRrz+=E^n8(+@Eq{hf$u~UCG&56P5D0yycu}nb;WN5 z&Ue=^{RHp?@F#)CCY1gH;C%NC(~kl-d{zR_y`l7m&-uVdfL{YXj{r};8RkEOCIaR^ z4*W*Y&jUX6meSu3d^O?RA1Yo7%ZJM&=pO;z`cLIUVn?2TfzLSlkCC?rkN{!+L*P%< zE>8>LrP}@E2%OKhaJkCg(R4}OmFFt(9|!+B;E#cR81#1m--%3q%%}A~%BK_Ks2%v& ze-$_L&SeoepQVv{20b;mJpUqG#@C<2f!BP9{s{GXXqn(goi7p7J;NnGyK)z{fy;KKMLEIG4-&i(a-7x4y6G9*TmU0eont@;Mysa)aIE`8GIs)-(v88hVh>hUMk%u z3Fmeh+g|Cvj&f~tKxz8j31@n5U!`xKsrfYR^_xu;+o z9|vy6^)Dmvoj<1eN$jG0Xt^!V3gAiL)J*c61$+>=;s0IWychJZ03QebzrYVa5dG={@QOVZ-xv4}pHM!@y%awjeCi|c9PlB~e;f2)CtT#=d&2vGeCCjVVm_nbQvv+bgmZaa`cr@pgU^MazY2UR-dFw!;EzSnzY9E8q4ej1 zK28%l=cfYoPt_<-hH%c0OMfNsQSiAD^uGk3VdTf~DWeII`MC6Tz;pX(e$E4*wGsF= z2H#)l3!r}v_ylk>Uu=1ZraO3m(q9Dn1n}~YDSjF7Q-O~FH~QO+z*|4A^f#1ggx?xI zpH$rRld`!eFYt%JzYh4&!Ak#2;GYNHdWhop1HTh^Y_8(7(4YSSJaMSv_ke!yLp5D5 z7Upvd@G;Cu!0#n|hF9#*@DSl%iT(7aBk-4nPqClF`-E>t(U*ePd#zKj7KcYS^^t4XIzRzsne<6Gy>d(V7wEvrRO<{cJLFSw-NpPWCZ>q;hfLbpDTa*D$ktx zn$Pk-Xnwwr{2T#1w@JOwnSQd$;Qv}6xM`QH;L6kfdp60NJWJ(%+T7kK##%D)5opHG6UgE{ zvvUMqOSrVxOwA9e-|`FyJ*@}F6Y|~IS1$lQ2sv!lLAQcW4u|^9`teQBCuV3qM^F#j zen#6jHlpdubU-N`LpbMW;w;6@c+Y}<>?o~&_LJu4JmAB3E4>*nHxkbEIq{^{Te*^Z zKLLF?$6sH((BMq_5uA-giAY?>3p#h@D9-DuGMZJ|KEfE_-4vy7UH}IJm<`7`z4f5IphqDSb3TV z=XrMYM9t?bz)vEa)6JouESsS(t}*ne&&xpnQ^L#1zitfv=YYLO2b`OwtnXUK%p#KHoQlB%mzpVlOSMV8riayXoYP>w#P`4>npB032y5peV z5%hfL2J`nYj&i_H6h2fBdsD&b83KMP_;~+AALzLc_(g{Pw@UvO@NWu^FIK?S!ucux zlIH(Ny!##a48q>det7&GM%BXgGxoajH}#M-IQsuACHD%zM^+I-dT!ZVUwn;lNp~%M zpy&3PivIxgt@kNCO}qL~wKKiP1)=9vMZIdmx!wk!RX!#^D+%X(CjX`M8PJ~&eC*zY zAS-}hOn52&4;uPEDxWROG{PT%m;YFCTF%I`&tgq?@Mz7?Y~V)#ANgxSkdLE2n+^S0 ziXR914DiIx+AfCxzl`t-uh!n^{9jc5`y>DVBzz9_6XVA|3w+9`!*l43wseRa$uI$ziG#{z`dU-PHg4* z2Kac;A1Z+VQ0Vc+3Z4g_+=P~EAG~`7cUvNNA1fLGjPU#+^2l>FWsFBeEbGY_bTvt4S4JIS}yh*mff&BRl~oJx!Ka^a884sLddMQ5k4Mly3;u~$l>bYhe>sBwzn~v+=KW6`qxCbgzt)eL zFXj`@`57(K{Lr#dp5s72v_bKk(T;-w}F5wt{=XXL!E$!)=lOH-V4btNisZ z)iEhxB5xhNF-AD&)5H3dy0<(>gMQ*W3Hg4I!rrl#h_}So- zJ24@Mx%>5e!9ipN*GAy?fRBfMWyaS_gmeA}AQ^;reH9em1fS3WNzfpx%J>y-X5)c*+=X71+@F=z{emDuSFu~0iS^XZ36f`gmeBAj-K#W(C4}}|4SgSc09Ip z{tpnG^pg(F&)KM-81Muyc3$aYc#YC80(};EIWP3+NrC=$!STfk9*)4DGyGxy z+zN5Fp#>4Q%izL>VEW%6mpQ}Kh`?vBp_S*@eCq34Y zliMAy_29t{hUwiqQ1Bq%=F_4G{5ZlTpP$qAHS=1(!M~>X$(tyrzY8B)FJOJQ8VT%m zLg{i<2~Ki*bLDd+`bj77!85gfE-h0=PY}-e@qVrJroT-9AAVZ#JCW{=M8N%F82$5Q z@Lxta%Z&u=y8D8@5A>txKYIWlB%ITYIqh|gp~wEt$)JA_{73$)`8V?XkD#A`UcC$Q zvl|&UIiE4KZw>eyVeqkpAf)cfvrKS&v4S+{D;zuOdf?^vCxrSCqAuq($oVyR`5(i_v77DEru<{h zIE@2$?OjWNkG!xzIGgdZ!tinS-+Kt>{EWkoG=cn_5BgSz{yV^j{-*ptIYT4d1AJnc z)>|w1JPACvrQ%vkp7*-oAhLpk+qIr6AfE^E?j*uxyquwYdXesVgzrP^DG%qqjhwj$ z^keOs&%43rm*77*vQUsGfgjX?c8t{v@{gJNqJwbm4}<3_eiP{L0{uAVP0E2h4+9^1 zNcn#o`J7G5J=6C#Ux>BP$=z>`jYXeFHUGlcaEsb}(BA@s%fY+Nfih^*jt z@OSMA&jZh~;hmlfk^i?N_-soV=5`t0Nz1!anI^J?aL(t%HHy?w$IOGL3%%0Vf3F3fi4DrrZiwVKjZKdF!q@}fwwj*|F5F|d_r(LC;GXLaLGUPZKHp#1)qvL5<+-CqJ9qe z7|vau0{mORa~qU?{S19^EAU~be?CY!kM~xrTPwil1>mD^Yr7l#E$~S?cGqpXH2=fb zYJ1T#N1g`4xqfnYD^BJ?dCmr2{%@_HO@MzB_>g1gzYX|!R`YW{=${1M`on}E&jJ4n zaCd+CeZsk(E0!pqi$GsP6Kc;+)zVQX2C;qU%?F;@_19$xmUI0Gv zDXpJNK)+zE*4xna2|@yC_^=rUz=v!VZk*0Y&^e=NAt*nb}d zeFAKQ2R^u5`RqMQUpy-~h^*kB z5qL$9rrQepw#!MV|Mp%@cYGuv zoIiznJ{5TGbnOrGk?uDLXa1vQnx9VtzZ3N3kQ+uGK1VqBs~q%!T|mD{R?|&5<8Bw= zgBaIl9908PeoE8*%S>gof$%xtX$Kb)&iQP;UCYb&P4KgSPSYJ4OUQR)|BnODq5jL| zEv?H5=loYV{w-&Ke(?X4&nWm`1p2Z6Xua(KJ~x7X9Oc~&_&vZ!x6pFYvO=CW1jiRE z*yU8zTdmT^@h%B`82Zdnz&j1ztn^QBt}ng~d<5&SEkXY?;E6A3|NjyC$y2~%_bVUM zF7FGD$X2j*Uh_GE^D=wm-J!t8cUS%u!0UjwF4p#{nyD{_1qYE8jDUUu_QOr_?h)V# z$KU2JgmXJ4Am8dhUslk5GI6=4YwBSh;VkDXAkX&&{R-eQ$p0$f7XdGSU+d?|?exW+ zz>~|hKRg8bKO6ebX}aU6=NWyPuJ?e}&pzcEVF%ztZzTjU_U!|JC+<|-%op`+V;!_V z@DG3wWwjm-Lc6c)FP-isf)jsd-v18pR!5%PPq=A2Bq_m5g!BH+quAdu^7c*e$vN_8 z+X1b&a%X?P3U~$V16v@GX5hm|YW<9(T$ce)LT_9L`a22d{x<0J+h>7KJgWT)Y`ixG zw@aj-XAwi@Q|{Pd;=soS5<+Ok@6m!6^GOlT{h<|px%+_R9K&axwwD>#w;Fs0&FAjO z=xe|$-qrrR0et=ge8|!NcUxb&-RBa{{WgbsCbdVNMxm#1>Z~7IBlr{|@H44;7m5uux626ZLZ;r9fWE@9kDW|7mv;=~ z)U^8z;4?UukeqCW{M-pVcd6p{0l(kSL$96#d;<7Tz0w2r{tbM5A8p5qS^8$~X`26v zYZc!P__;avlAQ;7uT$yILjvCu+@uzS4@BTEM&NG|&h_K^Z_GKpbpP33aOyv> z&zO2^jiB$3z%K-!#DI?LIuzkYzy~qk8F}&y;nz`rD2G2Gs?+-?=qu1(%fM&G8IUti zX}y{DnoBtMs|56rT|s{|;WAG-`$}El(|V%j)7;y35$FfmQH`GS(2lPFclVJuJ5%{5 z96QO!fseo*G7tG#20RDo)q<0YtvA;NjyywCBA_y*zJ4~Lw37y(`Z`w2~3@;oj$zF5I4gp2&dd55`p zx93^Pe-v`b=p@yGTMY2A3G}V-zcS#QlwrRbj z_+_N~9^st-q$AIF`-0YIg=6nsKseXiDEjkm;BzAI@&}Z^>F1vZK3=Z<#N_9zf+MmO z+(bCH?}+0k^BUot&vBeDI}mZUI9v0RyuDtK2H=YYw;1E&@q{y<9P~ibE?Mvy`cNRX|N&s&8LjYmh`{tUS1;C~YwOs(Ku!w2gZQ*XO|QOo7Z zw*|n5;h$#4QIFsjV|@IIp?CH>ZUElu^yj;Qj~%J)atjtzZ$$9l>Riod;=2h+an2^1 z@J_%zM^4rOFNa*+1Nlq?Phy?*Y2c?5&h_uXkJQx9rJ#51MK1y$yDuRe%)0EKz=uDh z{pxw}uOo#-->!uyfSNaLmGpfO>BAokG>pP2t zvl(A4gmbz%_)#oJx?d1J_+ka4f|Fc@{5SI98G|3L`P>Zo-2MXPpM>3V33x3aT;$CD zN`E&5N&&d{uHv&ne*y5Z6^i#@9Ni$el|g)blyELr;#*3824slS_e7n>pLUppC(-7z_a1@dK-L(a6gi%&x1+eGyN#!p3(C^ zL%7s~<0o(u;ic-KS8$U5kOQXvF9Dwl^#2Cb$!&%|>=mZo{s=sImX2T3pBG=K?LL0N z0^yJXpOu75{!#xV0p(dE^!Q>0=SARGMBujwPV2I7B!tT~;PqqRBd2RUp9K8(z$YO8 zSD`=e^%c$kkTb3;fe*f?<@z=FGzg9_R&b)Bhu!R?FqYHto5A0`ejeh*8(43r+fy1Hvo6#LmGGv`o<2RzlLz` zZ>?Cr90>en&=13J{0`vT43(~*j|)!vs-yob0X`1@7M8F|5;({BhtD3$&k@cKnN>?^ON|VFH+OiPqFf={bsAFKGPmTPotP1pGO z*8v~-KjjlcK9>O>cI55Zz=wXQ?f4a>`#s>^Zxg~{Z{QCAABB8d1^#1(&oWK-;xc`) z-(_0fQTW+j1^Ukt&hxT|ad#N-OMzG1ulX_a!kvPH$O?WQfscbvuAu#}3vqV)nx>mv zk`Ux|;0FP(ct`WU9{4iCxxHe}`lS!}Fn%2TQ)u_w4E-GC^K;b0jLVhJ_&2p&UqF5C zML5^PFzkfCM!GSBf1vIA7Vu94A6lyA+6{bigtI;BZuDnUZ|4X-B3r=?;4^-ALeS^% z?k>VbUSWPT^6^{G#&zJo33C@GGX2|liWS2yrcXI*fq;GwL@mwO54{x%FdVFDz7 z03Y|<_byj*{)?Y#!AYM)JMIdSV}OrC4h#bSBJjZ@w4YoD{Lu*hzXN>^c9oUr&;KM` z`jum6s3k!s^?9E5lQ`%H2``oZ%LJ!=kUq^%3FxslY4EAQI!!DnPI&Cg~iz>C0hj(zw8L*K6Xxo0!w`KfD4w^vI9-W7qL zE;#8?w`qPhMV4;_?(Vlf4Lq0A^3t%<=UT0|(VuEQO`qJAaIT+0^tW=59|rnC*#Dme z-fsB(OZl_|zX13U^h49%ZUjE@S8exUw98Kj=XM{zQu(|OKC6b2Pxz(u11|tCuTy%X z$6gKGwG-YhI3ioYV-fg^5%>p!limWoU0Z?tE3VUg#tv4b2K~PU_{dY5&%d+*=iGjfKed-4o@QS&Y3Glc%X zGw73qn?3+Yf?NcCnc!q!Jxuv0!2egkleLPQc7HX3&x~(tJ&Zc@-66oouwQKCc^Bb4 zf5m>aK=Sv^nVQ@6gqOP4;vCSsdhb2Jhw2v!gTEpFn_aK@@vwhQ>VZ5b6VB<5Ip_LM z2i|&HLg@0~b3SnIZpELIxAZ$Kz$<>I_#w#u?ZC%Br}zP&e+YQ8Sy*y{pZL7i!=Ewl+(|h1Pxn5JH-+9x5FaBo26yb1D}fJU-DJjcj&M%b^&j}M;RF9hqxXJCaAd*?eggW~C$+r)#=AERp9{5r zUQwnmX56g#pGYeHS@egk3FrKH@W*=rd@ca}_|e)A_XU0f=-vB99t3^GBIUmU^iKmH zf?a)Ew9D&;ep{{o+ktQUUCrlslk(YYmNMFtaF(~_kgG;dNP<2G{Xd6vyMV`F=RXnn zHNZ#V2RVW5dqqteuFBcq{ zu!55fANaTIg?HxxAA#SgIe&T$;k+(*3F}Q%n|A}@+`g??FB`f2IQS%BuQ&tze=oR| z5q$h7_~aZr@DAV8dT8y_b~NK|G4KkUuQB>SkKo1p&o=aTCFG@%&tE5;+kFi7?Hv&H zHp01F?)v@l2>yQo|JKWte=XYOtqA(rw`jS>w$}b|7sgQx_yqLKb;wUWa96ME5gbHT zFcg7*F9QDs;am^i<66(gj`U^({eK0g^~p8}weIru#+I z|09BX-kJr<2jt#gLEj4dm06d~x=r~f{;Kt6^t8Q!kHF8+;PVJ)y<+%cP4}P3X9MBf z-$vlyz61%kfxdiur9XWWeX+sdduaXNfchB*A8)bdXIJo_Nd=d5zoz9f_QrC;xqgOG zKQW|xDCozremoO+li|~-=^g_9-zJ>%@A~^a40^Yp{{y&d-`@Im&1d2P&F9M~*Dkjre(ss2 znL6gH^ zWxQJr+_kfPGlI|EgtHy&ZpRMxAo#@i!Zdn5fqa(Tq2(GJP6$rRc6qiToa>?7vGX59 zIF~EotW%nW4DJPCX6JkY-hd;<5*?G1dJ zA8NVA|C|uyXW+9B@C5c{E(QHDz+=xSy^%BRgvmjl|7-&O7Vz-|$_xAxcWSz>zfh8JmRGHtDgSLi|7GCA3loCO0e&U$QTW|m z2K*7=i9w}54D~Z+@Z&T;Yk|KiI3ioYth+cr#m`QHliYLcX@>$If*e4c73kf2!yW}b{G{gdH{kOg@CvL`W&+>(ZmqY(eoB7^$~Bj8ZeREQlSa_H_cMGM zc*PY7;k*v~zX5#g`2~W!4E#pIxm-z2}{waPqsrx({OB zTL^p*@~sSfRuRtmAA>)`&cH7Ky=!kA1|EAjA(Wp4qk9BLWGnau__u=pY`oj_UQIW5 zwe|-yt{Vxzj@oMt+RNnsYQn|tahmE6SAfqGf?EmV<8MGef_m5tc-ei*r+jfjkU09` zb_U1%h3UmRm~iQzXs@lo=Qz-h!$0sk;9msp?t5MZJ|lxFHyS}d2Kv#xv>y6U;CFzx zzOViHaO887A8Y=H$`vnQfb9m{Tderozz-yx^Y51$}c`MFH2<4Aa zu9JYbI{xHe1Mcb@PZKWfc#iV_CDLv9spnPTvmLY$&iyTRUqav&c)5mf=F^IMKS-^T z=V8LRe#)QLdNAYt@4&|#JNA3R-}CC~6UqR8_ZZc56OR0^13vLRZQms57XTl{`qYfC ziwNiZ3_J2?lyJ`f_z9ZNQ^Ds2@EKmH_47&8f5rXiZ}%pIvI_Kv5YGH3{-b=19BUAI z5Lv-$@R`7T)P;9f18?0<`I!0c@d!TS5%^o+^d(U;8^QtAHnUVFAD*PZFhbj+=-s-Exhi&R&~diquq_d4_Go=mEvzo%z|NvC1i zB1vZPiUms>Qsx^cV?GC|wEL;_bgb#>p)6B=S7-W`=bF-OnQs1gTsGgaIG^ol?#p-e zuJ&^MeGAv5^ImtFXy?zXjCtMJ)tz148K#vtUA^*^c%=&I4PGXnUs_n**s&g;3SMS? zroEo1^+N|G!^kq?tRLuAuTQi*=M}R3`SuL+E_j9ZRClJ=liX5PdnoZrgsC>>(A(eL zUC6i3t*NQ3_Ie6^LXyg73fb;~HCgk$KuL6_+r5rVXS%<;FGZhYy;PIl0CV(uv-uvc zqiwZBE^H_;#xGLs-I;W6mXhhtQiIdiu1qhgEY(w3ohoFyJG~sWe^*~uwl|aKtYr#? z^y*B3KIYTCt20ECAJ8{k<*96rN%^%DDwWH34W#=r^u4RMgDQsK_~~?{`_k0GvUz^r zQJ}gQ$aHtKF-cD@)sZRm<+B^)b60O)ihE8vpONp~F3^$fZ|ly4Xga&I>2NIKM~xmL zl4|1A+BWoA(dV{PM?c|&%35S8wJzV)muXA)wXaFhhddRjVOjjhs$_p(!-}Jq%>!9Y zb9YyJrlGlt2FBE}YZqmBB$Qylv8$>~+SCCl$y}CrZ%DQ0Gn9C$tvj3TX;^mjyyNoe zTrQKZUPkTRFtG6vo!PK7P5-FMN|X>)G_69KGR|L= zU6$=zLrvI_9Ppac1DS?=KAWF*<_w=jl^an}ex&$^i4>zq9c`&Dl6l&t{H_wOOf6|z zUcaCzm0FgHH&wc(se_8;M)IdPSx^OCzr-yPBFV z)6kP#)|`sRkIm!@Gyoeqy80TD)Is8LB3O~hW%I;09$T2r=lf-dHuO-xZBEs4I{k$P z$t95>mq(i(9nK~vPDC}wrn|d3q&}zzqMMeatXiAdFde#@fpmAj_TQFc{j!#1*+A_* zMXI$lX>p-=I84qAU116$ZTiWH;`0`hgj<$b-?x%PVnc6VenUf>4xPy(R&$(bWHlad z&SciMWEXek3)7*mW^x{R%_)ebscVC~>r_>y1x@BN13^Kjj#bSOro%m^rEH=JS;$+O zC$B#44lRvS(R8$R(j=Is$*tYv`JBbRGa#Gdl}poWGd!3?maaIuxzLk5x}7xwnsL(| zIym^7Oa?MkdNMtIX_|OkUX_(gGJQ>%-qn3;sNkJl>oXlXH88_`CYSEQNQ>&9bu?y) zh{o)^h1p&j=Y2GeTe2;jSc5yR(TiJ-{gB*3LW1h^L$V1An?(?q5lypk1=NoD|0G|N z3Bky|ALKT^Am6^GYe4!5jV_rRmo@j*4rEySjOvJf{Q1&?jlG@OhURo5&4LXLMh1N} zCXi7diOKw2e_>6kE#1y?LucqITd(Fg){GWq3hnu>9M!;NW8AL=Q{>WfM?f~I;PuJo zH@ByIF)~CNe8_&{4uh8F|0j$@K&0B!?Q4p}L_D^#m&Ak47Btt#c&_)WyeS@shA6X% zEy_v%A(_B4eJVp!y(@m=)g*ozdugifO?Q(b*1*aEW&za`?3X?(T1OOds%pvhrMp=w zHg}!Ix@yqFgi|HITAJxgFCt}L`gA4rX{Q*=GV4g0*O{wSEJw$g2Q4OE%SukZV+Bdy z<}|Mx8-j8)EUOV6sYX@I$R*B-ZOEW!?D5P~zdrv;HO3+U_ z#ER*yHH+V)>`I<0e`dwxM{ceT_4%pdFVdMHQb{b%@uUhu1bLLsQHq?TA1w#7Q)tfd zs)n9i-v-n3Yz?}!5OgAJj5g;)ownlW#&cD%pnr$fE>5&5^;wrb&A9E*Ax!D zwYHdE34C>GdgLKt=k(ujt3xG^=p2jN1iD3pulosNU%gBiA>fx+6kmV=8daCtd zyk;p;(E`0xKaXl%H_p`U>&BQy3%gO`G;j5GH2095lV+yLl$N40#p4{cDNWU}kuj(2 zSZ*#S>sl`DRGrJEpHBC3<4j+a6vdpbFmWSJxo|9MpQ!~{=|ZNSY`1IKP86X#M!uh?y5&OFOFNXx(J)nUZR_vq#@e@UT~=+h zuz^lF>D9KZ%Qmr5cVpy1QKYE_LQ#}yNQ9y|@fuRsSc^586|K3>|2CPLd{jaB|hDeS`@RgwnV-c zXY(H-+f&)ZiYslS6r`f8mk?}G(^XO2=?K!INK;M)MKLCu3yO%%WH8-+VuV{*&CC{TypY5Tw8Y$OF+4u-HIHGm`;#g8?(@!Ms?pnCZ zl#O6jw6Egx!j4Lmc3E7CDHe4lB22!jD-i+9s>lW{jxzZ)R*Jrq3B=KtYno|av?J5e zv|^=9OuSCw-^-@97D;)Qu7Ji_{3Z+L(UPkSG1=!^SoeGjhbZC7*n}6jQfnJ7^)ra#At8n_`%sHr;JOZ(+^qczp>PCOSvDlBR< zFe-836(Oag;?NF@cou}Z!lZVoC{E}UQ49R2Xz@B(jIN z61#tdUy`jk`emG6W_kylq?_X8MI1|(s?;xeim7Vo9SC&--rs3s9;sZm(6zpZ zQ?+RM>UG0$!<{=GHx4<(A(YSXtk)E;BTII^uVoEyGs2;RmULXQ=Dv75wJ39HKe>F6 zw2G28bxF=2Wudly2`yN9N^CBDL_W@-4wt}BzB1O_oyp`#>0jE_p3fG@eBawqpr049 zwlyN6&R>>Yr;)K{6H{Cq7SFm-{Sl|8l&V#oe@3H(5oM zh*Z0PJcW8YLOnb>RliN+^GJbe<}TRV*QHxQK~2VK-4%L645JnF`BISL7!mVQycB)4 zE;6T+@mkvNX(2JVh&IxBcb4|SbicNAI|e1Lsb5lRFqV!Mua;7A7ii)3nS9nPqMqKs zno5WB^FE23@oA>e*{Y;G+|9U5Q>7dalTVVqLpen*iaY(3IVp}ZS#FA{C(lu3T7 zEkLq83uKz+I+`k15z!{eSwxI!(!tMo>&McW$()bLYmGJa;8WGV-=DgMac= z{0>g$oM1w2pv6UUprN^PvW>=4lE!FrrH6e~D^2P{RYEFHE0vQHF=Io6rpBeH%;|A8%61>I(Xc2kQZaRqoGHf7ma@cd)`L$2|tVR*b4FCk~x$$ zfyup9WZ;r^6pzCL!1yv0l0DN%ZN8eyX&RYgruOqUU!7_iTEX&M!wj6gf$L{ z!+H&^BUEV1_?^5dTsiiko1%u)16wz-l!M9;9$li6;sF`ra&1)Cm{0j}3uoo2w&>j? z`6`|xs+%|Twoj^fh3CV`2b14n>UgU4+g_B^aATGhLVkSd*$dauRt=e1wX}hw4h;|T zH7kf)PNYAj&x-p_tqLynB zbH{YjDb;%;TdU-_nlzP&7@cB?r&TbYLEvTZnsh;2lgJ&G_xl<0kAAd!>VM53JD!(Z zJXiA@@^DM`$*OlDZN$^zgZ3`Z+Ha(tg7&q{MLwjgH^`4q5P0{d79GEA!BV=fB9-bQ zt5YhS&!;z}XxS46D2H^c$++MzU%a@vp(WL_puVXgg_A2N4jpjmqoXKo{i}8B)5~dw z=@dzCN2<`Znmp_hi6u>q^$Sy#bF1c7(&!=YVnC}_rK;vu6GZFys#I!CCY|F`HMAOO zTsA+ITHV{9YG1!TJ};HxLppQ@rwiUhjU)nsAZz-zOaku^`*Y)K`LZmvyH z=9=e)^+{GOj!koxsw&m`50CFtxS|^;KT8xpl507buw!DNs%HnldAb2jDje@h%+oE2 ze1q4Q@9%AQO7Hj0G?`VcZppP(pfS*wb!*G+0d}H(GN${mY0BluWk`l3p&CE6-N=RYeqfE%EeTssYpG{<>{HcaE_%T zSCQ~(q_c|EPC5jcBI8q< z&J@bYJ(D*gQ-sd8+2t02U9+^mFSC9jAD}Yy9VE{BGDK;&QqT_~{a;=2QAGlW{C)YH z1=&N%0iq?#)>X1N(OxjQxWF809PN8Z@=;xoR9#Afp7)gacxl5_QniQ9Q#DYJ?4fgw z?Q2tX#xjK?jUM+APBEnd-Y$EMWFa2sokR#|J}E~c%aVsYuabdR*`ezs_y z$kW-uZXT3$B&aW5=ackiJJhgCLwiMY3SGdTHLQaLkwS@Q0Cu_7rE#jgZ$mDV>dSU# z*Jbi7ID>9gB}J@nr=vA~>*aO3GF5Uohk80Sy6hm#TMj>I9m-)1zfejhOaJ1UIRa`p?g zeBP3*sHChE&GO5RuBXLN1GuXhzX-9 zn%b+3HL=&7)K`Cx5m}`iBWcTvHkxTqfljE^RyQQudwkJg_d1+9?&?hSbQKDu@P{hd zo_UJ4HM$Bq>)@m~M~ogNMNTuOWUv6ZovDg?g(zEQM~7^{2kl&otsoxVy_gfJr zff8&v`xR);$vBFI^nvOW9nGtZrJ7S2_UNZ!LMlC}!*nXXA>1F#m@<=YYF#$J*6Ytv z=IGo!&%9PoRreNmID{reo*a{FHWa$(u>J};7-Q?1%q-BeNN3>lgNP<3{Z;L&+}$~l~3 z$-y}~!K|mFea`V}?ar!)qd&8@=Tn4+Aa_O6!K|YlG(35ILam?Wa_uWF?W zX-vc3x-}t{?&wI-?FXmY9U*jvo21bI^fNw2&U2{I@o6%kV{fG9^MqfNJyWdkEKtB0GMckB9WQqCQZnw&<)m zIgjwhF1hE3qGv4*8^Y_3&_pTRMUBa4`ug*|VNHgX6wTrikj~QuFTpg8URqh*(m=P$ zu$B!S!%ST?3Rt9bb+`rzS&fNrplGPg1yRg>E!A-mAQ|XS>PAHQ{jSI~?26-3wJ%&k zYb(2CzFH!zI@j@G*;Kz+?K8zf#pFc$hj7L340CPyY`TM2IzctCZO$lI)C#0M(*+40ly1Il$M36Fo~n-|L#OEa zY{s#Mls!pGLrK#HsquP&=X*-WUr*A~k1T!kHM@?yc{*6x&bB*BWG9_1B0*1g<6(F3OAcdQg*CD&YG=#X^8P+50nhMUaj{gqCV1COs)ml@K&pppf(4Fa24K<5 zeW`to)00dU+Ok|aT#B^AjQF#dTZ)8-Rcpw7QQm4b_ZW|sNy<`x__Q}WwUOpby`V8# zS2kmaQt8i=n3YQLR}HXha>dgvNnPDteH+ZpL}qZ=^=(Zw?h%2|L{4>YM~hn;F;B6i zrIz+TVxydIlu`YV>dV(HB9_3@ck&B5Y%OIYbOcomDt>K+=7@O<+SpLqD>Ol`H|<9| za~pm4j4Mh_Pmb}ymeu)ee{V<7W5anXt-1?Co<98rtK67nb+^o^YOyf-raAx|UApU( zaFVSl>CR(y3G#g^x?+Xw`RPNGPe+$Cf1S zZKt+`Vphv1^jk>5b2PJH7+8_m>6Y#>qDu{;$wQ+8LYF#c{qZdgsrr?Rn;Mp>9kGp; zME>+4TPHnjyaQnu-J0I!lhqh2IL9m3&uQhN`s(E*gB_zA`#L09+p{^FamiZ{W=^DB zO0TI`w*s3yZs~F&b4kq8l{n7aC7OzFpO7+6CB}-KG|1rM=f* zE%I`TY|oS^+Y!X-%3_dmNb_SYZ`;weZ{z{pN7l=1ZpwW!GLP5d@)g*G8ydQ03v8b3 ze{ljU#j>VN6>6!qB?gDz1o4=qTgIs&ign9wvY=<^X1rjIUshVYxLP;4lu!j^H!P|b zzG2I1xUmAWzUx&&dSqAc+HhrC@(;#o(GTLa0vyX`#NLMh~itUcE-HA^!oNI?vR?QDZcH?}*L zpHNBBD?^v-^w5o(a*rSG#}tJxoTXqkjL&PNpuu0om ztWfhka-wJSb+@#2eh)RTrGv(&^n^zF{oOiQeT8llR7tHnax`gns5Ipk32zY8 z88b?}iaM(FVi6MU;@`pBqoG2RI1c5SuF>;N@@(+TfYxDIms$8~4dLj)E|7z9H zdMjc{FSSaCo%N#Xh~eRHECk(%FM2b(9m&2tTdLSx&lXy1bF|bcoq$KB?a&ghqN}ON zNo2Ww8=7xTwd)c_>>6XlUeHa>a2fLERu{ftdq_N$!h^%^c4{1vcA%aW+AL%fnAzhd z*NVVz!uO|0kt$1bD``g&juoZ6DoTl-;1-9#^DVW84jB7G9~xW1cYGp)DcOA--Bd5P zPO-8@+Z%R$i895vd3I2PX}1%rqaKnYi+E~nW`l9eAsIwF#BBZxSDeM(=8Yj&8509K zR7W!r(-daacX%IA@-a~8E#PXpLzz&R!_RHw%~UQlWBI& zpv&UfSuwOb9tZ~6p9l)wqorObbBDhz!n2R06lybT#cn(R&75JTQF~P{78$F}BP?h* zdS=b1eshO=iRd8WWW@TA#W)@l87~4vCTng~@+rVET3>F6T(-K4m|OyDw7d?_Zmo?bP6@>DI2dJoI)LxwF6$VP_HB3-E_w({q!RM?7};x zO=6?F9Cf{LucI#4yoh^Ui*szr(yr(zVORUwV4cXSs%$BQMMh{Cn{`BKvtxL8hka+9 z6G#5(1a|_(-jyiM@`C~_B%J}yV}*oWinp%0p#w1!cBm`1d&(YHN?owP)GW^(8@%az z?pPp~^L~HI|dj+2ZG>_bq>LL4lSYZqs; zM94>f#0iI7GG$;GsVFrQrk}j;QdVgZ+WXKs_2Y*)0EboRQt5i%wd&*4pV<=^?s( z%{qFK<`k|Z&rjwcl7wFO)hvs3%@>pC^q&`bI(sT zcJR@2x;>RVpdDXm_GV;5JGCa&XjRCumdKN?m%c4N*`;tnZwH-<@75cVL#{V65-kIm zIzp>-T>|qye_!xxa z6%W?Ptyu0XMzD&dUw`|AWvqOa^b0aTWNk;Xs6A}RvCU7DoKuu8XIxH;2Cl!*3fm;i z-o_ICZ680MvZ-%5UIw#@wRjE9HvXt=2s2^N0P>+G*ChI_1reXQ?#6Z=vhC#fN#5P* zuD$|UeQ9jAlYyqKktMtEgun)Uw{clO$i?xa~p%IM#u4Xi!7D7CzI?bQThCH zJ$!hn49X zjOc8ouc9JhV#I;SIF|pipAZ@gmcX6zG_l>*f#%^Z`pBizo_*P1D!xV5Bx+nDsY7ir zw<)s?j7J487->V-?-+4g6qzHnooy?Shd5 zURY*Q)!6dKUu%Sy%YJ>=P<`tLi+WQ}sZeuk!16J$jMODs5C9-We-ZV7${5+$_zu_5 zc}a0pl^;!`^+vcK28X}mbxYHEIo7_czo#veUrC;YVk5Gep~#Jo&t*C8c$Os~YRZ;{ zp`8ySLaM|hwluw-@04xgE!5>?zVD_bB)K2(g?aKjQ7N;hoF~^E+SAXI_fGf>WmVXJ z$Fwp1bOirIMc~EMz#Dxkw0sM2cpV$vW8$@ovO#~L-zub=olAT3aY=&_6SCk+4ao%; z1JX!hM6+wg@~Vs1@((R(5tes$sW2FFil>OEfLgC|?wXHfkT+fAh?I%YH0+uYxL?*S6MYElLf7PGar0W`!wn@jT-;lP0^9RNP=*uH} zN0;`r%o(%HSXjfbGQ5J9(z!ya+*DzQrx4S0Ww zww&=K`|R5h)DI4O`kjD(&CQ(cr(L$iWM!3K$--{iDO#Ck-;^eV-VWN&5mP?-wG_Fv z@XBX$ugaqP0IWH+isn*Z4mo!#n(oh@l|^SLO6=q(dy=R4ZO@B)yQ#@|$tOU}rGL=T zJGzsO%eocEYI)NuOeMmEFXE*@8j7=j%#%)%rhYpI_C!S&KC%DzB0B8g{&c04erS)a z`Z!vqhljJ(?D4vWo~}OUJe{hyIv=)>ahjGkbRsgOHac!7e(gbIT33FCAg?@x|xokUA zM%5$KAFn1q)q$cVSH{qm2OE1!OcH!lo0fX)-`ivMXtC7mlsJ*YJ#0fkKki*ueA?Tz zNW_e8j!$X1Eej8c=k;vA3+JG#mnK(Q**hL)R_|tqBHuX*!k0Y7x$V?C8hH}+;EBlr)wYrIHL*b!mi4Mp6-C_|o z_{6KEQdgvLdQJo!IwtouF#%8?;NQv9(afm5ybRfcY+XPqEUdPZa%`>$=*_H4bvU=Y zHWb>^xeQF{c24ZdG~JkQN3ljDYwHCaAT?%?Ic*tqAAbYb*^vudx{9`k`SJ>L&%La{ zCZB=GuOFR;%$|X5rz1mhZrXceMnMs+LbUb;#WxBCQ=3?)TqkQ)h-EsL-36_tDAmiZ zY}>6@%3`w9Nw;$_p|7xnyH%jjcaoaXTXbiR-`A}!Tf#|5-x{N2DT|wtAC`*%ySz~+ zMJMj@kEhv+H;uQzwCzquR4jW9Ws-1BJH|Y-(Pyt=8(_a@-I*?xS|HSYyTnG`(_(B8 znhY%;+jvXQG~lEPYS2~87@(Pemiv5Z2eB*iCnR0$!`=mi;VhaFD|%`2<#A6x(2gAr z^x1vWH)EJQnub!R%2G!^WFQnf#*r^3E%9vLye$BGqv1+W=$9KOF{cuzkadOykGV}Y zBrYR{pcKe7lni{`Ix60Du+%&Mbf0SoW?vF13{`LOSwwqgu*{zy>BefksFbz_`NW=G zt?_xPmKePnu70Xj&r7EBWZbgfd7Zo@3(xVPsnRG$b|PkisO8_HUctYClg*3hZwO5{ zR@L!UsA+SWi2Dd+hjZ1nv0=okv5;--ZDL~>EHS0kIjMb}W&+hAv;>Sac(Xy4wEWd{ z(*=9mlRb?rN_+*7sH$NRW;I>7#_hHsm0|S&>*GoG#u-Sb`0Nee+-6swrDC{4zcCmTHJIR`kG_5@*w&1PF7W&#Y6nh-Xs=__V8!wVWZgqzaA5~##4C7y5 zs<-3=OnKIjh7k*#gATY+MRR_2SD5i+DqFkGB@4bjUBsBHW0UV_=%pJ7gCDlk zHVk{X$W;Tjk>mf@os~%)326G1kyKP7{z+-N%Mxm;vnN&ZYA0i(E7c9#c#D@V!8|QP zz0p=min>Q=T>I5q@|q${0U@(fu!-;>!}werG91Ctv%vE5x)fYkIWYTiweOMbU!Y z>Y>&I>gyii5u=J&*zZK=`p~b1bH@+%6kT(4cr`4!wk4JC14tfLbh}b$*Owe&jn@@B#j-}vzOj?bAEJ`GK*?@R6nd{204R}}b4cxL9y9!o3mgEapaBm*F5sSHqtZ{wv<2>9CO-yJ@2 z^A+>l_JJoo>XO&5JdlnJc$-$9mZDdD4A0ME-J(pPJ>Qihvn^Q}?R`>OdXWZHVrgra z(A_MMS&+sxsZOc3e8`w(ay*as+j{$R)-+3nE_HW}U6;@b=Px9$Pp)jS(c1)EY4qd9 zo$3B=w*D6z@kmhc?HqO-GZe*o9kxrxt999@9t`S;BE?~Mz?AjVT!FR+Zbcrvj%EZpmee;$=@wrDUhg%h>GI4B?e3c8o?V(a-CIn1f_9ghv^#aA-7TH)%8i>z z?y1whx6F1)r<)K-0i4_`o%%^IF_$*M1VhDM^EHrlzl(OD#2>^ip>gq}S__Lj?h*Y3 zGgeF4rXnn1dSQXHEneH)+)`>IF^}6)kvlRm%T1|v4)quW@;5C5(=v10G)aiCVjj8} z-PPc6ft7pR8g=qiKaIaswo^{Xn{jStJlad3{TWg&EZ+>PJJA%+BDRed5?wM2h24#$ ze+ISds}EK)8ez_65>XoX_<(5`lbgy)5~59VLOz+#bh0$n6Jcb%u*JPyv!zrw(X8nH ze3IqiS!STK^vSj$qs0f#!*}(PrPCT^ti4f*Xji+R_t5NoRmMnq&^}D~cZ(fiUvi0M zv{zFrp(VpSx+{hSazj^-W+l`c8sKScwT1by4>FVZu6NV98k;ucS+Bzs6I76W3xMR* z=sI-sDP1wjs*XWiGeKosWvA|q(B&h1<%^2YP_2^N8~HPaTTX<=d@2I1Z&=Fr^f>x_ zXx_%<7M6xtY@)FIhUjW%ZaVS?r36U4(Owi%#|jdoij0=NzYEd(dS!TvFg_nwjqyHC zLxFq=IKv^q#3yk3tP9C(d8|i}C^I$U;q7L{RIYe=kRlc0Yg8xM|Ko{)jFwYg)@k?J zusC$br%X|GjdW^gx!eTVMOv5qlx54YrPm`iYk%jNq@Xl+gvFSJiM2HIH_BNBJU}NjT6{$%GWy#lt(sW>8bF5|3TFt40Jed^AMZ7yBLfvq{7-o#g%)%j9J5 za$7STl|AH3g*Azc#^NOr_Gsv|3Jsm`P_PW8wKRwI=a%ztsKAmhs-fjPN`ruZ6N#)> zr?~yMq#{<*EHG8Q7>l&kyNthUe475Qq2@8t&MYcqB%6Na_gk2y?V6w5%3aD^r{pbL zx>N{mgZAAEL+YhjRMsz1zi_j%HS@HyPD)XCWn6(mVDO$$;YKxy0t5${qRy>=NGwllh#0dx2}64 zI_KV1V|-)Pa?XP`ENrZf6|Y;~{r|OgZA)z=F_bUb!sb%RBO%@_RV+#2WM8Mi*km>s z6OSF(zuzONrIvbnymr+-CfMViZnZ8)(h;({6-FTUp>#CtZ+uB?%)yowxma;0fIHtk zP!X$qG(nZgj0_A(p>Q{9H36)gRH|ksb)8M}K+?9y%A{iNKab%aG>>AICVCB&?&Ac# zNeMaKxZz~(;)d(rp*N)Mf?(qUC3pKB&OZB5Hx?Y9wTm-espVFCEOj9I_e7e*o-aO z2Ve=tqjJ!>5ztI8W^}6-cIla43;um<$=>owwj@icvKi#J5tRD>LgkNEq;5Qk`BE@DORs z_Lh$iN`?wVpwNnn40rQGWN|*_>5CAW#e7vXOt|lO2dO$3nwc7a<{n7$Qe&ccS`rrp zk+-~K${@E4t$*i)9X6Z#%UP9U92?iNz;$|R?`O@d+iH=FiKK+QMe_8w}QQBU>H{ru_??0s|T(4$M2+{TGe!1Jziozf8xh65&m&OYoJ zWP^E$4R;R!6^VYe$6Y(U38E7118BD zZ|NWWgGMKU8>ZMJS}OnIj?9N*zG=r(8tn8jFSsnrE8%mui$S?S@k2t6n@T<=xgXra zzFa&xn!wfFRg360 zBN6=yN%2yZuw||?jE_IroXWhEG`vMQD^EaaZ{jc(x(d z7xMLW`kcd%I8%Nkw2P*wn#Z>{nv>YAi0Gdt1;XQ(_rQ5_HB=S|+1<-d%av&@oFq{C|+(COwQ>9)s4@UVbaBg-GMWbFZ8l{?V+o#Z=>S8hfevNPoVvtZku*JU+ttRnqhI)kL#9%nGdRfa6-31=oOZ3+*M%7JtFGi++pFkz1R zcm%P!cce~njW)s#Xo}RWU#xS}&w%(S_ zEPq{G>sXR-5Dvqot9Ok_uM~m;DH$5ad-U?O=w$AFRCn;WR$cpcUFnZ-kPp?lDt|r< zCKL)87-0%yC#dc2Hk-m8tE0n-PUPakK0ETzp|nTJkE>@B|8A-l>!?xklbyv$+Kfd(Kf%JAfEJcldO%=HH$N?O?`|YVzQ0_NB{FrONf(;36dsoZ zK-^~nh2ppJWsq0+CJYI;b2>z*@ypBR2QnNVu*c605ZWQ@ zhhHavj)hKs+qJ658Yg?X(AvgOAduRvi`dlyxGaymwO*gOi7msyW_|T;`lEfhM$_6A{sJXn zCchYz0@AecErRvc@{f7@_#HK@lhN^y5Ag72-)Ul&lhu$@4!tF$WmKoI>19H|+;~NJ zub1iMN2Rqc>zYt)6n&7(^v}cI(;=chOhML8~a-0Y7Zi;6;Y-t|l@4vqMqP7D6 zQFmRbtd*!eE?4XImgygK?@ZOFVoK4q`;$}R;++!`OFwK^A?UCY4N|FwfJunftMKGW zZx&(Z(+z%+7(Ib=;f7=E6pgcrAwqRW39m~ z>(A@S&+Xk48JTfIWl3kv=?&3+VWXXS9F`*Yp#-8Z*z~ep&zoQEdV_}#gC@?GqDYjH z$yX-J&WEKUv|oclbTV<2_rFik5L@Dw>mb0|mP?A6XV?v4=s z34!9ytf)mvb>4Axu#tGvW#DrpuY>9iWaf0#J-hjD-0fmTMj3L0H~rqC+by>V?VuEZ z7WQBBNdFiNkvo|gx4nqF60h?zIj7cQKogtDtnbG@$2>Yld^W*^$(DH^rR#90#`I9y z`~sudi#0ze%_QzU2|eNLm0Hv+r$y}1$0F+33Q$(=kFvRyWOCev74O5ifiC>vnaWrH xKD++qvWLjU4ZS+JLOo103;NARR2ju#t8 | grep Id | sort -u" shows the source file versions - */ -char * mdhimTst_c_id = "$Id: mdhimTst.c,v 1.00 2013/07/08 20:56:50 JHR Exp $"; - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "mpi.h" -#include "mdhim.h" -#include "mdhim_options.h" - -// From partitioner.h: -/* - #define MDHIM_INT_KEY 1 - //64 bit signed integer - #define MDHIM_LONG_INT_KEY 2 - #define MDHIM_FLOAT_KEY 3 - #define MDHIM_DOUBLE_KEY 4 - #define MDHIM_LONG_DOUBLE_KEY 5 - #define MDHIM_STRING_KEY 6 - //An arbitrary sized key - #define MDHIM_BYTE_KEY 7 */ - -#define TEST_BUFLEN 4096 -int BYTE_BUFLEN = 4; -int VAL_BUFLEN = 4; - -static FILE * logfile; -static FILE * infile; -int verbose = 1; // By default generate lots of feedback status lines -int dbOptionAppend = MDHIM_DB_OVERWRITE; -int to_log = 0; -// MDHIM_INT_KEY=1, MDHIM_LONG_INT_KEY=2, MDHIM_FLOAT_KEY=3, MDHIM_DOUBLE_KEY=4 -// MDHIM_LONG_DOUBLE_KEY=5, MDHIM_STRING_KEY=6, MDHIM_BYTE_KEY=7 -int key_type = 1; // Default "int" - -#define MAX_ERR_REPORT 50 -static char *errMsgs[MAX_ERR_REPORT]; -static int errMsgIdx = 0; - -static int sc_len; // Source Character string length for Random String generation -static char *sourceChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ124567890"; - -// Labels for basic get operations -static char *getOpLabel[] = { "MDHIM_GET_EQ", "MDHIM_GET_NEXT", "MDHIM_GET_PREV", - "MDHIM_GET_FIRST", "MDHIM_GET_LAST"}; - -#ifdef _WIN32 -#include -#endif - -#include - -// Add to error message list -static void addErrorMessage(char *msg) { -// Max number of error messages reached ignore the rest, but still increment count - if (errMsgIdx > MAX_ERR_REPORT) - errMsgIdx++; - else - errMsgs[errMsgIdx++] = msg; -} - -static void tst_say(int err, char * format, ...) { - va_list ap; - - if (err) { - char *errMsg = (char *)malloc(sizeof(char)* TEST_BUFLEN); - va_start( ap, format ); - vsnprintf(errMsg, TEST_BUFLEN, format, ap); - addErrorMessage(errMsg); - - // Make sure error messages print to stderr when loging output - if (to_log) fprintf(stderr, "%s", errMsg); - va_end(ap); - } - - /* - * use fprintf to give out the text - */ - if (to_log) - { - va_start( ap, format ); - vfprintf( logfile, format, ap); - va_end(ap); - } - else - { - va_start( ap, format ); - vfprintf( stdout, format, ap); - va_end(ap); - } - -} - -int check_rank_range(int rank, int init, int final) { - - if (rank >= init && rank <= final) { //printf("\nRank %d is in range between %d and %d\n", rank, init, final); - return 0;} - else {//printf("\nRank %d is NOT in range between %d and %d\n", rank, init, final); - return 1; - } -} - -int check_rank_mod(int rank, int rmod){ - - if ((rank % rmod) ==0){ //printf("\nRank %d is divisible by %d\n", rank, rmod); - return 0;} - else{ //printf("\nRank %d is NOT divisible by %d\n", rank, rmod); - return 1; } -} - -static void putChar( int c ) -{ - static int last = 0; - - if( last == '\n' && c == '\n' ) - { - return; - } - - last = c; - putc( last, logfile ); -} - -static int getChar( void ) -{ - int c; - c = getc( infile ); - - /* - * a '#' starts a comment for the rest of the line - */ - if( c == '#') - { - /* - * comments starting with ## are duplicated to the output - */ - c = getc( infile ); - if( c == '#' ) - { - putChar( '#' ); - putChar( '#' ); - - while( c != '\n' && c != EOF ) - { - c = getc( infile ); - if( c != EOF ) - { - putChar( c ); - } - } - } - else - { - while( c != '\n' && c != EOF ) - { - c = getc( infile ); - } - } - } - - /* - if( c != EOF ) - { - putChar( c ); - } - */ - - return( c ); -} - -static int getWordFromString (char *aLine, char *buffer, int charIdx ) -{ - int c; - int i; - - // Check to see if past the end - if (charIdx >= strlen(aLine)) - { - *buffer = '\0'; - return charIdx; - } - - /* - * skip preceeding blanks - */ - c = aLine[charIdx++]; - while( c == '\t' || c == ' ' || c == '\n' || c == '\r' ) - { - c = aLine[charIdx++]; - } - - /* - * read one word - */ - for( i = 0; i < TEST_BUFLEN - 1; i++, c = aLine[charIdx++] ) - { - - if( c == '\r' ) - { - continue; - } - - if( c == '\t' || c == ' ' || c == '\n' || c == '\r' ) - { - *buffer = '\0'; - return charIdx; - } - - *buffer++ = c; - } - - *buffer = '\0'; - return charIdx; -} - -/* Read one line at a time. Skip any leadings blanks, and send an end of file - as if a "q" command had been encountered. Return a string with the line read. */ -static void getLine( char * buffer ) -{ - int c; - int i; - - // skip preceeding blanks - c = ' '; - while( c == '\t' || c == ' ' || c == '\n' || c == '\r' ) - { - c = getChar(); - } - - // End of input file (even if we did not find a q! - if( c == EOF ) - { - *buffer++ = 'q'; - *buffer++ = '\0'; - return; - } - - // Read one line - for( i = 0; i < TEST_BUFLEN - 1; i++, c = getChar() ) - { - - if( c == EOF || c == '\n' || c == '\r' ) - { - *buffer = '\0'; - return; - } - - *buffer++ = c; - } - - *buffer = '\0'; -} - -/* Expands escapes from a sequence of characters to null terminated string - * - * src must be a sequence of characters. - * len is the size of the sequence of characters to convert. - * - * returns a string of size 2 * len + 1 will always be sufficient - * - */ - -char *expand_escapes(const char* src, int len) -{ - char c; - int i; - char* dest; - char* res; - - if ((res = malloc(2 * len + 1)) == NULL) - { - printf("Error allocating memory in expand_escapes.\n"); - return NULL; - } - dest = res; - - for (i=0 ; i (sizeof(getOpLabel) / sizeof(*getOpLabel))) - return "Invalid_get_OPERATOR"; - else - return getOpLabel[idx]; -} - -void usage(void) -{ - printf("Usage:\n"); - printf(" -f (file with batch commands)\n"); - printf(" -l (Key length for file)\n"); - printf(" -d (Type of DB to use: levelDB=1 mysql=3)\n"); - printf(" -t (Type of keys: int=1, longInt=2, float=3, " - "double=4, longDouble=5, string=6, byte=7)\n"); - printf(" -p (path where DB will be created)\n"); - printf(" -n (Name of DataBase file or directory)\n"); - printf(" -b (MLOG_CRIT=1, MLOG_DBG=2)\n"); - printf(" -a (DB store append mode. By default records with same key are " - "overwritten. This flag turns on the option to append to existing values.\n"); - printf(" -w This flag turns on the option to either allow or deny threads to do command based on if it is dividiable by the modlus of the modulus number\n"); - printf(" -r ~ This flag turns on the option to either allow or deny threads to do command based on if the rank falls inclusively inbetween the rank ranges. NOTE: You must use the '~' inbetween the numbers. Example: -r0~2\n"); - printf(" -q<0|1> (Quiet mode, default is verbose) 1=write out to log file\n"); - exit (8); -} - -// Release the memory used in a Bulk request. If values/value_lens not present just use NULL -void freeKeyValueMem(int nkeys, void **keys, int *key_lens, char **values, int *value_lens) -{ - int i; - for (i = 0; i < nkeys; i++) - { - if (keys[i]) free(keys[i]); - if (values && value_lens && value_lens[i] && values[i]) free(values[i]); - } - if (key_lens) free(key_lens); - if (keys) free(keys); - if (value_lens) free(value_lens); - if (values) free(values); -} - -//======================================FLUSH============================ -static void execFlush(char *command, struct mdhim_t *md, int charIdx) -{ - //Get the stats - int ret = mdhimStatFlush(md, md->primary_index); - - if (ret != MDHIM_SUCCESS) { - tst_say(1, "ERROR: rank %d executing flush.\n", md->mdhim_rank); - } else { - tst_say(0, "Flush executed successfully.\n"); - } - -} - -//======================================PUT============================ -static void execPut(char *command, struct mdhim_t *md, int charIdx) -{ - // int i_key; - // long l_key; - // float f_key; - // double d_key; - struct mdhim_brm_t *brm; - unsigned char str_key [ TEST_BUFLEN ]; - //unsigned char buffer2 [ TEST_BUFLEN ]; - unsigned char value [ TEST_BUFLEN ] ; - char fhandle [TEST_BUFLEN]; //Filename handle - //int data_index =0; //Index for reading data. - char data_read[TEST_BUFLEN]; - memset(fhandle, 0, sizeof(fhandle)); - memset(data_read, 0, sizeof(data_read)); - //int ret; - - if (verbose) tst_say(0, "# put key data\n" ); - charIdx = getWordFromString( command, fhandle, charIdx); - int x = open( fhandle, O_RDONLY ); - if( x <0 ) - { - fprintf( stderr, "Failed to open data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - int g=read(x, str_key, BYTE_BUFLEN); - if( g<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - g=read(x, value, VAL_BUFLEN); - if( g<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - - //fgets(data_read, TEST_BUFLEN, datafile); - //data_index = getWordFromString( data_read, str_key, data_index); - // Get value to store - - //charIdx = getWordFromString( data_read, buffer2, data_index); - //sprintf(value, "%s", buffer2); - // Based on key type generate a key using rank - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // i_key = atoi(str_key) * (md->mdhim_rank + 1); - // sprintf(key_string, "%d", i_key); - // if (verbose) tst_say(0, "# mdhimPut( %s, %s) [int]\n", key_string, value ); - // brm = mdhimPut(md, &i_key, sizeof(i_key), value, strlen(value)+1, NULL, NULL); - // break; - // - // case MDHIM_LONG_INT_KEY: - // l_key = atol(str_key) * (md->mdhim_rank + 1); - // sprintf(key_string, "%ld", l_key); - // if (verbose) tst_say(0, "# mdhimPut( %s, %s) [long]\n", key_string, value ); - // brm = mdhimPut(md, &l_key, sizeof(l_key), value, strlen(value)+1, NULL, NULL); - // break;e - // - // case MDHIM_FLOAT_KEY: - // f_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%f", f_key); - // if (verbose) tst_say(0, "# mdhimPut( %s, %s ) [float]\n", key_string, value ); - // brm = mdhimPut(md, &f_key, sizeof(f_key), value, strlen(value)+1, NULL, NULL); - // break; - // - // case MDHIM_DOUBLE_KEY: - // d_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%e", d_key); - // if (verbose) tst_say(0, "# mdhimPut( %s, %s ) [double]\n", key_string, value ); - // brm = mdhimPut(md, &d_key, sizeof(d_key), value, strlen(value)+1, NULL, NULL); - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - //sprintf(key_string, "%s", str_key, (md->mdhim_rank + 1)); - if (verbose) tst_say(0, "# mdhimPut( %s, %s) [string|byte]\n", str_key, value ); - brm = mdhimPut(md, (void*)str_key, BYTE_BUFLEN, value, - BYTE_BUFLEN, NULL, NULL); - // break; - // - // default: - // tst_say(1, "ERROR: unrecognized Key_type in execPut\n"); - // } - - // Report any error(s) - if (!brm || brm->error) - { - tst_say(1, "ERROR: rank %d putting key: %s with value: %s into MDHIM\n", - md->mdhim_rank, str_key, value); - } - else - { - tst_say(0, "Successfully put key/value into MDHIM\n"); - } - - // fclose(datafile); - close(x); - -} - -//======================================GET============================ -// Operations for getting a key/value from messages.h -// MDHIM_GET_EQ=0, MDHIM_GET_NEXT=1, MDHIM_GET_PREV=2 -// MDHIM_GET_FIRST=3, MDHIM_GET_LAST=4 -static void execGet(char *command, struct mdhim_t *md, int charIdx) -{ - // int i_key; - // long l_key; - // float f_key; - // double d_key; - struct mdhim_bgetrm_t *bgrm; - unsigned char str_key [ TEST_BUFLEN ]; - char buffer2 [ TEST_BUFLEN ]; - char key_string [ TEST_BUFLEN ]; - char returned_key [ TEST_BUFLEN ]; - char ophandle [TEST_BUFLEN]; - int getOp, newIdx, nkeys=100; - char fhandle [TEST_BUFLEN]; //Filename handle - int data_index =0; //Index for reading data. - char data_read[TEST_BUFLEN]; - int k; - - memset(fhandle, 0, sizeof(fhandle)); - memset(data_read, 0, sizeof(data_read)); - memset(key_string, 0, TEST_BUFLEN); - memset(returned_key, 0, TEST_BUFLEN); - memset(ophandle, 0, TEST_BUFLEN); - - if (verbose) tst_say(0, "# get key \n" ); - charIdx = getWordFromString( command, buffer2, charIdx); - nkeys = atoi(buffer2); - newIdx= getWordFromString( command, ophandle, charIdx); - if (newIdx != charIdx) - { - charIdx= newIdx; - if(strcmp(ophandle,"EQUAL")==0) getOp=MDHIM_GET_EQ; - else if(strcmp(ophandle,"PREV")==0) getOp=MDHIM_GET_PREV; - else if(strcmp(ophandle,"NEXT")==0) getOp=MDHIM_GET_NEXT; - else if(strcmp(ophandle,"FIRST")==0) getOp=MDHIM_GET_FIRST; - else if(strcmp(ophandle,"LAST")==0) getOp=MDHIM_GET_LAST; - else getOp=MDHIM_GET_EQ; - } - else - { - getOp = MDHIM_GET_EQ; //Default a get with an equal operator - } - - charIdx = getWordFromString( command, fhandle, newIdx); - int x = open( fhandle, O_RDONLY ); - if( x <0 ) - { - fprintf( stderr, "Failed to open data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - - - - // datafile = fopen( fhandle, "r" ); - // if( !datafile ) - // { - // fprintf( stderr, "Failed to open data file %s, %s\n", - // fhandle, strerror( errno )); - // exit( -1 ); - // } - // fgets(data_read, TEST_BUFLEN, datafile); - // - // data_index= getWordFromString( data_read, str_key, data_index); - // newIdx = getWordFromString( data_read, buffer2, data_index); - // - for (k=0; kmdhim_rank + 1); - // sprintf(key_string, "%d", i_key); - // if (verbose) tst_say(0, "# mdhimGet( %s, %s ) [int]\n", key_string, getValLabel(getOp)); - // bgrm = mdhimGet(md, md->primary_index, &i_key, sizeof(i_key), getOp); - // break; - // - // case MDHIM_LONG_INT_KEY: - // l_key = atol( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%ld", l_key); - // if (verbose) tst_say(0, "# mdhimGet( %s, %s ) [long]\n", key_string, getValLabel(getOp)); - // bgrm = mdhimGet(md, md->primary_index, &l_key, sizeof(l_key), getOp); - // break; - // - // case MDHIM_FLOAT_KEY: - // f_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%f", f_key); - // if (verbose) tst_say(0, "# mdhimGet( %s, %s ) [float]\n", key_string, getValLabel(getOp)); - // bgrm = mdhimGet(md, md->primary_index, &f_key, sizeof(f_key), getOp); - // break; - // - // case MDHIM_DOUBLE_KEY: - // d_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%e", d_key); - // if (verbose) tst_say(0, "# mdhimGet( %s, %s ) [double]\n", key_string, getValLabel(getOp)); - // bgrm = mdhimGet(md, md->primary_index, &d_key, sizeof(d_key), getOp); - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - //sprintf(key_string, "%s", str_key); - - if (verbose) tst_say(0, "# mdhimGet( %s, %s ) [string|byte]\n", str_key, getValLabel(getOp)); - if(strcmp(ophandle,"EQUAL")==0) bgrm = mdhimGet(md, md->primary_index, (void *)str_key, BYTE_BUFLEN+1, getOp); - else if(strcmp(ophandle,"PREV")==0) bgrm = mdhimBGetOp(md, md->primary_index, (void *)str_key, BYTE_BUFLEN+1, 1, getOp); - else if(strcmp(ophandle,"NEXT")==0) bgrm = mdhimBGetOp(md, md->primary_index, (void *)str_key, BYTE_BUFLEN+1, 1, getOp); - else if(strcmp(ophandle,"FIRST")==0) bgrm =mdhimBGetOp(md, md->primary_index, (void *)str_key, BYTE_BUFLEN+1, 1, getOp); - else { - if (strcmp(ophandle,"LAST")==0) bgrm = mdhimBGetOp(md, md->primary_index, (void *)str_key, BYTE_BUFLEN+1, 1, getOp); - } - //bgrm = mdhimGet(md, md->primary_index, (void *)str_key, BYTE_BUFLEN, getOp); - // break; - // - // default:mdhimBGet(md, md->primary_index, keys, key_lens, nkeys, MDHIM_GET_EQ); - // else {tst_say(1, "Error, unrecognized Key_type in execGet\n"); - // return; - // } - - if (!bgrm || bgrm->error) - { - tst_say(1, "ERROR: rank %d getting value for key (%s): %s from MDHIM\n", - md->mdhim_rank, getValLabel(getOp), key_string); - } - //printf("This is the strlen for bgrm->keys[0]: %s", bgrm->keys[0]); - else if (bgrm->keys[0] && bgrm->values[0]) - { - // Generate correct string from returned key - switch (key_type) - { - case MDHIM_INT_KEY: - sprintf(returned_key, "[int]: %d", *((int *) bgrm->keys[0])); - break; - - case MDHIM_LONG_INT_KEY: - sprintf(returned_key, "[long]: %ld", *((long *) bgrm->keys[0])); - break; - - case MDHIM_FLOAT_KEY: - sprintf(returned_key, "[float]: %f", *((float *) bgrm->keys[0])); - break; - - case MDHIM_DOUBLE_KEY: - sprintf(returned_key, "[double]: %e", *((double *) bgrm->keys[0])); - break; - - case MDHIM_STRING_KEY: - case MDHIM_BYTE_KEY: - sprintf(returned_key, "[string|byte]: %s", (char *)bgrm->keys[0]); - - } - - //if ( v_value == NULL ) // No verification value, anything is OK. - if (bgrm->values[0] != NULL || bgrm->value_lens[0] != 0) - { - tst_say(0, "Successfully get(%s) correct value: %s for key %s from MDHIM\n", - getValLabel(getOp), expand_escapes(bgrm->values[0], bgrm->value_lens[0]+1), returned_key); - } - - } - else - { - tst_say(1, "ERROR: rank %d got(%s) null value or return key for key: %s from MDHIM\n", - md->mdhim_rank, getValLabel(getOp), key_string); - } - - } - close(x); -} - -//======================================BPUT============================ -static void execBput(char *command, struct mdhim_t *md, int charIdx) -{ - int nkeys = 100; - int ret; - char buffer1 [ TEST_BUFLEN ]; - unsigned char str_key [ TEST_BUFLEN ]; - unsigned char value [ TEST_BUFLEN ]; - struct mdhim_brm_t *brm, *brmp; - int i;// size_of; - void **keys; - int *key_lens; - char **values; - int *value_lens; - char fhandle [TEST_BUFLEN]; //Filename handle - //int data_index - //; //Index for reading data. - char data_read[TEST_BUFLEN]; - - - if (verbose) tst_say(0, "# bput n key data\n" ); - - - //Initialize variables - //size_of = 0; - keys = NULL; - - // Number of keys to generate - charIdx = getWordFromString( command, buffer1, charIdx); - nkeys = atoi( buffer1 ); - - memset(fhandle, 0, sizeof(fhandle)); - memset(data_read, 0, sizeof(data_read)); - - charIdx = getWordFromString( command, fhandle, charIdx); - int x = open( fhandle, O_RDONLY ); - if( x <0 ) - { - fprintf( stderr, "Failed to open data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - int g; - - key_lens = malloc(sizeof(int) * nkeys); - value_lens = malloc(sizeof(int) * nkeys); - - if (verbose) tst_say(0, "# mdhimBPut(%d, %s, %s )\n", nkeys, str_key, value ); - - // Allocate memory and size of key (size of string|byte key will be modified - // when the key is constructed.) - values = malloc(sizeof(char *) * nkeys); - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // keys = malloc(sizeof(int *) * nkeys); - // size_of = sizeof(int); - // break; - // - // case MDHIM_LONG_INT_KEY: - // keys = malloc(sizeof(long *) * nkeys); - // size_of = sizeof(long); - // break; - // - // case MDHIM_FLOAT_KEY: - // keys = malloc(sizeof(float *) * nkeys); - // size_of = sizeof(float); - // break; - // - // case MDHIM_DOUBLE_KEY: - // keys = malloc(sizeof(double *) * nkeys); - // size_of = sizeof(double); - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - keys = malloc(sizeof(char *) * nkeys); - //size_of = sizeof(char); - // break; - // } - - //int q =0; - //while (q==0) sleep(5); - // Create the keys and values to store - for (i = 0; i < nkeys; i++) - { - //data_index = 0; - memset(str_key, 0, TEST_BUFLEN); - memset(value, 0, TEST_BUFLEN); - g=read(x, str_key, BYTE_BUFLEN); - if( g<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - g=read(x, value, BYTE_BUFLEN); - if( g<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - - g=read(x, fhandle,1); //Need it to get rid of the new line. - - keys[i] = malloc(BYTE_BUFLEN+1); - memset(keys[i], 0, BYTE_BUFLEN+1); - key_lens[i] = BYTE_BUFLEN; //size_of; - values[i] = malloc(sizeof(unsigned char) * BYTE_BUFLEN+1); - memset(values[i], 0, BYTE_BUFLEN+1); - memcpy(values[i], value, VAL_BUFLEN); - value_lens[i] = BYTE_BUFLEN;//strlen(values[i]) + 1; - - - - // Based on key type, rank and index number generate a key - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // { - // int **i_keys = (int **)keys; - // *i_keys[i] = (atoi( str_key ) * (md->mdhim_rank + 1)); - // if (verbose) tst_say(0, "Rank: %d - Creating int key (to insert): " - // "%d with value: %s\n", - // md->mdhim_rank, *i_keys[i], values[i]); - // } - // break; - // - // case MDHIM_LONG_INT_KEY: - // { - // long **l_keys = (long **)keys; - // *l_keys[i] = (atol( str_key ) * (md->mdhim_rank + 1)); - // if (verbose) tst_say(0, "Rank: %d - Creating long key (to insert): " - // "%ld with value: %s\n", - // md->mdhim_rank, *l_keys[i], values[i]); - // } - // break; - // - // case MDHIM_FLOAT_KEY: - // { - // float **f_keys = (float **)keys; - // *f_keys[i] = (atof( str_key ) * (md->mdhim_rank + 1)) + (i + 1); - // if (verbose) tst_say(0, "Rank: %d - Creating float key (to insert): " - // "%f with value: %s\n", - // md->mdhim_rank, *f_keys[i], values[i]); - // } - // break; - // - // case MDHIM_DOUBLE_KEY: - // { - // double **d_keys = (double **)keys; - // *d_keys[i] = (atof( str_key ) * (md->mdhim_rank + 1)); - // if (verbose) tst_say(0, "Rank: %d - Creating double key (to insert): " - // "%e with value: %s\n", - // md->mdhim_rank, *d_keys[i], values[i]); - // } - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - // { - //unsigned char **s_keys = (unsigned char **)keys; - //s_keys[i] = malloc(TEST_BUFLEN); - //sprintf(s_keys[i], "%s", str_key); - memcpy(keys[i], str_key, BYTE_BUFLEN); - key_lens[i] = BYTE_BUFLEN; - if (verbose) tst_say(0, "Rank: %d - Creating string|byte key " - "(to insert): %s with value: %s\n", - md->mdhim_rank, (unsigned char *)keys[i], values[i]); - // } - // break; - //} - } - - //Insert the keys into MDHIM - brm = mdhimBPut(md, keys, key_lens, (void **) values, value_lens, nkeys, NULL, NULL); - brmp = brm; - ret = 0; - if (!brm || brm->error) - { - tst_say(1, "ERROR: rank - %d bulk inserting keys/values into MDHIM\n", - md->mdhim_rank); - ret = 1; - } - - while (brmp) - { - if (brmp->error < 0) - { - tst_say(1, "ERROR: rank %d - Error bulk inserting key/values info MDHIM\n", - md->mdhim_rank); - ret = 1; - } - - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - brm = brmp; - } - - // if NO errors report success - if (!ret) - { - tst_say(0, "Rank: %d - Successfully bulk inserted key/values into MDHIM\n", - md->mdhim_rank); - } - - // Release memory - freeKeyValueMem(nkeys, keys, key_lens, values, value_lens); - close(x); - //fclose(datafile); -} - -//======================================BGET============================ -static void execBget(char *command, struct mdhim_t *md, int charIdx) -{ - int nkeys = 100; - char buffer [ TEST_BUFLEN ]; - unsigned char str_key [ TEST_BUFLEN ]; - char *v_value = NULL; - if (verbose) tst_say(0, "# bget n key \n" ); - struct mdhim_bgetrm_t *bgrm, *bgrmp; - int i, /*size_of,*/ ret; - void **keys; - int *key_lens; - int totRecds; - char fhandle[TEST_BUFLEN]; - char data_read[TEST_BUFLEN]; - char opname[TEST_BUFLEN]; - //int data_index; - //size_of = 0; - keys = NULL; - - memset(fhandle, 0, sizeof(fhandle)); - memset(data_read, 0, sizeof(data_read)); - - - // Get the number of records to create for bget - charIdx = getWordFromString( command, buffer, charIdx); - nkeys = atoi( buffer ); - //printf("Here is the nkeys: %d\n", nkeys); - charIdx = getWordFromString( command, opname, charIdx); - - charIdx = getWordFromString( command, fhandle, charIdx); - //printf("Here is the file name: %s\n", fhandle); - // datafile = fopen( fhandle, "r" ); - // if( !datafile ) - // { - // fprintf( stderr, "Failed to open data file %s, %s\n", - // fhandle, strerror( errno )); - // exit( -1 ); - // } - - int x = open( fhandle, O_RDONLY ); - if( x <0 ) - { - fprintf( stderr, "Failed to open data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - int g; - key_lens = malloc(sizeof(int) * nkeys); - - - if (verbose) tst_say(0, "# mdhimBGet(%d, %s)\n", nkeys, str_key ); - - // Allocate memory and size of key (size of string|byte key will be modified - // when the key is constructed.) - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // keys = malloc(sizeof(int *) * nkeys); - // size_of = sizeof(int); - // break; - // - // case MDHIM_LONG_INT_KEY: - // keys = malloc(sizeof(long *) * nkeys); - // size_of = sizeof(long);fcreat - // break; - // - // case MDHIM_FLOAT_KEY: - // keys = malloc(sizeof(float *) * nkeys); - // size_of = sizeof(float); - // break; - // - // case MDHIM_DOUBLE_KEY: - // keys = malloc(sizeof(double *) * nkeys); - // size_of = sizeof(double); - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - keys = malloc(sizeof(unsigned char *) * nkeys); - //size_of = sizeof(char); - // break; - // } - - - // Generate the keys as set above - for (i = 0; i < nkeys; i++) - { - //data_index = 0; - // fgets(data_read, TEST_BUFLEN, datafile); - memset(str_key, 0, BYTE_BUFLEN); - // data_index = getWordFromString( data_read, str_key, data_index); - keys[i] = malloc(BYTE_BUFLEN+1); - memset(keys[i],0,BYTE_BUFLEN+1); - g=0; - // Based on key type, rank and index number generate a key - g=read(x, str_key, BYTE_BUFLEN); - if( g<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - g=read(x, fhandle,1); //Need it to get rid of the new line. - - memcpy(keys[i], str_key, BYTE_BUFLEN); - key_lens[i] = BYTE_BUFLEN+1; - if (verbose) tst_say(0, "Rank: %d - Creating string|byte key (to get):" - " %s\n", md->mdhim_rank, keys[i]); - // } - // break; - // - // default: - // tst_say(1, "Error, unrecognized Key_type in execBGet\n"); - // return; - // } - // - } - - //Get the values back for each key retrieved; - bgrm = mdhimBGet(md, md->primary_index, keys, key_lens, nkeys, MDHIM_GET_EQ); - - - ret = 0; // Used to determine if any errors are encountered - - totRecds = 0; - bgrmp = bgrm; - - while (bgrmp) { - if (bgrmp->error < 0) - { - tst_say(1, "ERROR: rank %d retrieving values\n", md->mdhim_rank); - ret = 1; - } - - totRecds += bgrmp->num_keys; - for (i = 0; i < bgrmp->num_keys && bgrmp->error >= 0; i++) - { - //if ( v_value != NULL ) - // sprintf(buffer, "%s_%d", v_value, i + 1); //Value to verify - - if (verbose) tst_say(0, "Rank: %d successfully get[%d] correct value: %s from MDHIM key %s\n", - md->mdhim_rank, i, expand_escapes(bgrmp->values[i], bgrmp->value_lens[i]+1), bgrmp->keys[i]); - - } - - bgrmp = bgrmp->next; - //Free the message received - mdhim_full_release_msg(bgrm); - bgrm = bgrmp; - } - - // if NO errors report success - if (!ret) - { - if (totRecds) - tst_say(0, "Rank: %d - Successfully bulk retrieved %d key/values from MDHIM\n", - md->mdhim_rank, totRecds); - else - tst_say(1, "ERROR: rank %d got no records for bulk retrieved from MDHIM\n", - md->mdhim_rank); - } - - // Release memory - freeKeyValueMem(nkeys, keys, key_lens, NULL, NULL); - free(v_value); - close(x); -} - -//======================================BGETOP============================ -static void execBgetOp(char *command, struct mdhim_t *md, int charIdx) -{ - int nrecs = 100; - char buffer1 [ TEST_BUFLEN ]; - char key_string [ TEST_BUFLEN ]; - struct mdhim_bgetrm_t *bgrm; - int i, getOp, newIdx, data_index; - char ophandle[TEST_BUFLEN]; - // int i_key; - // long l_key; - // float f_key; - // double d_key; - char fhandle[TEST_BUFLEN]; - char str_key[TEST_BUFLEN]; - - if (verbose) tst_say(0, "# bgetop n key op\n" ); - - bgrm = NULL; - // Get the number of records to retrieve in bgetop - charIdx = getWordFromString( command, buffer1, charIdx); - nrecs = atoi( buffer1 ); - - // Get the key to use as starting point - - newIdx = getWordFromString( command, ophandle, charIdx); - if (newIdx != charIdx) - { - charIdx = newIdx; - if(strcmp(ophandle,"EQUAL")==0) getOp=MDHIM_GET_EQ; - else if(strcmp(ophandle,"PREV")==0) getOp=MDHIM_GET_PREV; - else if(strcmp(ophandle,"NEXT")==0) getOp=MDHIM_GET_NEXT; - else if(strcmp(ophandle,"FIRST")==0) getOp=MDHIM_GET_FIRST; - else if(strcmp(ophandle,"LAST")==0) getOp=MDHIM_GET_LAST; - else getOp=MDHIM_GET_EQ; - } - else - { - getOp = MDHIM_GET_EQ; //Default a get with an equal operator - } - charIdx = getWordFromString( command, fhandle, charIdx); - int x = open( fhandle, O_RDONLY ); - if( x <0 ) - { - fprintf( stderr, "Failed to open data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - - // Get the operation type to use - - if (verbose) tst_say(0, "# mdhimBGetOp(%d, %s)\n", - nrecs, getValLabel(getOp) ); - - - data_index = read(x, str_key, BYTE_BUFLEN); - if( data_index<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - data_index=read(x,buffer1, 1); - // Based on key type generate a key using rank - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // i_key = atoi( key_string ) * (md->mdhim_rank + 1) + 1; - // sprintf(key_string, "%d", i_key); - // if (verbose) tst_say(0, "# mdhimBGetOp( %d, %s, %s ) [int]\n", - // nrecs, key_string, getValLabel(getOp)); - // bgrm = mdhimBGetOp(md, md->primary_index, &i_key, sizeof(i_key), nrecs, getOp); - // break; - // - // case MDHIM_LONG_INT_KEY: - // l_key = atol( key_string ) * (md->mdhim_rank + 1) + 1; - // sprintf(key_string, "%ld", l_key); - // if (verbose) tst_say(0, "# mdhimBGetOp( %d, %s, %s ) [long]\n", - // nrecs, key_string, getValLabel(getOp)); - // bgrm = mdhimBGetOp(md, md->primary_index, &l_key, sizeof(l_key), nrecs, getOp); - // break; - // - // case MDHIM_FLOAT_KEY: - // f_key = atof( key_string ) * (md->mdhim_rank + 1) + 1; - // sprintf(key_string, "%f", f_key); - // if (verbose) tst_say(0, "# mdhimBGetOp( %d, %s, %s ) [float]\n", - // nrecs, key_string, getValLabel(getOp)); - // bgrm = mdhimBGetOp(md, md->primary_index, &f_key, sizeof(f_key), nrecs, getOp); - // break; - // - // case MDHIM_DOUBLE_KEY: - // d_key = atof( key_string ) * (md->mdhim_rank + 1) + 1; - // sprintf(key_string, "%e", d_key); - // if (verbose) tst_say(0, "# mdhimBGetOp( %d, %s, %s ) [double]\n", - // nrecs, key_string, getValLabel(getOp)); - // bgrm = mdhimBGetOp(md, md->primary_index, &d_key, sizeof(d_key), nrecs, getOp); - // break; - // - // case MDHIM_STRING_KEY:// case MDHIM_STRING_KEY: - - // case MDHIM_BYTE_KEY: - memset(key_string, 0, TEST_BUFLEN); - memcpy(key_string, str_key, BYTE_BUFLEN); - //sprintf(key_string, "%s", key_string); - //if (verbose) tst_say(0, "# mdhimBGetOp( %d, %s, %s ) [string|byte]\n", - // nrecs, key_string, getValLabel(getOp)); - bgrm = mdhimBGetOp(md, md->primary_index, (void *)key_string, BYTE_BUFLEN+1, - nrecs, getOp); - // break; - // - // default: - // tst_say(1, "Error, unrecognized Key_type in execGet\n"); - // } - - if (!bgrm || bgrm->error) - { - tst_say(1, "ERROR: rank %d getting %d values for start key (%s): %s from MDHIM\n", - md->mdhim_rank, nrecs, getValLabel(getOp), key_string); - } - else if (verbose) - { - for (i = 0; i < bgrm->num_keys && !bgrm->error; i++) - { - tst_say(0, "Rank: %d - Got value[%d]: %s for start key: %s from MDHIM\n", - md->mdhim_rank, i, expand_escapes(bgrm->values[i], bgrm->value_lens[i]+1), - key_string); - } - } - else - { - tst_say(0, "Rank: %d - Successfully got %d values for start key: %s from MDHIM\n", - md->mdhim_rank, bgrm->num_keys, key_string); - } - - //Free the message received - mdhim_full_release_msg(bgrm); -} - -//======================================DEL============================ -static void execDel(char *command, struct mdhim_t *md, int charIdx) -{ - // int i_key; - // long l_key; - // float f_key; - // double d_key; - char str_key [ TEST_BUFLEN ]; - char key_string [ TEST_BUFLEN ]; - struct mdhim_brm_t *brm; - char fhandle [TEST_BUFLEN]; //Filename handle - int data_index =0; //Index for reading data. - char data_read[TEST_BUFLEN]; - memset(fhandle, 0, sizeof(fhandle)); - memset(data_read, 0, sizeof(data_read)); - - charIdx = getWordFromString( command, fhandle, charIdx); - int x = open( fhandle, O_RDONLY ); - if( x <0 ) - { - fprintf( stderr, "Failed to open data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - data_index=read(x, str_key, BYTE_BUFLEN); - if( data_index<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - - if (verbose) tst_say(0, "# del key\n" ); - - brm = NULL; - //charIdx = getWordFromString( data_read, str_key, data_index); - - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // i_key = atoi( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%d", i_key); - // if (verbose) tst_say(0, "# mdhimDelete( %s ) [int]\n", key_string); - // brm = mdhimDelete(md, md->primary_index, &i_key, sizeof(i_key)); - // break; - // - // case MDHIM_LONG_INT_KEY: - // l_key = atol( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%ld", l_key); - // if (verbose) tst_say(0, "# mdhimDelete( %s ) [long]\n", key_string); - // brm = mdhimDelete(md, md->primary_index, &l_key, sizeof(l_key)); - // break; - // - // case MDHIM_FLOAT_KEY: - // f_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%f", f_key); - // if (verbose) tst_say(0, "# mdhimDelete( %s ) [float]\n", key_string); - // brm = mdhimDelete(md, md->primary_index, &f_key, sizeof(f_key)); - // break; - // - // case MDHIM_DOUBLE_KEY: - // d_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%e", d_key); - // if (verbose) tst_say(0, "# mdhimDelete( %s ) [double]\n", key_string); - // brm = mdhimDelete(md, md->primary_index, &d_key, sizeof(d_key)); - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - //sprintf(key_string, "%s", str_key); - if (verbose) tst_say(0, "# mdhimDelete( %s ) [string|byte]\n", key_string); - brm = mdhimDelete(md, md->primary_index, (void *)str_key, BYTE_BUFLEN); - // break; - // - // default: - // tst_say(1, "Error, unrecognized Key_type in execDelete\n"); - // } - - if (!brm || brm->error) - { - tst_say(1, "ERROR: rank %d deleting key/value from MDHIM. key: %s\n", - md->mdhim_rank, str_key); - } - else - { - tst_say(0, "Successfully deleted key/value from MDHIM. key: %s\n", str_key); - } - -} - -//======================================BDEL============================ -static void execBdel(char *command, struct mdhim_t *md, int charIdx) -{ - int nkeys = 100; - char buffer1 [ TEST_BUFLEN ]; - unsigned char str_key [ TEST_BUFLEN ]; - void **keys; - int *key_lens; - struct mdhim_brm_t *brm, *brmp; - int i, /*size_of, */ ret; - char fhandle [TEST_BUFLEN]; //Filename handle - int data_index; //Index for reading data. - char data_read[TEST_BUFLEN]; - memset(fhandle, 0, sizeof(fhandle)); - memset(data_read, 0, sizeof(data_read)); - - if (verbose) tst_say(0, "# bdel n key\n" ); - - keys = NULL; - //size_of = 0; - - // Number of records to delete - charIdx = getWordFromString( command, buffer1, charIdx); - nkeys = atoi( buffer1 ); - key_lens = malloc(sizeof(int) * nkeys); - - // Starting key value - charIdx = getWordFromString( command, fhandle, charIdx); - int x = open( fhandle, O_RDONLY ); - if( x <0 ) - { - fprintf( stderr, "Failed to open data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - // datafile = fopen( fhandle, "r" ); - // if( !datafile ) - // { - // fprintf( stderr, "Failed to open data file %s, %s\n", - // fhandle, strerror( errno )); - // exit( -1 ); - // } - - - if (verbose) tst_say(0, "# mdhimBDelete(%d, %s )\n", nkeys, str_key ); - - // Allocate memory and size of key (size of string|byte key will be modified - // when the key is constructed.) - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // keys = malloc(sizeof(int *) * nkeys); - // size_of = sizeof(int); - // break; - // - // case MDHIM_LONG_INT_KEY: - // keys = malloc(sizeof(long *) * nkeys); - // size_of = sizeof(long); - // break; - // - // case MDHIM_FLOAT_KEY: - // keys = malloc(sizeof(float *) * nkeys); - // size_of = sizeof(float); - // break; - // - // case MDHIM_DOUBLE_KEY: - // keys = malloc(sizeof(double *) * nkeys); - // size_of = sizeof(double); - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - keys = malloc(sizeof(char *) * nkeys); - // size_of = sizeof(char); - // break; - // } - - for (i = 0; i < nkeys; i++) - { - data_index =0; - data_index=read(x, str_key, BYTE_BUFLEN); - if( data_index<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - - keys[i] = malloc(BYTE_BUFLEN+1); - key_lens[i] = BYTE_BUFLEN; - data_index=read(x, fhandle,1); //Need it to get rid of the new line. - - // Based on key type, rank and index number generate a key - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // { - // int **i_keys = (int **)keys; - // *i_keys[i] = (atoi( str_key ) * (md->mdhim_rank + 1)) + (i + 1); - // if (verbose) tst_say(0, "Rank: %d - Creating int key (to delete): %d\n", - // md->mdhim_rank, *i_keys[i]); - // } - // break; - // - // case MDHIM_LONG_INT_KEY: - // { - // long **l_keys = (long **)keys; - // *l_keys[i] = (atol( str_key ) * (md->mdhim_rank + 1)) + (i + 1); - // if (verbose) tst_say(0, "Rank: %d - Creating long key (to delete): %ld\n", - // md->mdhim_rank, *l_keys[i]); - // } - // break; - // - // case MDHIM_FLOAT_KEY: - // { - // float **f_keys = (float **)keys; - // *f_keys[i] = (atof( str_key ) * (md->mdhim_rank + 1)) + (i + 1); - // if (verbose) tst_say(0, "Rank: %d - Creating float key (to delete): %f\n", - // md->mdhim_rank, *f_keys[i]); - // } - // break; - // - // case MDHIM_DOUBLE_KEY: - // { - // double **d_keys = (double **)keys; - // *d_keys[i] = (atof( str_key ) * (md->mdhim_rank + 1)) + (i + 1); - // if (verbose) tst_say(0, "Rank: %d - Creating double key (to delete): " - // " %e\n", md->mdhim_rank, *d_keys[i]); - // } - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - // { - // char **s_keys = (char **)keys; - // s_keys[i] = malloc(BYTE_BUFLEN); - memset(keys[i],0,BYTE_BUFLEN+1); - memcpy(keys[i], str_key, BYTE_BUFLEN); - key_lens[i] = BYTE_BUFLEN; - if (verbose) tst_say(0, "Rank: %d - Creating string|byte key (to delete):" - " %s\n", md->mdhim_rank, keys[i]); - // } - // break; - // - // default: - // tst_say(1, "Error, unrecognized Key_type in execBDel\n"); - // return; - // } - - } - - //Delete the records - brm = mdhimBDelete(md, md->primary_index, (void **) keys, key_lens, nkeys); - brmp = brm; - if (!brm || brm->error) { - tst_say(1, "ERROR: rank %d deleting keys/values from MDHIM\n", - md->mdhim_rank); - } - - ret = 0; - while (brmp) - { - if (brmp->error < 0) - { - tst_say(1, "ERROR: rank %d deleting keys\n", md->mdhim_rank); - ret = 1; - } - - brmp = brmp->next; - //Free the message - mdhim_full_release_msg(brm); - brm = brmp; - } - - // if NO errors report success - if (!ret) - { - tst_say(0, "Rank: %d - Successfully bulk deleted key/values from MDHIM\n", - md->mdhim_rank); - } - - // Release memory - freeKeyValueMem(nkeys, keys, key_lens, NULL, NULL); - close(x); -} - -// Generate a random string of up to max_len -char *random_string( int max_len, int exact_size) -{ - int len; - char *retVal; - int i; - - if (exact_size) - len = max_len; - else - len = rand() % max_len + 1; - retVal = (char *) malloc( len + 1 ); - - for (i=0; i 0) free(value); - memset(str_key, 0, sizeof(str_key)); - memset(buffer2, 0, sizeof(buffer2)); - g=read(x, str_key, BYTE_BUFLEN); - if( g<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - // data_index= getWordFromString( data_read, str_key, data_index); - // data_index = getWordFromString( data_read, value, data_index); - - g=read(x, buffer2, BYTE_BUFLEN); - if( g<0 ) - { - fprintf( stderr, "Failed to read data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - g=read(x, fhandle,1); //Need it to get rid of the new line. - // Based on key type generate appropriate random key - // switch (key_type) - // { - // case MDHIM_INT_KEY: - // i_key = atoi(str_key) * (md->mdhim_rank + 1); - // sprintf(key_string, "%d", i_key); - // if (verbose) tst_say(0, "# mdhimPut( %s, %s ) [int]\n", - // key_string, value ); - // brm = mdhimPut(md, &i_key, sizeof(i_key), value, strlen(value)+1, NULL, NULL); - // break; - // - // case MDHIM_LONG_INT_KEY: - // l_key = atol(str_key) * (md->mdhim_rank + 1); - // sprintf(key_string, "%ld", l_key); - // if (verbose) tst_say(0, "# mdhimPut( %s, %s ) [long]\n", - // key_string, value ); - // brm = mdhimPut(md, &l_key, sizeof(l_key), value, strlen(value)+1, NULL, NULL); - // break; - // - // case MDHIM_FLOAT_KEY: - // f_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%f", f_key); - // if (verbose) tst_say(0, "# mdhimPut( %s, %s ) [float]\n", - // key_string, value ); - // brm = mdhimPut(md, &f_key, sizeof(f_key), value, strlen(value)+1, NULL, NULL); - // break; - // - // case MDHIM_DOUBLE_KEY: - // d_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%e", d_key); - // if (verbose) tst_say(0, "# mdhimPut( %s, %s ) [double]\n", - // key_string, value ); - // brm = mdhimPut(md, &d_key, sizeof(d_key), value, strlen(value)+1, NULL, NULL); - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - - memset(value,0 ,VAL_BUFLEN+1); - memset(key_string, 0,BYTE_BUFLEN+1); - memcpy(key_string, str_key,BYTE_BUFLEN); - memcpy(value, buffer2,VAL_BUFLEN); - if (verbose) tst_say(0, "# mdhimPut( %s, %s ) [string|byte]\n", - key_string, value ); - brm = mdhimPut(md, (void *)key_string, BYTE_BUFLEN, - value, BYTE_BUFLEN, NULL, NULL); - // break; - // - // default: - // tst_say(1, "Error, unrecognized Key_type in execNput\n"); - // } - - // Record any error(s) - if (!brm || brm->error) - { - if (verbose) tst_say(1, "ERROR: rank %d N putting key: %s with value: %s " - "into MDHIM\n", md->mdhim_rank, key_string, value); - ret ++; - } - - } - - // Report any error(s) - if (ret) - { - tst_say(1, "ERROR: rank %d - %d error(s) N putting key/value into MDHIM\n", - md->mdhim_rank, ret); - } - else - { - tst_say(0, "Successfully N put %d key/values into MDHIM\n", n_iter); - } - - close(x); -} - -//======================================NGETN============================ -static void execNgetn(char *command, struct mdhim_t *md, int charIdx) -{ - // int i_key; - // long l_key; - // float f_key; - // double d_key; - struct mdhim_bgetrm_t *bgrm; - char buffer [ TEST_BUFLEN ]; - unsigned char key_string[TEST_BUFLEN]; - int n_iter; - int ret, i; - int getOp; - //int newIdx; - char fhandle [TEST_BUFLEN]; //Filename handle - int data_index =0; //Index for reading data. - char data_read[TEST_BUFLEN]; - unsigned char str_key[TEST_BUFLEN]; - char buffer2[TEST_BUFLEN]; - memset(fhandle, 0, sizeof(fhandle)); - memset(data_read, 0, sizeof(data_read)); - - charIdx = getWordFromString( command, buffer, charIdx); - n_iter = atoi( buffer ); // Get number of iterations - - - charIdx = getWordFromString( command, fhandle, charIdx); - int x = open( fhandle, O_RDONLY ); - if( x <0 ) - { - fprintf( stderr, "Failed to open data file %s, %s\n", - fhandle, strerror( errno )); - exit( -1 ); - } - - - // datafile = fopen( fhandle, "r" ); - // if( !datafile ) - // { - // fprintf( stderr, "Failed to open data file %s, %s\n", - // fhandle, strerror( errno )); - // exit( -1 ); - // } - for (i=0; imdhim_rank + 1); - // sprintf(key_string, "%d", i_key); - // if (verbose) tst_say(0, "# mdhimGet( %s ) [int]\n", key_string ); - // bgrm = mdhimGet(md, md->primary_index, &i_key, sizeof(i_key), getOp); - // break; - // - // case MDHIM_LONG_INT_KEY: - // l_key = atol( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%ld", l_key); - // if (verbose) tst_say(0, "# mdhimGet( %s ) [long]\n", key_string ); - // bgrm = mdhimGet(md, md->primary_index, &l_key, sizeof(l_key), getOp); - // break; - // - // case MDHIM_FLOAT_KEY: - // f_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%f", f_key); - // if (verbose) tst_say(0, "# mdhimGet( %s ) [float]\n", key_string ); - // bgrm = mdhimGet(md, md->primary_index, &f_key, sizeof(f_key), getOp); - // break; - // - // case MDHIM_DOUBLE_KEY: - // d_key = atof( str_key ) * (md->mdhim_rank + 1); - // sprintf(key_string, "%e", d_key); - // if (verbose) tst_say(0, "# mdhimGet( %s ) [double]\n", key_string ); - // bgrm = mdhimGet(md, md->primary_index, &d_key, sizeof(d_key), getOp); - // break; - // - // case MDHIM_STRING_KEY: - // case MDHIM_BYTE_KEY: - memcpy(key_string, str_key, BYTE_BUFLEN); - if (verbose) tst_say(0, "# mdhimGet( %s ) [string|byte]\n", key_string ); - bgrm = mdhimGet(md, md->primary_index, (void *)key_string, - BYTE_BUFLEN, getOp); - // break; - // - // default: - // tst_say(1, "Error, unrecognized Key_type in execNgetn\n"); - // } - - // Record any error(s) - // if (!grm || grm->error) - // { - // // For some reason could not get first record abort the request - // tst_say(1, "ERROR: rank %d N getting FIRST key: %s from MDHIM\n", - // md->mdhim_rank, key_string); - // ret++; - // } - // else if (grm->key && grm->value) - // { - // if (verbose) tst_say(0, "Successfully got FIRST value: %s for key " - // "[string|byte](%s) from MDHIM\n", - // expand_escapes(grm->value, grm->value_len), - // getValLabel(MDHIM_GET_NEXT)); - // - - //grm = mdhimGet(md, grm->key, grm->key_len, MDHIM_GET_NEXT); - // Record any error(s) - if (!bgrm || bgrm->error) - { - tst_say(1, "ERROR: rank %d N getting key[%d] from MDHIM. Abort request.\n", - md->mdhim_rank, i); - ret ++; - break; - } - else if (bgrm->keys[0] && bgrm->values[0]) - { - if (verbose) tst_say(0, "Successfully got value %d: %s for key " - "[string|byte](%s) from MDHIM\n", i, - expand_escapes(bgrm->values[0], bgrm->value_lens[0]), - getValLabel(getOp)); - } - else - { - tst_say(1, "ERROR: rank %d got null value or key at N get key[%d] " - "from MDHIM. Abort request.\n", md->mdhim_rank, i); - ret ++; - break; - } - } - // else - // { - // tst_say(1, "ERROR: rank %d got null value or return key for FIRST key (%s): %s from MDHIM\n", - // md->mdhim_rank, getValLabel(getOp), key_string); - // ret++; - // } - - // Report any error(s) - if (ret) - { - tst_say(1, "ERROR: rank %d got %d error(s) N getting key/value from MDHIM\n", - md->mdhim_rank, ret); - } - else - { - tst_say(0, "Successfully N got %d out of %d key/values desired from MDHIM\n", - i, n_iter); - } - close(x); -} - -/** - * test frame for the MDHIM - * - * This test frame calls the MDHIM subroutines, it is an interactive or batch file - * test frame which could be used for regression tests. - * - * When the program is called in verbose mode (not quiet) it also writes a log file - * for each rank with the name mdhimTst-#.log (where # is the rank) - * - * Interactive mode or commands read from input file. - * -- Interactive mode simply execute mdhimtst, (by default it is verbose) - * -- Batch mode mdhimtst -f -d -t <-quiet> - *

- */ - -int main( int argc, char * argv[] ) -{ - char commands[ 1000 ] [ TEST_BUFLEN ]; // Command to be read - int cmdIdx = 0; // Command current index - int cmdTot = 0; // Total number of commands read - int charIdx; // Index to last processed character of a command line - char command [ TEST_BUFLEN ]; - char filename [ TEST_BUFLEN ]; - char *db_path = "mdhimTst"; - char *db_name = "mdhimTst-"; - int dowork = 1; - int dbug = 1; //MLOG_CRIT=1, MLOG_DBG=2 - int factor = 1; //Range server factor - int slice = 100000; //Range server slice size - - struct timeval begin, end; - long double time_spent; - - mdhim_options_t *db_opts; // Local variable for db create options to be passed - - int ret; - int provided = 0; - struct mdhim_t *md; - - int db_type = LEVELDB; //(data_store.h) - MPI_Comm comm; - //Variables to get range for - char *rs, *rso; //Holders for strsep - int ri = 0, rf = 0; //Rank range initial and rank range final - int rd; //Rank divider - //int rdc = 1; //Rank divider control - int rrc = 0; //Rank range control - - // Process arguments - infile = stdin; - while ((argc > 1) && (argv[1][0] == '-')) - { - switch (argv[1][1]) - { - case 'f': - printf("Input file: %s || ", &argv[1][2]); - infile = fopen( &argv[1][2], "r" ); - if( !infile ) - { - fprintf( stderr, "Failed to open %s, %s\n", - &argv[1][2], strerror( errno )); - exit( -1 ); - } - break; - - case 'l': - printf("Key length: %s || ", &argv[1][2]); - BYTE_BUFLEN = atoi( &argv[1][2]); - break; - - - case 'v': - printf("Value length: %s || ", &argv[1][2]); - VAL_BUFLEN = atoi( &argv[1][2]); - break; - - case 'd': // DataBase type (1=levelDB) - printf("Data Base type: %s || ", &argv[1][2]); - db_type = atoi( &argv[1][2] ); - break; - - case 't': - printf("Key type: %s || ", &argv[1][2]); - key_type = atoi( &argv[1][2] ); - break; - - case 'b': - printf("Debug mode: %s || ", &argv[1][2]); - dbug = atoi( &argv[1][2] ); - break; - - case 'p': - printf("DB Path: %s || ", &argv[1][2]); - db_path = &argv[1][2]; - break; - - case 'n': - printf("DB name: %s || ", &argv[1][2]); - db_name = &argv[1][2]; - break; - - case 'c': - printf("Range server factor: %s || ", &argv[1][2]); - factor = atoi( &argv[1][2] ); - break; - - case 's': - printf("Range server slice size: %s || ", &argv[1][2]); - slice = atoi( &argv[1][2] ); - break; - - case 'a': - printf("DB option append value is on || "); - dbOptionAppend = MDHIM_DB_APPEND; - break; - - case 'q': - to_log = atoi( &argv[1][2] ); - if (!to_log) - { - printf("Quiet mode || "); - verbose = 0; - } - else - { - printf("Quiet to_log file mode || "); - } - break; - case 'r': - rs=strdup(&argv[1][2]); - rso = strsep(&rs, "~"); - ri = atoi(rso); - rf = atoi(rs); - printf("Range: %d to %d || ", ri, rf); - break; - case 'w': - rd=atoi(&argv[1][2]); - printf("Range divider : %d ||", rd); - break; - case 'h': - usage(); - break; - default: - printf("Wrong Argument (it will be ignored): %s\n", argv[1]); - usage(); - } - - ++argv; - --argc; - } - printf("\n"); - - // Set the debug flag to the appropriate Mlog mask - switch (dbug) - { - case 2: - dbug = MLOG_DBG; - break; - - default: - dbug = MLOG_CRIT; - } - - // calls to init MPI for mdhim - argc = 1; // Ignore other parameters passed to program - ret = MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); - if (ret != MPI_SUCCESS) - { - printf("Error initializing MPI with threads\n"); - exit(1); - } - - if (provided != MPI_THREAD_MULTIPLE) - { - printf("Not able to enable MPI_THREAD_MULTIPLE mode\n"); - exit(1); - } - - // Create options for DB initialization - db_opts = mdhim_options_init(); - mdhim_options_set_db_path(db_opts, db_path); - mdhim_options_set_db_name(db_opts, db_name); - mdhim_options_set_db_type(db_opts, db_type); - mdhim_options_set_key_type(db_opts, key_type); - mdhim_options_set_debug_level(db_opts, dbug); - mdhim_options_set_login_c(db_opts, "localhost", "root", "pass", "localhost", "stater", "pass"); - mdhim_options_set_server_factor(db_opts, factor); - mdhim_options_set_max_recs_per_slice(db_opts, slice); - mdhim_options_set_value_append(db_opts, dbOptionAppend); // Default is overwrite - - //Setup Login credientials to database - //mdhim_options_set_login_c(db_opts, host server, user name, user' password, statstics user name, statistic user name's password); - comm = MPI_COMM_WORLD; - md = mdhimInit(&comm, db_opts); - if (!md) - { - printf("Error initializing MDHIM\n"); - exit(1); - } - - /* initialization for random string generation */ - srand( time( NULL ) + md->mdhim_rank); - sc_len = strlen( sourceChars ); - - /* - * open the log file (one per rank if in verbose mode, otherwise write to stderr) - */ - if (verbose) - { - sprintf(filename, "./%s%d.log", db_name, md->mdhim_rank); - logfile = fopen( filename, "wb" ); - if( !logfile ) - { - fprintf( stderr, "can't open logfile, %s, %s\n", filename, - strerror( errno )); - exit( 1 ); - } - } - else - { - logfile = stderr; - } - - // Read all command(s) to execute - while( dowork && cmdIdx < 1000) - { - // read the next command - memset( commands[cmdIdx], 0, sizeof( command )); - errno = 0; - getLine( commands[cmdIdx]); - - if (verbose) tst_say(0, "\n##command %d: %s\n", cmdIdx, commands[cmdIdx]); - - // Is this the last/quit command? - if( commands[cmdIdx][0] == 'q' || commands[cmdIdx][0] == 'Q' ) - { - dowork = 0; - } - cmdIdx++; - } - cmdTot = cmdIdx -1; - - // Main command execute loop - for(cmdIdx=0; cmdIdx < cmdTot; cmdIdx++) - { - - memset( command, 0, sizeof( command )); - errno = 0; - - charIdx = getWordFromString( commands[cmdIdx], command, 0); - - if (verbose) tst_say(0, "\n##exec command: %s\n", command ); - gettimeofday(&begin, NULL); - // execute the command given - if( !strcmp( command, "put" )) - { - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc) execPut(commands[cmdIdx], md, charIdx); - } - else if( !strcmp( command, "get" )) - { - - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc)execGet(commands[cmdIdx], md, charIdx); - } - else if ( !strcmp( command, "bput" )) - { - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc) execBput(commands[cmdIdx], md, charIdx); - } - else if ( !strcmp( command, "bget" )) - { - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc) execBget(commands[cmdIdx], md, charIdx); - } - else if( !strcmp( command, "del" )) - { - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc) execDel(commands[cmdIdx], md, charIdx); - } - else if( !strcmp( command, "bdel" )) - { - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc) execBdel(commands[cmdIdx], md, charIdx); - } - else if( !strcmp( command, "flush" )) - { - execFlush(commands[cmdIdx], md, charIdx); - } - else if( !strcmp( command, "nput" )) - { - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc) execNput(commands[cmdIdx], md, charIdx); - } - else if( !strcmp( command, "ngetn" )) - { - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc) execNgetn(commands[cmdIdx], md, charIdx); - } - else if( !strcmp( command, "bgetop" )) - { - if (check_rank_range(md->mdhim_rank, ri, rf)==rrc) execBgetOp(commands[cmdIdx], md, charIdx); - } - else - { - printf( "# q FOR QUIT\n" ); - //printf( "# open filename keyfile1,dkeyfile2,... update\n" ); - //printf( "# close\n" ); - printf( "# flush\n" ); - printf( "# put key value\n" ); - printf( "# bput n key value\n" ); - printf( "# nput n key_size value_size exact_size #(0=variable | 1=exact)\n"); - printf( "# get key getOp #(EQ=0 | NEXT=1 | PREV=2 | FIRST=3 | LAST=4)\n" ); - printf( "# bget n key\n" ); - printf( "# bgetop n key getOp #(NEXT=1 | FIRST=3)\n" ); - printf( "# ngetn n key_length exact_size #(0=variable | 1=exact)\n" ); - printf( "# del key\n" ); - printf( "# bdel n key\n" ); - - } - - gettimeofday(&end, NULL); - time_spent = (long double) (end.tv_sec - begin.tv_sec) + - ((long double) (end.tv_usec - begin.tv_usec)/1000000.0); - tst_say(0, "Seconds to %s : %Lf\n\n", commands[cmdIdx], time_spent); - } - - - if (errMsgIdx) - { - - - int i, errsInCmds = errMsgIdx; // Only list the errors up to now - for (i=0; i %d (first %d shown)\n", - md->mdhim_rank, errsInCmds, i); - } - else - { - tst_say(0, "\n==No errors for rank: %d\n", md->mdhim_rank); - } - - // Calls to finalize mdhim session and close MPI-communication - ret = mdhimClose(md); - if (ret != MDHIM_SUCCESS) - { - tst_say(1, "Error closing MDHIM\n"); - } - fclose(logfile); - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - - return( 0 ); -} - diff --git a/meta/tests/tester/runAll.sh b/meta/tests/tester/runAll.sh deleted file mode 100644 index 50c02e84f..000000000 --- a/meta/tests/tester/runAll.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -# -# echo "type INT" -# -# rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestBasic.txt -t1 -q -d3 -p./ -# rm mdhim.manifest -# rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestNext.txt -t1 -q -d3 -p./ -# rm mdhim.manifest -# -echo "type LONG" - -rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestBasic.txt -t2 -q -d3 -p./ -rm mdhim.manifest -rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestNext.txt -t2 -q -d3 -p./ -rm mdhim.manifest - -echo "type FLOAT" - -rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestBasic.txt -t3 -q -d3 -p./ -rm mdhim.manifest -rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestNext.txt -t3 -q -d3 -p./ -rm mdhim.manifest - -echo "type DOUBLE" - -rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestBasic.txt -t4 -q -d3 -p./ -rm mdhim.manifest -rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestNext.txt -t4 -q -d3 -p./ -rm mdhim.manifest - -# echo "type STRING" -# -# rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestBasic.txt -t5 -q -d3 -p./ -# rm mdhim.manifest -# rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestNext.txt -t5 -q -d3 -p./ -# rm mdhim.manifest -# rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestLarge.txt -t5 -q -d3 -p./ -# rm mdhim.manifest -# -# echo "type BYTE" -# -# rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestBasic.txt -t6 -q -d3 -p./ -# rm mdhim.manifest -# rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestNext.txt -t6 -q -d3 -p./ -# rm mdhim.manifest -# rm -rf ./mdhimTst* ; mpirun -np 2 ./mdhimtst -finTestLarge.txt -t6 -q -d3 -p./ -# rm mdhim.manifest diff --git a/server/src/Makefile.am b/server/src/Makefile.am index 634503de2..17db2994a 100644 --- a/server/src/Makefile.am +++ b/server/src/Makefile.am @@ -16,6 +16,7 @@ unifyfsd_SOURCES = \ margo_server.h \ unifyfs_client_rpc.c \ unifyfs_fops.h \ + unifyfs_fops_rpc.c \ unifyfs_global.h \ unifyfs_group_rpc.h \ unifyfs_group_rpc.c \ @@ -23,7 +24,6 @@ unifyfsd_SOURCES = \ unifyfs_inode.c \ unifyfs_inode_tree.h \ unifyfs_inode_tree.c \ - unifyfs_metadata_mdhim.h \ unifyfs_p2p_rpc.h \ unifyfs_p2p_rpc.c \ unifyfs_request_manager.c \ @@ -42,36 +42,6 @@ OPT_C_FLAGS = OPT_LD_FLAGS = OPT_LIBS = -if USE_MDHIM - - unifyfsd_SOURCES += \ - unifyfs_metadata_mdhim.c \ - unifyfs_fops_mdhim.c - - OPT_CPP_FLAGS += \ - -DUSE_MDHIM \ - -I$(top_srcdir)/meta/src \ - -I$(top_srcdir)/meta/src/uthash \ - -I$(top_srcdir)/meta/src/Mlog2 - - OPT_C_FLAGS += \ - $(LEVELDB_CFLAGS) \ - $(MPI_CFLAGS) - - OPT_LD_FLAGS += \ - $(LEVELDB_LDFLAGS) \ - $(MPI_CLDFLAGS) - - OPT_LIBS += \ - $(top_builddir)/meta/src/libmdhim.a \ - $(LEVELDB_LIBS) - -else # ! USE_MDHIM - - unifyfsd_SOURCES += unifyfs_fops_rpc.c - -endif # USE_MDHIM - if USE_PMIX OPT_C_FLAGS += -DUSE_PMIX OPT_LIBS += -lpmix diff --git a/server/src/extent_tree.c b/server/src/extent_tree.c index 48a5d7bb4..1a6815e2d 100644 --- a/server/src/extent_tree.c +++ b/server/src/extent_tree.c @@ -19,7 +19,6 @@ */ #include "extent_tree.h" -#include "unifyfs_metadata_mdhim.h" #undef MIN #define MIN(a, b) (a < b ? a : b) @@ -46,7 +45,7 @@ RB_GENERATE(ext_tree, extent_tree_node, entry, etn_compare_func) int extent_tree_init(struct extent_tree* tree) { memset(tree, 0, sizeof(*tree)); - pthread_rwlock_init(&(tree->rwlock), NULL); + ABT_rwlock_create(&(tree->rwlock)); RB_INIT(&(tree->head)); return 0; } @@ -57,7 +56,7 @@ int extent_tree_init(struct extent_tree* tree) void extent_tree_destroy(struct extent_tree* tree) { extent_tree_clear(tree); - pthread_rwlock_destroy(&(tree->rwlock)); + ABT_rwlock_free(&(tree->rwlock)); } /* Allocate a node for the range tree. Free node with free() when finished */ @@ -356,7 +355,7 @@ int extent_tree_truncate( return 0; } - /* lock the tree for reading */ + /* lock the tree */ extent_tree_wrlock(tree); /* lookup node with the extent that has the maximum offset */ @@ -402,7 +401,7 @@ int extent_tree_truncate( tree->max = 0; } - /* done reading the tree */ + /* done updating the tree */ extent_tree_unlock(tree); return 0; @@ -462,9 +461,9 @@ struct extent_tree_node* extent_tree_iter( */ void extent_tree_rdlock(struct extent_tree* tree) { - int rc = pthread_rwlock_rdlock(&(tree->rwlock)); + int rc = ABT_rwlock_rdlock(tree->rwlock); if (rc) { - LOGERR("pthread_rwlock_rdlock() failed - rc=%d", rc); + LOGERR("ABT_rwlock_rdlock() failed - rc=%d", rc); } } @@ -475,9 +474,9 @@ void extent_tree_rdlock(struct extent_tree* tree) */ void extent_tree_wrlock(struct extent_tree* tree) { - int rc = pthread_rwlock_wrlock(&(tree->rwlock)); + int rc = ABT_rwlock_wrlock(tree->rwlock); if (rc) { - LOGERR("pthread_rwlock_wrlock() failed - rc=%d", rc); + LOGERR("ABT_rwlock_wrlock() failed - rc=%d", rc); } } @@ -488,9 +487,9 @@ void extent_tree_wrlock(struct extent_tree* tree) */ void extent_tree_unlock(struct extent_tree* tree) { - int rc = pthread_rwlock_unlock(&(tree->rwlock)); + int rc = ABT_rwlock_unlock(tree->rwlock); if (rc) { - LOGERR("pthread_rwlock_unlock() failed - rc=%d", rc); + LOGERR("ABT_rwlock_unlock() failed - rc=%d", rc); } } @@ -547,65 +546,6 @@ unsigned long extent_tree_max_offset(struct extent_tree* tree) return max; } -/* Given an extent tree and starting and ending logical offsets, - * fill in key/value entries that overlap that range. - * Returns at most max entries starting from lowest starting offset. - * Sets outnum with actual number of entries returned */ -int extent_tree_span( - struct extent_tree* tree, /* extent tree to search */ - int gfid, /* global file id we're looking in */ - unsigned long start, /* starting logical offset */ - unsigned long end, /* ending logical offset */ - int max, /* maximum number of key/vals to return */ - void* _keys, /* array of length max for output keys */ - void* _vals, /* array of length max for output values */ - int* outnum) /* number of entries returned */ -{ - unifyfs_key_t* keys = (unifyfs_key_t*) _keys; - unifyfs_val_t* vals = (unifyfs_val_t*) _vals; - - /* initialize output parameters */ - *outnum = 0; - - /* lock the tree for reading */ - extent_tree_rdlock(tree); - - int count = 0; - struct extent_tree_node* next = extent_tree_find(tree, start, end); - while ((NULL != next) && - (next->extent.start <= end) && - (count < max)) { - /* got an entry that overlaps with given range */ - - /* fill in key */ - unifyfs_key_t* key = &keys[count]; - key->gfid = gfid; - key->offset = next->extent.start; - - /* fill in value */ - unifyfs_val_t* val = &vals[count]; - val->addr = next->extent.log_pos; - val->len = next->extent.end - next->extent.start + 1; - val->delegator_rank = next->extent.svr_rank; - val->app_id = next->extent.app_id; - val->rank = next->extent.cli_id; - - /* increment the number of key/values we found */ - count++; - - /* get the next element in the tree */ - next = extent_tree_iter(tree, next); - } - - /* return to user the number of key/values we set */ - *outnum = count; - - /* done reading the tree */ - extent_tree_unlock(tree); - - return 0; -} - static void chunk_req_from_extent( unsigned long req_offset, unsigned long req_len, diff --git a/server/src/extent_tree.h b/server/src/extent_tree.h index 55f38aca4..9476c29e2 100644 --- a/server/src/extent_tree.h +++ b/server/src/extent_tree.h @@ -42,7 +42,7 @@ struct extent_tree_node { struct extent_tree { RB_HEAD(ext_tree, extent_tree_node) head; - pthread_rwlock_t rwlock; + ABT_rwlock rwlock; unsigned long count; /* number of segments stored in tree */ unsigned long max; /* maximum logical offset value in the tree */ }; @@ -149,20 +149,6 @@ void extent_tree_wrlock(struct extent_tree* tree); */ void extent_tree_unlock(struct extent_tree* tree); -/* given an extent tree and starting and ending logical offsets, - * fill in key/value entries that overlap that range, returns at - * most max entries starting from lowest starting offset, - * sets outnum with actual number of entries returned */ -int extent_tree_span( - struct extent_tree* tree, /* extent tree to search */ - int gfid, /* global file id we're looking in */ - unsigned long start, /* starting logical offset */ - unsigned long end, /* ending logical offset */ - int max, /* maximum number of key/vals to return */ - void* keys, /* array of length max for output keys */ - void* vals, /* array of length max for output values */ - int* outnum); /* number of entries returned */ - int extent_tree_get_chunk_list( struct extent_tree* tree, /* extent tree to search */ unsigned long offset, /* starting logical offset */ diff --git a/server/src/unifyfs_client_rpc.c b/server/src/unifyfs_client_rpc.c index 9627b17e4..c6895eb7a 100644 --- a/server/src/unifyfs_client_rpc.c +++ b/server/src/unifyfs_client_rpc.c @@ -33,7 +33,6 @@ // server components #include "unifyfs_global.h" -#include "unifyfs_metadata_mdhim.h" #include "unifyfs_request_manager.h" // margo rpcs diff --git a/server/src/unifyfs_fops.h b/server/src/unifyfs_fops.h index 0c2522b28..0c5b68bd6 100644 --- a/server/src/unifyfs_fops.h +++ b/server/src/unifyfs_fops.h @@ -18,6 +18,7 @@ #include "unifyfs_configurator.h" #include "unifyfs_log.h" #include "unifyfs_meta.h" +#include "unifyfs_request_manager.h" /* * extra information that we need to pass for file operations. @@ -31,7 +32,8 @@ typedef struct _unifyfs_fops_ctx unifyfs_fops_ctx_t; typedef int (*unifyfs_fops_init_t)(unifyfs_cfg_t* cfg); -typedef int (*unifyfs_fops_fsync_t)(unifyfs_fops_ctx_t* ctx, int gfid); +typedef int (*unifyfs_fops_fsync_t)(unifyfs_fops_ctx_t* ctx, + int gfid, client_rpc_req_t* client_req); typedef int (*unifyfs_fops_filesize_t)(unifyfs_fops_ctx_t* ctx, int gfid, size_t* filesize); @@ -119,13 +121,15 @@ static inline int unifyfs_fops_filesize(unifyfs_fops_ctx_t* ctx, return global_fops_tab->filesize(ctx, gfid, filesize); } -static inline int unifyfs_fops_fsync(unifyfs_fops_ctx_t* ctx, int gfid) +static inline int unifyfs_fops_fsync(unifyfs_fops_ctx_t* ctx, + int gfid, + client_rpc_req_t* client_req) { if (!global_fops_tab->fsync) { return ENOSYS; } - return global_fops_tab->fsync(ctx, gfid); + return global_fops_tab->fsync(ctx, gfid, client_req); } static inline int unifyfs_fops_laminate(unifyfs_fops_ctx_t* ctx, int gfid) diff --git a/server/src/unifyfs_fops_mdhim.c b/server/src/unifyfs_fops_mdhim.c deleted file mode 100644 index a76a1a431..000000000 --- a/server/src/unifyfs_fops_mdhim.c +++ /dev/null @@ -1,1198 +0,0 @@ -/* - * Copyright (c) 2020, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2020, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -#include "unifyfs_group_rpc.h" -#include "unifyfs_metadata_mdhim.h" -#include "unifyfs_request_manager.h" - -/* given an extent corresponding to a write index, create new key/value - * pairs for that extent, splitting into multiple keys at the slice - * range boundaries (meta_slice_sz), it returns the number of - * newly created key/values inserted into the given key and value - * arrays */ -static int split_index( - unifyfs_key_t** keys, /* list to add newly created keys into */ - unifyfs_val_t** vals, /* list to add newly created values into */ - int* keylens, /* list for size of each key */ - int* vallens, /* list for size of each value */ - int gfid, /* global file id of write */ - size_t offset, /* starting byte offset of extent */ - size_t length, /* number of bytes in extent */ - size_t log_offset, /* offset within data log */ - int server_rank, /* rank of server hosting data */ - int app_id, /* app_id holding data */ - int client_rank) /* client rank holding data */ -{ - /* offset of first byte in request */ - size_t pos = offset; - - /* offset of last byte in request */ - size_t last_offset = offset + length - 1; - - /* this will track the current offset within the log - * where the data starts, we advance it with each key - * we generate depending on the data associated with - * each key */ - size_t logpos = log_offset; - - /* iterate over slice ranges and generate a start/end - * pair of keys for each */ - int count = 0; - while (pos <= last_offset) { - /* compute offset for first byte in this slice */ - size_t start = pos; - - /* offset for last byte in this slice, - * assume that's the last byte of the same slice - * containing start, unless that happens to be - * beyond the last byte of the actual request */ - size_t start_slice = start / meta_slice_sz; - size_t end = (start_slice + 1) * meta_slice_sz - 1; - if (end > last_offset) { - end = last_offset; - } - - /* length of extent in this slice */ - size_t len = end - start + 1; - - /* create key to describe this log entry */ - unifyfs_key_t* k = keys[count]; - k->gfid = gfid; - k->offset = start; - keylens[count] = sizeof(unifyfs_key_t); - - /* create value to store address of data */ - unifyfs_val_t* v = vals[count]; - v->addr = logpos; - v->len = len; - v->app_id = app_id; - v->rank = client_rank; - v->delegator_rank = server_rank; - vallens[count] = sizeof(unifyfs_val_t); - - /* advance to next slot in key/value arrays */ - count++; - - /* advance offset into log */ - logpos += len; - - /* advance to first byte offset of next slice */ - pos = end + 1; - } - - /* return number of keys we generated */ - return count; -} - -/* given a global file id, an offset, and a length to read from that - * file, create keys needed to query MDHIM for location of data - * corresponding to that extent, returns the number of keys inserted - * into key array provided by caller */ -static int split_request( - unifyfs_key_t** keys, /* list to add newly created keys into */ - int* keylens, /* list to add byte size of each key */ - int gfid, /* target global file id to read from */ - size_t offset, /* starting offset of read */ - size_t length) /* number of bytes to read */ -{ - /* offset of first byte in request */ - size_t pos = offset; - - /* offset of last byte in request */ - size_t last_offset = offset + length - 1; - - /* iterate over slice ranges and generate a start/end - * pair of keys for each */ - int count = 0; - while (pos <= last_offset) { - /* compute offset for first byte in this segment */ - size_t start = pos; - - /* offset for last byte in this segment, - * assume that's the last byte of the same segment - * containing start, unless that happens to be - * beyond the last byte of the actual request */ - size_t start_slice = start / meta_slice_sz; - size_t end = (start_slice + 1) * meta_slice_sz - 1; - if (end > last_offset) { - end = last_offset; - } - - /* create key to describe first byte we'll read - * in this slice */ - keys[count]->gfid = gfid; - keys[count]->offset = start; - keylens[count] = sizeof(unifyfs_key_t); - count++; - - /* create key to describe last byte we'll read - * in this slice */ - keys[count]->gfid = gfid; - keys[count]->offset = end; - keylens[count] = sizeof(unifyfs_key_t); - count++; - - /* advance to first byte offset of next slice */ - pos = end + 1; - } - - /* return number of keys we generated */ - return count; -} - - -static int mdhim_init(unifyfs_cfg_t* cfg) -{ - int ret = 0; - - LOGDBG("initializing file operations.."); - - ret = meta_init_store(cfg); - if (ret) { - LOGERR("failed to initialize the meta kv store (ret=%d)", ret); - } - - return ret; -} - -static int mdhim_metaget(unifyfs_fops_ctx_t* ctx, - int gfid, unifyfs_file_attr_t* attr) -{ - return unifyfs_get_file_attribute(gfid, attr); -} - -static int mdhim_metaset(unifyfs_fops_ctx_t* ctx, - int gfid, int create, unifyfs_file_attr_t* attr) -{ - return unifyfs_set_file_attribute(create, create, attr); -} - -static int mdhim_fsync(unifyfs_fops_ctx_t* ctx, int gfid) -{ - size_t i; - - /* assume we'll succeed */ - int ret = (int)UNIFYFS_SUCCESS; - - /* get memory page size on this machine */ - int page_sz = (int) get_page_size(); - - /* get application client */ - app_client* client = get_app_client(ctx->app_id, ctx->client_id); - if (NULL == client) { - return EINVAL; - } - - /* get pointer to superblock for this client and app */ - shm_context* super_ctx = client->state.shm_super_ctx; - if (NULL == super_ctx) { - LOGERR("missing client superblock"); - return UNIFYFS_FAILURE; - } - char* superblk = (char*)(super_ctx->addr); - - /* get pointer to start of key/value region in superblock */ - char* meta = superblk + client->state.write_index.index_offset; - - /* get number of file extent index values client has for us, - * stored as a size_t value in meta region of shared memory */ - size_t extent_num_entries = *(size_t*)(meta); - - /* indices are stored in the superblock shared memory - * created by the client, these are stored as index_t - * structs starting one page size offset into meta region */ - char* ptr_extents = meta + page_sz; - - if (extent_num_entries == 0) { - /* Nothing to do */ - return UNIFYFS_SUCCESS; - } - - unifyfs_index_t* meta_payload = (unifyfs_index_t*)(ptr_extents); - - /* total up number of key/value pairs we'll need for this - * set of index values */ - size_t slices = 0; - for (i = 0; i < extent_num_entries; i++) { - size_t offset = meta_payload[i].file_pos; - size_t length = meta_payload[i].length; - slices += meta_num_slices(offset, length); - } - if (slices >= UNIFYFS_MAX_META_SPLIT_COUNT) { - LOGERR("Error allocating buffers"); - return ENOMEM; - } - - /* pointers to memory we'll dynamically allocate for file extents */ - unifyfs_key_t** keys = NULL; - unifyfs_val_t** vals = NULL; - int* key_lens = NULL; - int* val_lens = NULL; - - /* allocate storage for file extent key/values */ - /* TODO: possibly get this from memory pool */ - keys = alloc_key_array(slices); - vals = alloc_value_array(slices); - key_lens = calloc(slices, sizeof(int)); - val_lens = calloc(slices, sizeof(int)); - if ((NULL == keys) || - (NULL == vals) || - (NULL == key_lens) || - (NULL == val_lens)) { - LOGERR("failed to allocate memory for file extents"); - ret = ENOMEM; - goto mdhim_sync_exit; - } - - /* create file extent key/values for insertion into MDHIM */ - int count = 0; - for (i = 0; i < extent_num_entries; i++) { - /* get file offset, length, and log offset for this entry */ - unifyfs_index_t* ndx = &meta_payload[i]; - assert(gfid == ndx->gfid); - size_t offset = ndx->file_pos; - size_t length = ndx->length; - size_t logpos = ndx->log_pos; - - /* split this entry at the offset boundaries */ - int used = split_index( - &keys[count], &vals[count], &key_lens[count], &val_lens[count], - gfid, offset, length, logpos, - glb_pmi_rank, ctx->app_id, ctx->client_id); - - /* count up the number of keys we used for this index */ - count += used; - } - - /* batch insert file extent key/values into MDHIM */ - ret = unifyfs_set_file_extents((int)count, - keys, key_lens, vals, val_lens); - if (ret != UNIFYFS_SUCCESS) { - /* TODO: need proper error handling */ - LOGERR("unifyfs_set_file_extents() failed"); - goto mdhim_sync_exit; - } - -mdhim_sync_exit: - /* clean up memory */ - if (NULL != keys) { - free_key_array(keys); - } - - if (NULL != vals) { - free_value_array(vals); - } - - if (NULL != key_lens) { - free(key_lens); - } - - if (NULL != val_lens) { - free(val_lens); - } - - return ret; -} - -static int mdhim_filesize(unifyfs_fops_ctx_t* ctx, int gfid, size_t* outsize) -{ - size_t filesize = 0; - int ret = unifyfs_invoke_filesize_rpc(gfid, &filesize); - if (ret) { - LOGERR("filesize rpc failed (ret=%d)", ret); - } else { - LOGDBG("filesize rpc returned %zu", filesize); - *outsize = filesize; - } - - unifyfs_file_attr_t attr = { 0, }; - mdhim_metaget(ctx, gfid, &attr); - - /* return greater of rpc value and mdhim metadata size */ - size_t asize = (size_t) attr.size; - if (asize > filesize) { - *outsize = asize; - } - - return ret; -} - -/* delete any key whose last byte is beyond the specified - * file size */ -static int truncate_delete_keys( - size_t filesize, /* new file size */ - int num, /* number of entries in keyvals */ - unifyfs_keyval_t* keyvals) /* list of existing key/values */ -{ - /* assume we'll succeed */ - int ret = (int) UNIFYFS_SUCCESS; - - /* pointers to memory we'll dynamically allocate for file extents */ - unifyfs_key_t** unifyfs_keys = NULL; - unifyfs_val_t** unifyfs_vals = NULL; - int* unifyfs_key_lens = NULL; - int* unifyfs_val_lens = NULL; - - /* in the worst case, we'll have to delete all existing keys */ - /* allocate storage for file extent key/values */ - /* TODO: possibly get this from memory pool */ - unifyfs_keys = alloc_key_array(num); - unifyfs_vals = alloc_value_array(num); - unifyfs_key_lens = calloc(num, sizeof(int)); - unifyfs_val_lens = calloc(num, sizeof(int)); - if ((NULL == unifyfs_keys) || - (NULL == unifyfs_vals) || - (NULL == unifyfs_key_lens) || - (NULL == unifyfs_val_lens)) { - LOGERR("failed to allocate memory for file extents"); - ret = ENOMEM; - goto truncate_delete_exit; - } - - /* counter for number of key/values we need to delete */ - int delete_count = 0; - - /* iterate over each key, and if this index extends beyond desired - * file size, create an entry to delete that key */ - int i; - for (i = 0; i < num; i++) { - /* get pointer to next key value pair */ - unifyfs_keyval_t* kv = &keyvals[i]; - - /* get last byte offset for this segment of the file */ - size_t last_offset = kv->key.offset + kv->val.len; - - /* if this segment extends beyond the new file size, - * we need to delete this index entry */ - if (last_offset > filesize) { - /* found an index that extends past end of desired - * file size, get next empty key entry from the pool */ - unifyfs_key_t* key = unifyfs_keys[delete_count]; - - /* define the key to be deleted */ - key->gfid = kv->key.gfid; - key->offset = kv->key.offset; - - /* MDHIM needs to know the byte size of each key and value */ - unifyfs_key_lens[delete_count] = sizeof(unifyfs_key_t); - //unifyfs_val_lens[delete_count] = sizeof(unifyfs_val_t); - - /* increment the number of keys we're deleting */ - delete_count++; - } - } - - /* batch delete file extent key/values from MDHIM */ - if (delete_count > 0) { - ret = unifyfs_delete_file_extents(delete_count, - unifyfs_keys, unifyfs_key_lens); - if (ret != UNIFYFS_SUCCESS) { - /* TODO: need proper error handling */ - LOGERR("unifyfs_delete_file_extents() failed"); - goto truncate_delete_exit; - } - } - -truncate_delete_exit: - /* clean up memory */ - - if (NULL != unifyfs_keys) { - free_key_array(unifyfs_keys); - } - - if (NULL != unifyfs_vals) { - free_value_array(unifyfs_vals); - } - - if (NULL != unifyfs_key_lens) { - free(unifyfs_key_lens); - } - - if (NULL != unifyfs_val_lens) { - free(unifyfs_val_lens); - } - - return ret; -} - -/* rewrite any key that overlaps with new file size, - * we assume the existing key has already been deleted */ -static int truncate_rewrite_keys( - size_t filesize, /* new file size */ - int num, /* number of entries in keyvals */ - unifyfs_keyval_t* keyvals) /* list of existing key/values */ -{ - /* assume we'll succeed */ - int ret = (int) UNIFYFS_SUCCESS; - - /* pointers to memory we'll dynamically allocate for file extents */ - unifyfs_key_t** unifyfs_keys = NULL; - unifyfs_val_t** unifyfs_vals = NULL; - int* unifyfs_key_lens = NULL; - int* unifyfs_val_lens = NULL; - - /* in the worst case, we'll have to rewrite all existing keys */ - /* allocate storage for file extent key/values */ - /* TODO: possibly get this from memory pool */ - unifyfs_keys = alloc_key_array(num); - unifyfs_vals = alloc_value_array(num); - unifyfs_key_lens = calloc(num, sizeof(int)); - unifyfs_val_lens = calloc(num, sizeof(int)); - if ((NULL == unifyfs_keys) || - (NULL == unifyfs_vals) || - (NULL == unifyfs_key_lens) || - (NULL == unifyfs_val_lens)) { - LOGERR("failed to allocate memory for file extents"); - ret = ENOMEM; - goto truncate_rewrite_exit; - } - - /* counter for number of key/values we need to rewrite */ - int count = 0; - - /* iterate over each key, and if this index starts before - * and ends after the desired file size, create an entry - * that ends at new file size */ - int i; - for (i = 0; i < num; i++) { - /* get pointer to next key value pair */ - unifyfs_keyval_t* kv = &keyvals[i]; - - /* get first byte offset for this segment of the file */ - size_t first_offset = kv->key.offset; - - /* get last byte offset for this segment of the file */ - size_t last_offset = kv->key.offset + kv->val.len; - - /* if this segment extends beyond the new file size, - * we need to rewrite this index entry */ - if (first_offset < filesize && - last_offset > filesize) { - /* found an index that overlaps end of desired - * file size, get next empty key entry from the pool */ - unifyfs_key_t* key = unifyfs_keys[count]; - - /* define the key to be rewritten */ - key->gfid = kv->key.gfid; - key->offset = kv->key.offset; - - /* compute new length of this entry */ - size_t newlen = (size_t)(filesize - first_offset); - - /* for the value, we store the log position, the length, - * the host server (delegator rank), the mount point id - * (app id), and the client id (rank) */ - unifyfs_val_t* val = unifyfs_vals[count]; - val->addr = kv->val.addr; - val->len = newlen; - val->delegator_rank = kv->val.delegator_rank; - val->app_id = kv->val.app_id; - val->rank = kv->val.rank; - - /* MDHIM needs to know the byte size of each key and value */ - unifyfs_key_lens[count] = sizeof(unifyfs_key_t); - unifyfs_val_lens[count] = sizeof(unifyfs_val_t); - - /* increment the number of keys we're deleting */ - count++; - } - } - - /* batch set file extent key/values from MDHIM */ - if (count > 0) { - ret = unifyfs_set_file_extents(count, - unifyfs_keys, unifyfs_key_lens, - unifyfs_vals, unifyfs_val_lens); - if (ret != UNIFYFS_SUCCESS) { - /* TODO: need proper error handling */ - LOGERR("unifyfs_set_file_extents() failed"); - goto truncate_rewrite_exit; - } - } - -truncate_rewrite_exit: - /* clean up memory */ - - if (NULL != unifyfs_keys) { - free_key_array(unifyfs_keys); - } - - if (NULL != unifyfs_vals) { - free_value_array(unifyfs_vals); - } - - if (NULL != unifyfs_key_lens) { - free(unifyfs_key_lens); - } - - if (NULL != unifyfs_val_lens) { - free(unifyfs_val_lens); - } - - return ret; -} - -static int mdhim_truncate(unifyfs_fops_ctx_t* ctx, int gfid, off_t len) -{ - size_t newsize = (size_t) len; - - /* set offset and length to request *all* key/value pairs - * for this file */ - size_t offset = 0; - - /* want to pick the highest integer offset value a file - * could have here */ - size_t length = (SIZE_MAX >> 1) - 1; - - /* get the locations of all the read requests from the - * key-value store*/ - unifyfs_key_t key1, key2; - - /* create key to describe first byte we'll read */ - key1.gfid = gfid; - key1.offset = offset; - - /* create key to describe last byte we'll read */ - key2.gfid = gfid; - key2.offset = offset + length - 1; - - /* set up input params to specify range lookup */ - unifyfs_key_t* unifyfs_keys[2] = {&key1, &key2}; - int key_lens[2] = {sizeof(unifyfs_key_t), sizeof(unifyfs_key_t)}; - - /* look up all entries in this range */ - int num_vals = 0; - unifyfs_keyval_t* keyvals = NULL; - int rc = unifyfs_get_file_extents(2, unifyfs_keys, key_lens, - &num_vals, &keyvals); - if (UNIFYFS_SUCCESS != rc) { - /* failed to look up extents, bail with error */ - return UNIFYFS_FAILURE; - } - - /* compute our file size by iterating over each file - * segment and taking the max logical offset */ - int i; - size_t filesize = 0; - for (i = 0; i < num_vals; i++) { - /* get pointer to next key value pair */ - unifyfs_keyval_t* kv = &keyvals[i]; - - /* get last byte offset for this segment of the file */ - size_t last_offset = kv->key.offset + kv->val.len; - - /* update our filesize if this offset is bigger than the current max */ - if (last_offset > filesize) { - filesize = last_offset; - } - } - - /* get filesize as recorded in metadata, which may be bigger if - * user issued an ftruncate on the file to extend it past the - * last write */ - size_t filesize_meta = filesize; - - /* given the global file id, look up file attributes - * from key/value store */ - unifyfs_file_attr_t fattr; - rc = unifyfs_get_file_attribute(gfid, &fattr); - if (rc == UNIFYFS_SUCCESS) { - /* found file attribute for this file, now get its size */ - filesize_meta = fattr.size; - } else { - /* failed to find file attributes for this file */ - goto truncate_exit; - } - - /* take maximum of last write and file size from metadata */ - if (filesize_meta > filesize) { - filesize = filesize_meta; - } - - /* may need to throw away and rewrite keys if shrinking file */ - if (newsize < filesize) { - /* delete any key that extends beyond new file size */ - rc = truncate_delete_keys(newsize, num_vals, keyvals); - if (rc != UNIFYFS_SUCCESS) { - goto truncate_exit; - } - - /* rewrite any key that overlaps new file size */ - rc = truncate_rewrite_keys(newsize, num_vals, keyvals); - if (rc != UNIFYFS_SUCCESS) { - goto truncate_exit; - } - } - - /* update file size field with latest size */ - fattr.size = newsize; - rc = unifyfs_set_file_attribute(1, 0, &fattr); - if (rc != UNIFYFS_SUCCESS) { - /* failed to update file attributes with new file size */ - goto truncate_exit; - } - - rc = unifyfs_invoke_truncate_rpc(gfid, newsize); - if (rc) { - LOGERR("truncate rpc failed"); - } - -truncate_exit: - - /* free off key/value buffer returned from get_file_extents */ - if (NULL != keyvals) { - free(keyvals); - keyvals = NULL; - } - - return rc; -} - -static int mdhim_laminate(unifyfs_fops_ctx_t* ctx, int gfid) -{ - int rc = UNIFYFS_SUCCESS; - - /* given the global file id, look up file attributes - * from key/value store */ - unifyfs_file_attr_t attr = { 0, }; - int ret = mdhim_metaget(ctx, gfid, &attr); - if (ret != UNIFYFS_SUCCESS) { - /* failed to find attributes for the file */ - return ret; - } - - /* if item is not a file, bail with error */ - mode_t mode = (mode_t) attr.mode; - if ((mode & S_IFMT) != S_IFREG) { - /* item is not a regular file */ - LOGERR("ERROR: only regular files can be laminated (gfid=%d)", gfid); - return EINVAL; - } - - /* lookup current file size */ - size_t filesize; - ret = mdhim_filesize(ctx, gfid, &filesize); - if (ret != UNIFYFS_SUCCESS) { - /* failed to get file size for file */ - LOGERR("lamination file size calculation failed (gfid=%d)", gfid); - return ret; - } - - /* update fields in metadata */ - attr.size = filesize; - attr.is_laminated = 1; - - /* update metadata, set size and laminate */ - rc = unifyfs_set_file_attribute(1, 1, &attr); - if (rc != UNIFYFS_SUCCESS) { - LOGERR("lamination metadata update failed (gfid=%d)", gfid); - } - - return rc; -} - -static int mdhim_unlink(unifyfs_fops_ctx_t* ctx, int gfid) -{ - int rc = UNIFYFS_SUCCESS; - - /* given the global file id, look up file attributes - * from key/value store */ - unifyfs_file_attr_t attr; - int ret = unifyfs_get_file_attribute(gfid, &attr); - if (ret != UNIFYFS_SUCCESS) { - /* failed to find attributes for the file */ - return ret; - } - - /* if item is a file, call truncate to free space */ - mode_t mode = (mode_t) attr.mode; - if ((mode & S_IFMT) == S_IFREG) { - /* item is regular file, truncate to 0 */ - ret = mdhim_truncate(ctx, gfid, 0); - if (ret != UNIFYFS_SUCCESS) { - /* failed to delete write extents for file, - * let's leave the file attributes in place */ - return ret; - } - } - - /* delete metadata */ - ret = unifyfs_delete_file_attribute(gfid); - if (ret != UNIFYFS_SUCCESS) { - rc = ret; - } - - rc = unifyfs_invoke_unlink_rpc(gfid); - if (rc) { - LOGERR("unlink rpc failed (ret=%d)", rc); - } - - return rc; -} - - -/* given a set of input key pairs, where each pair describes the first - * and last byte offset of a data range, refer to our local extent map - * and generate keyval responses for any ranges covering data that is - * local to the server, generate new key pairs to describe remaining - * holes that will be queried against the global key/value store, - * the list of output keys, key lengths, and keyvals are allocated - * and returned to be freed by the caller */ -static int get_local_keyvals( - int num_keys, /* number of input keys */ - unifyfs_key_t** keys, /* list of input keys */ - int* keylens, /* list of input key lengths */ - int* out_global, /* number of output keys for server */ - unifyfs_key_t*** out_keys, /* list of output keys */ - int** out_keylens, /* list of output key lengths */ - int* num_keyvals, /* number of output keyvals from local data */ - unifyfs_keyval_t** keyvals) /* list of output keyvals */ -{ - /* initialize output parameters */ - *out_global = 0; - *out_keys = NULL; - *out_keylens = NULL; - *num_keyvals = 0; - *keyvals = NULL; - - /* allocate memory to copy key/value data */ - int max_keyvals = UNIFYFS_MAX_META_SPLIT_COUNT; - unifyfs_keyval_t* kvs_local = (unifyfs_keyval_t*) calloc( - max_keyvals, sizeof(unifyfs_keyval_t)); - if (NULL == kvs_local) { - LOGERR("failed to allocate keyvals"); - return (int)UNIFYFS_ERROR_MDHIM; - } - - /* allocate memory to define remaining keys to - * search in global store */ - unifyfs_key_t** keys_global = alloc_key_array(max_keyvals); - if (NULL == keys_global) { - LOGERR("failed to allocate keys"); - free(kvs_local); - return (int)UNIFYFS_ERROR_MDHIM; - } - - /* allocate memory to define key lengths for remaining keys to - * search in global store */ - int* keylens_global = (int*) calloc(max_keyvals, sizeof(int)); - if (NULL == keylens_global) { - LOGERR("failed to allocate keylens"); - free_key_array(keys_global); - free(kvs_local); - return (int)UNIFYFS_ERROR_MDHIM; - } - - /* counters for the number of local keyvals we create and the - * number of keys we generate for the global key/value store */ - int count_global = 0; - int count_local = 0; - - int i; - for (i = 0; i < num_keys; i += 2) { - /* get next key pair that describe start and end offsets */ - unifyfs_key_t* k1 = keys[i+0]; - unifyfs_key_t* k2 = keys[i+1]; - - /* get gfid, start, and end offset of this pair */ - int gfid = k1->gfid; - size_t start = k1->offset; - size_t end = k2->offset; - - /* we'll define key/values in these temp arrays that correspond - * to extents we have locally */ - unifyfs_key_t tmpkeys[UNIFYFS_MAX_META_SPLIT_COUNT]; - unifyfs_val_t tmpvals[UNIFYFS_MAX_META_SPLIT_COUNT]; - - /* look up any entries we can find in our local extent map */ - int num_local = 0; - int ret = unifyfs_inode_span_extents(gfid, start, end, - UNIFYFS_MAX_META_SPLIT_COUNT, - tmpkeys, tmpvals, &num_local); - if (ret) { - LOGERR("failed to span extents (gfid=%d)", gfid); - // now what? - } - - /* iterate over local keys, create new keys to pass to server - * for any holes in our local extents */ - int j; - size_t nextstart = start; - for (j = 0; j < num_local; j++) { - /* get next key/value returned from local extent */ - unifyfs_key_t* k = &tmpkeys[j]; - unifyfs_val_t* v = &tmpvals[j]; - - /* if we have a gap in our data, - * we need to ask the global key/value store */ - if (nextstart < k->offset) { - /* we're missing a section of bytes, so create a key - * pair to search for this hole in the global key/value - * store */ - - /* check that we don't overflow the global array */ - if (count_global + 2 > max_keyvals) { - /* exhausted our space */ - free(keylens_global); - free_key_array(keys_global); - free(kvs_local); - return ENOMEM; - } - - /* first key is for starting offset of the hole, - * which is defined in next start */ - unifyfs_key_t* gk1 = keys_global[count_global]; - gk1->gfid = gfid; - gk1->offset = nextstart; - keylens_global[count_global] = sizeof(unifyfs_key_t); - count_global++; - - /* second key is for ending offset of the hole, - * which will be the offset of the byte that comes - * just before the offset of the current key */ - unifyfs_key_t* gk2 = keys_global[count_global]; - gk2->gfid = gfid; - gk2->offset = k->offset - 1; - keylens_global[count_global] = sizeof(unifyfs_key_t); - count_global++; - } else { - /* otherwise we have a local extent that matches, - * copy the corresponding key/value pair into the - * local output array */ - - /* check that we don't overflow the local array */ - if (count_local + 1 > max_keyvals) { - /* exhausted our space */ - free(keylens_global); - free_key_array(keys_global); - free(kvs_local); - return ENOMEM; - } - - /* create a key/value describing the - * current local extent */ - - /* get pointer to next key/val */ - unifyfs_keyval_t* kv = &kvs_local[count_local]; - - /* copy in the key and value generated from the call - * to tree_span into our array of local key/value pairs */ - memcpy(&kv->key, k, sizeof(unifyfs_key_t)); - memcpy(&kv->val, v, sizeof(unifyfs_val_t)); - - /* increase the number of keyvals we've found locally */ - count_local++; - } - - /* advance to start of next segment we're looking for */ - nextstart = k->offset + v->len; - } - - /* verify that we covered the full range, create a key pair - * to look in the global key/value store for any trailing hole */ - if (nextstart <= end) { - /* check that we don't overflow the global array */ - if (count_global + 2 > max_keyvals) { - /* exhausted our space */ - free(keylens_global); - free_key_array(keys_global); - free(kvs_local); - return ENOMEM; - } - - /* first key is for starting offset of the hole, - * which is defined in next start */ - unifyfs_key_t* gk1 = keys_global[count_global]; - gk1->gfid = gfid; - gk1->offset = nextstart; - keylens_global[count_global] = sizeof(unifyfs_key_t); - count_global++; - - /* second key is for ending offset of the hole */ - unifyfs_key_t* gk2 = keys_global[count_global]; - gk2->gfid = gfid; - gk2->offset = end; - keylens_global[count_global] = sizeof(unifyfs_key_t); - count_global++; - } - } - - /* set output values */ - *out_global = count_global; - *out_keys = keys_global; - *out_keylens = keylens_global; - *num_keyvals = count_local; - *keyvals = kvs_local; - - return UNIFYFS_SUCCESS; -} - -static int create_gfid_chunk_reads(reqmgr_thrd_t* thrd_ctrl, int gfid, - int app_id, int client_id, int num_keys, - unifyfs_key_t** keys, int* keylens) -{ - int rc = UNIFYFS_SUCCESS; - - int num_vals = 0; - unifyfs_keyval_t* keyvals = NULL; - - /* not using our local extent map, - * lookup all keys from global key/value store */ - rc = unifyfs_get_file_extents(num_keys, keys, keylens, - &num_vals, &keyvals); - if (rc != UNIFYFS_SUCCESS) { - LOGERR("failed to lookup keyvals from global key/val store"); - return rc; - } - - /* this is to maintain limits imposed in previous code - * that would throw fatal errors */ - if (num_vals >= UNIFYFS_MAX_META_SPLIT_COUNT || - num_vals >= UNIFYFS_MAX_META_PER_SEND) { - LOGERR("too many key/values returned in range lookup"); - if (NULL != keyvals) { - free(keyvals); - keyvals = NULL; - } - return ENOMEM; - } - - if (UNIFYFS_SUCCESS != rc) { - /* failed to find any key / value pairs */ - rc = UNIFYFS_FAILURE; - } else { - /* if we get more than one write index entry - * sort them by file id and then by delegator rank */ - if (num_vals > 1) { - qsort(keyvals, (size_t)num_vals, sizeof(unifyfs_keyval_t), - unifyfs_keyval_compare); - } - - server_read_req_t* rdreq = rm_reserve_read_req(thrd_ctrl); - if (NULL == rdreq) { - rc = UNIFYFS_FAILURE; - } else { - rdreq->app_id = app_id; - rdreq->client_id = client_id; - /* TODO: rdreq->extent was removed - * rdreq->extent.gfid = gfid; - * rdreq->extent.errcode = EINPROGRESS; - */ - rc = rm_create_chunk_requests(thrd_ctrl, rdreq, - num_vals, keyvals); - if (rc != (int)UNIFYFS_SUCCESS) { - rm_release_read_req(thrd_ctrl, rdreq); - } - } - } - - /* free off key/value buffer returned from get_file_extents */ - if (NULL != keyvals) { - free(keyvals); - keyvals = NULL; - } - - return rc; -} - -static int mdhim_read(unifyfs_fops_ctx_t* ctx, - int gfid, off_t offset, size_t length) -{ - /* get application client */ - int app_id = ctx->app_id; - int client_id = ctx->client_id; - app_client* client = get_app_client(app_id, client_id); - if (NULL == client) { - return (int)UNIFYFS_FAILURE; - } - - /* get thread control structure */ - reqmgr_thrd_t* thrd_ctrl = client->reqmgr; - - /* get chunks corresponding to requested client read extent - * - * Generate a pair of keys for the read request, representing the start - * and end offset. MDHIM returns all key-value pairs that fall within - * the offset range. - * - * TODO: this is specific to the MDHIM in the source tree and not portable - * to other KV-stores. This needs to be revisited to utilize some - * other mechanism to retrieve all relevant key-value pairs from the - * KV-store. - */ - - /* count number of slices this range covers */ - size_t slices = meta_num_slices(offset, length); - if (slices >= UNIFYFS_MAX_META_SPLIT_COUNT) { - LOGERR("Error allocating buffers"); - return ENOMEM; - } - - /* allocate key storage */ - size_t key_cnt = slices * 2; - unifyfs_key_t** keys = alloc_key_array(key_cnt); - int* key_lens = (int*) calloc(key_cnt, sizeof(int)); - if ((NULL == keys) || - (NULL == key_lens)) { - // this is a fatal error - // TODO: we need better error handling - LOGERR("Error allocating buffers"); - return ENOMEM; - } - - /* split range of read request at boundaries used for - * MDHIM range query */ - split_request(keys, key_lens, gfid, offset, length); - - /* queue up the read operations */ - int rc = create_gfid_chunk_reads(thrd_ctrl, gfid, app_id, client_id, - key_cnt, keys, key_lens); - - /* free memory allocated for key storage */ - free_key_array(keys); - free(key_lens); - - return rc; -} - -static int mdhim_mread(unifyfs_fops_ctx_t* ctx, size_t num_req, void* reqbuf) -{ - int rc = UNIFYFS_SUCCESS; - int app_id = ctx->app_id; - int client_id = ctx->client_id; - unifyfs_extent_t* req; - unifyfs_extent_t* reqs = (unifyfs_extent_t*)reqbuf; - - /* get application client */ - app_client* client = get_app_client(app_id, client_id); - if (NULL == client) { - return (int)UNIFYFS_FAILURE; - } - - /* get thread control structure */ - reqmgr_thrd_t* thrd_ctrl = client->reqmgr; - - /* count up number of slices these request cover */ - int i; - size_t slices = 0; - for (i = 0; i < num_req; i++) { - req = reqs + i; - - /* get offset and length of next request */ - size_t off = req->offset; - size_t len = req->length; - - /* add in number of slices this request needs */ - slices += meta_num_slices(off, len); - } - if (slices >= UNIFYFS_MAX_META_SPLIT_COUNT) { - LOGERR("Error allocating buffers"); - return ENOMEM; - } - - /* allocate key storage */ - size_t key_cnt = slices * 2; - unifyfs_key_t** keys = alloc_key_array(key_cnt); - int* key_lens = (int*) calloc(key_cnt, sizeof(int)); - if ((NULL == keys) || - (NULL == key_lens)) { - // this is a fatal error - // TODO: we need better error handling - LOGERR("Error allocating buffers"); - return ENOMEM; - } - - /* get chunks corresponding to requested client read extents */ - int ret; - int num_keys = 0; - int last_gfid = -1; - for (i = 0; i < num_req; i++) { - req = reqs + i; - - /* get the file id for this request */ - int gfid = req->gfid; - - /* if we have switched to a different file, create chunk reads - * for the previous file */ - if (i && (gfid != last_gfid)) { - /* create requests for all extents of last_gfid */ - ret = create_gfid_chunk_reads(thrd_ctrl, last_gfid, - app_id, client_id, - num_keys, keys, key_lens); - if (ret != UNIFYFS_SUCCESS) { - LOGERR("Error creating chunk reads for gfid=%d", last_gfid); - rc = ret; - } - - /* reset key counter for the current gfid */ - num_keys = 0; - } - - /* get offset and length of current read request */ - size_t off = req->offset; - size_t len = req->length; - LOGDBG("gfid:%d, offset:%zu, length:%zu", gfid, off, len); - - /* Generate a pair of keys for each read request, representing - * the start and end offsets. MDHIM returns all key-value pairs that - * fall within the offset range. - * - * TODO: this is specific to the MDHIM in the source tree and not - * portable to other KV-stores. This needs to be revisited to - * utilize some other mechanism to retrieve all relevant KV - * pairs from the KV-store. - */ - - /* split range of read request at boundaries used for - * MDHIM range query */ - int used = split_request(&keys[num_keys], &key_lens[num_keys], - gfid, off, len); - num_keys += used; - - /* keep track of the last gfid value that we processed */ - last_gfid = gfid; - } - - /* create requests for all extents of final gfid */ - ret = create_gfid_chunk_reads(thrd_ctrl, last_gfid, - app_id, client_id, - num_keys, keys, key_lens); - if (ret != UNIFYFS_SUCCESS) { - LOGERR("Error creating chunk reads for gfid=%d", last_gfid); - rc = ret; - } - - /* free memory allocated for key storage */ - free_key_array(keys); - free(key_lens); - - return rc; -} - -static struct unifyfs_fops _fops_mdhim = { - .name = "mdhim", - .init = mdhim_init, - .metaget = mdhim_metaget, - .metaset = mdhim_metaset, - .fsync = mdhim_fsync, - .filesize = mdhim_filesize, - .truncate = mdhim_truncate, - .laminate = mdhim_laminate, - .unlink = mdhim_unlink, - .read = mdhim_read, - .mread = mdhim_mread, -}; - -struct unifyfs_fops* unifyfs_fops_impl = &_fops_mdhim; - diff --git a/server/src/unifyfs_fops_rpc.c b/server/src/unifyfs_fops_rpc.c index d42b13cac..a7889bf9e 100644 --- a/server/src/unifyfs_fops_rpc.c +++ b/server/src/unifyfs_fops_rpc.c @@ -35,6 +35,10 @@ int rpc_metaget(unifyfs_fops_ctx_t* ctx, int gfid, unifyfs_file_attr_t* attr) { + if (gfid == ctx->app_id) { + /* should always have a local copy of mountpoint attrs */ + return sm_get_fileattr(gfid, attr); + } return unifyfs_invoke_metaget_rpc(gfid, attr); } @@ -52,7 +56,8 @@ int rpc_metaset(unifyfs_fops_ctx_t* ctx, */ static int rpc_fsync(unifyfs_fops_ctx_t* ctx, - int gfid) + int gfid, + client_rpc_req_t* client_req) { size_t i; @@ -86,9 +91,11 @@ int rpc_fsync(unifyfs_fops_ctx_t* ctx, /* the sync rpc now contains extents from a single file/gfid */ assert(gfid == index_entry[0].gfid); + server_rpc_req_t* svr_req = malloc(sizeof(*svr_req)); + int* pending_gfid = malloc(sizeof(int)); extent_metadata* extents = calloc(num_extents, sizeof(*extents)); - if (NULL == extents) { - LOGERR("failed to allocate memory for local_extents"); + if ((NULL == svr_req) || (NULL == pending_gfid) || (NULL == extents)) { + LOGERR("failed to allocate memory for local extents sync"); return ENOMEM; } @@ -104,20 +111,25 @@ int rpc_fsync(unifyfs_fops_ctx_t* ctx, } /* update local inode state first */ - ret = unifyfs_inode_add_extents(gfid, num_extents, extents); + ret = unifyfs_inode_add_pending_extents(gfid, client_req, + num_extents, extents); if (ret) { - LOGERR("failed to add local extents (gfid=%d, ret=%d)", gfid, ret); + LOGERR("failed to add pending local extents (gfid=%d, ret=%d)", + gfid, ret); + free(pending_gfid); + free(svr_req); return ret; + } else { + /* then ask svcmgr to process the pending extent sync(s) */ + *pending_gfid = gfid; + svr_req->req_type = UNIFYFS_SERVER_PENDING_SYNC; + svr_req->handle = HG_HANDLE_NULL; + svr_req->input = (void*) pending_gfid; + svr_req->bulk_buf = NULL; + svr_req->bulk_sz = 0; + ret = sm_submit_service_request(svr_req); } - /* then update owner inode state */ - ret = unifyfs_invoke_add_extents_rpc(gfid, num_extents, extents); - if (ret) { - LOGERR("failed to add extents (gfid=%d, ret=%d)", gfid, ret); - } - - free(extents); - return ret; } diff --git a/server/src/unifyfs_global.h b/server/src/unifyfs_global.h index 135d20658..c8bf1c39a 100644 --- a/server/src/unifyfs_global.h +++ b/server/src/unifyfs_global.h @@ -46,6 +46,7 @@ // common headers #include "arraylist.h" +#include "compare_fn.h" #include "tree.h" #include "unifyfs_client.h" #include "unifyfs_const.h" diff --git a/server/src/unifyfs_inode.c b/server/src/unifyfs_inode.c index f204c9320..74b3e157d 100644 --- a/server/src/unifyfs_inode.c +++ b/server/src/unifyfs_inode.c @@ -41,12 +41,13 @@ struct unifyfs_inode* unifyfs_inode_alloc(int gfid, unifyfs_file_attr_t* attr) ino->extents = tree; ino->gfid = gfid; + ino->pending_extents = NULL; + unifyfs_file_attr_set_invalid(&(ino->attr)); unifyfs_file_attr_update(UNIFYFS_FILE_ATTR_OP_CREATE, &(ino->attr), attr); - pthread_rwlock_init(&(ino->rwlock), NULL); - ABT_mutex_create(&(ino->abt_sync)); + ABT_rwlock_create(&(ino->rwlock)); } else { LOGERR("failed to allocate memory for inode"); } @@ -64,7 +65,7 @@ struct unifyfs_inode* unifyfs_inode_alloc(int gfid, unifyfs_file_attr_t* attr) static inline int unifyfs_inode_rdlock(struct unifyfs_inode* ino) { - return pthread_rwlock_rdlock(&ino->rwlock); + return ABT_rwlock_rdlock(ino->rwlock); } /** @@ -77,7 +78,7 @@ int unifyfs_inode_rdlock(struct unifyfs_inode* ino) static inline int unifyfs_inode_wrlock(struct unifyfs_inode* ino) { - return pthread_rwlock_wrlock(&ino->rwlock); + return ABT_rwlock_wrlock(ino->rwlock); } /** @@ -88,9 +89,28 @@ int unifyfs_inode_wrlock(struct unifyfs_inode* ino) static inline void unifyfs_inode_unlock(struct unifyfs_inode* ino) { - pthread_rwlock_unlock(&ino->rwlock); + ABT_rwlock_unlock(ino->rwlock); } + +/** + * @brief get the inode for a gfid. + * + * @param gfid gfid of inode to retrieve + */ +static inline +struct unifyfs_inode* unifyfs_inode_lookup(int gfid) +{ + struct unifyfs_inode* ino = NULL; + unifyfs_inode_tree_rdlock(global_inode_tree); + { + ino = unifyfs_inode_tree_search(global_inode_tree, gfid); + } + unifyfs_inode_tree_unlock(global_inode_tree); + return ino; +} + + int unifyfs_inode_create(int gfid, unifyfs_file_attr_t* attr) { if (NULL == attr) { @@ -116,13 +136,6 @@ int unifyfs_inode_create(int gfid, unifyfs_file_attr_t* attr) return ret; } -static int int_cmp_fn(const void* a, const void* b) -{ - int ai = *(int*)a; - int bi = *(int*)b; - return ai - bi; -} - int unifyfs_inode_destroy(struct unifyfs_inode* ino) { int ret = UNIFYFS_SUCCESS; @@ -190,7 +203,7 @@ int unifyfs_inode_destroy(struct unifyfs_inode* ino) free(ino->extents); if (NULL != local_clients) { - qsort(local_clients, n_clients, sizeof(int), int_cmp_fn); + qsort(local_clients, n_clients, sizeof(int), int_compare_fn); last_client = -1; for (size_t i = 0; i < n_clients; i++) { int cb_client_id = local_clients[i]; @@ -219,8 +232,7 @@ int unifyfs_inode_destroy(struct unifyfs_inode* ino) } } - pthread_rwlock_destroy(&(ino->rwlock)); - ABT_mutex_free(&(ino->abt_sync)); + ABT_rwlock_free(&(ino->rwlock)); free(ino); } else { @@ -238,21 +250,16 @@ int unifyfs_inode_update_attr(int gfid, int attr_op, } int ret = UNIFYFS_SUCCESS; - struct unifyfs_inode* ino = NULL; - - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (NULL == ino) { - ret = ENOENT; - } else { - unifyfs_inode_wrlock(ino); + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + ret = ENOENT; + } else { + unifyfs_inode_wrlock(ino); + { unifyfs_file_attr_update(attr_op, &ino->attr, attr); - unifyfs_inode_unlock(ino); } + unifyfs_inode_unlock(ino); } - unifyfs_inode_tree_unlock(global_inode_tree); - return ret; } @@ -260,36 +267,27 @@ int unifyfs_inode_metaset(int gfid, int attr_op, unifyfs_file_attr_t* attr) { int ret; - if (attr_op == UNIFYFS_FILE_ATTR_OP_CREATE) { ret = unifyfs_inode_create(gfid, attr); } else { ret = unifyfs_inode_update_attr(gfid, attr_op, attr); } - return ret; } int unifyfs_inode_metaget(int gfid, unifyfs_file_attr_t* attr) { - int ret = UNIFYFS_SUCCESS; - struct unifyfs_inode* ino = NULL; - if ((NULL == global_inode_tree) || (NULL == attr)) { return EINVAL; } - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (NULL != ino) { - *attr = ino->attr; - } else { - ret = ENOENT; - } + int ret = UNIFYFS_SUCCESS; + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL != ino) { + *attr = ino->attr; + } else { + ret = ENOENT; } - unifyfs_inode_tree_unlock(global_inode_tree); - return ret; } @@ -314,96 +312,175 @@ int unifyfs_inode_unlink(int gfid) int unifyfs_inode_truncate(int gfid, unsigned long size) { int ret = UNIFYFS_SUCCESS; - struct unifyfs_inode* ino = NULL; - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (!ino) { - ret = ENOENT; - } else { - unifyfs_inode_wrlock(ino); - { - if (ino->attr.is_laminated) { - LOGERR("cannot truncate a laminated file (gfid=%d)", gfid); - ret = EINVAL; - } else { - ino->attr.size = size; - if (NULL != ino->extents) { - ret = extent_tree_truncate(ino->extents, size); - } + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + ret = ENOENT; + } else { + unifyfs_inode_wrlock(ino); + { + if (ino->attr.is_laminated) { + LOGERR("cannot truncate a laminated file (gfid=%d)", gfid); + ret = EINVAL; + } else { + ino->attr.size = size; + if (NULL != ino->extents) { + ret = extent_tree_truncate(ino->extents, size); } } - unifyfs_inode_unlock(ino); } + unifyfs_inode_unlock(ino); } - unifyfs_inode_tree_unlock(global_inode_tree); return ret; } -int unifyfs_inode_add_extents(int gfid, - int num_extents, - extent_metadata* extents) +int unifyfs_inode_add_pending_extents(int gfid, + client_rpc_req_t* client_req, + int num_extents, + extent_metadata* extents) { int ret = UNIFYFS_SUCCESS; - int i = 0; - struct unifyfs_inode* ino = NULL; - struct extent_tree* tree = NULL; - unifyfs_inode_tree_rdlock(global_inode_tree); + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + return ENOENT; + } + + if (ino->attr.is_laminated) { + LOGERR("trying to add extents to a laminated file (gfid=%d)", + gfid); + return EINVAL; + } + + unifyfs_inode_wrlock(ino); { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (!ino) { - ret = ENOENT; - goto out_unlock_tree; + if (NULL == ino->pending_extents) { + ino->pending_extents = arraylist_create(0); + if (NULL == ino->pending_extents) { + ret = ENOMEM; + LOGERR("failed to allocate inode pending extents list"); + goto add_pending_unlock_inode; + } } - if (ino->attr.is_laminated) { - LOGERR("trying to add extents to a laminated file (gfid=%d)", - gfid); - ret = EINVAL; - goto out_unlock_tree; + pending_extents_item* list_item = malloc(sizeof(*list_item)); + if (NULL == list_item) { + ret = ENOMEM; + LOGERR("failed to allocate inode pending extents list"); + goto add_pending_unlock_inode; + } + list_item->client_req = client_req; + list_item->num_extents = num_extents; + list_item->extents = extents; - ABT_mutex_lock(ino->abt_sync); + arraylist_add(ino->pending_extents, list_item); + } +add_pending_unlock_inode: + unifyfs_inode_unlock(ino); - unifyfs_inode_wrlock(ino); - { - tree = ino->extents; - if (NULL == tree) { - LOGERR("inode extent tree is missing"); - goto out_unlock_inode; - } + LOGINFO("added %d pending extents to inode (gfid=%d)", + num_extents, gfid); - for (i = 0; i < num_extents; i++) { - extent_metadata* current = extents + i; - ret = extent_tree_add(tree, current); - if (ret) { - LOGERR("failed to add extent [%lu, %lu] to gfid=%d", - current->start, current->end, gfid); - goto out_unlock_inode; - } - } - /* if the extent tree max offset is greater than the size we - * we currently have in the inode attributes, then update the - * inode size */ - unsigned long extent_sz = extent_tree_max_offset(ino->extents) + 1; - if ((uint64_t)extent_sz > ino->attr.size) { - ino->attr.size = extent_sz; - } + return ret; +} + +bool unifyfs_inode_has_pending_extents(int gfid) +{ + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + return false; + } + + bool has_pending = false; + unifyfs_inode_rdlock(ino); + { + if (NULL != ino->pending_extents) { + has_pending = true; } -out_unlock_inode: - unifyfs_inode_unlock(ino); + } + unifyfs_inode_unlock(ino); - LOGINFO("added %d extents to inode (gfid=%d, filesize=%" PRIu64 ")", - num_extents, gfid, ino->attr.size); + return has_pending; +} - ABT_mutex_unlock(ino->abt_sync); +int unifyfs_inode_get_pending_extents(int gfid, + arraylist_t** pending_list) +{ + if (NULL == pending_list) { + return EINVAL; } -out_unlock_tree: - unifyfs_inode_tree_unlock(global_inode_tree); + *pending_list = NULL; + + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + return ENOENT; + } + + unifyfs_inode_wrlock(ino); + { + if (NULL != ino->pending_extents) { + *pending_list = ino->pending_extents; + ino->pending_extents = NULL; + LOGINFO("returning pending list (sz=%d) from inode (gfid=%d)", + arraylist_size(*pending_list), gfid); + } + } + unifyfs_inode_unlock(ino); + + return UNIFYFS_SUCCESS; +} + +int unifyfs_inode_add_extents(int gfid, + int num_extents, + extent_metadata* extents) +{ + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + return ENOENT; + } + + if (ino->attr.is_laminated) { + LOGERR("trying to add extents to a laminated file (gfid=%d)", + gfid); + return EINVAL; + } + + int ret = UNIFYFS_SUCCESS; + unifyfs_inode_wrlock(ino); + { + struct extent_tree* tree = ino->extents; + if (NULL == tree) { + LOGERR("inode extent tree is missing"); + goto add_unlock_inode; + } + + for (int i = 0; i < num_extents; i++) { + extent_metadata* current = extents + i; + ret = extent_tree_add(tree, current); + if (ret) { + LOGERR("failed to add extent [%lu, %lu] to gfid=%d", + current->start, current->end, gfid); + goto add_unlock_inode; + } + } + + /* if the extent tree max offset is greater than the size we + * we currently have in the inode attributes, then update the + * inode size */ + unsigned long extent_sz = extent_tree_max_offset(ino->extents) + 1; + if ((uint64_t)extent_sz > ino->attr.size) { + ino->attr.size = extent_sz; + } + } +add_unlock_inode: + unifyfs_inode_unlock(ino); + + LOGINFO("added %d extents to inode (gfid=%d, filesize=%" PRIu64 ")", + num_extents, gfid, ino->attr.size); + return ret; } @@ -412,27 +489,22 @@ int unifyfs_inode_get_filesize(int gfid, size_t* outsize) { int ret = UNIFYFS_SUCCESS; size_t filesize = 0; - struct unifyfs_inode* ino = NULL; - - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (!ino) { - ret = ENOENT; - } else { - unifyfs_inode_rdlock(ino); - { - /* the size is updated each time we add extents or truncate, - * so no need to recalculate */ - filesize = ino->attr.size; - } - unifyfs_inode_unlock(ino); - *outsize = filesize; - LOGDBG("local file size (gfid=%d): %lu", gfid, filesize); + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + ret = ENOENT; + } else { + unifyfs_inode_rdlock(ino); + { + /* the size is updated each time we add extents or truncate, + * so no need to recalculate */ + filesize = ino->attr.size; } + unifyfs_inode_unlock(ino); } - unifyfs_inode_tree_unlock(global_inode_tree); + + *outsize = filesize; + LOGDBG("local file size (gfid=%d): %lu", gfid, filesize); return ret; } @@ -440,23 +512,17 @@ int unifyfs_inode_get_filesize(int gfid, size_t* outsize) int unifyfs_inode_laminate(int gfid) { int ret = UNIFYFS_SUCCESS; - struct unifyfs_inode* ino = NULL; - - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (!ino) { - ret = ENOENT; - } else { - unifyfs_inode_wrlock(ino); + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + ret = ENOENT; + } else { + unifyfs_inode_wrlock(ino); + { ino->attr.is_laminated = 1; - unifyfs_inode_unlock(ino); - - LOGDBG("file laminated (gfid=%d)", gfid); } + unifyfs_inode_unlock(ino); + LOGDBG("laminated file (gfid=%d)", gfid); } - unifyfs_inode_tree_unlock(global_inode_tree); - return ret; } @@ -469,39 +535,31 @@ int unifyfs_inode_get_extents(int gfid, } int ret = UNIFYFS_SUCCESS; - struct unifyfs_inode* ino = NULL; - - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (NULL == ino) { - ret = ENOENT; - } else { - unifyfs_inode_rdlock(ino); - { - struct extent_tree* tree = ino->extents; - size_t n_extents = tree->count; - extent_metadata* _extents = calloc(n_extents, - sizeof(*_extents)); - if (NULL == _extents) { - ret = ENOMEM; - } else { - int i = 0; - struct extent_tree_node* curr = NULL; - while ((curr = extent_tree_iter(tree, curr)) != NULL) { - _extents[i] = curr->extent; - i++; - } - - *n = n_extents; - *extents = _extents; + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + ret = ENOENT; + } else { + unifyfs_inode_rdlock(ino); + { + struct extent_tree* tree = ino->extents; + size_t n_extents = tree->count; + extent_metadata* _extents = calloc(n_extents, sizeof(*_extents)); + if (NULL == _extents) { + ret = ENOMEM; + } else { + int i = 0; + struct extent_tree_node* curr = NULL; + while ((curr = extent_tree_iter(tree, curr)) != NULL) { + _extents[i] = curr->extent; + i++; } + + *n = n_extents; + *extents = _extents; } - unifyfs_inode_unlock(ino); } + unifyfs_inode_unlock(ino); } - unifyfs_inode_tree_unlock(global_inode_tree); - return ret; } @@ -511,36 +569,31 @@ int unifyfs_inode_get_extent_chunks(unifyfs_extent_t* extent, int* full_coverage) { int ret = UNIFYFS_SUCCESS; - struct unifyfs_inode* ino = NULL; int gfid = extent->gfid; int covered = 0; *full_coverage = 0; - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (!ino) { - ret = ENOENT; - } else { - unifyfs_inode_rdlock(ino); - { - if (NULL != ino->extents) { - unsigned long offset = extent->offset; - unsigned long len = extent->length; - ret = extent_tree_get_chunk_list(ino->extents, offset, len, - n_chunks, chunks, - &covered); - if (ret) { - LOGERR("failed to get chunks for gfid:%d, ret=%d", - gfid, ret); - } + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + ret = ENOENT; + } else { + unifyfs_inode_rdlock(ino); + { + if (NULL != ino->extents) { + unsigned long offset = extent->offset; + unsigned long len = extent->length; + ret = extent_tree_get_chunk_list(ino->extents, offset, len, + n_chunks, chunks, + &covered); + if (ret) { + LOGERR("failed to get chunks for gfid=%d (rc=%d)", + gfid, ret); } } - unifyfs_inode_unlock(ino); } + unifyfs_inode_unlock(ino); } - unifyfs_inode_tree_unlock(global_inode_tree); if (ret == UNIFYFS_SUCCESS) { /* extent_tree_get_chunk_list() does not populate the gfid field */ @@ -683,65 +736,23 @@ int unifyfs_inode_resolve_extent_chunks(unsigned int n_extents, return ret; } -int unifyfs_inode_span_extents( - int gfid, /* global file id we're looking in */ - unsigned long start, /* starting logical offset */ - unsigned long end, /* ending logical offset */ - int max, /* maximum number of key/vals to return */ - void* keys, /* array of length max for output keys */ - void* vals, /* array of length max for output values */ - int* outnum) /* number of entries returned */ -{ - int ret = UNIFYFS_SUCCESS; - struct unifyfs_inode* ino = NULL; - - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (!ino) { - ret = ENOENT; - } else { - unifyfs_inode_rdlock(ino); - { - ret = extent_tree_span(ino->extents, gfid, start, end, - max, keys, vals, outnum); - if (ret) { - LOGERR("extent_tree_span failed (gfid=%d, ret=%d)", - gfid, ret); - } - } - unifyfs_inode_unlock(ino); - } - - } - unifyfs_inode_tree_unlock(global_inode_tree); - - return ret; -} - int unifyfs_inode_dump(int gfid) { int ret = UNIFYFS_SUCCESS; - struct unifyfs_inode* ino = NULL; - - unifyfs_inode_tree_rdlock(global_inode_tree); - { - ino = unifyfs_inode_tree_search(global_inode_tree, gfid); - if (!ino) { - ret = ENOENT; - } else { - unifyfs_inode_rdlock(ino); - { - LOGDBG("== inode (gfid=%d) ==\n", ino->gfid); - if (NULL != ino->extents) { - LOGDBG("extents:"); - extent_tree_dump(ino->extents); - } + struct unifyfs_inode* ino = unifyfs_inode_lookup(gfid); + if (NULL == ino) { + ret = ENOENT; + } else { + unifyfs_inode_rdlock(ino); + { + LOGDBG("== inode (gfid=%d) ==\n", ino->gfid); + if (NULL != ino->extents) { + LOGDBG("extents:"); + extent_tree_dump(ino->extents); } - unifyfs_inode_unlock(ino); } + unifyfs_inode_unlock(ino); } - unifyfs_inode_tree_unlock(global_inode_tree); return ret; } @@ -752,9 +763,9 @@ int unifyfs_get_gfids(int* num_gfids, int** gfid_list) int ret = UNIFYFS_SUCCESS; int _num_gfids = 0; - int gfid_list_size = 64; // TODO: Is there a better starting number??? - int* _gfid_list = malloc(sizeof(int) * gfid_list_size); - if (!_gfid_list) { + int gfid_list_size = 64; + int* _gfid_list = calloc(gfid_list_size, sizeof(int)); + if (NULL == _gfid_list) { return ENOMEM; } diff --git a/server/src/unifyfs_inode.h b/server/src/unifyfs_inode.h index f56301529..ac1dcb33b 100644 --- a/server/src/unifyfs_inode.h +++ b/server/src/unifyfs_inode.h @@ -18,15 +18,11 @@ #include "unifyfs_global.h" #include "extent_tree.h" -/** - * @brief file extent descriptor - */ -struct unifyfs_inode_extent { - int gfid; - unsigned long offset; - unsigned long length; -}; -typedef struct unifyfs_inode_extent unifyfs_inode_extent_t; +typedef struct pending_extents_item { + client_rpc_req_t* client_req; /* req details, including response handle */ + unsigned int num_extents; /* number of extents in array */ + extent_metadata* extents; /* array of extent metadata */ +} pending_extents_item; /** * @brief file and directory inode structure. this holds: @@ -38,9 +34,9 @@ struct unifyfs_inode { int gfid; /* global file identifier */ unifyfs_file_attr_t attr; /* file attributes */ struct extent_tree* extents; /* extent information */ + arraylist_t* pending_extents; /* list of pending_extents_item */ - pthread_rwlock_t rwlock; /* rwlock for pthread access */ - ABT_mutex abt_sync; /* mutex for argobots ULT access */ + ABT_rwlock rwlock; /* reader-writer lock */ }; /** @@ -134,13 +130,50 @@ int unifyfs_inode_get_extents(int gfid, extent_metadata** extents); /** - * @brief add new extents to the inode + * @brief add extents pending sync to the inode * * @param gfid the global file identifier - * @param num_extents the number of new extents in @nodes - * @param extents an array of extents to be added + * @param client_req the client req to sync the extents + * @param num_extents the number of extents in @extents + * @param extents an array of extents to be added as pending + * + * @return 0 on success, errno otherwise + */ +int unifyfs_inode_add_pending_extents(int gfid, + client_rpc_req_t* client_req, + int num_extents, + extent_metadata* extents); + +/** + * @brief check if inode has pending extents to sync + * + * @param gfid the global file identifier + * + * @return true if pending extents exist, false otherwise + */ +bool unifyfs_inode_has_pending_extents(int gfid); + +/** + * @brief retrieve pending extents list for the inode + * (future adds will go to a new pending list) * - * @return + * @param gfid the global file identifier + * @param[out] pending_list the list of pending extents (if any) + * + * @return 0 on success, errno otherwise + */ + +int unifyfs_inode_get_pending_extents(int gfid, + arraylist_t** pending_list); + +/** + * @brief add new extents to the inode + * + * @param gfid the global file identifier + * @param num_extents the number of extents in @extents + * @param extents an array of extents to be added + * + * @return 0 on success, errno otherwise */ int unifyfs_inode_add_extents(int gfid, int num_extents, @@ -200,33 +233,6 @@ int unifyfs_inode_resolve_extent_chunks(unsigned int n_extents, chunk_read_req_t** chunklocs, int* full_coverage); -/** - * @brief calls extents_tree_span, which will do: - * - * given an extent tree and starting and ending logical offsets, fill in - * key/value entries that overlap that range, returns at most max entries - * starting from lowest starting offset, sets outnum with actual number of - * entries returned - * - * @param gfid global file id - * @param start starting logical offset - * @param end ending logical offset - * @param max maximum number of key/vals to return - * - * @param[out] keys array of length max for output keys - * @param[out] vals array of length max for output values - * @param[out] outnum output number of entries returned - * - * @return - */ -int unifyfs_inode_span_extents(int gfid, - unsigned long start, - unsigned long end, - int max, - void* keys, - void* vals, - int* outnum); - /** * @brief prints the inode information to the log stream * diff --git a/server/src/unifyfs_inode_tree.c b/server/src/unifyfs_inode_tree.c index 039174e89..3dee0881f 100644 --- a/server/src/unifyfs_inode_tree.c +++ b/server/src/unifyfs_inode_tree.c @@ -26,9 +26,8 @@ #define MIN(a, b) (a < b ? a : b) #define MAX(a, b) (a > b ? a : b) -static int unifyfs_inode_tree_compare_func( - struct unifyfs_inode* node1, - struct unifyfs_inode* node2) +static int uit_compare_func(struct unifyfs_inode* node1, + struct unifyfs_inode* node2) { if (node1->gfid > node2->gfid) { return 1; @@ -39,35 +38,29 @@ static int unifyfs_inode_tree_compare_func( } } -RB_PROTOTYPE( - rb_inode_tree, unifyfs_inode, - inode_tree_entry, unifyfs_inode_tree_compare_func) -RB_GENERATE( - rb_inode_tree, unifyfs_inode, - inode_tree_entry, unifyfs_inode_tree_compare_func) +RB_PROTOTYPE(rb_inode_tree, unifyfs_inode, inode_tree_entry, uit_compare_func) +RB_GENERATE(rb_inode_tree, unifyfs_inode, inode_tree_entry, uit_compare_func) /* Returns 0 on success, positive non-zero error code otherwise */ -int unifyfs_inode_tree_init( - struct unifyfs_inode_tree* tree) +int unifyfs_inode_tree_init(struct unifyfs_inode_tree* tree) { if (NULL == tree) { return EINVAL; } memset(tree, 0, sizeof(*tree)); - pthread_rwlock_init(&tree->rwlock, NULL); + ABT_rwlock_create(&(tree->rwlock)); RB_INIT(&tree->head); return UNIFYFS_SUCCESS; } /* Remove and free all nodes in the unifyfs_inode_tree. */ -void unifyfs_inode_tree_destroy( - struct unifyfs_inode_tree* tree) +void unifyfs_inode_tree_destroy(struct unifyfs_inode_tree* tree) { if (NULL != tree) { unifyfs_inode_tree_clear(tree); - pthread_rwlock_destroy(&tree->rwlock); + ABT_rwlock_free(&(tree->rwlock)); } } diff --git a/server/src/unifyfs_inode_tree.h b/server/src/unifyfs_inode_tree.h index 8bec5d8d2..7d1b0461f 100644 --- a/server/src/unifyfs_inode_tree.h +++ b/server/src/unifyfs_inode_tree.h @@ -12,10 +12,9 @@ * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. */ -#ifndef __UNIFYFS_INODE_TREE_H -#define __UNIFYFS_INODE_TREE_H +#ifndef UNIFYFS_INODE_TREE_H +#define UNIFYFS_INODE_TREE_H -#include #include "tree.h" #include "extent_tree.h" #include "unifyfs_meta.h" @@ -31,7 +30,7 @@ */ struct unifyfs_inode_tree { RB_HEAD(rb_inode_tree, unifyfs_inode) head; /** inode RB tree */ - pthread_rwlock_t rwlock; /** lock for accessing tree */ + ABT_rwlock rwlock; /** lock for accessing tree */ }; /** @@ -80,14 +79,14 @@ int unifyfs_inode_tree_insert(struct unifyfs_inode_tree* tree, * @return 0 on success, errno otherwise */ int unifyfs_inode_tree_remove(struct unifyfs_inode_tree* tree, - int gfid, struct unifyfs_inode** removed); + int gfid, + struct unifyfs_inode** removed); /* Search for and return extents for given gfid on specified tree. * If not found, return NULL, assumes caller has lock on tree */ struct unifyfs_inode* unifyfs_inode_tree_search( struct unifyfs_inode_tree* tree, /* tree to search */ - int gfid /* global file id to find */ -); + int gfid); /* global file id to find */ /** * @brief Iterate the inode tree. @@ -143,9 +142,10 @@ struct unifyfs_inode* unifyfs_inode_tree_iter(struct unifyfs_inode_tree* tree, * * @return 0 on success, errno otherwise */ -static inline int unifyfs_inode_tree_rdlock(struct unifyfs_inode_tree* tree) +static inline +int unifyfs_inode_tree_rdlock(struct unifyfs_inode_tree* tree) { - return pthread_rwlock_rdlock(&tree->rwlock); + return ABT_rwlock_rdlock(tree->rwlock); } /** @@ -157,9 +157,10 @@ static inline int unifyfs_inode_tree_rdlock(struct unifyfs_inode_tree* tree) * * @return 0 on success, errno otherwise */ -static inline int unifyfs_inode_tree_wrlock(struct unifyfs_inode_tree* tree) +static inline +int unifyfs_inode_tree_wrlock(struct unifyfs_inode_tree* tree) { - return pthread_rwlock_wrlock(&tree->rwlock); + return ABT_rwlock_wrlock(tree->rwlock); } /** @@ -169,10 +170,11 @@ static inline int unifyfs_inode_tree_wrlock(struct unifyfs_inode_tree* tree) * * @param tree inode tree */ -static inline void unifyfs_inode_tree_unlock(struct unifyfs_inode_tree* tree) +static inline +void unifyfs_inode_tree_unlock(struct unifyfs_inode_tree* tree) { - pthread_rwlock_unlock(&tree->rwlock); + ABT_rwlock_unlock(tree->rwlock); } -#endif /* __UNIFYFS_INODE_TREE_H */ +#endif /* UNIFYFS_INODE_TREE_H */ diff --git a/server/src/unifyfs_metadata_mdhim.c b/server/src/unifyfs_metadata_mdhim.c deleted file mode 100644 index bda3a9da1..000000000 --- a/server/src/unifyfs_metadata_mdhim.c +++ /dev/null @@ -1,574 +0,0 @@ -/* - * Copyright (c) 2020, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2020, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Wekuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICNSE for full license text. - */ - -// NOTE: following two lines needed for nftw(), MUST COME FIRST IN FILE -#define _XOPEN_SOURCE 500 -#include - -// common headers -#include "unifyfs_client_rpcs.h" - -// server headers -#include "unifyfs_global.h" -#include "unifyfs_metadata_mdhim.h" - -// MDHIM headers -#include "indexes.h" -#include "mdhim.h" - -#define UNIFYFS_META_DB_NAME unifyfs_db -#define UNIFYFS_META_DB_PATH RUNDIR - -struct mdhim_t* md; - -/* we use two MDHIM indexes: - * 0) for file extents - * 1) for file attributes */ -#define IDX_FILE_EXTENTS (0) -#define IDX_FILE_ATTR (1) -struct index_t* unifyfs_indexes[2]; - - -int unifyfs_key_compare(unifyfs_key_t* a, unifyfs_key_t* b) -{ - assert((NULL != a) && (NULL != b)); - if (a->gfid == b->gfid) { - if (a->offset == b->offset) { - return 0; - } else if (a->offset < b->offset) { - return -1; - } else { - return 1; - } - } else if (a->gfid < b->gfid) { - return -1; - } else { - return 1; - } -} - -/* order keyvals by gfid, then host delegator rank */ -int unifyfs_keyval_compare(const void* a, const void* b) -{ - assert((NULL != a) && (NULL != b)); - - const unifyfs_keyval_t* kv_a = a; - const unifyfs_keyval_t* kv_b = b; - - int gfid_a = kv_a->key.gfid; - int gfid_b = kv_b->key.gfid; - if (gfid_a == gfid_b) { - int rank_a = kv_a->val.delegator_rank; - int rank_b = kv_b->val.delegator_rank; - if (rank_a == rank_b) { - return 0; - } else if (rank_a < rank_b) { - return -1; - } else { - return 1; - } - } else if (gfid_a < gfid_b) { - return -1; - } else { - return 1; - } -} - -/* initialize the key-value store */ -int meta_init_store(unifyfs_cfg_t* cfg) -{ - int rc, ratio; - MPI_Comm comm = MPI_COMM_WORLD; - long svr_ratio, range_sz; - struct stat ss; - char db_path[UNIFYFS_MAX_FILENAME] = {0}; - - if (cfg == NULL) { - return -1; - } - - mdhim_options_t* db_opts = mdhim_options_init(); - if (db_opts == NULL) { - return -1; - } - mdhim_options_set_db_type(db_opts, LEVELDB); - mdhim_options_set_db_name(db_opts, UNIFYFS_META_DB_NAME); - mdhim_options_set_key_type(db_opts, MDHIM_UNIFYFS_KEY); - mdhim_options_set_debug_level(db_opts, MLOG_CRIT); - - /* UNIFYFS_META_DB_PATH: root directory for metadata */ - snprintf(db_path, sizeof(db_path), "%s/mdhim", cfg->meta_db_path); - rc = stat(db_path, &ss); - if (rc != 0) { - rc = mkdir(db_path, 0770); - if (rc != 0) { - LOGERR("failed to create MDHIM metadata directory %s", db_path); - return -1; - } - } - mdhim_options_set_db_path(db_opts, strdup(db_path)); - - /* number of metadata servers = - * number of unifyfs servers / UNIFYFS_META_SERVER_RATIO */ - ratio = (int) UNIFYFS_META_SERVER_RATIO; - mdhim_options_set_server_factor(db_opts, ratio); - - /* indices/attributes are striped to servers according - * to config setting for UNIFYFS_META_RANGE_SIZE. */ - range_sz = 0; - rc = configurator_int_val(cfg->meta_range_size, &range_sz); - if (rc != 0) { - return -1; - } - meta_slice_sz = (size_t) range_sz; - mdhim_options_set_max_recs_per_slice(db_opts, (uint64_t)range_sz); - - md = mdhimInit(&comm, db_opts); - - /* index for storing file extent metadata */ - unifyfs_indexes[IDX_FILE_EXTENTS] = md->primary_index; - - /* index for storing file attribute metadata */ - unifyfs_indexes[IDX_FILE_ATTR] = create_global_index(md, - ratio, 1, LEVELDB, MDHIM_INT_KEY, "file_attr"); - - return 0; -} - -void print_fsync_indices(unifyfs_key_t** keys, - unifyfs_val_t** vals, - size_t num_entries) -{ - size_t i; - for (i = 0; i < num_entries; i++) { - LOGDBG("gfid:%d, offset:%lu, addr:%lu, len:%lu, del_id:%d", - keys[i]->gfid, keys[i]->offset, - vals[i]->addr, vals[i]->len, - vals[i]->delegator_rank); - } -} - -static int remove_cb(const char* fpath, const struct stat* sb, - int typeflag, struct FTW* ftwbuf) -{ - int rc = remove(fpath); - if (rc) { - LOGERR("failed to remove(%s)", fpath); - } - return rc; -} - -static int remove_mdhim_db_filetree(char* db_root_path) -{ - LOGDBG("remove MDHIM DB filetree at %s", db_root_path); - return nftw(db_root_path, remove_cb, 64, FTW_DEPTH | FTW_PHYS); -} - - -int meta_sanitize(void) -{ - int rc; - char db_path[UNIFYFS_MAX_FILENAME] = {0}; - - // capture db_path before closing MDHIM - snprintf(db_path, sizeof(db_path), "%s", md->db_opts->db_path); - - mdhimClose(md); - md = NULL; - - // remove the metadata filetree - rc = remove_mdhim_db_filetree(db_path); - if (rc) { - LOGERR("failure during MDHIM file tree removal"); - } - - return UNIFYFS_SUCCESS; -} - -// New API -/* - * - */ -int unifyfs_set_file_attribute( - int set_size, - int set_laminate, - unifyfs_file_attr_t* fattr_ptr) -{ - int rc = UNIFYFS_SUCCESS; - - /* select index for file attributes */ - md->primary_index = unifyfs_indexes[IDX_FILE_ATTR]; - - int gfid = fattr_ptr->gfid; - - /* if we want to preserve some settings, - * we copy those fields from attributes - * on the existing entry, if there is one */ - int preserve = (!set_size || !set_laminate); - if (preserve) { - /* lookup existing attributes for the file */ - unifyfs_file_attr_t attr; - int get_rc = unifyfs_get_file_attribute(gfid, &attr); - if (get_rc == UNIFYFS_SUCCESS) { - /* found the attributes for this file, - * if size flag is not set, preserve existing size value */ - if (!set_size) { - fattr_ptr->size = attr.size; - } - - /* if laminate flag is not set, - * preserve existing is_laminated state */ - if (!set_laminate) { - fattr_ptr->is_laminated = attr.is_laminated; - } - } else { - /* otherwise, trying to update attributes for a file that - * we can't find */ - return get_rc; - } - } - - /* insert file attribute for given global file id */ - struct mdhim_brm_t* brm = mdhimPut(md, - &gfid, sizeof(int), - fattr_ptr, sizeof(unifyfs_file_attr_t), - NULL, NULL); - - if (!brm || brm->error) { - rc = (int)UNIFYFS_ERROR_MDHIM; - } - - if (brm) { - mdhim_full_release_msg(brm); - } - - if (rc != UNIFYFS_SUCCESS) { - LOGERR("failed to insert attributes for gfid=%d", gfid); - } - return rc; -} - -/* - * - */ -int unifyfs_set_file_attributes(int num_entries, - fattr_key_t** keys, int* key_lens, - unifyfs_file_attr_t** fattr_ptr, int* val_lens) -{ - int rc = UNIFYFS_SUCCESS; - - /* select index for file attributes */ - md->primary_index = unifyfs_indexes[IDX_FILE_ATTR]; - - /* put list of key/value pairs */ - struct mdhim_brm_t* brm = mdhimBPut(md, - (void**)keys, key_lens, - (void**)fattr_ptr, val_lens, - num_entries, NULL, NULL); - - /* check for errors and free resources */ - if (!brm) { - rc = (int)UNIFYFS_ERROR_MDHIM; - } else { - /* step through linked list of messages, - * scan for any error and free messages */ - struct mdhim_brm_t* brmp = brm; - while (brmp) { - /* check current item for error */ - if (brmp->error) { - LOGERR("MDHIM bulk put error=%d", brmp->error); - rc = (int)UNIFYFS_ERROR_MDHIM; - } - - /* record pointer to current item, - * advance loop pointer to next item in list, - * free resources for current item */ - brm = brmp; - brmp = brmp->next; - mdhim_full_release_msg(brm); - } - } - - if (rc != UNIFYFS_SUCCESS) { - LOGERR("failed to bulk insert file attributes"); - } - return rc; -} - -/* given a global file id, lookup and return file attributes */ -int unifyfs_get_file_attribute( - int gfid, - unifyfs_file_attr_t* attr) -{ - int rc = UNIFYFS_SUCCESS; - - /* select index holding file attributes, - * execute lookup for given file id */ - md->primary_index = unifyfs_indexes[IDX_FILE_ATTR]; - struct mdhim_bgetrm_t* bgrm = mdhimGet(md, md->primary_index, - &gfid, sizeof(int), MDHIM_GET_EQ); - - if (!bgrm || bgrm->error) { - /* failed to find info for this file id */ - rc = (int)UNIFYFS_ERROR_MDHIM; - } else { - /* copy file attribute from value into output parameter */ - unifyfs_file_attr_t* ptr = (unifyfs_file_attr_t*)bgrm->values[0]; - memcpy(attr, ptr, sizeof(unifyfs_file_attr_t)); - } - - /* free resources returned from lookup */ - if (bgrm) { - mdhim_full_release_msg(bgrm); - } - - if (rc != UNIFYFS_SUCCESS) { - LOGERR("failed to retrieve attributes for gfid=%d", gfid); - } - return rc; -} - -/* given a global file id, delete file attributes */ -int unifyfs_delete_file_attribute( - int gfid) -{ - int rc = UNIFYFS_SUCCESS; - - /* select index holding file attributes, - * delete entry for given file id */ - md->primary_index = unifyfs_indexes[IDX_FILE_ATTR]; - struct mdhim_brm_t* brm = mdhimDelete(md, md->primary_index, - &gfid, sizeof(int)); - - /* check for errors and free resources */ - if (!brm) { - rc = (int)UNIFYFS_ERROR_MDHIM; - } else { - /* step through linked list of messages, - * scan for any error and free messages */ - struct mdhim_brm_t* brmp = brm; - while (brmp) { - /* check current item for error */ - if (brmp->error) { - LOGERR("MDHIM delete error=%d", brmp->error); - rc = (int)UNIFYFS_ERROR_MDHIM; - } - - /* record pointer to current item, - * advance loop pointer to next item in list, - * free resources for current item */ - brm = brmp; - brmp = brmp->next; - mdhim_full_release_msg(brm); - } - } - - if (rc != UNIFYFS_SUCCESS) { - LOGERR("failed to delete attributes for gfid=%d", gfid); - } - return rc; -} - -/* - * - */ -int unifyfs_get_file_extents(int num_keys, unifyfs_key_t** keys, - int* key_lens, int* num_values, - unifyfs_keyval_t** keyvals) -{ - /* - * This is using a modified version of mdhim. The function will return all - * key-value pairs within the range of the key tuple. - * We need to re-evaluate this function to use different key-value stores. - */ - int rc = UNIFYFS_SUCCESS; - - /* initialize output values */ - *num_values = 0; - *keyvals = NULL; - - /* select index for file extents */ - md->primary_index = unifyfs_indexes[IDX_FILE_EXTENTS]; - - /* execute range query */ - struct mdhim_bgetrm_t* bkvlist = mdhimBGet(md, md->primary_index, - (void**)keys, key_lens, num_keys, MDHIM_RANGE_BGET); - - /* iterate over each item in list, check for errors - * and sum up total number of key/value pairs we got back */ - size_t tot_num = 0; - struct mdhim_bgetrm_t* ptr = bkvlist; - while (ptr) { - /* check that we don't have an error condition */ - if (ptr->error) { - /* hit an error */ - LOGERR("MDHIM range query error=%d", ptr->error); - return (int)UNIFYFS_ERROR_MDHIM; - } - - /* total up number of key/values returned */ - tot_num += (size_t) ptr->num_keys; - - /* get pointer to next item in the list */ - ptr = ptr->next; - } - - /* allocate memory to copy key/value data */ - unifyfs_keyval_t* kvs = (unifyfs_keyval_t*) calloc( - tot_num, sizeof(unifyfs_keyval_t)); - if (NULL == kvs) { - LOGERR("failed to allocate keyvals"); - return ENOMEM; - } - - /* iterate over list and copy each key/value into output array */ - ptr = bkvlist; - unifyfs_keyval_t* kviter = kvs; - while (ptr) { - /* iterate over key/value in list element */ - int i; - for (i = 0; i < ptr->num_keys; i++) { - /* get pointer to current key and value */ - unifyfs_key_t* tmp_key = (unifyfs_key_t*)ptr->keys[i]; - unifyfs_val_t* tmp_val = (unifyfs_val_t*)ptr->values[i]; - - /* copy contents over to output array */ - memcpy(&(kviter->key), tmp_key, sizeof(unifyfs_key_t)); - memcpy(&(kviter->val), tmp_val, sizeof(unifyfs_val_t)); - - /* bump up to next element in output array */ - kviter++; - } - - /* get pointer to next item in the list */ - struct mdhim_bgetrm_t* next = ptr->next; - - /* release resources for the curren item */ - mdhim_full_release_msg(ptr); - ptr = next; - } - - /* set output values */ - *num_values = tot_num; - *keyvals = kvs; - - return rc; -} - -/* - * - */ -int unifyfs_set_file_extents(int num_entries, - unifyfs_key_t** keys, int* key_lens, - unifyfs_val_t** vals, int* val_lens) -{ - int rc = UNIFYFS_SUCCESS; - - /* select index for file extents */ - md->primary_index = unifyfs_indexes[IDX_FILE_EXTENTS]; - - /* put list of key/value pairs */ - struct mdhim_brm_t* brm = mdhimBPut(md, - (void**)(keys), key_lens, - (void**)(vals), val_lens, - num_entries, NULL, NULL); - - /* check for errors and free resources */ - if (!brm) { - rc = (int)UNIFYFS_ERROR_MDHIM; - } else { - /* step through linked list of messages, - * scan for any error and free messages */ - struct mdhim_brm_t* brmp = brm; - while (brmp) { - /* check current item for error */ - if (brmp->error) { - LOGERR("MDHIM bulk put error=%d", brmp->error); - rc = (int)UNIFYFS_ERROR_MDHIM; - } - - /* record pointer to current item, - * advance loop pointer to next item in list, - * free resources for current item */ - brm = brmp; - brmp = brmp->next; - mdhim_full_release_msg(brm); - } - } - - if (rc != UNIFYFS_SUCCESS) { - LOGERR("failed to bulk insert file extents"); - } - return rc; -} - -/* delete the listed keys from the file extents */ -int unifyfs_delete_file_extents( - int num_entries, /* number of items in keys list */ - unifyfs_key_t** keys, /* list of keys to be deleted */ - int* key_lens) /* list of byte sizes for keys list items */ -{ - /* assume we'll succeed */ - int rc = UNIFYFS_SUCCESS; - - /* select index for file extents */ - md->primary_index = unifyfs_indexes[IDX_FILE_EXTENTS]; - - /* delete list of key/value pairs */ - struct mdhim_brm_t* brm = mdhimBDelete(md, md->primary_index, - (void**)(keys), key_lens, num_entries); - - /* check for errors and free resources */ - if (!brm) { - rc = (int)UNIFYFS_ERROR_MDHIM; - } else { - /* step through linked list of messages, - * scan for any error and free messages */ - struct mdhim_brm_t* brmp = brm; - while (brmp) { - /* check current item for error */ - if (brmp->error) { - LOGERR("MDHIM bulk delete error=%d", brmp->error); - rc = (int)UNIFYFS_ERROR_MDHIM; - } - - /* record pointer to current item, - * advance loop pointer to next item in list, - * free resources for current item */ - brm = brmp; - brmp = brmp->next; - mdhim_full_release_msg(brm); - } - } - - if (rc != UNIFYFS_SUCCESS) { - LOGERR("failed to bulk delete file extents"); - } - return rc; -} diff --git a/server/src/unifyfs_metadata_mdhim.h b/server/src/unifyfs_metadata_mdhim.h deleted file mode 100644 index e01f6ddca..000000000 --- a/server/src/unifyfs_metadata_mdhim.h +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright (c) 2020, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * - * Copyright 2020, UT-Battelle, LLC. - * - * LLNL-CODE-741539 - * All rights reserved. - * - * This is the license for UnifyFS. - * For details, see https://github.com/LLNL/UnifyFS. - * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. - */ - -/* - * Copyright (c) 2017, Lawrence Livermore National Security, LLC. - * Produced at the Lawrence Livermore National Laboratory. - * Copyright (c) 2017, Florida State University. Contributions from - * the Computer Architecture and Systems Research Laboratory (CASTL) - * at the Department of Computer Science. - * - * Written by: Teng Wang, Adam Moody, Weikuan Yu, Kento Sato, Kathryn Mohror - * LLNL-CODE-728877. All rights reserved. - * - * This file is part of burstfs. - * For details, see https://github.com/llnl/burstfs - * Please read https://github.com/llnl/burstfs/LICENSE for full license text. - */ - -#ifndef UNIFYFS_METADATA_MDHIM_H -#define UNIFYFS_METADATA_MDHIM_H - -#include "unifyfs_configurator.h" -#include "unifyfs_log.h" -#include "unifyfs_meta.h" - -/* number of metadata servers = - * number of unifyfs servers / UNIFYFS_META_SERVER_RATIO */ -#define UNIFYFS_META_SERVER_RATIO 1 - -/* max count of remote read requests (per-server) */ -#define UNIFYFS_MAX_META_PER_SEND (4 * KIB) - -/* max count of metadata slices for a single data extent */ -#define UNIFYFS_MAX_META_SPLIT_COUNT (4 * KIB) - -/* NOTE: The maximum size of an individual read operation is - * (UNIFYFS_MAX_META_SPLIT_COUNT * UNIFYFS_META_DEFAULT_SLICE_SZ) */ - - -/* Key for file attributes */ -typedef int fattr_key_t; - -/** - * Key for a file extent - */ -typedef struct { - /** global file id */ - int gfid; - /** logical file offset */ - size_t offset; -} unifyfs_key_t; - -#define UNIFYFS_KEY_SZ (sizeof(unifyfs_key_t)) -#define UNIFYFS_KEY_FID(keyp) (((unifyfs_key_t*)keyp)->gfid) -#define UNIFYFS_KEY_OFF(keyp) (((unifyfs_key_t*)keyp)->offset) - -typedef struct { - size_t addr; /* data offset in server */ - size_t len; /* length of data at addr */ - int app_id; /* application id in server */ - int rank; /* client id in server */ - int delegator_rank; /* delegator/server rank hosting data */ -} unifyfs_val_t; - -#define UNIFYFS_VAL_SZ (sizeof(unifyfs_val_t)) -#define UNIFYFS_VAL_ADDR(valp) (((unifyfs_val_t*)valp)->addr) -#define UNIFYFS_VAL_LEN(valp) (((unifyfs_val_t*)valp)->len) - -/** - * key-value tuple for a file extent - */ -typedef struct { - /** key */ - unifyfs_key_t key; - /** value */ - unifyfs_val_t val; -} unifyfs_keyval_t; - -int unifyfs_key_compare(unifyfs_key_t* a, unifyfs_key_t* b); -int unifyfs_keyval_compare(const void* a, const void* b); - -/* return number of slice ranges needed to cover range */ -size_t meta_num_slices(size_t offset, size_t length); - -int meta_sanitize(void); -int meta_init_store(unifyfs_cfg_t* cfg); - -void print_fsync_indices(unifyfs_key_t** unifyfs_keys, - unifyfs_val_t** unifyfs_vals, size_t num_entries); - -/** - * Retrieve a File attribute from the KV-Store. - * - * @param [in] gfid - * @param[out] *ptr_attr_val - * @return UNIFYFS_SUCCESS on success - */ -int unifyfs_get_file_attribute(int gfid, - unifyfs_file_attr_t* ptr_attr_val); - -/** - * Delete file attribute from the KV-Store. - * - * @param [in] gfid - * @return UNIFYFS_SUCCESS on success - */ -int unifyfs_delete_file_attribute(int gfid); - -/** - * Store a File attribute to the KV-Store. - * - * @param[in] size_flag - * @param[in] laminate_flag - * @param[in] *ptr_attr_val - * @return UNIFYFS_SUCCESS on success - */ -int unifyfs_set_file_attribute( - int size_flag, - int laminate_flag, - unifyfs_file_attr_t* ptr_attr_val); - -/** - * Store File attributes to the KV-Store. - * - * @param[in] num_entries number of key value pairs to store - * @param[in] keys array storing the keys - * @param[in] key_lens array with the length of the elements in \p keys - * @param[in] vals array with the values - * @param[in] val_lens array with the length of the elements in \p vals - */ -int unifyfs_set_file_attributes(int num_entries, - fattr_key_t** keys, int* key_lens, - unifyfs_file_attr_t** vals, int* val_lens); - -/** - * Retrieve File extents from the KV-Store. - * - * @param[in] num_keys number of keys - * @param[in] keys array of keys to retrieve the values for - * @param[in] key_lens array with the length of the key in \p keys - * @param[out] num_values number of values in the keyval array - * @param[out] keyval array containing the key-value tuples found - * @return UNIFYFS_SUCCESS on success - */ -int unifyfs_get_file_extents(int num_keys, - unifyfs_key_t** keys, int* key_lens, - int* num_values, unifyfs_keyval_t** keyval); - -/** - * Delete File extents from the KV-Store. - * - * @param[in] num_entries number of key value pairs to delete - * @param[in] keys array storing the keys - * @param[in] key_lens array with the length of the elements in \p keys - */ -int unifyfs_delete_file_extents(int num_entries, - unifyfs_key_t** keys, int* key_lens); - -/** - * Store File extents in the KV-Store. - * - * @param [in] num_entries number of key value pairs to store - * @param[in] keys array storing the keys - * @param[in] key_lens array with the length of the elements in \p keys - * @param[in] vals array with the values - * @param[in] val_lens array with the length of the elements in \p vals - * @return UNIFYFS_SUCCESS on success - */ -int unifyfs_set_file_extents(int num_entries, unifyfs_key_t** keys, - int* key_lens, unifyfs_val_t** vals, - int* val_lens); - - - -static inline -unifyfs_key_t** alloc_key_array(int elems) -{ - int size = elems * (sizeof(unifyfs_key_t*) + sizeof(unifyfs_key_t)); - - void* mem_block = calloc(size, sizeof(char)); - - unifyfs_key_t** array_ptr = mem_block; - unifyfs_key_t* key_ptr = (unifyfs_key_t*)(array_ptr + elems); - - for (int i = 0; i < elems; i++) { - array_ptr[i] = &key_ptr[i]; - } - - return (unifyfs_key_t**)mem_block; -} - -static inline -unifyfs_val_t** alloc_value_array(int elems) -{ - int size = elems * (sizeof(unifyfs_val_t*) + sizeof(unifyfs_val_t)); - - void* mem_block = calloc(size, sizeof(char)); - - unifyfs_val_t** array_ptr = mem_block; - unifyfs_val_t* key_ptr = (unifyfs_val_t*)(array_ptr + elems); - - for (int i = 0; i < elems; i++) { - array_ptr[i] = &key_ptr[i]; - } - - return (unifyfs_val_t**)mem_block; -} - -static inline -void free_key_array(unifyfs_key_t** array) -{ - free(array); -} - -static inline -void free_value_array(unifyfs_val_t** array) -{ - free(array); -} - -static inline -void debug_log_key_val(const char* ctx, - unifyfs_key_t* key, - unifyfs_val_t* val) -{ - if ((key != NULL) && (val != NULL)) { - LOGDBG("@%s - key(gfid=%d, offset=%lu), " - "val(del=%d, len=%lu, addr=%lu, app=%d, rank=%d)", - ctx, key->gfid, key->offset, - val->delegator_rank, val->len, val->addr, - val->app_id, val->rank); - } else if (key != NULL) { - LOGDBG("@%s - key(gfid=%d, offset=%lu)", - ctx, key->gfid, key->offset); - } -} - - -#endif // UNIFYFS_METADATA_MDHIM_H diff --git a/server/src/unifyfs_p2p_rpc.c b/server/src/unifyfs_p2p_rpc.c index 846ff16e7..f71d4aad4 100644 --- a/server/src/unifyfs_p2p_rpc.c +++ b/server/src/unifyfs_p2p_rpc.c @@ -28,7 +28,7 @@ int hash_gfid_to_server(int gfid) } /* helper method to initialize peer request rpc handle */ -int get_p2p_request_handle(hg_id_t request_hgid, +int init_p2p_request_handle(hg_id_t request_hgid, int peer_rank, p2p_request* req) { @@ -119,7 +119,7 @@ int invoke_chunk_read_request_rpc(int dst_srvr_rank, /* forward request to file owner */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.chunk_read_request_id; - int rc = get_p2p_request_handle(req_hgid, dst_srvr_rank, &preq); + int rc = init_p2p_request_handle(req_hgid, dst_srvr_rank, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -185,8 +185,8 @@ static void chunk_read_request_rpc(hg_handle_t handle) hg_return_t hret; /* get input params */ - chunk_read_request_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + chunk_read_request_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -263,7 +263,7 @@ int invoke_chunk_read_response_rpc(server_chunk_reads_t* scr) /* forward response to requesting server */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.chunk_read_response_id; - int rc = get_p2p_request_handle(req_hgid, dst_rank, &preq); + int rc = init_p2p_request_handle(req_hgid, dst_rank, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -423,7 +423,7 @@ int unifyfs_invoke_add_extents_rpc(int gfid, /* forward request to file owner */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.extent_add_id; - int rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + int rc = init_p2p_request_handle(req_hgid, owner_rank, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -488,8 +488,8 @@ static void add_extents_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - add_extents_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + add_extents_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -503,7 +503,7 @@ static void add_extents_rpc(hg_handle_t handle) /* allocate memory for extents */ void* extents_buf = pull_margo_bulk_buffer(handle, in->extents, - bulk_sz, NULL); + bulk_sz, NULL); if (NULL == extents_buf) { LOGERR("failed to get bulk extents"); ret = UNIFYFS_ERROR_MARGO; @@ -607,7 +607,7 @@ int unifyfs_invoke_find_extents_rpc(int gfid, p2p_request preq; margo_instance_id mid = unifyfsd_rpc_context->svr_mid; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.extent_lookup_id; - int rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + int rc = init_p2p_request_handle(req_hgid, owner_rank, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -688,8 +688,8 @@ static void find_extents_rpc(hg_handle_t handle) int32_t ret; /* get input params */ - find_extents_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + find_extents_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -811,7 +811,7 @@ int unifyfs_invoke_metaget_rpc(int gfid, /* forward request to file owner */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.metaget_id; - rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + rc = init_p2p_request_handle(req_hgid, owner_rank, &preq); if (rc != UNIFYFS_SUCCESS) { ret = rc; goto clear_pending_metaget; @@ -877,8 +877,8 @@ static void metaget_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - metaget_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + metaget_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -978,7 +978,7 @@ int unifyfs_invoke_filesize_rpc(int gfid, /* forward request to file owner */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.metaget_id; - rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + rc = init_p2p_request_handle(req_hgid, owner_rank, &preq); if (rc != UNIFYFS_SUCCESS) { ret = rc; goto clear_pending_fileattr; @@ -1041,8 +1041,8 @@ static void filesize_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - filesize_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + filesize_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -1115,7 +1115,7 @@ int unifyfs_invoke_metaset_rpc(int gfid, /* forward request to file owner */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.metaset_id; - int rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + int rc = init_p2p_request_handle(req_hgid, owner_rank, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -1162,8 +1162,8 @@ static void metaset_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - metaset_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + metaset_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -1225,7 +1225,7 @@ int unifyfs_invoke_laminate_rpc(int gfid) /* forward request to file owner */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.laminate_id; - int rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + int rc = init_p2p_request_handle(req_hgid, owner_rank, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -1270,8 +1270,8 @@ static void laminate_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - laminate_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + laminate_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -1337,7 +1337,7 @@ int unifyfs_invoke_transfer_rpc(int client_app, /* forward request to file owner */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.transfer_id; - int rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + int rc = init_p2p_request_handle(req_hgid, owner_rank, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -1389,8 +1389,8 @@ static void transfer_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - transfer_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + transfer_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -1451,7 +1451,7 @@ int unifyfs_invoke_truncate_rpc(int gfid, /* forward request to file owner */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.truncate_id; - int rc = get_p2p_request_handle(req_hgid, owner_rank, &preq); + int rc = init_p2p_request_handle(req_hgid, owner_rank, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -1498,8 +1498,8 @@ static void truncate_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - truncate_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + truncate_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { @@ -1552,7 +1552,7 @@ int unifyfs_invoke_server_pid_rpc(void) /* forward pid to server rank 0 */ p2p_request preq; hg_id_t req_hgid = unifyfsd_rpc_context->rpcs.server_pid_id; - int rc = get_p2p_request_handle(req_hgid, 0, &preq); + int rc = init_p2p_request_handle(req_hgid, 0, &preq); if (rc != UNIFYFS_SUCCESS) { return rc; } @@ -1598,8 +1598,8 @@ static void server_pid_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - server_pid_in_t* in = malloc(sizeof(*in)); - server_rpc_req_t* req = malloc(sizeof(*req)); + server_pid_in_t* in = calloc(1, sizeof(*in)); + server_rpc_req_t* req = calloc(1, sizeof(*req)); if ((NULL == in) || (NULL == req)) { ret = ENOMEM; } else { diff --git a/server/src/unifyfs_p2p_rpc.h b/server/src/unifyfs_p2p_rpc.h index 50e6a41c0..65a9055e9 100644 --- a/server/src/unifyfs_p2p_rpc.h +++ b/server/src/unifyfs_p2p_rpc.h @@ -34,7 +34,7 @@ typedef struct { } p2p_request; /* helper method to initialize peer request rpc handle */ -int get_p2p_request_handle(hg_id_t request_hgid, +int init_p2p_request_handle(hg_id_t request_hgid, int peer_rank, p2p_request* req); diff --git a/server/src/unifyfs_request_manager.c b/server/src/unifyfs_request_manager.c index 3f1cecf6d..704e6aa57 100644 --- a/server/src/unifyfs_request_manager.c +++ b/server/src/unifyfs_request_manager.c @@ -32,7 +32,6 @@ // server components #include "unifyfs_inode_tree.h" -#include "unifyfs_metadata_mdhim.h" #include "unifyfs_request_manager.h" #include "unifyfs_service_manager.h" @@ -288,127 +287,6 @@ static void signal_new_responses(reqmgr_thrd_t* reqmgr) } } -/* issue remote chunk read requests for extent chunks - * listed within keyvals */ -int rm_create_chunk_requests(reqmgr_thrd_t* thrd_ctrl, - server_read_req_t* rdreq, - int num_vals, - unifyfs_keyval_t* keyvals) -{ - LOGDBG("creating chunk requests for rdreq %d", rdreq->req_ndx); - - /* allocate read request structures */ - chunk_read_req_t* all_chunk_reads = (chunk_read_req_t*) - calloc((size_t)num_vals, sizeof(chunk_read_req_t)); - if (NULL == all_chunk_reads) { - LOGERR("failed to allocate chunk-reads array"); - return ENOMEM; - } - rdreq->chunks = all_chunk_reads; - - /* iterate over write index values and create read requests - * for each one, also count up number of servers that we'll - * forward read requests to */ - int i; - int prev_del = -1; - int num_del = 0; - for (i = 0; i < num_vals; i++) { - /* get target server for this request */ - int curr_del = keyvals[i].val.delegator_rank; - - /* if target server is different from last target, - * increment our server count */ - if ((prev_del == -1) || (curr_del != prev_del)) { - num_del++; - } - prev_del = curr_del; - - /* get pointer to next read request structure */ - debug_log_key_val(__func__, &keyvals[i].key, &keyvals[i].val); - chunk_read_req_t* chk = all_chunk_reads + i; - - /* fill in chunk read request */ - chk->gfid = keyvals[i].key.gfid; - chk->nbytes = keyvals[i].val.len; - chk->offset = keyvals[i].key.offset; - chk->log_offset = keyvals[i].val.addr; - chk->log_app_id = keyvals[i].val.app_id; - chk->log_client_id = keyvals[i].val.rank; - } - - /* allocate per-delgator chunk-reads */ - int num_dels = num_del; - rdreq->num_server_reads = num_dels; - rdreq->remote_reads = (server_chunk_reads_t*) - calloc((size_t)num_dels, sizeof(server_chunk_reads_t)); - if (NULL == rdreq->remote_reads) { - LOGERR("failed to allocate remote-reads array"); - return ENOMEM; - } - - /* get pointer to start of chunk read request array */ - server_chunk_reads_t* reads = rdreq->remote_reads; - - /* iterate over write index values again and now create - * per-server chunk-reads info, for each server - * that we'll request data from, this totals up the number - * of read requests and total read data size from that - * server */ - prev_del = -1; - size_t del_data_sz = 0; - for (i = 0; i < num_vals; i++) { - /* get target server for this request */ - int curr_del = keyvals[i].val.delegator_rank; - - /* if target server is different from last target, - * close out the total number of bytes for the last - * server, note this assumes our write index values are - * sorted by server rank */ - if ((prev_del != -1) && (curr_del != prev_del)) { - /* record total data for previous server */ - reads->total_sz = del_data_sz; - - /* advance to read request for next server */ - reads += 1; - - /* reset our running tally of bytes to 0 */ - del_data_sz = 0; - } - prev_del = curr_del; - - /* update total read data size for current server */ - del_data_sz += keyvals[i].val.len; - - /* if this is the first read request for this server, - * initialize fields on the per-server read request - * structure */ - if (0 == reads->num_chunks) { - reads->rank = curr_del; - reads->rdreq_id = rdreq->req_ndx; - reads->reqs = all_chunk_reads + i; - reads->resp = NULL; - } - - /* increment number of read requests we're sending - * to this server */ - reads->num_chunks++; - } - - /* record total data size for final server (if any), - * would have missed doing this in the above loop */ - if (num_vals > 0) { - reads->total_sz = del_data_sz; - } - - /* mark request as ready to be started */ - rdreq->status = READREQ_READY; - - /* wake up the request manager thread for the requesting client */ - signal_new_requests(thrd_ctrl); - - return UNIFYFS_SUCCESS; -} - int rm_submit_read_request(server_read_req_t* req) { int ret = UNIFYFS_SUCCESS; @@ -1154,21 +1032,21 @@ static int process_fsync_rpc(reqmgr_thrd_t* reqmgr, .app_id = reqmgr->app_id, .client_id = reqmgr->client_id, }; - ret = unifyfs_fops_fsync(&ctx, gfid); + ret = unifyfs_fops_fsync(&ctx, gfid, req); if (ret != UNIFYFS_SUCCESS) { LOGERR("unifyfs_fops_fsync() failed"); - } - /* send rpc response */ - unifyfs_fsync_out_t out; - out.ret = (int32_t) ret; - hg_return_t hret = margo_respond(req->handle, &out); - if (hret != HG_SUCCESS) { - LOGERR("margo_respond() failed"); - } + /* send rpc response */ + unifyfs_fsync_out_t out; + out.ret = (int32_t) ret; + hg_return_t hret = margo_respond(req->handle, &out); + if (hret != HG_SUCCESS) { + LOGERR("margo_respond() failed"); + } - /* cleanup req */ - margo_destroy(req->handle); + /* cleanup req */ + margo_destroy(req->handle); + } return ret; } @@ -1666,6 +1544,9 @@ static int rm_process_client_requests(reqmgr_thrd_t* reqmgr) rret = process_read_rpc(reqmgr, req); break; case UNIFYFS_CLIENT_RPC_SYNC: + /* we remove this req since it will be finished by the svcmgr and + * we don't want it deleted below as part of arraylist_free() */ + req = arraylist_remove(client_reqs, i); rret = process_fsync_rpc(reqmgr, req); break; case UNIFYFS_CLIENT_RPC_TRANSFER: diff --git a/server/src/unifyfs_request_manager.h b/server/src/unifyfs_request_manager.h index de8009984..e3341b44c 100644 --- a/server/src/unifyfs_request_manager.h +++ b/server/src/unifyfs_request_manager.h @@ -33,7 +33,6 @@ #include "unifyfs_global.h" #include "unifyfs_inode.h" #include "unifyfs_fops.h" -#include "unifyfs_metadata_mdhim.h" typedef struct { client_callback_e req_type; @@ -42,14 +41,6 @@ typedef struct { int gfid; } client_callback_req; -typedef struct { - client_rpc_e req_type; - hg_handle_t handle; - void* input; - void* bulk_buf; - size_t bulk_sz; -} client_rpc_req_t; - typedef struct { readreq_status_e status; /* aggregate request status */ int in_use; /* currently using this req? */ @@ -118,13 +109,6 @@ server_read_req_t* rm_reserve_read_req(reqmgr_thrd_t* thrd_ctrl); int rm_release_read_req(reqmgr_thrd_t* thrd_ctrl, server_read_req_t* rdreq); -/* issue remote chunk read requests for extent chunks - * listed within keyvals */ -int rm_create_chunk_requests(reqmgr_thrd_t* thrd_ctrl, - server_read_req_t* rdreq, - int num_vals, - unifyfs_keyval_t* keyvals); - /* create Request Manager thread for application client */ reqmgr_thrd_t* unifyfs_rm_thrd_create(int app_id, int client_id); diff --git a/server/src/unifyfs_server.c b/server/src/unifyfs_server.c index a3aad9d86..cff6719b5 100644 --- a/server/src/unifyfs_server.c +++ b/server/src/unifyfs_server.c @@ -37,7 +37,6 @@ // server components #include "unifyfs_global.h" -#include "unifyfs_metadata_mdhim.h" #include "unifyfs_request_manager.h" #include "unifyfs_service_manager.h" #include "unifyfs_inode_tree.h" @@ -215,18 +214,7 @@ static int get_server_rank_and_size(const unifyfs_cfg_t* cfg) { int rc; -#if defined(UNIFYFSD_USE_MPI) - /* use rank and size of MPI communicator */ - rc = MPI_Comm_rank(MPI_COMM_WORLD, &glb_pmi_rank); - if (rc != MPI_SUCCESS) { - exit(1); - } - - rc = MPI_Comm_size(MPI_COMM_WORLD, &glb_pmi_size); - if (rc != MPI_SUCCESS) { - exit(1); - } -#elif !defined(USE_PMIX) && !defined(USE_PMI2) +#if !defined(USE_PMIX) && !defined(USE_PMI2) /* if not using PMIX or PMI2, * initialize rank/size to assume a singleton job */ glb_pmi_rank = 0; @@ -366,15 +354,8 @@ int main(int argc, char* argv[]) // print config unifyfs_config_print(&server_cfg, unifyfs_log_stream); - // initialize MPI and PMI if we're using them -#if defined(UNIFYFSD_USE_MPI) - int provided; - rc = MPI_Init_thread(NULL, NULL, MPI_THREAD_MULTIPLE, &provided); - if (rc != MPI_SUCCESS) { - LOGERR("failed to initialize MPI"); - exit(1); - } -#elif defined(USE_PMIX) + // initialize PMI if we're using it +#if defined(USE_PMIX) rc = unifyfs_pmix_init(); if (rc != (int)UNIFYFS_SUCCESS) { LOGERR("failed to initialize PMIX"); @@ -528,166 +509,6 @@ int main(int argc, char* argv[]) return unifyfs_exit(); } -#if defined(UNIFYFSD_USE_MPI) -#if defined(UNIFYFS_MULTIPLE_DELEGATORS) -/* count the number of delegators per node, and - * the rank of each delegator, the results are stored - * in local_rank_cnt and local_rank_lst. - * @param numTasks: number of processes in the communicator - * @return success/error code */ -static int CountTasksPerNode(int rank, int numTasks) -{ - char localhost[UNIFYFS_MAX_HOSTNAME]; - char hostname[UNIFYFS_MAX_HOSTNAME]; - int resultsLen = UNIFYFS_MAX_HOSTNAME; - - MPI_Status status; - int i, j, rc; - - if (numTasks < 0) { - return -1; - } - - rc = MPI_Get_processor_name(localhost, &resultsLen); - if (rc != 0) { - return -1; - } - - if (rank == 0) { - /* a container of (rank, host) mappings */ - name_rank_pair_t* host_set = - (name_rank_pair_t*)calloc(numTasks, sizeof(name_rank_pair_t)); - /* MPI_Recv all hostnames, and compare to local hostname */ - for (i = 1; i < numTasks; i++) { - rc = MPI_Recv(hostname, UNIFYFS_MAX_HOSTNAME, - MPI_CHAR, MPI_ANY_SOURCE, - MPI_ANY_TAG, - MPI_COMM_WORLD, &status); - if (rc != 0) { - return -1; - } - strcpy(host_set[i].hostname, hostname); - host_set[i].rank = status.MPI_SOURCE; - } - strcpy(host_set[0].hostname, localhost); - host_set[0].rank = 0; - - /* sort by hostname */ - qsort(host_set, numTasks, sizeof(name_rank_pair_t), - compare_name_rank_pair); - - /* rank_cnt: records the number of processes on each host - * rank_set: the list of ranks for each host */ - int** rank_set = (int**)calloc(numTasks, sizeof(int*)); - int* rank_cnt = (int*)calloc(numTasks, sizeof(int)); - - int cursor = 0; - int set_counter = 0; - for (i = 1; i < numTasks; i++) { - if (strcmp(host_set[i].hostname, - host_set[i - 1].hostname) != 0) { - // found a different host, so switch to a new set - int hiter, riter = 0; - rank_set[set_counter] = - (int*)calloc((i - cursor), sizeof(int)); - rank_cnt[set_counter] = i - cursor; - for (hiter = cursor; hiter < i; hiter++, riter++) { - rank_set[set_counter][riter] = host_set[hiter].rank; - } - - set_counter++; - cursor = i; - } - } - - /* fill rank_cnt and rank_set entry for the last host */ - - rank_set[set_counter] = - (int*)calloc((i - cursor), sizeof(int)); - rank_cnt[set_counter] = numTasks - cursor; - j = 0; - for (i = cursor; i < numTasks; i++, j++) { - rank_set[set_counter][j] = host_set[i].rank; - } - set_counter++; - - /* broadcast rank_set information */ - int root_set_no = -1; - for (i = 0; i < set_counter; i++) { - /* send rank set to each of its ranks */ - for (j = 0; j < rank_cnt[i]; j++) { - if (rank_set[i][j] != 0) { - rc = MPI_Send(&rank_cnt[i], 1, MPI_INT, - rank_set[i][j], 0, MPI_COMM_WORLD); - if (rc != 0) { - return -1; - } - rc = MPI_Send(rank_set[i], rank_cnt[i], MPI_INT, - rank_set[i][j], 0, MPI_COMM_WORLD); - if (rc != 0) { - return -1; - } - } else { - root_set_no = i; - local_rank_cnt = rank_cnt[i]; - local_rank_lst = (int*)calloc(rank_cnt[i], sizeof(int)); - memcpy(local_rank_lst, rank_set[i], - (local_rank_cnt * sizeof(int))) - } - } - } - - for (i = 0; i < set_counter; i++) { - free(rank_set[i]); - } - free(rank_cnt); - free(host_set); - free(rank_set); - } else { /* non-root rank */ - /* MPI_Send hostname to root */ - rc = MPI_Send(localhost, UNIFYFS_MAX_HOSTNAME, MPI_CHAR, - 0, 0, MPI_COMM_WORLD); - if (rc != 0) { - return -1; - } - /* receive the local rank set count */ - rc = MPI_Recv(&local_rank_cnt, 1, MPI_INT, 0, - 0, MPI_COMM_WORLD, &status); - if (rc != 0) { - return -1; - } - /* receive the the local rank set */ - local_rank_lst = (int*)calloc(local_rank_cnt, sizeof(int)); - rc = MPI_Recv(local_rank_lst, local_rank_cnt, MPI_INT, 0, - 0, MPI_COMM_WORLD, &status); - if (rc != 0) { - free(local_rank_lst); - return -1; - } - } - - /* sort by rank */ - qsort(local_rank_lst, local_rank_cnt, sizeof(int), compare_int); - - return 0; -} - -static int find_rank_idx(int my_rank) -{ - int i; - assert(local_rank_lst != NULL); - for (i = 0; i < local_rank_cnt; i++) { - if (local_rank_lst[i] == my_rank) { - return i; - } - } - return -1; -} - -#endif // UNIFYFS_MULTIPLE_DELEGATORS -#endif // UNIFYFSD_USE_MPI - - static int unifyfs_exit(void) { int ret = UNIFYFS_SUCCESS; @@ -744,17 +565,6 @@ static int unifyfs_exit(void) LOGDBG("stopping rpc service"); margo_server_rpc_finalize(); -#if defined(USE_MDHIM) - /* shutdown the metadata service*/ - LOGDBG("stopping metadata service"); - meta_sanitize(); -#endif - -#if defined(UNIFYFSD_USE_MPI) - LOGDBG("finalizing MPI"); - MPI_Finalize(); -#endif - /* Finalize the config variables */ LOGDBG("Finalizing config variables"); ret = unifyfs_config_fini(&server_cfg); diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index dba4621c3..f9ad6a090 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -1445,6 +1445,103 @@ static int process_metaget_bcast_rpc(server_rpc_req_t* req) return invoke_bcast_progress_rpc(req->coll); } +static int process_pending_sync(server_rpc_req_t* req) +{ + int ret = UNIFYFS_SUCCESS; + + /* get target file */ + int* pending_gfid = req->input; + int gfid = *pending_gfid; + free(pending_gfid); + + int owner_rank = hash_gfid_to_server(gfid); + int is_owner = (owner_rank == glb_pmi_rank); + + bool has_pending = unifyfs_inode_has_pending_extents(gfid); + if (has_pending) { + usleep(50000); /* sleep 50 ms to catch more pending extents */ + } + + arraylist_t* pending_list = NULL; + int rc = unifyfs_inode_get_pending_extents(gfid, &pending_list); + if (NULL != pending_list) { + LOGDBG("processing pending sync for gfid=%d", gfid); + + /* iterate through pending list to count total number of extents + * we will add locally (and possibly send to owner) */ + unsigned int total_extents = 0; + int n_items = arraylist_size(pending_list); + for (int i = 0; i < n_items; i++) { + void* item = arraylist_get(pending_list, i); + if (NULL != item) { + pending_extents_item* pei = (pending_extents_item*) item; + total_extents += pei->num_extents; + } + } + + /* allocate array for all the extents and then copy the sub-arrays + * from the pending list */ + extent_metadata* combined_extents = calloc((size_t)total_extents, + sizeof(extent_metadata)); + if (NULL == combined_extents) { + LOGERR("failed to allocate for combined extents"); + ret = ENOMEM; + } else { + unsigned int n_copied = 0; + for (int i = 0; i < n_items; i++) { + void* item = arraylist_get(pending_list, i); + if (NULL != item) { + pending_extents_item* pei = (pending_extents_item*) item; + memcpy(combined_extents + n_copied, pei->extents, + pei->num_extents * sizeof(extent_metadata)); + n_copied += pei->num_extents; + free(pei->extents); + } + } + + /* add the combined list to local inode */ + ret = unifyfs_inode_add_extents(gfid, total_extents, + combined_extents); + + if ((ret == UNIFYFS_SUCCESS) && !is_owner) { + /* send the combined list to the owner */ + ret = unifyfs_invoke_add_extents_rpc(gfid, total_extents, + combined_extents); + } + } + + /* iterate through pending list to send responses to client reqs */ + for (int i = 0; i < n_items; i++) { + void* item = arraylist_get(pending_list, i); + if (NULL != item) { + pending_extents_item* pei = (pending_extents_item*) item; + client_rpc_req_t* creq = pei->client_req; + + /* send rpc response to requesting client */ + unifyfs_fsync_out_t out; + out.ret = (int32_t) ret; + hg_return_t hret = margo_respond(creq->handle, &out); + if (hret != HG_SUCCESS) { + LOGERR("margo_respond() failed"); + } + + /* cleanup req */ + margo_destroy(creq->handle); + free(creq); + } + } + + /* this frees the list and each of the items */ + arraylist_free(pending_list); + } else if (rc != UNIFYFS_SUCCESS) { + ret = rc; + LOGERR("failed to get pending extents list for gfid=%d- rc=%d", + gfid, ret); + } + + return ret; +} + static int process_service_requests(void) { /* assume we'll succeed */ @@ -1517,6 +1614,9 @@ static int process_service_requests(void) case UNIFYFS_SERVER_BCAST_RPC_LAMINATE: rret = process_laminate_bcast_rpc(req); break; + case UNIFYFS_SERVER_BCAST_RPC_METAGET: + rret = process_metaget_bcast_rpc(req); + break; case UNIFYFS_SERVER_BCAST_RPC_TRANSFER: rret = process_transfer_bcast_rpc(req); break; @@ -1526,8 +1626,8 @@ static int process_service_requests(void) case UNIFYFS_SERVER_BCAST_RPC_UNLINK: rret = process_unlink_bcast_rpc(req); break; - case UNIFYFS_SERVER_BCAST_RPC_METAGET: - rret = process_metaget_bcast_rpc(req); + case UNIFYFS_SERVER_PENDING_SYNC: + rret = process_pending_sync(req); break; default: LOGERR("unsupported server rpc request type %d", req->req_type); diff --git a/t/Makefile.am b/t/Makefile.am index 865072fde..902b682b5 100644 --- a/t/Makefile.am +++ b/t/Makefile.am @@ -185,9 +185,9 @@ unifyfs_unmount_t_LDADD = $(test_wrap_ldadd) unifyfs_unmount_t_LDFLAGS = $(test_wrap_ldflags) unifyfs_unmount_t_SOURCES = unifyfs_unmount.c -common_seg_tree_test_t_CPPFLAGS = $(test_cppflags) +common_seg_tree_test_t_CPPFLAGS = $(test_cppflags) $(MARGO_CFLAGS) common_seg_tree_test_t_LDADD = $(test_common_ldadd) -common_seg_tree_test_t_LDFLAGS = $(test_common_ldflags) +common_seg_tree_test_t_LDFLAGS = $(test_common_ldflags) $(MARGO_LIBS) common_seg_tree_test_t_SOURCES = \ common/seg_tree_test.c \ ../common/src/seg_tree.c \ From 470790b848fc4333d7814306530105d7f311b211 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Thu, 31 Aug 2023 13:42:18 -0700 Subject: [PATCH 32/46] Handle the case where h5cc -show returns multiple lines Signed-off-by: Chen Wang --- m4/ax_lib_hdf5.m4 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/m4/ax_lib_hdf5.m4 b/m4/ax_lib_hdf5.m4 index 5a50442af..d09f70660 100644 --- a/m4/ax_lib_hdf5.m4 +++ b/m4/ax_lib_hdf5.m4 @@ -188,9 +188,9 @@ HDF5 support is being disabled (equivalent to --with-hdf5=no). HDF5_SHOW=$(eval $H5CC -show) dnl Get the actual compiler used - HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]1}') + HDF5_CC=$(eval $H5CC -show | $AWK 'NR==1{print $[]1}') if test "$HDF5_CC" = "ccache"; then - HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]2}') + HDF5_CC=$(eval $H5CC -show | $AWK 'NR==1{print $[]2}') fi dnl h5cc provides both AM_ and non-AM_ options From 67c8ba91dea087017836a6f850f43335d8cf9b6e Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Thu, 31 Aug 2023 14:55:55 -0700 Subject: [PATCH 33/46] Fortram mpi wrappers have wrong parameter types Signed-off-by: Chen Wang --- client/src/pmpi_wrappers.c | 4 ++-- client/src/pmpi_wrappers.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/pmpi_wrappers.c b/client/src/pmpi_wrappers.c index 0d8a17b28..eb1ceec2a 100644 --- a/client/src/pmpi_wrappers.c +++ b/client/src/pmpi_wrappers.c @@ -74,11 +74,11 @@ int MPI_Init_thread(int* argc, char*** argv, int required, int* provided) return unifyfs_mpi_init(argc, argv, required, provided); } -void mpi_init_thread_(int required, int* provided, MPI_Fint* ierr) +void mpi_init_thread_(MPI_Fint* required, MPI_Fint* provided, MPI_Fint* ierr) { int argc = 0; char** argv = NULL; - int rc = unifyfs_mpi_init(&argc, &argv, required, provided); + int rc = unifyfs_mpi_init(&argc, &argv, *((int*)required), provided); if (NULL != ierr) { *ierr = (MPI_Fint)rc; diff --git a/client/src/pmpi_wrappers.h b/client/src/pmpi_wrappers.h index 1a94cad29..52f11c4d3 100644 --- a/client/src/pmpi_wrappers.h +++ b/client/src/pmpi_wrappers.h @@ -22,7 +22,7 @@ int unifyfs_mpi_init(int* argc, char*** argv, int required, int* provided); int MPI_Init(int* argc, char*** argv); int MPI_Init_thread(int* argc, char*** argv, int required, int* provided); void mpi_init_(MPI_Fint* ierr); -void mpi_init_thread_(int required, int* provided, MPI_Fint* ierr); +void mpi_init_thread_(MPI_Fint* required, MPI_Fint* provided, MPI_Fint* ierr); /* MPI_Finalize PMPI wrapper */ int unifyfs_mpi_finalize(void); From 6b8f72677b3961b64c635dd2c99d39e1018bca11 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Tue, 8 Aug 2023 13:07:37 -0400 Subject: [PATCH 34/46] Use newer MD5 API function Newer versions of the OpenSSL library have deprecated the MD5() API function in favor of the EVP_* functions. This commit replaces MD5() with EVP_Digest(). Note: The new function generates the same hash values as the old function. --- common/src/unifyfs_meta.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/common/src/unifyfs_meta.c b/common/src/unifyfs_meta.c index 10a3bd735..f3bfbec51 100644 --- a/common/src/unifyfs_meta.c +++ b/common/src/unifyfs_meta.c @@ -12,9 +12,10 @@ * Please read https://github.com/LLNL/UnifyFS/LICENSE for full license text. */ +#include #include +#include #include -#include #include "unifyfs_meta.h" @@ -39,9 +40,13 @@ uint64_t compute_path_md5(const char* path) { unsigned long len; unsigned char digested[16] = {0}; + unsigned int digestSize; + /* digestSize is set by EVP_Digest(). For MD5 digests, it should always + * be 16. */ len = strlen(path); - MD5((const unsigned char*) path, len, digested); + EVP_Digest(path, len, digested, &digestSize, EVP_md5(), NULL); + assert(digestSize == 16); /* construct uint64_t hash from first 8 digest bytes */ uint64_t* digest_value = (uint64_t*) digested; From c5e7b6f239057eb861940459acd6d69f6f1f7fb3 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Fri, 11 Aug 2023 15:57:35 -0400 Subject: [PATCH 35/46] Add check for EVP_Digest() to configure script Add a check in the configure script to make sure the OpenSSL library does have the EVP_Digest() function that we now need. --- m4/openssl.m4 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/m4/openssl.m4 b/m4/openssl.m4 index c40ac5cd2..d3bc20296 100644 --- a/m4/openssl.m4 +++ b/m4/openssl.m4 @@ -13,6 +13,20 @@ AC_DEFUN([UNIFYFS_AC_OPENSSL], [ couldn't find a suitable openssl-devel ]))]) + + + + AC_CHECK_LIB([crypto], [EVP_Digest], + [ + AM_CONDITIONAL([HAVE_OPENSSL_EVP], [true]) + ], + [ + AC_MSG_ERROR([couldn't find a sufficiently new OpenSSL installation]) + ], + [] + ) + + # restore flags CFLAGS=$OPENSSL_OLD_CFLAGS CXXFLAGS=$OPENSSL_OLD_CXXFLAGS From 30922b458ca56dbe0475dd9a7a9e64b2667be78b Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Fri, 1 Sep 2023 15:02:21 -0400 Subject: [PATCH 36/46] Use newer MD5 API functions Newer versions of the OpenSSL library have deprecated the MD5 API functions in favor of the EVP_* functions. This commit is essentially the same as c9516ace, but for the unifyfs-stage util. --- .../src/unifyfs-stage-transfer.c | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/util/unifyfs-stage/src/unifyfs-stage-transfer.c b/util/unifyfs-stage/src/unifyfs-stage-transfer.c index 7c3914a16..d9dda46f0 100644 --- a/util/unifyfs-stage/src/unifyfs-stage-transfer.c +++ b/util/unifyfs-stage/src/unifyfs-stage-transfer.c @@ -25,7 +25,8 @@ #include #include -#include +#include // still needed for the MD5_DIGEST_LENGTH define +#include #include "unifyfs-stage.h" @@ -163,8 +164,9 @@ static int md5_checksum(unifyfs_stage* ctx, unifyfs_rc urc; size_t len = 0; off_t file_offset; - MD5_CTX md5; + EVP_MD_CTX* md5; unsigned char data[UNIFYFS_STAGE_MD5_BLOCKSIZE]; + unsigned int digest_len = UNIFYFS_STAGE_MD5_BLOCKSIZE; if (is_unify_file) { fd = -1; @@ -186,10 +188,12 @@ static int md5_checksum(unifyfs_stage* ctx, } } - /* NOTE: MD5_xxxx() returns 1 for success */ - md5_rc = MD5_Init(&md5); + /* NOTE: EVP_DigestInit_ex() returns 1 for success */ + md5 = EVP_MD_CTX_create(); + md5_rc = EVP_DigestInit_ex(md5, EVP_md5(), NULL); if (md5_rc != 1) { - fprintf(stderr, "UNIFYFS-STAGE ERROR: failed to create MD5 context\n"); + fprintf(stderr, + "UNIFYFS-STAGE ERROR: failed to initialize MD5 context\n"); ret = EIO; } else { file_offset = 0; @@ -208,7 +212,7 @@ static int md5_checksum(unifyfs_stage* ctx, break; } else if (len) { file_offset += (off_t) len; - md5_rc = MD5_Update(&md5, data, len); + md5_rc = EVP_DigestUpdate(md5, data, len); if (md5_rc != 1) { fprintf(stderr, "UNIFYFS-STAGE ERROR: " "MD5 checksum update failed\n"); @@ -218,11 +222,13 @@ static int md5_checksum(unifyfs_stage* ctx, } } while (len != 0); - md5_rc = MD5_Final(digest, &md5); + md5_rc = EVP_DigestFinal_ex(md5, data, &digest_len); if (md5_rc != 1) { fprintf(stderr, "UNIFYFS-STAGE ERROR: failed to finalize MD5\n"); ret = EIO; } + + EVP_MD_CTX_destroy(md5); } if (-1 != fd) { From 7857b7f6f84587a6db3f8f1a5534a1f584826c34 Mon Sep 17 00:00:00 2001 From: CamStan Date: Thu, 14 Sep 2023 13:34:02 -0700 Subject: [PATCH 37/46] Docs: Update to use yaml file Read the Docs has moved to a yaml file format that is needed to continue building our docs in the future. This adds that file. This enables fail_on_warning to check for rst syntax errors when building. Builds for pull requests has also been enabled to add a status check to open pull requests. PR builds will be skipped if there are no changes to the docs. These features can easily be disabled if they don't work as desired. --- .readthedocs.yaml | 35 +++++++++++++++++++++++++++++++++++ docs/build.rst | 1 + docs/wrappers.rst | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 000000000..32ddc418b --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,35 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +formats: + - pdf + - epub + +# Set the version of Python and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + jobs: + post_checkout: + # Cancel building pull requests when there aren't changed in the docs directory or YAML file. + - | + if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/dev -- docs/ .readthedocs.yaml; + then + exit 183; + fi + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/conf.py + fail_on_warning: true + +# We recommend specifying your dependencies to enable reproducible builds: +# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +# python: +# install: +# - requirements: docs/requirements.txt diff --git a/docs/build.rst b/docs/build.rst index c269c02c8..4e2f9d515 100644 --- a/docs/build.rst +++ b/docs/build.rst @@ -223,6 +223,7 @@ after ``./autogen.sh`` has been run. ---------- .. _configure-options-label: + ----------------- Configure Options ----------------- diff --git a/docs/wrappers.rst b/docs/wrappers.rst index a06695791..e5598ee5a 100644 --- a/docs/wrappers.rst +++ b/docs/wrappers.rst @@ -100,7 +100,7 @@ unifyfs_list.txt The unifyfs_list.txt_ file specifies the set of wrappers in UnifyFS. Most but not all such wrappers are supported. The command to build unifyfs list: -.. code-block:: +.. code-block:: Bash grep UNIFYFS_WRAP ../src/\*.c > unifyfs_list.txt From 9dcb590c3f8ac2b841614becf9b6d6e6a7d9e50c Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Tue, 19 Sep 2023 13:16:36 -0700 Subject: [PATCH 38/46] Add resource manager support for flux Signed-off-by: Chen Wang --- common/src/rm_enumerator.h | 1 + util/unifyfs/src/unifyfs-rm.c | 209 ++++++++++++++++++++++++++++++++++ 2 files changed, 210 insertions(+) diff --git a/common/src/rm_enumerator.h b/common/src/rm_enumerator.h index f8bfddf0b..aa5b781dd 100644 --- a/common/src/rm_enumerator.h +++ b/common/src/rm_enumerator.h @@ -33,6 +33,7 @@ ENUMITEM(SLURM, "SchedMD SLURM") \ ENUMITEM(LSF, "IBM Spectrum LSF") \ ENUMITEM(LSF_CSM, "IBM Spectrum LSF with Cluster System Management") \ + ENUMITEM(FLUX, "Flux") \ #ifdef __cplusplus extern "C" { diff --git a/util/unifyfs/src/unifyfs-rm.c b/util/unifyfs/src/unifyfs-rm.c index f6d347e81..f11bf7ffa 100644 --- a/util/unifyfs/src/unifyfs-rm.c +++ b/util/unifyfs/src/unifyfs-rm.c @@ -617,6 +617,102 @@ static int slurm_read_resource(unifyfs_resource_t* resource) return ret; } +/** + * + * @brief Get list of nodes using Flux resource + * + * @param resource The job resource record to be filled + * + * @return 0 on success, negative errno otherwise + */ +static int flux_read_resource(unifyfs_resource_t* resource) +{ + size_t n_nodes = 0; + char num_nodes_str[10] = {0}; + char nodelist_str[1024] = {0}; + char* ret = NULL; + FILE* pipe_fp = NULL; + char** nodes = NULL; + int node_idx = 0; + + // get num nodes using flux resource command + pipe_fp = popen("flux resource list --states=free -no {nnodes}", "r"); + ret = fgets(num_nodes_str, sizeof(num_nodes_str), pipe_fp); + if (ret == NULL) { + pclose(pipe_fp); + return -EINVAL; + } + n_nodes = (size_t) strtoul(num_nodes_str, NULL, sizeof(num_nodes_str)); + pclose(pipe_fp); + + nodes = calloc(sizeof(char*), n_nodes); + if (nodes == NULL) { + return -ENOMEM; + } + + // get node list using flux resource command + // the returned list is in a condensed format + // e.g., tioga[18-19,21,32] + // TODO: is it safe to assume flux resource only + // returns a single line? + pipe_fp = popen("flux resource list --states=free -no {nodelist}", "r"); + ret = fgets(nodelist_str, sizeof(nodelist_str), pipe_fp); + if (ret == NULL) { + pclose(pipe_fp); + return -EINVAL; + } + pclose(pipe_fp); + + // remove the trailing ']' + nodelist_str[strlen(nodelist_str)-1] = 0; + // get the node ids, i.e., the list in [] + char* node_ids = strstr(nodelist_str, "["); + if (node_ids) { + char* host = calloc(1, (node_ids-nodelist_str)+2); + strncpy(host, nodelist_str, (node_ids-nodelist_str)); + + // separate by "," + char* end_str; + char* token = strtok_r(node_ids+1, ",", &end_str); + while (token) { + // case 1: contiguous node range + // e.g., 3-5, lo=3, hi=5 + // case 2: a single node, then lo=hi + int lo, hi; + if (strstr(token, "-")) { + char* end_str2; + char* lo_str = strtok_r(token, "-", &end_str2); + char* hi_str = strtok_r(NULL, "-", &end_str2); + lo = atoi(lo_str); + hi = atoi(hi_str); + } else { + lo = atoi(token); + hi = lo; + } + + for (int i = lo; i <= hi; i++) { + char nodename[30] = {0}; + sprintf(nodename, "%s%d", host, i); + if (node_idx >= n_nodes) { + return -EINVAL; + } + nodes[node_idx++] = strdup(nodename); + } + token = strtok_r(NULL, ",", &end_str); + } + } else { + // no '[' in the string, meaning it has a single node + if (n_nodes != 1) { + return -EINVAL; + } + nodes[0] = strdup(nodelist_str); + } + + resource->n_nodes = n_nodes; + resource->nodes = nodes; + return 0; +} + // construct_server_argv(): // This function is called in two ways. // Call it once with server_argv==NULL and it @@ -1143,6 +1239,107 @@ static int srun_stage(unifyfs_resource_t* resource, return -errno; } +/** + * @brief Launch servers using Flux + * + * @param resource The job resource record + * @param args The command-line options + * + * @return + */ +static int flux_launch(unifyfs_resource_t* resource, + unifyfs_args_t* args) +{ + size_t argc, flux_argc, server_argc; + char** argv = NULL; + char n_nodes[16]; + char n_tasks[16]; + char n_cores[8]; + + snprintf(n_nodes, sizeof(n_nodes), "-N%zu", resource->n_nodes); + // without -n, --ntasks, Flux will schedule the server job + // to use all nodes exclusively + snprintf(n_tasks, sizeof(n_tasks), "-n%zu", resource->n_nodes); + snprintf(n_cores, sizeof(n_cores), "-c%d", resource->n_cores_per_server); + + // full command: srun + flux_argc = 5; + server_argc = construct_server_argv(args, NULL); + + // setup full command argv + argc = 1 + flux_argc + server_argc; + argv = calloc(argc, sizeof(char*)); + argv[0] = strdup("flux"); + argv[1] = strdup("run"); + argv[2] = strdup(n_nodes); + argv[3] = strdup(n_tasks); + argv[4] = strdup(n_cores); + construct_server_argv(args, argv + flux_argc); + + if (args->debug) { + for (int i = 0; i < (argc - 1); i++) { + fprintf(stdout, "UNIFYFS LAUNCH DEBUG: flux argv[%d] = %s\n", + i, argv[i]); + fflush(stdout); + } + } + + execvp(argv[0], argv); + perror("failed to execvp() flux to launch unifyfsd"); + return -errno; +} + +/** + * @brief Terminate servers using Flux + * + * @param resource The job resource record + * @param args The command-line options + * + * @return + */ +static int flux_terminate(unifyfs_resource_t* resource, + unifyfs_args_t* args) +{ + size_t argc, flux_argc; + char** argv = NULL; + + // full command: flux pkill name:unifyfsd + flux_argc = 3; + argc = 1 + flux_argc; + argv = calloc(argc, sizeof(char*)); + argv[0] = strdup("flux"); + argv[1] = strdup("pkill"); + argv[2] = strdup("name:unifyfsd"); + + execvp(argv[0], argv); + perror("failed to execvp() flux to pkill unifyfsd"); + return -errno; +} + +/** + * @brief Launch unifyfs-stage using flux run + * + * @param resource The job resource record + * @param args The command-line options + * + * @return + */ +static int flux_stage(unifyfs_resource_t* resource, + unifyfs_args_t* args) +{ + size_t flux_argc = 5; + char cmd[200]; + + // full command: flux run + snprintf(cmd, sizeof(cmd), "flux run -N%zu -n%zu -c1", + resource->n_nodes, resource->n_nodes); + + generic_stage(cmd, flux_argc, args); + + perror("failed to execvp() flux to launch unifyfsd"); + return -errno; +} + /** * @brief Launch servers using custom script * @@ -1249,6 +1446,13 @@ static _ucr_resource_manager_t resource_managers[] = { .terminate = &jsrun_terminate, .stage = &jsrun_stage, }, + { + .type = "flux", + .read_resource = &flux_read_resource, + .launch = &flux_launch, + .terminate = &flux_terminate, + .stage = &flux_stage, + }, }; int unifyfs_detect_resources(unifyfs_resource_t* resource) @@ -1257,6 +1461,11 @@ int unifyfs_detect_resources(unifyfs_resource_t* resource) resource->rm = UNIFYFS_RM_PBS; } else if (getenv("SLURM_JOBID") != NULL) { resource->rm = UNIFYFS_RM_SLURM; + } else if (getenv("FLUX_EXEC_PATH") != NULL) { + // TODO: need to use a better environment + // variable or maybe a better way to decide + // whether to use flux scheduler. + resource->rm = UNIFYFS_RM_FLUX; } else if (getenv("LSB_JOBID") != NULL) { if (getenv("CSM_ALLOCATION_ID") != NULL) { resource->rm = UNIFYFS_RM_LSF_CSM; From 0cc3a41699002037dd4ff7182c2d675b90c8818c Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Mon, 25 Sep 2023 13:54:17 -0700 Subject: [PATCH 39/46] Remove ] when multiple nodes are returned Signed-off-by: Chen Wang --- util/unifyfs/src/unifyfs-rm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/unifyfs/src/unifyfs-rm.c b/util/unifyfs/src/unifyfs-rm.c index f11bf7ffa..36e5a5260 100644 --- a/util/unifyfs/src/unifyfs-rm.c +++ b/util/unifyfs/src/unifyfs-rm.c @@ -663,11 +663,11 @@ static int flux_read_resource(unifyfs_resource_t* resource) } pclose(pipe_fp); - // remove the trailing ']' - nodelist_str[strlen(nodelist_str)-1] = 0; // get the node ids, i.e., the list in [] char* node_ids = strstr(nodelist_str, "["); if (node_ids) { + // remove the trailing "]\n" + nodelist_str[strlen(nodelist_str)-2] = 0; char* host = calloc(1, (node_ids-nodelist_str)+2); strncpy(host, nodelist_str, (node_ids-nodelist_str)); From 188af17de3a4e8ecb1038ac339d0179b61c94eb5 Mon Sep 17 00:00:00 2001 From: Ross Miller Date: Fri, 6 Oct 2023 16:29:30 -0400 Subject: [PATCH 40/46] Use OPENSSL_* variables Add OPENSSL_CFLAGS and OPENSSL_LIBS to the UNIFYFS_COMMON_BASE_FLAGS and UNIFYFS_COMMON_BASE_LIBS variables, respectively. Fixes issue #792 --- common/src/Makefile.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/Makefile.mk b/common/src/Makefile.mk index 889ba7da4..741b319dc 100644 --- a/common/src/Makefile.mk +++ b/common/src/Makefile.mk @@ -47,10 +47,10 @@ UNIFYFS_COMMON_BASE_SRCS = \ UNIFYFS_COMMON_BASE_FLAGS = \ -DSYSCONFDIR="$(sysconfdir)" \ - $(MARGO_CFLAGS) + $(MARGO_CFLAGS) $(OPENSSL_CFLAGS) UNIFYFS_COMMON_BASE_LIBS = \ - $(MARGO_LDFLAGS) $(MARGO_LIBS) -lmercury_util \ + $(MARGO_LDFLAGS) $(MARGO_LIBS) $(OPENSSL_LIBS) -lmercury_util \ -lm -lrt -lcrypto -lpthread UNIFYFS_COMMON_OPT_FLAGS = From 25279b929504862942cf823cca010df40e90bbc2 Mon Sep 17 00:00:00 2001 From: "Michael J. Brim" Date: Mon, 2 Oct 2023 15:44:04 -0400 Subject: [PATCH 41/46] rework server bootstrap completion * replace server pids pthread mutex/cond with ABT versions * add margo_state_dump() on client-server or server-server failures (currently commented out) * add a 'bootstrap complete' broadcast rpc after rank 0 sees all servers have reported * fix function declaration for unifyfs_invoke_broadcast_extents() --- client/src/margo_client.c | 8 +- common/src/unifyfs_server_rpcs.h | 9 +- server/src/margo_server.c | 8 +- server/src/margo_server.h | 1 + server/src/unifyfs_global.h | 8 +- server/src/unifyfs_group_rpc.c | 246 ++++++++++++++++++++++----- server/src/unifyfs_group_rpc.h | 43 ++--- server/src/unifyfs_p2p_rpc.c | 55 ++---- server/src/unifyfs_p2p_rpc.h | 4 +- server/src/unifyfs_server.c | 6 +- server/src/unifyfs_server_pid.c | 218 +++++++++++++++++------- server/src/unifyfs_service_manager.c | 114 +++++-------- 12 files changed, 470 insertions(+), 250 deletions(-) diff --git a/client/src/margo_client.c b/client/src/margo_client.c index 06184e9d0..dda8db5d4 100644 --- a/client/src/margo_client.c +++ b/client/src/margo_client.c @@ -224,14 +224,14 @@ static hg_handle_t create_handle(hg_id_t id) return handle; } -static int forward_to_server( - hg_handle_t hdl, - void* input_ptr, - double timeout_msec) +static int forward_to_server(hg_handle_t hdl, + void* input_ptr, + double timeout_msec) { hg_return_t hret = margo_forward_timed(hdl, input_ptr, timeout_msec); if (hret != HG_SUCCESS) { LOGERR("margo_forward_timed() failed - %s", HG_Error_to_string(hret)); + //margo_state_dump(client_rpc_context->mid, "-", 0, NULL); return UNIFYFS_ERROR_MARGO; } return UNIFYFS_SUCCESS; diff --git a/common/src/unifyfs_server_rpcs.h b/common/src/unifyfs_server_rpcs.h index 6c03a1eeb..f4cd5d122 100644 --- a/common/src/unifyfs_server_rpcs.h +++ b/common/src/unifyfs_server_rpcs.h @@ -42,9 +42,9 @@ typedef enum { UNIFYFS_SERVER_RPC_LAMINATE, UNIFYFS_SERVER_RPC_METAGET, UNIFYFS_SERVER_RPC_METASET, - UNIFYFS_SERVER_RPC_PID_REPORT, UNIFYFS_SERVER_RPC_TRANSFER, UNIFYFS_SERVER_RPC_TRUNCATE, + UNIFYFS_SERVER_BCAST_RPC_BOOTSTRAP, UNIFYFS_SERVER_BCAST_RPC_EXTENTS, UNIFYFS_SERVER_BCAST_RPC_FILEATTR, UNIFYFS_SERVER_BCAST_RPC_LAMINATE, @@ -186,6 +186,13 @@ MERCURY_GEN_PROC(bcast_progress_out_t, ((int32_t)(ret))) DECLARE_MARGO_RPC_HANDLER(bcast_progress_rpc) +/* Broadcast 'bootstrap complete' to all servers */ +MERCURY_GEN_PROC(bootstrap_complete_bcast_in_t, + ((int32_t)(root))) +MERCURY_GEN_PROC(bootstrap_complete_bcast_out_t, + ((int32_t)(ret))) +DECLARE_MARGO_RPC_HANDLER(bootstrap_complete_bcast_rpc) + /* Broadcast file extents to all servers */ MERCURY_GEN_PROC(extent_bcast_in_t, ((int32_t)(root)) diff --git a/server/src/margo_server.c b/server/src/margo_server.c index f6a27f538..d3ce6651e 100644 --- a/server/src/margo_server.c +++ b/server/src/margo_server.c @@ -155,6 +155,12 @@ static void register_server_server_rpcs(margo_instance_id mid) bcast_progress_in_t, bcast_progress_out_t, bcast_progress_rpc); + unifyfsd_rpc_context->rpcs.bootstrap_complete_bcast_id = + MARGO_REGISTER(mid, "bootstrap_complete_bcast_rpc", + bootstrap_complete_bcast_in_t, + bootstrap_complete_bcast_out_t, + bootstrap_complete_bcast_rpc); + unifyfsd_rpc_context->rpcs.chunk_read_request_id = MARGO_REGISTER(mid, "chunk_read_request_rpc", chunk_read_request_in_t, chunk_read_request_out_t, @@ -534,7 +540,7 @@ int margo_connect_servers(void) /* allocate array of structs to record address for each server */ server_infos = (server_info_t*) calloc(glb_num_servers, - sizeof(server_info_t)); + sizeof(server_info_t)); if (NULL == server_infos) { LOGERR("failed to allocate server_info array"); return ENOMEM; diff --git a/server/src/margo_server.h b/server/src/margo_server.h index e2bfae4f3..3265adef8 100644 --- a/server/src/margo_server.h +++ b/server/src/margo_server.h @@ -32,6 +32,7 @@ typedef struct ServerRpcIds { /* server-server rpcs */ hg_id_t bcast_progress_id; + hg_id_t bootstrap_complete_bcast_id; hg_id_t chunk_read_request_id; hg_id_t chunk_read_response_id; hg_id_t extent_add_id; diff --git a/server/src/unifyfs_global.h b/server/src/unifyfs_global.h index c8bf1c39a..677e80f60 100644 --- a/server/src/unifyfs_global.h +++ b/server/src/unifyfs_global.h @@ -208,8 +208,12 @@ bool check_pending_metaget(int gfid); unifyfs_rc clear_pending_metaget(int gfid); -/* publish the pids of all servers to a shared file */ -int unifyfs_publish_server_pids(void); + +/* notify local server main thread that bootstrap is complete */ +int unifyfs_signal_bootstrap_complete(void); + +/* participate in collective server bootstrap completion process */ +int unifyfs_complete_bootstrap(void); /* report the pid for a server with given rank */ int unifyfs_report_server_pid(int rank, int pid); diff --git a/server/src/unifyfs_group_rpc.c b/server/src/unifyfs_group_rpc.c index 8d9799229..41840d85f 100644 --- a/server/src/unifyfs_group_rpc.c +++ b/server/src/unifyfs_group_rpc.c @@ -212,10 +212,12 @@ static int merge_metaget_all_bcast_outputs( * and update the string offsets stored in the child file attrs' filename * members. */ - uint64_t parent_filenames_len = p_out->filenames?strlen(p_out->filenames):0; - uint64_t child_filenames_len = c_out->filenames?strlen(c_out->filenames):0; + uint64_t parent_filenames_len = + p_out->filenames ? strlen(p_out->filenames) : 0; + uint64_t child_filenames_len = + c_out->filenames ? strlen(c_out->filenames) : 0; - char* new_filenames = calloc(parent_filenames_len + child_filenames_len +1, + char* new_filenames = calloc(parent_filenames_len+child_filenames_len+1, sizeof(char)); if (!new_filenames) { free(parent_attr_list); @@ -291,6 +293,17 @@ static int get_child_response(coll_request* coll_req, void* output = coll_req->output; switch (coll_req->req_type) { + case UNIFYFS_SERVER_BCAST_RPC_BOOTSTRAP: { + bootstrap_complete_bcast_out_t* cbbo = + (bootstrap_complete_bcast_out_t*) out; + bootstrap_complete_bcast_out_t* bbo = + (bootstrap_complete_bcast_out_t*) output; + child_ret = cbbo->ret; + if ((NULL != bbo) && (child_ret != UNIFYFS_SUCCESS)) { + bbo->ret = child_ret; + } + break; + } case UNIFYFS_SERVER_BCAST_RPC_EXTENTS: { extent_bcast_out_t* cebo = (extent_bcast_out_t*) out; extent_bcast_out_t* ebo = (extent_bcast_out_t*) output; @@ -489,16 +502,16 @@ static coll_request* collective_create(server_rpc_e req_type, * before calling bcast_progress_rpc(). */ - int rc = ABT_mutex_create(&coll_req->child_resp_valid_mut); + int rc = ABT_mutex_create(&coll_req->resp_valid_sync); if (ABT_SUCCESS != rc) { LOGERR("ABT_mutex_create failed"); free(coll_req); return NULL; } - rc = ABT_cond_create(&coll_req->child_resp_valid); + rc = ABT_cond_create(&coll_req->resp_valid_cond); if (ABT_SUCCESS != rc) { LOGERR("ABT_cond_create failed"); - ABT_mutex_free(&coll_req->child_resp_valid_mut); + ABT_mutex_free(&coll_req->resp_valid_sync); free(coll_req); return NULL; } @@ -507,8 +520,8 @@ static coll_request* collective_create(server_rpc_e req_type, UNIFYFS_BCAST_K_ARY, &(coll_req->tree)); if (rc) { LOGERR("unifyfs_tree_init() failed"); - ABT_mutex_free(&coll_req->child_resp_valid_mut); - ABT_cond_free(&coll_req->child_resp_valid); + ABT_mutex_free(&coll_req->resp_valid_sync); + ABT_cond_free(&coll_req->resp_valid_cond); free(coll_req); return NULL; } @@ -522,8 +535,8 @@ static coll_request* collective_create(server_rpc_e req_type, free(coll_req->child_hdls); free(coll_req->child_reqs); /* Note: calling free() on NULL is explicitly allowed */ - ABT_mutex_free(&coll_req->child_resp_valid_mut); - ABT_cond_free(&coll_req->child_resp_valid); + ABT_mutex_free(&coll_req->resp_valid_sync); + ABT_cond_free(&coll_req->resp_valid_cond); free(coll_req); return NULL; } @@ -601,8 +614,8 @@ void collective_cleanup(coll_request* coll_req) } /* Release the Argobots mutex and condition variable */ - ABT_cond_free(&coll_req->child_resp_valid); - ABT_mutex_free(&coll_req->child_resp_valid_mut); + ABT_cond_free(&coll_req->resp_valid_cond); + ABT_mutex_free(&coll_req->resp_valid_sync); /* free allocated memory */ if (NULL != coll_req->input) { @@ -644,6 +657,8 @@ static int collective_forward(coll_request* coll_req) /* invoke bcast request rpc on child */ margo_request* creq = coll_req->child_reqs + i; hg_handle_t* chdl = coll_req->child_hdls + i; + LOGDBG("BCAST_RPC: collective(%p) forwarding to child[%d]", + coll_req, i); int rc = forward_child_request(coll_req->input, *chdl, creq); if (rc != UNIFYFS_SUCCESS) { LOGERR("forward to child[%d] failed", i); @@ -664,6 +679,12 @@ void collective_set_local_retval(coll_request* coll_req, int val) } switch (coll_req->req_type) { + case UNIFYFS_SERVER_BCAST_RPC_BOOTSTRAP: { + bootstrap_complete_bcast_out_t* bbo = + (bootstrap_complete_bcast_out_t*) output; + bbo->ret = val; + break; + } case UNIFYFS_SERVER_BCAST_RPC_EXTENTS: { extent_bcast_out_t* ebo = (extent_bcast_out_t*) output; ebo->ret = val; @@ -723,7 +744,7 @@ int collective_finish(coll_request* coll_req) * then send the output back to the caller. If we're at the root * of the tree, though, there might be output data, but no place * to send it. */ - if ((NULL != coll_req->output) && (NULL != coll_req->resp_hdl)) { + if ((NULL != coll_req->output) && (HG_HANDLE_NULL != coll_req->resp_hdl)) { hg_return_t hret = margo_respond(coll_req->resp_hdl, coll_req->output); if (hret != HG_SUCCESS) { LOGERR("margo_respond() failed - %s", HG_Error_to_string(hret)); @@ -735,14 +756,14 @@ int collective_finish(coll_request* coll_req) /* Signal the condition variable in case there are other threads * waiting for the child responses */ - ABT_mutex_lock(coll_req->child_resp_valid_mut); - ABT_cond_signal(coll_req->child_resp_valid); + ABT_mutex_lock(coll_req->resp_valid_sync); + ABT_cond_signal(coll_req->resp_valid_cond); /* There should only be a single thread waiting on the CV, so we don't * need to use ABT_cond_broadcast() */ - ABT_mutex_unlock(coll_req->child_resp_valid_mut); + ABT_mutex_unlock(coll_req->resp_valid_sync); /* Locking the mutex before signaling is required in order to ensure * that the waiting thread has had a chance to actually call - * ABT_cond_wait() before this thread signals the CV. */ + * ABT_cond_timedwait() before this thread signals the CV. */ return ret; } @@ -792,18 +813,9 @@ int invoke_bcast_progress_rpc(coll_request* coll_req) static void bcast_progress_rpc(hg_handle_t handle) { /* assume we'll succeed */ - int32_t ret = UNIFYFS_SUCCESS; + int ret = UNIFYFS_SUCCESS; coll_request* coll = NULL; - - bool cleanup_collective = ((NULL != coll) && (coll->auto_cleanup)); - /* We have to check the auto_cleanup variable now because in the case - * where auto_cleanup is false, another thread will be freeing the - * collective. And once the memory is freed, we can't read the - * auto_cleanup variable. - * - * There's a condition variable that's signaled by collective_finish(), - * and the memory won't be freed until some time after that happens, so - * it's safe to check the variable up here. */ + bool cleanup_collective = false; bcast_progress_in_t in; hg_return_t hret = margo_get_input(handle, &in); @@ -811,19 +823,31 @@ static void bcast_progress_rpc(hg_handle_t handle) LOGERR("margo_get_input() failed - %s", HG_Error_to_string(hret)); ret = UNIFYFS_ERROR_MARGO; } else { - /* call collective_finish() to progress bcast operation */ coll = (coll_request*) in.coll_req; + margo_free_input(handle, &in); + + cleanup_collective = ((NULL != coll) && (coll->auto_cleanup)); + /* We have to check the auto_cleanup variable now because in the case + * where auto_cleanup is false, another thread will be freeing the + * collective. And once the memory is freed, we can't read the + * auto_cleanup variable. + * + * There's a condition variable that's signaled by collective_finish(), + * and the memory won't be freed until some time after that happens, so + * it's safe to check the variable up here. */ + + /* call collective_finish() to progress bcast operation */ LOGDBG("BCAST_RPC: bcast progress collective(%p)", coll); ret = collective_finish(coll); if (ret != UNIFYFS_SUCCESS) { - LOGERR("collective_finish() failed for coll_req(%p) (rc=%d)", + LOGERR("collective_finish() failed for collective(%p) (rc=%d)", coll, ret); } } /* finish rpc */ bcast_progress_out_t out; - out.ret = ret; + out.ret = (int32_t) ret; hret = margo_respond(handle, &out); if (hret != HG_SUCCESS) { LOGERR("margo_respond() failed - %s", HG_Error_to_string(hret)); @@ -834,12 +858,139 @@ static void bcast_progress_rpc(hg_handle_t handle) } /* free margo resources */ - margo_free_input(handle, &in); margo_destroy(handle); } DEFINE_MARGO_RPC_HANDLER(bcast_progress_rpc) +/*************************************************** + * Broadcast server bootstrap completion + ***************************************************/ + +/* bootstrap complete broadcast rpc handler */ +static void bootstrap_complete_bcast_rpc(hg_handle_t handle) +{ + LOGDBG("BCAST_RPC: bootstrap handler"); + + /* assume we'll succeed */ + int ret = UNIFYFS_SUCCESS; + + coll_request* coll = NULL; + server_rpc_req_t* req = calloc(1, sizeof(*req)); + bootstrap_complete_bcast_in_t* in = calloc(1, sizeof(*in)); + bootstrap_complete_bcast_out_t* out = calloc(1, sizeof(*out)); + if ((NULL == req) || (NULL == in) || (NULL == out)) { + ret = ENOMEM; + } else { + /* get input params */ + hg_return_t hret = margo_get_input(handle, in); + if (hret != HG_SUCCESS) { + LOGERR("margo_get_input() failed - %s", HG_Error_to_string(hret)); + ret = UNIFYFS_ERROR_MARGO; + } else { + hg_id_t op_hgid = + unifyfsd_rpc_context->rpcs.bootstrap_complete_bcast_id; + server_rpc_e rpc = UNIFYFS_SERVER_BCAST_RPC_BOOTSTRAP; + coll = collective_create(rpc, handle, op_hgid, (int)(in->root), + (void*)in, (void*)out, sizeof(*out), + HG_BULK_NULL, HG_BULK_NULL, NULL); + if (NULL == coll) { + ret = ENOMEM; + } else { + ret = collective_forward(coll); + if (ret == UNIFYFS_SUCCESS) { + req->req_type = rpc; + req->coll = coll; + req->handle = handle; + req->input = (void*) in; + ret = sm_submit_service_request(req); + if (ret != UNIFYFS_SUCCESS) { + LOGERR("failed to submit coll request to svcmgr"); + } + } + } + } + } + + if (ret != UNIFYFS_SUCCESS) { + /* report failure back to caller */ + bootstrap_complete_bcast_out_t bbo; + bbo.ret = (int32_t)ret; + hg_return_t hret = margo_respond(handle, &bbo); + if (hret != HG_SUCCESS) { + LOGERR("margo_respond() failed - %s", HG_Error_to_string(hret)); + } + + if (NULL != coll) { + collective_cleanup(coll); + } else { + margo_destroy(handle); + } + } +} +DEFINE_MARGO_RPC_HANDLER(bootstrap_complete_bcast_rpc) + +/* Execute broadcast tree for 'bootstrap complete' notification */ +int unifyfs_invoke_broadcast_bootstrap_complete(void) +{ + /* assuming success */ + int ret = UNIFYFS_SUCCESS; + + LOGDBG("BCAST_RPC: starting bootstrap complete"); + coll_request* coll = NULL; + bootstrap_complete_bcast_in_t* in = calloc(1, sizeof(*in)); + if (NULL == in) { + ret = ENOMEM; + } else { + /* set input params */ + in->root = (int32_t) glb_pmi_rank; + hg_id_t op_hgid = + unifyfsd_rpc_context->rpcs.bootstrap_complete_bcast_id; + server_rpc_e rpc = UNIFYFS_SERVER_BCAST_RPC_BOOTSTRAP; + coll = collective_create(rpc, HG_HANDLE_NULL, op_hgid, + glb_pmi_rank, (void*)in, + NULL, sizeof(bootstrap_complete_bcast_out_t), + HG_BULK_NULL, HG_BULK_NULL, NULL); + if (NULL == coll) { + ret = ENOMEM; + } else { + ret = collective_forward(coll); + if (ret == UNIFYFS_SUCCESS) { + /* avoid cleanup by the progress rpc */ + coll->auto_cleanup = 0; + ABT_mutex_lock(coll->resp_valid_sync); + ret = invoke_bcast_progress_rpc(coll); + if (ret == UNIFYFS_SUCCESS) { + /* wait for all the child responses to come back */ + struct timespec timeout; + clock_gettime(CLOCK_REALTIME, &timeout); + timeout.tv_sec += 5; /* 5 sec */ + int rc = ABT_cond_timedwait(coll->resp_valid_cond, + coll->resp_valid_sync, + &timeout); + if (ABT_ERR_COND_TIMEDOUT == rc) { + LOGERR("timeout"); + ret = UNIFYFS_ERROR_TIMEOUT; + } else if (rc) { + LOGERR("failed to wait on condition (err=%d)", rc); + ret = UNIFYFS_ERROR_MARGO; + } else if (NULL != coll->output) { + bootstrap_complete_bcast_out_t* out = + (bootstrap_complete_bcast_out_t*) coll->output; + ret = out->ret; + } + } + ABT_mutex_unlock(coll->resp_valid_sync); + } else { + LOGERR("collective(%p) forward failed - cleaning up", coll); + } + collective_cleanup(coll); + } + } + + return ret; +} + /************************************************************************* * Broadcast file extents metadata *************************************************************************/ @@ -922,7 +1073,7 @@ static void extent_bcast_rpc(hg_handle_t handle) DEFINE_MARGO_RPC_HANDLER(extent_bcast_rpc) /* Execute broadcast tree for extent metadata */ -int unifyfs_invoke_broadcast_extents_rpc(int gfid) +int unifyfs_invoke_broadcast_extents(int gfid) { /* assuming success */ int ret = UNIFYFS_SUCCESS; @@ -1735,7 +1886,7 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, * we need to get the output data */ coll->auto_cleanup = 0; - ABT_mutex_lock(coll->child_resp_valid_mut); + ABT_mutex_lock(coll->resp_valid_sync); /* Have to lock the mutex before the bcast_progress_rpc call * so that we're sure to be waiting on the condition * variable before the progress thread gets to the point @@ -1757,16 +1908,25 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, } // Wait for all the child responses to come back - ABT_cond_wait(coll->child_resp_valid, - coll->child_resp_valid_mut); - ABT_mutex_unlock(coll->child_resp_valid_mut); + struct timespec timeout; + clock_gettime(CLOCK_REALTIME, &timeout); + timeout.tv_sec += 10; /* 10 sec */ + int rc = ABT_cond_timedwait(coll->resp_valid_cond, + coll->resp_valid_sync, + &timeout); + if (ABT_ERR_COND_TIMEDOUT == rc) { + LOGERR("timeout"); + ret = UNIFYFS_ERROR_TIMEOUT; + } else if (rc) { + LOGERR("failed to wait on condition (err=%d)", rc); + ret = UNIFYFS_ERROR_MARGO; + } + ABT_mutex_unlock(coll->resp_valid_sync); // Now we can get the data from the output struct if (sizeof(metaget_all_bcast_out_t) != coll->output_sz) { - LOGERR("Unexpected size for collective output struct. " - "Expected %d but value was %d", - sizeof(metaget_all_bcast_out_t), - coll->output_sz); + LOGERR("Unexpected size (%zu) for collective output - expected %zu", + coll->output_sz, sizeof(metaget_all_bcast_out_t)); } // Pull the bulk data (the list of file_attr structs) over @@ -1899,8 +2059,8 @@ int unifyfs_invoke_broadcast_metaget_all(unifyfs_file_attr_t** file_attrs, * might have been left in a locked state. Argobots doesn't * provide a way to test this, so we'll do a trylock() followed * by an unlock to ensure it's unlocked. */ - ABT_mutex_trylock(coll->child_resp_valid_mut); - ABT_mutex_unlock(coll->child_resp_valid_mut); + ABT_mutex_trylock(coll->resp_valid_sync); + ABT_mutex_unlock(coll->resp_valid_sync); } else { /* If we never got as far as creating the collective, then just * free the input and output structs. (These were all initialized diff --git a/server/src/unifyfs_group_rpc.h b/server/src/unifyfs_group_rpc.h index ec6976ebe..fb463694e 100644 --- a/server/src/unifyfs_group_rpc.h +++ b/server/src/unifyfs_group_rpc.h @@ -31,29 +31,26 @@ typedef struct coll_request { unifyfs_tree_t tree; hg_handle_t progress_hdl; hg_handle_t resp_hdl; - size_t output_sz; /* size of output struct */ - void* output; /* output struct (type is dependent on rpc) */ + size_t output_sz; /* size of output struct */ + void* output; /* output struct (type depends on rpc) */ void* input; - void* bulk_buf; /* allocated buffer for bulk data */ + void* bulk_buf; /* allocated buffer for bulk data */ hg_bulk_t bulk_in; hg_bulk_t bulk_forward; margo_request progress_req; margo_request* child_reqs; hg_handle_t* child_hdls; - int auto_cleanup; /* if true, bcast_progress_rpc() will - * call collective_cleanup() on this - * struct. This is the default behavior. */ - ABT_cond child_resp_valid; /* bcast_progress_rpc() will signal this - * condition variable when all the child - * responses have been processed. - * Intended to provide a mechanism for the - * server that originated a bcast RPC to - * wait for all the results to come - * back. */ - ABT_mutex child_resp_valid_mut; - /* The mutex associated with the above condition variable. */ - + int auto_cleanup; /* If set (non-zero), bcast_progress_rpc() + * will call collective_cleanup(). This is + * the default behavior. */ + ABT_cond resp_valid_cond; /* bcast_progress_rpc() will signal this + * condition variable when all the child + * responses have been processed. + * Provides a mechanism for the root + * server for a bcast RPC to wait for all + * the results to come back. */ + ABT_mutex resp_valid_sync; /* mutex for above condition variable */ } coll_request; /* set collective output return value to local result value */ @@ -75,18 +72,22 @@ void collective_cleanup(coll_request* coll_req); */ int invoke_bcast_progress_rpc(coll_request* coll_req); + +/** + * @brief Broadcast that all servers have completed bootstrapping + * + * @return success|failure + */ +int unifyfs_invoke_broadcast_bootstrap_complete(void); + /** * @brief Broadcast file extents metadata to all servers * * @param gfid target file - * @param len length of file extents array - * @param extents array of extents to broadcast * * @return success|failure */ -int unifyfs_invoke_broadcast_extents(int gfid, - unsigned int len, - struct extent_tree_node* extents); +int unifyfs_invoke_broadcast_extents(int gfid); /** * @brief Broadcast file attributes metadata to all servers diff --git a/server/src/unifyfs_p2p_rpc.c b/server/src/unifyfs_p2p_rpc.c index f71d4aad4..e2927c00b 100644 --- a/server/src/unifyfs_p2p_rpc.c +++ b/server/src/unifyfs_p2p_rpc.c @@ -82,6 +82,7 @@ int wait_for_p2p_request(p2p_request* req) if (hret != HG_SUCCESS) { LOGERR("wait on p2p request(%p) failed - %s", req, HG_Error_to_string(hret)); + //margo_state_dump(unifyfsd_rpc_context->svr_mid, "-", 0, NULL); rc = UNIFYFS_ERROR_MARGO; } @@ -1598,47 +1599,25 @@ static void server_pid_rpc(hg_handle_t handle) int ret = UNIFYFS_SUCCESS; /* get input params */ - server_pid_in_t* in = calloc(1, sizeof(*in)); - server_rpc_req_t* req = calloc(1, sizeof(*req)); - if ((NULL == in) || (NULL == req)) { - ret = ENOMEM; + server_pid_in_t in; + hg_return_t hret = margo_get_input(handle, &in); + if (hret != HG_SUCCESS) { + LOGERR("margo_get_input() failed"); + ret = UNIFYFS_ERROR_MARGO; } else { - hg_return_t hret = margo_get_input(handle, in); - if (hret != HG_SUCCESS) { - LOGERR("margo_get_input() failed"); - ret = UNIFYFS_ERROR_MARGO; - } else { - req->req_type = UNIFYFS_SERVER_RPC_PID_REPORT; - req->handle = handle; - req->input = (void*) in; - req->bulk_buf = NULL; - req->bulk_sz = 0; - ret = sm_submit_service_request(req); - if (ret != UNIFYFS_SUCCESS) { - margo_free_input(handle, in); - } - } + ret = unifyfs_report_server_pid(in.rank, in.pid); + margo_free_input(handle, &in); } - /* if we hit an error during request submission, respond with the error */ - if (ret != UNIFYFS_SUCCESS) { - if (NULL != in) { - free(in); - } - if (NULL != req) { - free(req); - } - - /* return to caller */ - server_pid_out_t out; - out.ret = (int32_t) ret; - hg_return_t hret = margo_respond(handle, &out); - if (hret != HG_SUCCESS) { - LOGERR("margo_respond() failed"); - } - - /* free margo resources */ - margo_destroy(handle); + /* return to caller */ + server_pid_out_t out; + out.ret = (int32_t) ret; + hret = margo_respond(handle, &out); + if (hret != HG_SUCCESS) { + LOGERR("margo_respond() failed"); } + + /* free margo resources */ + margo_destroy(handle); } DEFINE_MARGO_RPC_HANDLER(server_pid_rpc) diff --git a/server/src/unifyfs_p2p_rpc.h b/server/src/unifyfs_p2p_rpc.h index 65a9055e9..0f764cff7 100644 --- a/server/src/unifyfs_p2p_rpc.h +++ b/server/src/unifyfs_p2p_rpc.h @@ -35,8 +35,8 @@ typedef struct { /* helper method to initialize peer request rpc handle */ int init_p2p_request_handle(hg_id_t request_hgid, - int peer_rank, - p2p_request* req); + int peer_rank, + p2p_request* req); /* helper method to forward peer rpc request */ int forward_p2p_request(void* input_ptr, diff --git a/server/src/unifyfs_server.c b/server/src/unifyfs_server.c index cff6719b5..f226f492b 100644 --- a/server/src/unifyfs_server.c +++ b/server/src/unifyfs_server.c @@ -478,10 +478,10 @@ int main(int argc, char* argv[]) /* initialize our tree that maps a gfid to its extent tree */ unifyfs_inode_tree_init(global_inode_tree); - LOGDBG("publishing server pid"); - rc = unifyfs_publish_server_pids(); + LOGDBG("waiting for server bootstrapping to complete"); + rc = unifyfs_complete_bootstrap(); if (rc != 0) { - LOGERR("failed to publish server pid file: %s", + LOGERR("failed to complete server bootstrapping: %s", unifyfs_rc_enum_description(rc)); exit(1); } diff --git a/server/src/unifyfs_server_pid.c b/server/src/unifyfs_server_pid.c index 99c1bcf96..c4f2870ff 100644 --- a/server/src/unifyfs_server_pid.c +++ b/server/src/unifyfs_server_pid.c @@ -26,30 +26,17 @@ extern unifyfs_cfg_t server_cfg; -static int n_servers_reported; // = 0 +static volatile int n_servers_reported; // = 0 +static volatile int bootstrap_completed; // = 0 static int* server_pids; // = NULL -static pthread_cond_t server_pid_cond = PTHREAD_COND_INITIALIZER; -static pthread_mutex_t server_pid_mutex = PTHREAD_MUTEX_INITIALIZER; -static struct timespec server_pid_timeout; +static ABT_cond server_bootstrap_cond = ABT_COND_NULL; +static ABT_mutex server_bootstrap_mutex = ABT_MUTEX_NULL; +static struct timespec server_bootstrap_timeout; -static int alloc_server_pids(void) -{ - int ret = 0; - pthread_mutex_lock(&server_pid_mutex); - if (NULL == server_pids) { - server_pids = (int*) calloc(glb_pmi_size, sizeof(int)); - if (NULL == server_pids) { - LOGERR("failed to allocate memory (%s)", strerror(errno)); - ret = ENOMEM; - } - } - pthread_mutex_unlock(&server_pid_mutex); - return ret; -} -static inline int set_pidfile_timeout(void) +static inline int set_bootstrap_timeout(void) { - int ret = 0; + int ret = UNIFYFS_SUCCESS; long timeout_sec = 0; if (server_cfg.server_init_timeout) { @@ -61,16 +48,82 @@ static inline int set_pidfile_timeout(void) } } - clock_gettime(CLOCK_REALTIME, &server_pid_timeout); - server_pid_timeout.tv_sec += timeout_sec; + clock_gettime(CLOCK_REALTIME, &server_bootstrap_timeout); + server_bootstrap_timeout.tv_sec += timeout_sec; + + return ret; +} + +static void free_bootstrap_state(void) +{ + if (ABT_MUTEX_NULL != server_bootstrap_mutex) { + ABT_mutex_lock(server_bootstrap_mutex); + if (ABT_COND_NULL != server_bootstrap_cond) { + ABT_cond_free(&server_bootstrap_cond); + server_bootstrap_cond = ABT_COND_NULL; + } + ABT_mutex_unlock(server_bootstrap_mutex); + ABT_mutex_free(&server_bootstrap_mutex); + server_bootstrap_mutex = ABT_MUTEX_NULL; + } + + if (NULL != server_pids) { + free(server_pids); + server_pids = NULL; + } +} + +static int initialize_bootstrap_state(void) +{ + int rc; + int ret = UNIFYFS_SUCCESS; + + if (ABT_MUTEX_NULL == server_bootstrap_mutex) { + rc = ABT_mutex_create(&server_bootstrap_mutex); + if (ABT_SUCCESS != rc) { + LOGERR("ABT_mutex_create failed"); + return UNIFYFS_ERROR_MARGO; + } + } + + ABT_mutex_lock(server_bootstrap_mutex); + if (ABT_COND_NULL == server_bootstrap_cond) { + rc = ABT_cond_create(&server_bootstrap_cond); + if (ABT_SUCCESS != rc) { + LOGERR("ABT_cond_create failed"); + ret = UNIFYFS_ERROR_MARGO; + } + } + + if (UNIFYFS_SUCCESS == ret) { + ret = set_bootstrap_timeout(); + } + + if ((UNIFYFS_SUCCESS == ret) && (0 == glb_pmi_rank)) { + if (NULL == server_pids) { + server_pids = (int*) calloc(glb_pmi_size, sizeof(int)); + if (NULL == server_pids) { + LOGERR("failed to allocate memory for pid array (%s)", + strerror(errno)); + ret = ENOMEM; + } + } + } + + ABT_mutex_unlock(server_bootstrap_mutex); + + if (ret != UNIFYFS_SUCCESS) { + LOGERR("failed to initialize bootstrap state!"); + free_bootstrap_state(); + } - return 0; + return ret; } static int create_server_pid_file(void) { int i = 0; - int ret = 0; + int ret = UNIFYFS_SUCCESS; char filename[UNIFYFS_MAX_FILENAME] = { 0, }; FILE* fp = NULL; @@ -99,80 +152,117 @@ static int create_server_pid_file(void) int unifyfs_report_server_pid(int rank, int pid) { - assert(rank < glb_pmi_size); + assert((glb_pmi_rank == 0) && (rank < glb_pmi_size)); - int ret = alloc_server_pids(); - if (ret) { - LOGERR("failed to allocate pid array"); - return ret; + /* NOTE: need this here in case we receive a pid report rpc before we + * have initialized state in unifyfs_complete_bootstrap() */ + int rc = initialize_bootstrap_state(); + if (rc) { + LOGERR("failed to initialize bootstrap state"); + return rc; } - pthread_mutex_lock(&server_pid_mutex); + ABT_mutex_lock(server_bootstrap_mutex); n_servers_reported++; server_pids[rank] = pid; - pthread_cond_signal(&server_pid_cond); - pthread_mutex_unlock(&server_pid_mutex); + ABT_cond_signal(server_bootstrap_cond); + ABT_mutex_unlock(server_bootstrap_mutex); + + return UNIFYFS_SUCCESS; +} + +int unifyfs_signal_bootstrap_complete(void) +{ + assert(glb_pmi_rank != 0); + + ABT_mutex_lock(server_bootstrap_mutex); + bootstrap_completed = 1; + ABT_cond_signal(server_bootstrap_cond); + ABT_mutex_unlock(server_bootstrap_mutex); return UNIFYFS_SUCCESS; } -int unifyfs_publish_server_pids(void) +static int wait_for_bootstrap_condition(void) { int ret = UNIFYFS_SUCCESS; + int rc = ABT_cond_timedwait(server_bootstrap_cond, server_bootstrap_mutex, + &server_bootstrap_timeout); + if (ABT_ERR_COND_TIMEDOUT == rc) { + LOGERR("server initialization timeout"); + ret = UNIFYFS_ERROR_TIMEOUT; + } else if (rc) { + LOGERR("failed to wait on condition (err=%d)", rc); + ret = UNIFYFS_ERROR_MARGO; + } + return ret; +} + +int unifyfs_complete_bootstrap(void) +{ + int ret = UNIFYFS_SUCCESS; + + int rc = initialize_bootstrap_state(); + if (UNIFYFS_SUCCESS != rc) { + LOGERR("ABT_mutex_create failed"); + return UNIFYFS_ERROR_MARGO; + } if (glb_pmi_rank > 0) { - /* publish my pid to server 0 */ + /* publish my pid to server rank 0 */ + LOGDBG("server[%d] - reporting pid", glb_pmi_rank); ret = unifyfs_invoke_server_pid_rpc(); if (ret) { LOGERR("failed to invoke pid rpc (%s)", strerror(ret)); + } else { + /* wait for "bootstrap-complete" broadcast from server rank 0 */ + ABT_mutex_lock(server_bootstrap_mutex); + while (!bootstrap_completed) { + ret = wait_for_bootstrap_condition(); + if (UNIFYFS_ERROR_TIMEOUT == ret) { + break; + } + } + ABT_mutex_unlock(server_bootstrap_mutex); + if (bootstrap_completed) { + LOGDBG("server[%d] - bootstrap completed", glb_pmi_rank); + } } - } else { /* rank 0 acts as coordinator */ - ret = alloc_server_pids(); - if (ret) { - return ret; - } - - ret = set_pidfile_timeout(); - if (ret) { - return ret; - } - - pthread_mutex_lock(&server_pid_mutex); - server_pids[0] = server_pid; - n_servers_reported++; + } else { /* server rank 0 acts as coordinator */ /* keep checking count of reported servers until all have reported * or we hit the timeout */ + ABT_mutex_lock(server_bootstrap_mutex); + server_pids[0] = server_pid; + n_servers_reported++; while (n_servers_reported < glb_pmi_size) { - ret = pthread_cond_timedwait(&server_pid_cond, - &server_pid_mutex, - &server_pid_timeout); - if (ETIMEDOUT == ret) { - LOGERR("server initialization timeout"); - break; - } else if (ret) { - LOGERR("failed to wait on condition (err=%d, %s)", - errno, strerror(errno)); + ret = wait_for_bootstrap_condition(); + if (UNIFYFS_ERROR_TIMEOUT == ret) { break; } } + ABT_mutex_unlock(server_bootstrap_mutex); if (n_servers_reported == glb_pmi_size) { - ret = create_server_pid_file(); + bootstrap_completed = 1; + LOGDBG("server[%d] - bootstrap completed", glb_pmi_rank); + ret = unifyfs_invoke_broadcast_bootstrap_complete(); if (UNIFYFS_SUCCESS == ret) { LOGDBG("servers ready to accept client connections"); + ret = create_server_pid_file(); + if (UNIFYFS_SUCCESS != ret) { + LOGERR("pid file creation failed!"); + } + } else { + LOGERR("bootstrap broadcast failed!"); } } else { LOGERR("%d of %d servers reported their pids", n_servers_reported, glb_pmi_size); } - - free(server_pids); - server_pids = NULL; - - pthread_mutex_unlock(&server_pid_mutex); } + free_bootstrap_state(); + return ret; } - diff --git a/server/src/unifyfs_service_manager.c b/server/src/unifyfs_service_manager.c index f9ad6a090..036680b05 100644 --- a/server/src/unifyfs_service_manager.c +++ b/server/src/unifyfs_service_manager.c @@ -42,9 +42,9 @@ typedef struct { pthread_t thrd; pid_t tid; - /* pthread mutex and condition variable for work notification */ - pthread_mutex_t thrd_lock; - pthread_cond_t thrd_cond; + /* mutex and condition variable for work notification */ + ABT_mutex thrd_lock; + ABT_cond thrd_cond; /* thread status */ int initialized; @@ -54,7 +54,7 @@ typedef struct { /* thread return status code */ int sm_exit_rc; - /* argobots mutex for synchronizing access to request state between + /* mutex for synchronizing access to request state between * margo rpc handler ULTs and SM thread */ ABT_mutex reqs_sync; @@ -75,7 +75,7 @@ svcmgr_state_t* sm; // = NULL do { \ if ((NULL != sm) && sm->initialized) { \ /*LOGDBG("locking SM state");*/ \ - pthread_mutex_lock(&(sm->thrd_lock)); \ + ABT_mutex_lock(sm->thrd_lock); \ } \ } while (0) @@ -83,7 +83,7 @@ do { \ do { \ if ((NULL != sm) && sm->initialized) { \ /*LOGDBG("unlocking SM state");*/ \ - pthread_mutex_unlock(&(sm->thrd_lock)); \ + ABT_mutex_unlock(sm->thrd_lock); \ } \ } while (0) @@ -110,7 +110,7 @@ static inline void signal_svcmgr(void) if (this_thread != sm->tid) { /* signal svcmgr to begin processing the requests we just added */ LOGDBG("signaling new service requests"); - pthread_cond_signal(&(sm->thrd_cond)); + ABT_cond_signal(sm->thrd_cond); } } @@ -173,32 +173,21 @@ int svcmgr_init(void) return ENOMEM; } - /* initialize lock for shared data structures of the + /* create mutex locks for thread and request data structures of the * service manager */ - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - int rc = pthread_mutex_init(&(sm->thrd_lock), &attr); - if (rc != 0) { - LOGERR("pthread_mutex_init failed for service manager rc=%d (%s)", - rc, strerror(rc)); - svcmgr_fini(); - return rc; - } + ABT_mutex_create(&(sm->thrd_lock)); + ABT_mutex_create(&(sm->reqs_sync)); /* initialize condition variable to synchronize work * notifications for the request manager thread */ - rc = pthread_cond_init(&(sm->thrd_cond), NULL); - if (rc != 0) { - LOGERR("pthread_cond_init failed for service manager rc=%d (%s)", - rc, strerror(rc)); - pthread_mutex_destroy(&(sm->thrd_lock)); + int rc = ABT_cond_create(&(sm->thrd_cond)); + if (rc != ABT_SUCCESS) { + LOGERR("ABT_cond_create() failed for service manager rc=%d", rc); + ABT_mutex_free(&(sm->thrd_lock)); svcmgr_fini(); - return rc; + return UNIFYFS_ERROR_MARGO; } - ABT_mutex_create(&(sm->reqs_sync)); - /* allocate a list to track chunk reads */ sm->chunk_reads = arraylist_create(0); if (sm->chunk_reads == NULL) { @@ -249,10 +238,10 @@ int svcmgr_fini(void) if (sm->initialized) { /* join thread before cleaning up state */ if (sm->tid != -1) { - pthread_mutex_lock(&(sm->thrd_lock)); + ABT_mutex_lock(sm->thrd_lock); sm->time_to_exit = 1; - pthread_cond_signal(&(sm->thrd_cond)); - pthread_mutex_unlock(&(sm->thrd_lock)); + ABT_cond_signal(sm->thrd_cond); + ABT_mutex_unlock(sm->thrd_lock); pthread_join(sm->thrd, NULL); } } @@ -273,15 +262,10 @@ int svcmgr_fini(void) arraylist_free(sm->svc_reqs); } - int abt_err = ABT_mutex_free(&(sm->reqs_sync)); - if (ABT_SUCCESS != abt_err) { - /* All we can really do here is log the error */ - LOGERR("Error code returned from ABT_mutex_free(): %d", abt_err); - } - if (sm->initialized) { - pthread_mutex_destroy(&(sm->thrd_lock)); - pthread_cond_destroy(&(sm->thrd_cond)); + ABT_mutex_free(&(sm->reqs_sync)); + ABT_mutex_free(&(sm->thrd_lock)); + ABT_cond_free(&(sm->thrd_cond)); } /* free the service manager struct allocated during init */ @@ -1058,32 +1042,6 @@ static int process_metaset_rpc(server_rpc_req_t* req) return ret; } -static int process_server_pid_rpc(server_rpc_req_t* req) -{ - /* get input parameters */ - server_pid_in_t* in = req->input; - int src_rank = (int) in->rank; - int pid = (int) in->pid; - margo_free_input(req->handle, in); - free(in); - - /* do pid report */ - int ret = unifyfs_report_server_pid(src_rank, pid); - - /* send rpc response */ - server_pid_out_t out; - out.ret = (int32_t) ret; - hg_return_t hret = margo_respond(req->handle, &out); - if (hret != HG_SUCCESS) { - LOGERR("margo_respond() failed"); - } - - /* cleanup req */ - margo_destroy(req->handle); - - return ret; -} - static int process_transfer_rpc(server_rpc_req_t* req) { /* get target file and requested file size */ @@ -1143,6 +1101,21 @@ static int process_truncate_rpc(server_rpc_req_t* req) return ret; } +static int process_bootstrap_bcast_rpc(server_rpc_req_t* req) +{ + /* signal bootstrap completion */ + int ret = unifyfs_signal_bootstrap_complete(); + if (ret != UNIFYFS_SUCCESS) { + LOGERR("unifyfs_signal_bootstrap_complete() failed - rc=%d", ret); + } + collective_set_local_retval(req->coll, ret); + + /* create a ULT to finish broadcast operation */ + ret = invoke_bcast_progress_rpc(req->coll); + + return ret; +} + static int process_extents_bcast_rpc(server_rpc_req_t* req) { /* get target file and extents */ @@ -1596,15 +1569,15 @@ static int process_service_requests(void) case UNIFYFS_SERVER_RPC_METASET: rret = process_metaset_rpc(req); break; - case UNIFYFS_SERVER_RPC_PID_REPORT: - rret = process_server_pid_rpc(req); - break; case UNIFYFS_SERVER_RPC_TRANSFER: rret = process_transfer_rpc(req); break; case UNIFYFS_SERVER_RPC_TRUNCATE: rret = process_truncate_rpc(req); break; + case UNIFYFS_SERVER_BCAST_RPC_BOOTSTRAP: + rret = process_bootstrap_bcast_rpc(req); + break; case UNIFYFS_SERVER_BCAST_RPC_EXTENTS: rret = process_extents_bcast_rpc(req); break; @@ -1727,12 +1700,11 @@ void* service_manager_thread(void* arg) timeout.tv_nsec -= 1000000000; timeout.tv_sec++; } - int wait_rc = pthread_cond_timedwait(&(sm->thrd_cond), - &(sm->thrd_lock), - &timeout); - if (0 == wait_rc) { + int wait_rc = ABT_cond_timedwait(sm->thrd_cond, sm->thrd_lock, + &timeout); + if (ABT_SUCCESS == wait_rc) { LOGDBG("SM got work"); - } else if (ETIMEDOUT != wait_rc) { + } else if (ABT_ERR_COND_TIMEDOUT != wait_rc) { LOGERR("SM work condition wait failed (rc=%d)", wait_rc); } From 10ef8db51afee2fd167e3c6fca4b61a620923913 Mon Sep 17 00:00:00 2001 From: CamStan Date: Tue, 24 Oct 2023 16:53:09 -0700 Subject: [PATCH 42/46] Docs: Update deps and enable reproducible builds Update sphinx version and fix resulting conf.py build errors. (language and extra css files) Add sphinx todo extension Add requirements.in file to list top-level docs dependencies. Have rtd install pip-tools and use pip-compile to always generate an updated requirements file in the rtd build output. Add the requirements.txt generated by pip-compile to pin this version of the docs as a reproducible build. Note: When wanting to pin a new docs build, copy the results of pip-compile from the build logs and overwrite the existing requirements.txt --- .readthedocs.yaml | 24 +++++++++++++--- docs/conf.py | 6 ++-- docs/requirements.in | 2 ++ docs/requirements.txt | 65 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 docs/requirements.in create mode 100644 docs/requirements.txt diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 32ddc418b..7e676ea8d 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -13,7 +13,7 @@ formats: build: os: ubuntu-22.04 tools: - python: "3.11" + python: "3.12" jobs: post_checkout: # Cancel building pull requests when there aren't changed in the docs directory or YAML file. @@ -22,6 +22,20 @@ build: then exit 183; fi + pre_install: + # pip-compile was used to generate the requirements.txt file to enable + # reproducible builds. + # + # If adding or updating top-level dependencies, update requirements.in and + # then overwrite existing requirements.txt with results of `pip-compile`. + # + # If simply wanting to update transitive dependencies to pin a new + # reproducible build, then overwrite existing requirements.txt with + # results of `pip-compile`. + # + # https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html#pin-your-transitive-dependencies + - python -m pip install pip-tools + - pip-compile --strip-extras -o docs/new_requirements.txt docs/requirements.in --upgrade # Build documentation in the docs/ directory with Sphinx sphinx: @@ -30,6 +44,8 @@ sphinx: # We recommend specifying your dependencies to enable reproducible builds: # https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html -# python: -# install: -# - requirements: docs/requirements.txt +python: + install: + # If needing to update for pinning a new reproducible build, then overwrite with + # results of `pip-compile` command above. + - requirements: docs/requirements.txt diff --git a/docs/conf.py b/docs/conf.py index e3b405230..ed1a1f33b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -28,7 +28,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -#extensions = [] +extensions = ['sphinx.ext.todo'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -63,7 +63,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = 'en' # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: @@ -139,7 +139,7 @@ # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] -def setup(app): app.add_stylesheet("theme_overrides.css" ) +html_css_files = ['theme_overrides.css'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied diff --git a/docs/requirements.in b/docs/requirements.in new file mode 100644 index 000000000..82133027c --- /dev/null +++ b/docs/requirements.in @@ -0,0 +1,2 @@ +sphinx +sphinx_rtd_theme diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 000000000..1fd208021 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,65 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --output-file=docs/requirements.txt --strip-extras docs/requirements.in +# +alabaster==0.7.13 + # via sphinx +babel==2.13.1 + # via sphinx +certifi==2023.7.22 + # via requests +charset-normalizer==3.3.1 + # via requests +docutils==0.18.1 + # via + # sphinx + # sphinx-rtd-theme +idna==3.4 + # via requests +imagesize==1.4.1 + # via sphinx +jinja2==3.1.2 + # via sphinx +markupsafe==2.1.3 + # via jinja2 +packaging==23.2 + # via sphinx +pygments==2.16.1 + # via sphinx +requests==2.31.0 + # via sphinx +snowballstemmer==2.2.0 + # via sphinx +sphinx==7.2.6 + # via + # -r docs/requirements.in + # sphinx-rtd-theme + # sphinxcontrib-applehelp + # sphinxcontrib-devhelp + # sphinxcontrib-htmlhelp + # sphinxcontrib-jquery + # sphinxcontrib-qthelp + # sphinxcontrib-serializinghtml +sphinx-rtd-theme==1.3.0 + # via -r docs/requirements.in +sphinxcontrib-applehelp==1.0.7 + # via sphinx +sphinxcontrib-devhelp==1.0.5 + # via sphinx +sphinxcontrib-htmlhelp==2.0.4 + # via sphinx +sphinxcontrib-jquery==4.1 + # via sphinx-rtd-theme +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==1.0.6 + # via sphinx +sphinxcontrib-serializinghtml==1.1.9 + # via sphinx +urllib3==2.0.7 + # via requests + +# The following packages are considered to be unsafe in a requirements file: +# setuptools From e0c95dded28b3c827de9455bcd2999c186ccb8ab Mon Sep 17 00:00:00 2001 From: CamStan Date: Tue, 7 Nov 2023 12:56:47 -0800 Subject: [PATCH 43/46] Docs: Add UnifyFS videos and tutorial slides Add UnifyFS videos to Overview page. For ECP Tutorial, also include the slides to download and a section on changes since the tutorial. Add small section on option to use LD_PRELOAD when an application does not need to be rebuilt. Minor fixes --- docs/assumptions.rst | 2 +- docs/build.rst | 4 +- docs/images/UnifyFS-tutorial-May2022.png | 0 docs/link.rst | 13 ++++++ docs/overview.rst | 53 +++++++++++++++++++++++ docs/slides/UnifyFS-tutorial-May2022.pdf | Bin 0 -> 2311596 bytes 6 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 docs/images/UnifyFS-tutorial-May2022.png create mode 100644 docs/slides/UnifyFS-tutorial-May2022.pdf diff --git a/docs/assumptions.rst b/docs/assumptions.rst index f21b5fd2b..53440d478 100644 --- a/docs/assumptions.rst +++ b/docs/assumptions.rst @@ -116,7 +116,7 @@ Commit Consistency Semantics in UnifyFS ``fflush()``, ``close()``, or ``fsync()`` in the application source code, or by supplying the ``client.write_sync`` configuration parameter to UnifyFS on startup, which will cause an implicit `flush` - operation after every `write`` (note: use of the + operation after every `write` (note: use of the ``client.write_sync`` mode can significantly slow down write performance). In this case, inter-process synchronization is still required for applications that perform conflicting updates to files. diff --git a/docs/build.rst b/docs/build.rst index 4e2f9d515..b6f788bb2 100644 --- a/docs/build.rst +++ b/docs/build.rst @@ -143,7 +143,7 @@ configure and build UnifyFS from its source code directory. $ gotcha_install=$(spack location -i gotcha) $ spath_install=$(spack location -i spath) $ - $ ./autogen.sh + $ ./autogen.sh # skip if using release tarball $ ./configure --prefix=/path/to/install --with-gotcha=${gotcha_install} --with-spath=${spath_install} $ make $ make install @@ -200,7 +200,7 @@ As an example, the commands may look like: $ export PKG_CONFIG_PATH=$INSTALL_DIR/lib/pkgconfig:$INSTALL_DIR/lib64/pkgconfig:$PKG_CONFIG_PATH $ export LD_LIBRARY_PATH=$INSTALL_DIR/lib:$INSTALL_DIR/lib64:$LD_LIBRARY_PATH - $ ./autogen.sh + $ ./autogen.sh # skip if using release tarball $ ./configure --prefix=/path/to/install CPPFLAGS=-I/path/to/install/include LDFLAGS="-L/path/to/install/lib -L/path/to/install/lib64" $ make $ make install diff --git a/docs/images/UnifyFS-tutorial-May2022.png b/docs/images/UnifyFS-tutorial-May2022.png new file mode 100644 index 000000000..e69de29bb diff --git a/docs/link.rst b/docs/link.rst index 8b29429de..4cc2c6bf9 100644 --- a/docs/link.rst +++ b/docs/link.rst @@ -86,3 +86,16 @@ Note the use of the ``-I`` option to specify the location of the library provides the Fortran bindings for the ``unifyfs_mount`` and ``unifyfs_unmount`` functions. +---------- + +---------- +LD_PRELOAD +---------- + +In the case where an application doesn't need to be rebuilt in order to use +UnifyFS (e.g., files paths are set wth arguments/configs), ``LD_PRELOAD`` can be +used at runtime to allow for UnifyFS interception of file I/O. + +.. code-block:: Bash + + $ srun -N2 -n8 --export=ALL,LD_PRELOAD=$UNIFYFS_LIB/libunifyfs_mpi_gotcha.so myApplication diff --git a/docs/overview.rst b/docs/overview.rst index d8c165302..dae6a9a91 100644 --- a/docs/overview.rst +++ b/docs/overview.rst @@ -64,3 +64,56 @@ We recommend that you use this as the primary citation for UnifyFS as well as a reference for further details on the UnifyFS architecture and semantics: Michael Brim, Adam Moody, Seung-Hwan Lim, Ross Miller, Swen Boehm, Cameron Stanavige, Kathryn Mohror, Sarp Oral, “UnifyFS: A User-level Shared File System for Unified Access to Distributed Local Storage,” 37th IEEE International Parallel & Distributed Processing Symposium (IPDPS 2023), St. Petersburg, FL, May 2023. + +----- + +-------------- +UnifyFS Videos +-------------- + +Quickstart +********** + +Quick overview on what UnifyFS is and how to use it. + +.. raw:: html + +
+ +
+ +----- + +ECP Tutorial +************ + +More in-depth recording of the problems UnifyFS solves and a how-to using a +pre-1.0 beta version. + +.. raw:: html + +
+ +
+ +.. rubric:: UnifyFS Tutorial Slides - ECP 2022 + +.. image:: images/UnifyFS-tutorial-May2022.png + :target: slides/UnifyFS-tutorial-May2022.pdf + :height: 72px + :align: left + :alt: UnifyFS Tutorial Slides - ECP 2022 + +:download:`Download PDF `. + +| + +.. rubric:: Changes since above ECP 2022 Tutorial: + +- Video 30:04 | Slide 19 - Variants ``boostsys`` and ``preload`` have since been + added. +- Video 31:08 | Slide 22 - OpenSSL is also a dependency that was missed on this slide. +- Video 41:10 | Slide 48 - User Guide url starts with *https*, not *http*. + +For full changes since the pre-1.0 beta version of UnifyFS used in the May 2022 +tutorial, see the `UnifyFS release notes `_. diff --git a/docs/slides/UnifyFS-tutorial-May2022.pdf b/docs/slides/UnifyFS-tutorial-May2022.pdf new file mode 100644 index 0000000000000000000000000000000000000000..552313a94cbc7c966ed9b92a73d10e6653a70f16 GIT binary patch literal 2311596 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%0DRuS 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 z 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

Ju|Mf@<>9ql5UQ}wMshXGXYLi-v`Fo)0DFf^>k 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≧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 !)7C&6)q`c=EzURO{nv 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

85|>rCQpa9N&N_BGz7;aU|m&t!Kz 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

U=1Jhc@UCn)n{ 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

4vdJ%A!WLRVd$~su#JF09 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≦lx`J-4qVO;b^UlqcE7picnd)A{Q=0Qrr)Lsb5S} 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±~O_N1%&sjvIgLa`BXD%ha(~rkjnzu)>m2eC~ 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�Q79 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

N=wt!)|M_LG?bo<*h_{Wuz<^!33)}# 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

FJ8L)D##OL446opfWV+QawK zTwPX~6eeQyO00Rn5p*ZTr&mz$r2qWWy^4e8H(mWKT2dV918SC7SYos%Zik=6z3DXa z2V3xAg)X$C=kMSM!UB7LM$0}JSMADjC(8#KgFk|na4-6L5g3EC%`IEZYOUlbx6j1h z`3Lf*N6Rp57OlsnjuWwGWCdF`f5YKyHE#OIhZRL*mrj6x$OnI1 zA(Gm0H6x@oCB(I#xE9m(4`k+KcoSU5X2QzGW+X(Wm^X{t2%8{eNvyz{eM?->3ZrhOOzEOl*fm~nHFENpfGC+{fw6>x=+;W z$*`V=+Y&J{4Jx52c9O91egiD21S2KNXW`13B~NXfTQWeBeGNlh+<^&O4JO7CZ8G@I zOt%W?C6!K-qsog*9VV=GCojrq{m3UnbuY#~fs4x)S|FA?%~JbbzV{eeZV`H8y7R3y z#36nrBZtWb!oj8%OP$(tCntz(^(M>beQ$>ttu3Nl6}m`r0UutVA+5zDF++wC&BHJB z)ZjI;ndTHI3r^)vMH0gZvlt#952wU_Xv;C1u1Z z!l4WkrNqL{GD4*iF5Ptm}B-te_bpur)7_6>Pzi96#rp zJeDvf8$sUgpW26e)7M9^X5=pQAT}i6ni45y>}x+mh^3p%By1!l`dP7<%ckLuIKE*X>$4v*Gl+4LYJ*sCO??ULm$-;v4ge3 z+RkW@XY>(zZuVIWkBGAWV;M(KI`g2R<#R+Gb0YtI-kU9^A(}4zr4~{QMF)-eqxI^$ za={HYKgC}SL8f6H5oL*jZ4<$Lt10|`{$`x>83%&;3+p30uI7Xq+*I1zkMlM@IEkc0 zOz#psP0r?pqf)l(H-CKgE|A?;B0G3D?7bafoh_IJ{6lnTUumF%x>nTBaB{QBUB~$G z&9FSVVCvki7&K$?g4gE+;^evEG8zVC2=w_mn_Aeo@qfrE(1{N!!R(-%xAaUOlNR&x zY{{2_B=EO@Lr-2~eh(GE(%W(EpmDEN^I0h#05TlLzi|eFI2GdlMFKj?Xg;Ak{_JaZy14eA zn(@k?gSloi+t$UG3Ua5f=7mTy>|eP02g08J+3!b(jLuTd%In@NzR zp5D70;^_MNfmslT`}5!2`|HYD@5@)iK;Ip~;7M!RKcXAMGo)Zc z)OiU2p;8wQ)qL_jiLu4P!<@A~NNvO{JoyB{M5Uy7LCgO!W!OovrTMO|^(xtV)%;k0 zWqq743-eFu8U(@Myx4Y1ccJgo84XlSd?a69M)X!g1wZf4I)bDK)g%h-G$Z;rI=1K- z>YW|GH9s}6Vt*}e0a%{!S0V=evC7uuzDa&`?BwaffKckP+5P2fPmq(AB<{e7ju7(n z>r?gV#*G-n;m)2cjaxLll0omQR%&D>OPwG)76|dMc3U8}d>;(7m|M+!@9d0?_(G2( z8;_pgZe}*+|7CppnC%wMX7Zzz**0MGFfC20H{q89rNZud&?-~YQ{D~qqysxPaCB^C zC9koa2J$|wF?#hPKg-^vd`R)*;7lYQyLF4y4AI|n&7Xro;j6Y*pEhKoEqt(cEvcFf zkLb*hqTWDhv-Y+s0ahQ(xw#y)c@^YT0gQoNE+8HY)FLA~y7W3yv)c3}235v{w{O-l zF|GPeCkZ|KRJy5*1dWPIuJ|kW;y;C{P}Iub--`MrTz4o3kZ@@a^bD%txQZRnC1uFd ztN>0nXDnW3zUz%$HO{Q^d+N@sjDPZ2A#e_4ld`0{@v>5H_%0?Q%FRUJl2 z0UC4%apTE{WgQd*iRF`1{DE=D;h%1my{~8>h;x|V##%vZB2PN+xMwjkFId*H)Up$K zpS6+BG%&jyU0#r5T*l20xkf#wJ#mVi21Olfkv!|x^n4xX}$7v z>Q(JdF3sD?gUN|n4_2ANAw`ip?3x!#If6n~2i-l#XTOH!V^tGBs!kbJ(0 za?aG(&0=kh6)1gUc{0e~HwcivJRg8OxxS;FV}5=>Rr^3CBL<#6iQ zgRd&@jckv~1l^A$Ajz0pJFa$2!;6Qpfk&!*y3{YGVTb-iqx#E$7ir6zixgR+DtAg= zk@e#cV6uI^Mc`NS7_TewEz7=g-m0eols*zb26H;=Tq-vRRhVC?bkf4gqNKXf+`PWh zj&?tW8UCslvlRU8I(RN8(VAG$9t%=TRW?1T!5i`AnIc}1b#DrZgSho5+PQwX1qAx#>=eDb2tr=-~3Ed0*Z+Rx4*v)LSi}UH-Y>u1_5`rX&CA z{_WKY9qA6)-}bA5$?G$&`+eYVRh1AU{%GQ+?XNRH6=3L`&{TE4)ZD~yT)tPXuseQG zG+ru)J5yADgeg&N#YvL%1kygpPwLR-)v=8>Vds?)3(qyF?lOIQM^=0KgPxlBy#C>34KU1Fsq{kAJ%Lyvj&rR@XgQ8veZCg<(w=ziP~Q-OD5VJ3oC z%HmLp8(cAt6B=%zh@riN`o&$eI&&I>7dbdXg#W5i5HQc@s+T^?hP$7}V68ZfkTzz| zRPnN&JeuQl5&Q!(=`ypR)lu{weqGPmA0B`wSzQ3j!#lIolk-zCLkkm@UuR5@-uEN< zkLV=XuW~G6oMY>0t*rR&8OJ?-zMvd`bAQKxlNq->LZabtoada3!{Yax7vBfADH$-b zs7&Z;(mvY~F}8;!9irQ;(Mh|&j^hG876Hgr^pb(#r^*SqIVr+QOsUjr;iHSQ_7u;jfIEC1#d| z^*2*Fj$_}g&v(|m!??+lSEEdYiE~Dc*@K{k&MxCX6rHE%V#{1RwYxQ!rd40l(pC`q zl<*OK?RYwBL=rQQ0wbgLod=fmc&|;}=&>Su<9vR{?CLf-XV%#nMFugg{6fyyc+bOI z;$Ma@WTEiae#_`bQx_hM20?Z66)UV7`$8BeA}*5syJO2csu|p$_NaRwJ zX|g;l3|Z7rM0Y~$IY}U2X#^}RrRT?%LVG7TC)`j2Df)!)5mE9%18+_;1Pom16C6zI z8Ivi*VL5Z9Gg)#-X71Q+8C?xMEfss}?9?b4Ty+Y+#m^Dv8O}$kZ|{n#K-r~=&u5<- zt=^++;HeGrcT)v+8Xx%)Z)a@djx!Ay% z1rj2)E(dv<6(;#$gn`IEFn~L$bpcOU@hT;Fuin-kE0B}P>xNRpim)ccql|{DhHl4T z0g~5M@M|gSE}<%PFqVx-!`zBSPX>>2u*FQ`&mwof3CHgz$gu5QR_yi$sfV$o{cx>v ze_GNRT3qFvNf1=EDxzgU&%jP&BsRX=9seFJ8KFqoAI$y(u~ebMo8wOOPuUbgY}+sY zvTdi(yKgdJk}cLikM;|3!(|YG%?h}9c+w`0tS*?_TleuhF|M;%kI@RQ%-$#M|H9?r zb4A~m633L^NdzxK!ij=JS43Ct##cAPm#@>@Ck&mV<+-UV(7k9W#DaT?KtFa|?>t9; z(Wz5nA$`aKD|X~t&n&Un9N;;-Wqei!e`QX_X~b=eH>(VUGA#C5AtrX|_wKA2-y&jL zXd9>~L$@CIDr1Zw@4k_}AbXv(sKjfASz9n*%*pdm)IQzm&gZq39VyX)6Vr3(0=s?; z2{XC`5@h8m%+{!KY|o@Ykj~(0WhL-K$MkGK_O{=x+ueIJ3G9uJ_^7tuLt8bCeCmbS34T(OE z^cu5-I4}L2kh`Z|aXh14S;-jeOCt}*h=E-N$4L#;EZQR%_mIy}&=W?y>3AK`w<>5l zA8JQb=Mv4`dfBO{K7%c@6X0P)+iU#mi|R>Z8Z_8oW)GR5NY`g$-6X?vigz=#b$w5R zJP9ky-UU@oqp=5PwnW7C6!}B`SP6W`mN0J~&tMJnPxi0xqGK5nPd$2E%gr68s&IBt zBPv$-=W6IuBSX=&P~JDIjWd~Dh2n(8D)Jp7rZHuAzRj?knPM|L%67O)7tTA%o7nVL zk#6A63Jn%kYjYDl*~M>kL0$G7=u7KFH=n_g4@#I?VT_}A`?t0A8pe)7;p-dCzs#*> ze57|6P|XF;E37Rmc7*%rRN{HW`P(YXaLd|VIvkHi#q;PgrkR`)8Fuq5N6Iew=9jOR zS29NX_^TEW`iT-oxf-;sINAt_cCPRAVCkKy%eZ9xNb-mN;iXyhOB`YJw!gf~eH zVWB2AuIhuIZ{s?f37F=KzlW{ZHm26GmXgG|b$NI^77i<)Z+G^~WQ~(3JR8KU3++8d zhgi3*SvBdTM|v9H-4WWw0H@t<6SuiSLdx#>sV(ni$Pb(Ls$BK?=ADIYKQQF9J7`^j zh5Ar$=#O#l65Sq4v~G%rmAN7v+t|Y>tQmZRR{YQ6oN+m-kJJSkyPnh^mUEViS3qAj zY6(W`2O8{&<~x+8FYKOrRh2EY*k$0uZ+1(=lreJ^=+lVb9rH2xxp!Uv>giA?Xp7cY;qT}=f-4L^NojnV2S?`+ z9X))s>oSUrumEb-UFWFM`ni3)TY0@zO~0HYz;kL>uWJ@Qmen$% zfF^+(>`7cTZ|xms6L3L=B~Z9p@9U>A?|g0Zz+46*X;^9iFMiAgoJCqH&F4LcL|s?U zN7;5ZXlLd`1`ZU@%r}s{vwP8OS%)(XKRL2|cm`jS5brL{y!SO5VICWlA4Q+e(81a0 zUEI(u-hZgF902MatTATZ&>k}@gVn2^Pn?Z+WOE%O2FOo7xG3G31g$?S_1z3Dom5ZQ z@bG(@vD-wN)?MMGy@`Ux95tW0;_3&MGR;?C6A8{;FH86Nc-2u@+3x_Y9$a0xJ)hFP zsMM7BxN2?-mlW49I#XjyF37bOWuNyP#i-KzY2`jX32iAq@MM?ldmas4md1rLW#%*| z;Gn)umjDGMh4A|6=Xy5?-+@e*>yw5;74aRM!7Dk+io?q}GJr}plEeGu?BZ;yh~&iX3H;5U-ED4HbcFC-OX1OmY=J3}M6RP@6*W}^u zl_aXQ)S#IgSfNvY>Jms|3AS*HlvWLYV7 zwYT1IYifF~kiEISD>;h5hS%O&<3;wVhKIxMmCa*~*C7O;C>lHYP0<|V0C6ZHIg zv*)b5bM?ysFf&c+RnY#_HKe*l!y_$UmR&l_=P3Cg+PELL$|Sf*=CwI7q3tyPMexS% zVR5mB>-`7Mr}+Jjj`QMcm*?}EL;>Fs ztgI64U+rXvNf)=vN9Z^gs9opRRi#vEvga^l64_m2pt<)RCe3CP#G<_0G_!?T#|Z4zFtWamT7AvIpC^!N%q+RH9-v+8K* zmtU6nJQO$`k3|QLm#&MgI0OX?JRd);cS4|}x#J0_&S+kQVPvMlX}3wJev`B0yfNyN z<;VR&!?V5oJd|CSxLj3GG5>MWZqZFJ@o9TO(h^uRPLsWcX&ZiDZ~s%PPHkM4hk%Vx zV!8EZzTqiX<;=a&Y`V5;9=Q9gviv;q`fj?B-`>Y4UQP^J3CE}?jhB1DZBJ*QzHNz^ z`CtVk`mn=uq>oabU7;Z0T+uAvUI3=pu32qGw3}o&6#m<)F~~;<^$M8Hfxp74jp5vv zd^vPQG;vg7O@pK^9vvOs8Ov&OJzDzlLz0ge_rY2Bbg_j|fWj@w9aF>2KBKj zY9wp&m0^Y=qc&!%KRRh|+zh#7a0nFYuZ)bDAocG7we_)LKu7y@gxB~^LNPk7Z|!IJ z796y$56u=y#x+nPO_0cEFcHV1uk?ACUzU=Kn2&bdw>M86vy3N*Cm-@W>z(sD4t}sK zKJhMP^RYQj#%GTSR3+jQ&t}G9Ab@!gykKfs4EX_cQC!UMOH_nB88c5oy7RA0ggxKUf+;vn0T1?X}-KGawDD<}kSy zL+<UBJP+zSghtCgVqZ02j?bTdy=Zo8q9G_`bB#g2i%{kp=NCdlCedkGOu!@iUp{5#SYI!S5H3TSYeZI8r>6~jpg?W^NvA{iX_CY z;*7*GV0PCtryc#~WG*U69L@?8(0*>O{Fl>cr)-|Tb= zuh#VCMMvGk@a*_Ie1QeCgC^KwXmDKVAmY{0$)SzMmpc1tmxoV46LOxF>UrdB@bYar zYDQ*2!H!ThM1^KoF;EWMlR^=rWDAoTpnTA}yP(~p`Vd$Ku| zoy(rNZujk;hnsI^#|ZkW%X;hOgQ;b{Q+KnB&CqD$s_8T>@)9Zto+U$XDTMh>9)D*<%!`$zVx1*W1 z>Z)y~JC^s}jfZ$H0T~2W7SFRfbjNjBhMB@zRAc)#L=^{aIaD<@hv$dAeCI8irBFWy z#eWMc$6Z=mExJ98Z~T^cwo{&Z)`F2$rrT(%zcTw2H)o5%#wQvUvB3wWe>gJ7l7_V8 zIo7PM+SCOCtMSH<2#6&1;Gp`1HF`okiCb~HbuTMx_4TWz&YS9?I1Dm`Gy{OVfp=K``GJpUun;L-OE7MY6hWBSZ`rTg6|4)hEl!3C3lYq66v2@d9w=X!Ctm}Ndz z;rCj6E+xYsCJMjH9IBdr$mr~7yy$EV!ztFF)|PxgZvA#2UR2yfPh5dtb@*0RygrMZ zMZ!EX0UG%n*LCoD9%a?6ahS3%-{^I@5X;M}6u?hhXooq%#>mVPYcEUfWklS_5NhL~ zK}#bjrHPe0%YnK0WWiZNS7gyq$1Xps!~M>pd1)SBB|+Wl@!;Nqbu%$pMMgd1=%VjN ziWKPkEiKRs0e_yRBf=DP<*WOUL;Mv0t%*CEvA6JgwMo*2t!-^OzUd*`!~&;&p9!sFP$>aM;Ld_Zo^%T zGS{QJm1}gi4_k5IDNe5p7S87P(ePKhg20j;;ehjl4Bi|JXBzLf<2ov$Dng8+#snv` z#{f%D+m~)v+p?YvDXH9S#Z`~Hd@ohhnJE1%6p3Es%N6d7(OcW+&MI5DtuETxZ0_<8w$&&LPi7x*racWKc(J*n&`dY#3(s;thKFh%C~{lk<( z_2YDOw5?q9!EvOUK*hQnRhx?!3PV?e>P_|#OL8_-#Z^owq$T#MBVIayl6dLpIgCO@MR$s9@d6$7MwJ6o=yL=@WdR`rzS?T!UAkV6K9WNV+ zjg+Pz#B@pa^y++#>i2hYX^(@eOyh?qD|4IeMnAZBg5%+@VWv7+7H6YxT$?%_ymwcr zd+ylE?#t%ZW-q(I79?k;0WM1IGM*h;e91@>N@psZGjY0`JXz9ru+&Kd>3(hs7g6_n z5wJpxL7tZz9dI%kFIsaCxqMSLL&|Eg*H&{gABD(<|yQN6^lz zaB+?}Gb+>}(pIRX7;>Pggr7t8WwKqf^tM`Qb&NO$z=<5WuG2J( z6f3|-UGzE`C*1$AHu2mzy1!E;chhTL;K8kw_|ZFb*{|HNp}4i;4)O**Q<+MJc6*<0 zpr?4l4t5OWNSv=wy|r-KSqdtQTNu+Psqy>;Fqv5PWa}?0xmmAMvJ+?oG~GeOC6bWn z%_yk58aHFdjF52gQ3nnknRtzJHf`*}RG%I zMn$22X(_PJ7_-IYx+2FceU^!D5E-F=>%n+rp0u?!v_mkGp02I2uA0~5iOyyaYS}GSzumM$z#A}*yI*29ef4?Xnju=hf#-J#&dFRe=dniZ7dx3 z*JjCW@MciE<(%Brlx_KEg}*4W)+q0!WhmAcC@Cdvn_sQCo0uPPF}RTE67o)Qx`+yR zG`O5g9+=n;yX$8By0@_Crr72*WuVlh)H6MHMnP`QRBTsWKHGhLG~I^fw^;mK(&yyJ zgM-E_n}Q_jP2u&t!hF_xq0qZmpRs~zd_C3=rkEW?J(>63ie!PDkVG{e40xg@vv=rE z>gUOWzB=3gz{n>}V~KKGQwYcQA}+z_<4Yrm+CmNEYDY$K%SqyIsyu2_?LodSVZhy= zyyQ~h>~eA6wH2!w&x#n5l1nPXJfo!cjLDAYzl}TGl1WBP)*QECv|(%5GQVnH#zg8> z#;^b8s(U7^IV@q)$hs~ePork;^=eP(_=e+)Ot1>o=u|PbnPjE z-)wp=?X~E;c;o6O;Amq|KH{Kct{UxC487iW(Q+-bmGB?7$~6?CJ(=1O=WpNq=+Qt= zKOeojNNz0r;mpiTVq#+GCm<;r8n4(R4errmm*2~5xq6m-twmJgu@0Tv^CRKcV}{Ac z_0K|^y$R(ssLWPsZ4 zrFTogU-t@$Bug2!7nMtuQ}T z647`VTxqb8e+xdPW}yb-;;h?7!=rzPQVC6)up(;~2x+J-I<(Ir&laKb=+Rv6D`{k+> zv(N%vSUxR%@MsU)$);7n%4o004plA@pjx8?DX@aC8;-(*?oI46u37Y+WbvZ?f< z7x%6`5^$Vfm*?rFiblIL6EEpG?7AP!w2>K*59i#ym!4}ip=|D#bxK=#46PoM?Xy|S z@d0uXFzPcC$v&N}XK}l|ghcyjT25<%tO?SF?tCKZQS7Qdn+AV2Ui3C96$Tr0&ywe2 zzV`BQIq?Vc7*B-U>|`!0*tNvFw#=5ZG}J4~_O}NUea_+Lf>zHm9d`@26--Q?XGIDz zdV(%e*G8HfFTP!SIgq`6v+YG0M&0J4<8;?i?2F9R&+3e<0HfSONa>A&m;SycIbQAO zr=IO<+XO+i()-iLAAJHRB{bO5p;H&6-sFEf(mr*cL#+!K|K%#(8u;GNPwpP@%>a_6 z;yAaGkjrk9cwV}AnjosEy}dmzZ+*Ql!nKWm9^DO)#Oo(8Ljmr-${3y&`Q~m$&3Vv- z+T^OP+8oM-%uT^5s(~Ng@ zD9gxNNfK-6Is>wySMKs|-x-a7uFg8~sg%E%FB^*iL=)|zBDpJ*3zL)DZ807_dWrB; zD3$EowI~2dSJ#{$K?k^85w9dqmPdn!T&LquHVpR$NS{CisO54Jpr&bPu#lTw(6RQ6 z%#5qRKU^3+$iY<~?T+P}L~x(z0~rc9!(X&Ul8c&}8LFQ)c-3Ea2%`i`c1sE1V?tB1 z$L03Xi$kTf1eQY;C;2pdhN%iT>)`v~q_i%)e9&0HQ`TnijIN8M8;~sdwru-F__Hw+*^z3oAm_!K_ z=ZykTF6+G1wo-7Bs;f)oIj1lj?#42kpWmr&-Z;Y4yq=NQ$Ji1g()w*5AH|$Y-_sTq z4T!F2@)u535NENM51`9NU1eFu`dQaM-pLdlj5SD%M7G?StEIo97}BUZC_I*>)`htK zAj|pHy*$uY^_PuyZ&Czvva4iVHfV+8J%D%deEm7u{!sDp=SIKz5D(Z6l+97VzgWCn zV1)S`>QZ-wIh)M7xM6xED7aF8H(l#Y1nbhAyP-8-TedB6W8I}@k1_c@DRuV3?C57k zh-BEW=uh1Zi0^n9^U#jI)2<>}i22iOkMCa5pDTaZ zNY2e>(r)tpMO>&{EFU&VY-EWW(nCi4h(4Shx<^u;5xe9Q{OPutG>;z>6VoV(xEB86 z^t8r(tM!(i_~$*O90(jN?4$3?&hgfw3B5@T^6sUCY7^py(9NT={GP_h!SM;3Zy9^$ zp%aIkgl>yMOi6|N+C;&gR&ifIh4_5Atru| zv59-Dmf@WVxdHkKC3Azu2+G?BzGy&Wr|N-}KP<+Zw`fx3I6d9KNLlP2H) zdHa`TlIh%o$Tn5e-hBHF&@g{~y@A6WHQ1gU@f ztK95%n4CYK@>gJTIxgu<{dQaIe@E24g7SDR%uWTxPwM zI@4j?V?`d9{Y3G67Ca=B5DF{=s)RuhPseuB|3ub79R~ht1=|ck=->VOH+znQA%kek zmBs%bM4*dKI^(RKN(b}b{rO4=Vdil#tLfhZ`}dWb7=)X;hDB(9I)DE8z@K*T6=M)9 zrg{fi$1VSX4*I_+&!s^6b2XdO0Q+A}oDGmB6n`O}s+ z5EG>ga%}D`fPPK(N3f5;ht#gx;l`2wswsom zo1@#ujXAJ$#uytW{DoClsdLYQSz=7PWR-9H!Bd}hAK$dFzlQD{(d#p5_5O= zTiAaEW`t8t2y0zI%}bSQf02B_88kC}LolzdrOD_d@yb7nj1*@OU6}(C6r{njhwP+ITh{-AoT9PTSE z?w`}*UrXlye)sRS@PAqIe^v(n%0^(Tbh6@NVz#bkTOe}TAEvcNIBVA zNSUSVK&DO(_BMtfQ&NzVizx!Lh`o)yld^-Mu_-AhguD`jl$@cnH7OhCU;heQf}9mh zokZ+y9qjE)?Leg5q|CCWcIFWB9Gs9C22y5mOB)DP1ZMHyWJOJl?M+Nc1q2ZO>b?8x z!&UVZU9l;F+nbFME$6G8w2Ult6 zvi*kG(^qNY%{>0$LbsFD z^;(Sj!buKjVG#Vkef$~1gW&H+@g5J*;;41Dsz9`cI$P`LIr3@-L7R6w)wn1Y04ZPC zk>hDUUwNfkGKP3Mi4?gr~*hVAhY&Sn9yQ~t>;yP) z@E#>NBN6*=9jOT;KOG?P(;(;O2Ax416)}|nFb$=o=C~Mwb|I{dzru>J7 zb-yBeZvi^18wQl`uD`mINK^W|F@q0^VyZ7cn#Zba4uGS(vZ-75>JQF+6aKQhZqO*9 z`5*K?ktu*2y9o+L=>FibK@A#hE4Rjx;@qFQ{oVjRQW7_Y@BD{W8)P4@y8R!G9Pn7W znFK54GY~;7D8TbU_#J`6q*Z4!NNC?)n>(bVzvX?sXzsS=)4adpJkIai;!+oW1_fsB zy#0I*Db?v)$@7G;FbxzO4dy**ckTUJyK67cH;dxk1^T60{}p&aoGc#CxJEv{ehj|A63+lYK(gadpLLcmSAKxVS1p zyRX0cU-%qiOox*@UY;LdifY7Lzxv#)x;=0V-0kG74PXe>(`37^3o31oNP(*jEF9{t~u3xYs^SM4; zblx6G)7qSe(^a8BpCNKvQ8bO=J^tD_)*d5{o8xud@&uXdJ6UeqsFKErDwBOUQ9R5r z!RY>Z5j_i5rp{#Vx#3g0ky~j2Zu_Oh_xs&sl|jRr2EQaQrZLtig-ZT9pvhv!gY13e zZ)WzZF=Qb6e-nB&Ald4^m84!|SVYaF-b2>6r4R}k;RogqwLvgB?azWSaK!Fk>dog` zxnV59?H(_5?)SS%=!sBR08V&Mdmawa@pRS<>=hay(WXA|-F^pZ>8;7B6H z8Y0p0c_G>z;NK9hhLKm4s=m2*=anIRsD?_6dSk9=KWR5N3PYm)K18wfpLo^DbgRNfzzMD+6QrofZjYqx&g z$@corrY2)n)o}wR46<_@EogN44axzZeuIKVP+cw>o*s;Negs4kOm>))VvLCT;XGOd zA*@nD*fpI!D7>ZNz>jm z;fPXE$MwLnn;n7_TMh^CjxPF8fqZAZp@6!kRqjX-OTP+l-Y{p2C~H3V;V}4=9azGI z<6IVm`;gjz{iSC#6Q=7s(lYKwC^_s~6{5l)LHd*LTvDj^$g>Au(J2~gSSmbs^0}v;o~Qk=c*yAnb%-?JoGbCAy{GI)_eav$ zW@W6YbwPBeio8c+H27iRXt9Tm~?yBCOAV{%p$P+ z+CEo(;lWR2Vaq9J#tM4%BJ{B|TAAJBHqc$HE@s%m;_uO`A!fIQXj4Az}TaZ^aWLl8flAY(a$d z7CT^F6jpQSP>InKNvfAIz${gplAIp@6{U@*);m@}R2HBv6CdSW|A!^&Uh_P@L5gGvtstWSAq!_Ocq^i>cb5ctyU=7`^rU9v0n!7ls<9X= z9Kwm0`k+a%++Hg9pP9J>Lp__z-`f@A^jb@bG(6EhoDU`lh0j^(SnZA90HkqudZE*P zO$;f$Q!D}glwkN_P2ox&W;u``jJ6$%TE1ToG0tG&AV3{3jbkeH8%-NP=s@_^P)Tly zSFteYlrg@F9FJtehN&V>NnZoW$qA<>-zFBJVi_q28Bg@V%dgvfdz%zd(va8_KvRS( zYI+EYBR+u&@0r7JF-%H|-TtcY_jD!D)UsJAr0CN-JKQ0{y+@uwmQ1j~d@0=pT^|MV zj)diuk^R1hVMeQg%OTfFyLz3l@IoFzT7Y#T-` zxFCb8s2n%mJu1cOaE@2{vsh+^S~pRkKWj3t5#K7=dTS_Ym)3R(^!#|&(nE_>{txM* z!Gr@)Bt;VOgSunMC#J-v2Uu+Y%9JnJPDl(2gK}rbWH(i!|xFT>c{W zGn}CcZ8T!3H(cmD#gtgB==93s9Aon_3p)eV6gHVy82y5hzWU_Ze5R znSltdGLFYj-@9FOz*hp`zB_J?LMBgD&L@XL*5bt$za)<(old_CwVm%tJ+HAm%a6VAzUE$ufR=9S^yh4Yzh2| zxT9j=ThQ=bnnV^p^emwEz61VDz@1yQ%2P9n&OkrQIDY93cWzS(01D@jGG8+&XnOnYl$ccnfI1Zd&q#>BO_ajI zp)p~D_vjXTw4*Q5-F z8dhy9S%0<{!nF;QYQ^(nz$ibP6l+t_`rJ#bI9h_T?z!f3Gs(TC-!n1%Wu6V68?e1 zFoaU~q5|l-$$)gTs91_<$`#!B+_`0g)8;Qq#`YdhgeRG zzm+FBnVuJ7If)vuw^|5grD~tDBVLc})UAob%HU8;HpOw8VK-8s8S>{O3mM@Co@K5` z%8*)`ROu#i!BZM4_s~`NU33ooRR0Zc;Z|m#I1J@}s4zn$47}w)#R^Fl(@0?OQ(&JU zjU;Xddj>3QeLHe8y_h5?f^BmvEdhxLx~`Ku2lCXeXrv;~_sCpD+R0&CZywzDNC6x5 zDS-75PSbjS;$J%Oft2*w_WXIpg%QMPCjA0q_Q`Q1iW-OsS`$Y4o{b+WTSV3jp}&o z6DumEPYG4}atDdMq(j$kgKSbn>Q;&KVurZJ8$gpQZo8NGZ2{!fdnM{Z;>C$J$@sN+KAkDF zB@88Wd0xbq@_aNrtKR_Ta*=cv)SXBH8IDP+17;IWgT&zhWNQ^~K^S3S7>l63QOqxE z=PB*te$kY6P?E^yl)*+7))0yxE{@?4pIBNLfdd1JOU?`<5$|o|G}y5K8BtLeKDF$Q zfrmwZ^rM=t-KAPvO`ylRz2X}xY0!J)6%cyM_o@UIr7FOoA@(TCuVoorTN;`#I-ht$ zw_u&y+R5+j%YdyNJj=3JbO9C__Ow5^9+l z9vNI->;#Y$fR?JAPT?PWNqBf9TwPJDr|b&w0;v(!sngPS^7OOnr_wJqa8m#BG>S8DR zx)}wFTm{fKyU-`wZTs+pA_l_c42?@E$su|PndcR2t~GCGujbaQ|Bt!1?5ZORw{Y>` z?(PHvJGi^M1b26b4Z+gE2a=k;?ML{N~nT_90AvZRd~2c?#8Ouig4iNbo2U?5KG&+0|MNV(AA~ z``F(J7;oY0gJxCIb}`VcK;zLR-p%BN?t`OmroA05>7CJeQb9Vkd5fW$-aSeNA#!%N z7Rdbm=yujrbg7seP10LYY9L7Ddg^<#p%R7s@zUJ4v8#dU8Nme#saW(ZM`&mPeEjSo zJV&_-oMn*k_&G%_j(Mm+X2Yv7>ShN_BsyU}*zs41HtIjShc!t|`yB*6Bqy~ON#CBg z4hH6NZkzia*Q5Yz!3-uiggDSKxr~0tA=Q^+FTdN)bG0uQbLjZ2UvyWK7~;2(wC||* zs|3+^e7EDE>(53zKU9zhn1d8CdqW!{Z451izY>>TdszsQp)h;>@c>=tH#l}Ie70+4 zYQZG*gaZq2-;$3Dc2KdFX-7U=z#CErIqyb5I==v4Q%DBdPMN2-DyC?wCB{5QTVLf2 z4(^k+F^6B?m*h$1s^wqWYVtEjle2I3xeJ8DVQAM*9a$I*gijPVju1A#LH29d!yW z2(qxMvwZuN;EI!k99(yW3`za`(#ifu4CH2q<0fuD495tN$x8>7=dB(TL5v!sFtGt3 zQQOFSC}uDZQdXGFo>W{6DTp@$c9h^b#rI_YD`5iLI9wRA_Kvw(shan-3dQN582+_2 z()F3lkxndX`c%j8+ww@sf%d^De(IFN0`0>W-N2|*%^LftpvBKi)9e493mxWuX{kt# z1kLbzfrXFgM_di?pAWn?7A_(^VV1udd0rRz6+kXYaG=ANkKp1Y38aWQAOt_?wSHKD zyIpu|;&%om?+-lwt4G#?5WTQY+M{Y39L@ta;vzt1_5of)^td%sm(}M_TOtiJx6QIG zC2XG3kI-7+IcZyctK^;h__{^-kAvHtO9C2(9*dfcJKq}Wy0PvZ0zXi~9~b>^10o0C z#02r3+>{4O?vdaaHcn$ENnAN-^c59$2iWzUw9;({*BP#1c-+g+V?6I6*u6cdBakk@ zERHoAk2Au?v6?hyyYO_1wm|1U%){!d9Q;2IM;I<52?V%?Urt)*xD7xX4P-ye3ivj% zZ43)2thgvx_F_4vF`aRh8x8pfJ6i>oD9ro=^b`t)Vz7c~ZRz!5a=X6);^wTB`vQjG z1(X&e`w`Ep;>4rpi3T-!fBgSQ*0rvbtdih4Keq7$hRhuno{Y>X#{KMKom9dpprVMM zn7G3QppkX&f3oiso`W>GPM9YMEzPt=#BLT3QPCmettl!otVP3Z=cXID$uawIE}!~U zR5ce&)oA!86>g@wR;!X&bN6D*IgxH?HvLcMLk^CEdKoeTR*Cc_;C(T!Cg$)%;sAa1 zv;UM1HCq^_^WgQGAq%as*A~3<@+I~Vpg-ZzoKEoth^$$qIjFzEt1@ZC^I59YweaH~ z5qS|X|G(Ya2QDHC^hxrTW^OyUD>CR4-Bfuj{bV`Z8MZ?x8_fFt+5Q{^xeYO<-Rn zX;@gJA-w;zE~~-Iinscf$^QQgI=zUfyoT4!KUT^+gH1ng|Mw?e!@&gSL2muMr1G^< zK*rtckJj;k+W!2hU;yHJ*7eJ%=R5F;B#MUeLo+_R|2h=v5I}4CJk%rq_P-*2?~5?^ z9Zh5Zf3K>ym-^!OTVs{&&4eC*9%)CB=RX4xgGGni5t1F_O#gdu98$358v>zbx67g@ zmca9~x)bl;SJnZ~%g!XIV+9Zr)MF+aJFGiEsVrFvV(R+m#W2~C_+B?w2r)m1p@o2! zw9@<9GM{3m0LA}+pwUs_0l4(#XxDqCtd&a6+hZ@UBuoD%TArqWN8hvcHsxWbnO^zs zt7(CN#8DLjw90Txoxiu3i3sd~N-dnhKVr!fA174IA8#B*f(}QTejhfg90agjelE=+ zE(`}22n_}pB2O19awWNzse5M~=Q-fvyO(TJ$B$;hov0o}zF}gt_?0&`o%O#qd?^C% zwnEL{>HhUkdP|~#1_bou!~5L8tIN*Ew^`4#>)nCr%>JHzZ+m_V0)^ub=il1o0>aWl ziIRlulg=%mK)U_8KM+WF+m2=c-c}7lm%&cQZQxr0frD5wFAfK=(p5-fRvQn2N1@LK znMJEB5D?Yc%u$O72zzqsu?ifB5%hhPJAc-!Tu~_t{RJ2l$8Y)iD*ETH4rT(s2fw1f z^mH=Of+px-XGy)WsF&Ixtq3h?p zw}EP_Gs2G!lEJRD^KHQY)ova~xmwgP|D7o+8U9|Xfl76g(PH<*##Nxu{`1Q5;B)EB zW*WmEkw`<~oeqkgv!+4cxtgxqwI3~;8#kK z0MOh~M0A`G=KD1gOQ8)$cRZlRH_$N=r&QN9RQ=w*k~ya?EHZyoPBw%3m{!aYLyDjfn05ihcKSd4=%(Zi;oT{}L`Y{XOuf_OPrd=?4d~0UWd7ZCl_D?cBpw z0L#i{n8+F!QfS!LN&1}Ik4jFeJ3t86-dFqCfEPpne35PZ!y5s=UhUg;ASoy>xRK6^YMkQa3nv{NNretV(sa9NQyE+GY25 z?iMB@2*Pm72=)s3?_o>ID;#p{l9EbOM<1L4{TovUz2OlA~)uNV(@u9FOPx ziT&U4hy@sq05|9lEAs*HOxTPW5v{z)>c(vdyXycikt&kPWt1wC)c<-;+AifwMiKOH z;1v|*W?uYinQpkIMi@7!qe_1Sm{<&BL>yLmB_%SJ`EfzG>vAR|+I3`uL2jfb2|~B5 zBFf1@owswe6cQq{NYNlHm)S9KUv~p!nq_$cqS&}7<1xCo%?*H6!sgNQ`xa-~Y#6Zh zn55wADCxJb^H&*WRh1U4d%GXc-oQxj1MVHJzB?XE7MDGK#cr|b3D+x9R?dA>v2q0D zF$~^{4$Z4ppsn4z z58`-a+@dO2t(P{jSU;I9u;nn&zr%b(<5?Fasnp2Ic|96!4lD%RkVb?77kID#x?fqk zzz&3z7LuwRcKMS%$9S)sNkn0MUyEVOm?q+V`cWAmxHkg62cH+vIU>*d3)dGsKMBUsF(53yIktg=_xKT;=K`}r7!UAFbX@aiCsiDVlO`5<6%D8bx1GmqN5l#0 z5MyzV`VEhw4`0iN&gBOlze%z#f9qMwJ3R(f5;Kt>br)S>7HbzwJMmhFp?f6Qk)u>y z>a~pWVIQ|8P_>)-5tu0m(k7ygO$@Mni;VF!-~{S1qEIn)LcWUD1L}#N9n2dMiG-Qg zNoca4RWpOA_Sg|}F*L6sbE_~Ejs(%Es>P~X-J-2mwwg>RWRv(a8paG-E!a5XVNmP| z)Z{L`(D*f0VoWG^!%fnJlW0r28^lpTT==*Y8}q&Kn9gBQd6R~(l~g=rKoX=`m}QYTDQnR- znn7vjcXPDvz~vR{FNgI2%e#~gIn)VJVyi5M$QPA6a;e`|)(5e&5IhV7zP46O8zo0& zqVbq#6oc=JUn$k`4H0XLNrpGIe>=oSJ_<=3SfUF7x#9KAJ4_`qM6@-nX;5t8hAN>s z#9uH9=~6R!0kZ&QuO5qeerp{(#$hhh=k_v6s23BPS%WsscNEXZ;+j>Q{O9K^q2t4F zD3&5!r++$iBCup+ZqJxzm1Hn4fG|957CL$$wcDI|G#*k5n_mnKCM!sSv7(RjIH?VB zDPu&bO$QpGeX77}MHS|;2Cog0Ctnk+iY8*>k(G(JK}Z8 zu0wQ55~edI>|XH5VPknEYGA*ZK;&@UK|)>WB8V#z6_x`oXG)TwS?E|9q=Koq{<tJta}~@a^r2DC2i|SVv|SgP#qgoQ7cMl$(Z`zJ|k5;pes%!-uWZ z&}(6m@}t0~fSO5#4+{>>Cg)m^ce0>TVP089xn+h*|JXi`0;{p&2!mtd5l%11SW}Hu zlRk?Pa7B)Km$`{I7}$nl79ZRAPx4_`jqZu8`Z4Oh2vDksV1P`~0oUzdOI&(X0w7G% zdub9mS1Q4xIOt|P9;|2(^4UkPI4~H?L(D{v?SQO3YAi#4&~KK|J-$BEZ*WlYelOEq z6$U1I%;rn+z>*|87SkZ5!l2t6>Ovpz4KMbB*F_QG@u8qk^@{Jr?rp$HKZ_tyS-gbx zSbI$T=;frgyEb4fkv_T8O|0`|EMkp(J28SL@yV3&oDUw`Z*=t9qkJXsESuOd2@1yD zgngFe3D|@d9$H(9VPy045QC8`Z}K6i7hsbILNZO6OtG}L#^epdrWO?KWopULR&k2y z9OMFcOX#F4lL}*-sCK;rb_v=0%pkeq=a?23OSC6oE(Ge3I}|F_jFsu#+Ex zv-MDf@*!oi)7U^aA#TEw9gq7WjJAmY_D0(Vy2KIn+UmSir~nM3PMG~i8tE?5jLC?6 z2qIPcYu516kG~x-9{s|r3Os@L78fO%S;pC+|3f-<2CX4(wnQYR7cGOD+q?q7oB}Dv z78|?+@&~4`b><^V&xZvSyIZRTrEw1nQrw6uF-OtiKAzvP`OeSh+vlYW)S@f#U{Oh# zrO6b)Sca0NAMK32A%0nz$@l@gUX5ZA0i>DcQ4iFK_lelO)RXu%YlpNeCt~zz7U2Fh zD&5?_y`=H)d$jT}P@9#I4T`_pkb;vALKmsq%x@VFVciyy)`X*}0q%L51Hs<8ypN6< zuYp#@pqhg;Ap!L6H9aF~Dm`B`(uqfQY>9{UH09eiaVIT(D$gohJj6z{{u>;X^Kw|e^Dyn+scC+<9px+iSK`SA(6sG|5-9tiJ(s0 z!yOfvuKAI+n;AImNR=nZtrbzqn_o0NazPW(7&ex~D-ZS_%g}VwY`UeC56ch?{mQUd zRy-C%U@b-iB#lM*HW(D{WQ6OS?;P8Di0+-atZ<3e`BJ3xdsF2*Oe}_BeDcxp^fS0h zTuDr94246pr^tP+r)(;k&|V4zKjy4p$ume?5Pd@U0i1npLd& z!gX!v0yIoRTvCqQczCKf`aYK31_kZnum(`i(@%p^>$8n=!Clph#8~*Ol_-MI?+h8y zxQ$b#l=(VD6CCZY%ca|T2`Vd(HDu88Z8b0{PzdmDJZ!I~c+v|V@Fm!L2diUQ3~5ih zR=wzb_Wi#zC&37j&i{n%6T0LiiL2V?=!vb5Z(fA28CaKO#~Zg=$Ac8|Au%)&rc2;{ zQXDJ*3{lz2U&pmEeH)CsRN+0)IEZ&HFo>Y6kA#k~){d2FoTaEbcNd!9p>pMn&@A2w za7%pTBnZ}!Y0_$P>13^JI9au#_%r5EY%|{5{EsernDDptehXQ!)>P} zD}MoQNs`&5M8dPU)9Xw}Nii%8HLg`gEOl`NGcyfdL?pIZ>lLOLOvZxMgq}fd?Wx6K zYJM>(MTDUtXSO8oJc=l!#uZ(eoW$0OA11X6P& z#})PUQLjqaly^00zNG7MC2xB}|CY!QN@z@;z9+HQJqsc+dWGK~GrIpB+mmB!pg#u; zLt79y53lgU?cMuf-k_r_QRcg_SOY~(#tO<=?ese&wy369ELD6zAJuoi<~I0N>pHvt z(dNK)huf?h@D%=S#}qB(-hKT$4^P=W7p?agQ@@XvDIPUuUpoxzRwD6Xy~e4+Za5}8 zw8fn1gRE)Vwi>tF@ewCC7eN+pHjA}zlS2KG}5Y91p zAn0I&A0>goPS1!{S}!D~AwM{ITJ&)Sg~XN!MC`>4A6MCV;>&O2#nlThNln< zr!+oGSy|^JQ@5X5hvFzUH5f)EZM#)($7HBz#0c3G9ehXR)KBIZHWL!IY6|^$1gO9IK%UJmfvuHPW|qXqG`F)p+=H!zZ&9CXGI9V@H3nvMbqGj5e^3WQW{#W<7WzYVf|h0 zEM5Bwwjr$nTrv-Jak$anLC0J&@6c>+h^<{dIu0IMK#ZA{LyQsiwH?DJ+BBQ98P#~U z=E7T@#t({AtkQ6bj)mbR%~MKO{E@ZZl~_$*^3l|gMf7|r8&@JYM|9+)0ky7|{-0qy zv+}AYAtv*Zv*q;{^Q|n_!U1H_g#}NF-Sf`M1UH2P`uHGQ%al7oG+V`yok)B>uvJ#E zPLs`iPfB+*tj^+#8u;g*nQ&9$__&>#(#Bi?V(Gku&wnabi>gxO>So=wyjY&Rd5BeO z9aDPA^J-)#_=(kXywRiOespn;TcRl$06Jgh6>3$WUz+ht{IgE|7kd9IP%xH4v~u)y zHE<-lrga(rPQQQE3s%IxKh296pu_$54}T8=6v&q|ZTIq96KVagX#yM6OYyR=Mh~J$ zL;BA-TK_pm>xORHe^g8;%D?A;YBl}%AN)S_pGFHk$+pz}`&|B>2Nn3H#NQK>{QvsI ztEtq0Hdye&)B_4)_PaOqRTlut=ys$fO>5Fpn0ys;i#?qX>=qn>+?_aRylhj`TA=wUyM>hy3sTE;7 z?0?sX>!Sufh80%;d)#%upE)D+Yh7JMs941B_sude%}sb{)@$7Zp3vUaj7To8w%A6- zLqEz}KLCZaX90)6=sUITty<^)2DCe6)fq|);P0CUQ<*IQSWOuhYBEz|8%pwHUg7OG zk7Yya$qd(Z*OA{B0~ivK1HfJSPqK}i_B{W==}dn?k6D^m%mC(=gfJLj>~-5v@R?r( z=3%32APdX6N@ShIcFRoHb_oFMK>tbfxjBD+xcL?Md+GT+A@KJ`spmETQr+@ zF(4La3i&oW1;*+QvjBQWW0swMPb*n43Oillo(iUrq z&T3=aUJAU)G3hTP^LQX@K<2r!1>C2|4M5!T9~Gfd=##Wuew=IA#gZYd14vM%i~OHK zu;{a21pylNv-d#OMPNeki^*M@aBTbliy_DgC}Ds`drfd+u;<&AZ7NgJjgIwCPfqG6 z`P}p8^2&F!^YRam^X>EFb>y!}=qiS(I5uqdB&jtu}y4kkK5_`yd1bw5pFh#WFU^U)43 z4?xBxK@(&W%iMa5vp0dU?p}0SKt1MVTsYe)gwX#E?-!J*bZ%t9`38W*f9_`jm63Vk zwT49i8PfQyOF6FlPuMqI;N5x@dqu{{h}Qn+^t7h!&@9mJXSvqCFFyG?(0f1XFaUUS zi6Q|SoO(YVp3nVW`X+$D7U;hYYjTI>vgX7E=sye!qvxliE8{1b=bmC`qvwfp8dlE2 zKt(0JxCXbq@#gX2698m=2Hsxo1N%Ftw{d$<$qFDbt}1g1$VJeEB8wqz5uVJVs8eDz zESGTm9iY^owH@T#J=4~=Vx71F;Eh}6Sh44AGUA6^ukC1>wAL-0Z#IY9`H|%OyjMFr zQ2B@3gkq0?)AEAURW+}T7tRtkq^<Lx=Q}sIY8YK=$Dn?cEpwIof)Y>L;1?TRtEldh%kt0h zf~=JF>l(-zUFu0fKwcb!1Tnz!y}%FRk+LvG)WdBaZy zZVRe3$Q;rWnw~nk(h>7L*$m5UY^8BV<1&k_FR1&1^)s6ftf7wo;|4HjSTpJTOa_G> zn^_u^JguNu!2Cx|#|<;W4PpYM(c%a%R?|KK|L_2dd=c_@;Nw$3IBI%LYBsoHXkq!5 z{Pgg;>HQDt5p^+^X}Og`-h(b2QYTPXn1TiA_xdG%AJ}vaj&pSFk6&z8>naU7kzhWy zzV$0dS@xi5v?qYxON-TyMG00*JN@i1;{Fvmqa&O}$1+-4&f%MI7*I2ls-{|#XA$zQ zhjjsQGH3}el(?g}m-cJ$bzn|!iv!DdbpnOBA;pmFp-4M8SWy8g=V zc#G+N1I(viYUs@+b8fOGCA4)4JYmjE{5iF z6jPZ1r`u~&LNCpAjU(XIouD{|cySf6XuUy(037;(MovS1GrDfb51>lz54EPde9Mrt#JgtiTi^rYP5unn(695lIR(B!_0$mqoA z%)N!aQnI%T2R$QD=1FaW~!y`_+MP=Pe%f7(MQ6aCHgV_ zfvr@C>_7MUQ-fzg$L#Xa5?E6D-45dv z0t7WkwfOybsaoCJ&`)jRT`?m%RO7%5sQ#)<6smJ$0b zM1qLXHMDw;KO0L+9V!>+fe>_~@x#p+IV%F{8DA59apCByGpMAtnpJyWNIQrrQW#Vg z@2YfAc~*|2IQ+UMed*)L@FKyFRIFIxly+GjBNO8Yg&^NyjO2uhS{51vaSJ#Ty0kYn zYJ}g|+lgR8WEC`McnPOxow)~B;4nRj(S%SE=R9FLnGo;iVB}>5kc+C|4J|M6cx|Jl zP4kaA^keDXOn3=PaAeIf1ew%!!U(tG+e`7eF#TLf4Swf~bR?OmNLZi)tC}7=^IUcO&dqv&?JIaCNA&n?KESuhYznSE~@V|>~HAu z)}c6@(7G9tL<+arf4-W5U;hC8iT+YUOlctHTf}6oT6#@{LSr$IWZ)E<&HHg1%uqQC z6|Kh+23^g28;RKSaiEeT6m#F5n z%ZTYGux4Bchk|5(9lLS?v#2d@HtJbExO|;53F}W8C21{l0!epBKi>#tuXsxYD9Rbu z;N_Po@O{%3y=b^G_PUM;C#e$1emy(+`n zT$ni8BpgWUhiYly?iazMHC*H@!*;D|PDk0g8#HN(k9iYM{=N~D!h$!{6NzZ=r%+3I z_Yj|EyCwcH6jH0Z&@#ucMA>aP332ptn{jKFengUBRwunVUOHtBg}Z)uX4^S$IkL}u zI*iJDw5V;*LgSm8fVq#X86=?~hp#rmkiSE{bq;QO*~o-ZBW%cYpG|>G|MqrrwOp6uUU%c48WjA~-`%e!}E;(k%{fa~wF3K8+rWu=$Cj zIQ2>i0uIAcrF_st6lS!KI2ApDjE19FH|2C|%MC}Aug5~EjsHMPCeE@!UnhApnyGC0u{7jf75^vkMAd%B8T1|Om{38UkKz?@#6>=lZI6cW_yY)*0#Yw_!qHMx( zO~)!QTdK8mXgHOGM$wN(sYJq(`o3_%WfHPMiP%`%WCiLh>4Vef#|0@aaj@kwTt+O- z5j8z5n;>768}`6QH{T;_b%_tcf!T-D*>{2@Hoa1hvre{EFimDN4!vHEwU2H89u} znwaciieIlUU8w5PLF_b6(DC^Px(w}yX$hUz2}vL; zd^|W41p@f5{$xMAr>;6GoZea9kgt7H>g!mO)(GvrZxRCH#8W-TK! zb5l*Txid$CNy7(%O4-fAO2#bCB-x@HgR4aiiNC!wY~Nv0ms?A;fQ#-z@6(y7m50R% z;@WLR8NfKI7cD>WC*TsXwJIWC6iP>T#knu}R2O-B=^E8OSI=Rrc8t0toWO6+Sb1KW&}T@mGh$uEPF zI-jx9RvxB9zW59o?iqR3qd^V-%8hDS%}*Vn2`bJ-w!qeE`Ci=h;;w_1P|MB%(>z9xF~Co z{pT@3fui;O{v;7YHhA0l`GJmBqtK$aCEs?1!pl+?nonzMXZ*Wk)f{xMbXR;GOOOc{m~G#$b8*#T-~Sv+vijh zuX8p_hyOA*fR!h{1HmrXf^I3rUK?Jsn>h7h83XFlTd?|}83Xs;5uu?ZR6WnI=Jk{L z$5?KrxNs1%Q|%ySh9}U4*i^X7ls{qhixC)#cdZQoY>2lDB4O!uz)1p#y|5TU-yDmM zAly()R)IN@h3F~QTFF7==(T8WFW@js%S)8qoUcn3dQZa3Y{ZWFzV^dLKEx~jh#^m| zG>u89b1q+k0LkY4Wx=2^qWEix0uPuZHKRH%nrWLpG;gVSL3_$L=2Dyy8*8TJXpkAD zmIcv=*qqju`5ludzFazC=xpLd}Pp z_G9YatO^Uznz;f-YZco75?dpX%%r}U^gwrj)bsQE_QVq!YP|g-F19N)dLc?45&*8R z$YXjV+kRVb+ULE7*?&lF6~fA!RDk>mTka4(Wh(ozjs?BQ0kOR-1*tuw;*I*eIc1$i zv-0ea0ac2bYr*^arRi@}^wE0}a^w#W3qvyjcP2xnD&0Sie&Xc{c|SM2KkYnG=CGb> zeO{G%x2^Jk2C2znbAL!0A-jD@S5ff0yYHChy#hB0U$4OKZ-A$7eobb-U#1($4j8;9 zTEJg_@4xGF{Nojd&`(MzBmVRL697iz z9|d)@d^0vBz6C~3y+x2Uje*a1HsCosxK`-WP#r%H2AI{jw^kd?h4|M^9?COh*g~bH<$FT@PLWtFL>Gev5OrCCxSt62fA-mm;)YRMXHY}DUxujg z5q(3jfJf$yIQ@-6L{C~#K7{RcQ3g(SG#l~B#do43A8b1grsVz{#~Z32YeN93;*Vav z$k6_p(^M_38XJ0adwVc8*$FL$h-FYrk#}^IF304%eZvH#>Zn)-LU2UL_A>^zGthjtF*CoB~^_PQ6!s_ zga(lW-G!EDjy!H2Sn$yymu~5)qg`HSrU08KtA>0L!^yQe1F(XxDH%~9YnCgCSWzu) z*oW#L)bweq*_2GN%N7OHazDA)c7XIoFltiy!oDV!%B!?n4{|>}A{zDs0tHD0!7AR` z1y5aV#4GQerWg{@Z!on#CQX|8vwzJ?B_Nnd8Z=5&5PlY0{dld9l_Eu;OT7f=_#S*h zHQ$!iJY1YTas^LX>3G3~u|aJK?q46Zm;Pm7e zC(+#KYbrRJ0UXf;sF^Tl7tY_v-_-$=pR# ztzp86Le#bqZG@z8G!eGLk)8Q5K#Al~Gi&P1o7|{^!5c9GU2JB=)#*PU+2*HWOD`WR zCTBZYZb34H9}r^NM~m;b+hy=S!87M9=4A_JXH%iC_@HL=D?WNo`iX;d};zR%iNG30oN zh_iqp-3B*J6!y&y_ibAwT_4*uY{}ZU3G_eTm*RCNMn_p3C1KK8Yswtzv9z!7?Zrl~ z(m?VWoOZ})GnB~5;vBiArP8>m@v&>1iLQ|mS1yES2U}4eeMzFr$vn8hn$evup z_Ext`8s|;d>#<0HmA+-jb)QVOcJ_Pf5}@#M4F0~A#6VvE8~y9E9Kog`ctf)^AM%Q# z=^3`>Tk}&W9pWwvhOt~pF=VAA)v;yObGmH=yO*5N`1Y*8y@uE0q^eo?=(LbR-{U|b zSNLJ*eQv$+H(*W4Q{&^Efou^pdFAmfQ7+)nRQJsxLYwX#l?)8!U|#;#I^x;;pKPX* z(ULGw;ErI~$_?O~Q-OWzGbs+U{YVa4$l9(h%NaxoGPJ+qKPF99q^OaKjOh#OS*(cs z(_7r4hQgC6drXAuH2 zqo=1F?xS+<}GK5nERSho~pRE94}~W6nRY0&FR`BqMeTY)-|o*oaudU%4UKbYy=h zFt`(yz`2k^Cu+l#%@nY~Nw;D+rfX%nEn9F|X25|8F~D>eaKE{*w&U|Y$IqEPZIB>n zVx(gN*-h0DPQEIll*;0hu;WFw-YG^^2eBvUjeLt4XjNZF(PQcC*VZh->3>&XgXl}| zR+^H4J2zAWF$+q6%Nv;f&GQqV@9=7R4l|V3P{v@V$xJ&R!LqKkZJTQ@8kk5F{d|NzKD>h(lX?wf)Ldk<3rBFha)lnViJ{*~N$dDtq#z%oMao0$04H+e&otEE48~S*tBYY1PCf6He6>I2e z2q-Nua$Ly$lNt>b<+hbP$;6~_SRm5~g!M343Mbz9&ah}(8(CtWI9w`vH_KTDi4UQu zMuSiddSh_1)McEa!wlK-Y!($L-qF%*&88U<YfZS6H}h_ZR9Xvku}yk1RRm-x1jAsFpQ=0)bsj}|33 zQab){+{vL|P8QcAE)g_!Xj#*g)NhWqS%UkOwbcu&-@M35;){^7; z)>&6NaG$?@?U%K)bkN-D`th6YZOW%qTsMGSpvi4nkKocr!AExw`p7T92QTDybZ!qOor*tg;{p6Ab-X ziA}eIq}JGIPL%b&Ch@x1nvkN$gw0v!F`Vtp!KJcC#4r1o4l8lo1z5oD2j`E*-A6@F zw6xHwy`?Fo-_A(i9LPdVe+ap0n)$tY>z6fkBdBu`Mjq24d z)F>$_xkiXMfBn5Qy^-=_`K(UF_s#2;l%O7V>p2 z)|AV98p+yEbu5jcN##t$0cAYd`Ss70lH;~f;@P6YTgc%SE0{2-@sjM=AE>_}%^pI_ zu3<8iV@}B@LutOtvc|z2@O&pNbs?G?k55EIR8l#MGcG5ex@`hGWw#vM)fCy^jMRUs z)!P;$n-H??9sGGxT~%gY8yPxzSO(tTV;;F>m>~#`SH;3QF!gnfR?4(~E!L!JZy2fq zDTv53?u)o%Rlq?3s6dl1_-or*K(X$d3iHgv&YfIlwdz4FMX8ll*LS8iAfe=IEGaW6y0tZ5oezH22!X8U9^8 z9;~(wp0@tm7!rB1G1{Ed(yWLtO9})O0VlV<#_ir??mQd!lX35RSU3Hy2b@7*YBmB+ zz52rw!dFudveLog0x)12y}2ZSSi~WQgJjtxb}z7$)yd^MhW@r zX$+Lt11uX9y=v;hlG;YI^SUah04Mbpr$Zs%ss-RI5X~68c-Kt0-#_XhPGAm9t9_}WYcD-`&EJar_dY>a1OsslPhS9Vg`l1A9s%p zi0h)Ta7J_vqqO2OR_X?qmD{pwY(<@imB*uoJg{Xngz<%{CUsIPEBr>Lm2Z`!N#&xX zCD{yxcBiJIyP|ZPR?$krTqks>mW+r;yeR~1PgYiCo}-d!=p&N*}cBo-E(ow1+ouw9k4h1 z{F&^azx?=%;_mD~gu;bit4Vav`_;#}dhj5-Z`O5>d`VBQWVI(VQF{%LD-2@;499kX zp)aAfOVfn>;HKB1C;&4>h&DB=dtsutz%OdwNV+7R;UYue$Zyl2FA(!a&xwI~p=9|U zlZutv(BXdLK_Kv~FtYo(NzmFRtM~;3%XeL3n2FQI$f0dCY za-HITlk|#s069{Me4qcOmud%oOo7sH#au6e{6SDk^_qvYz)Oq}Gmi;f>Wu(Yt zDfyQZBAsJns{8k#!k2Ph(wl=Rntd;64~B_!`IpL70Oi%|@={N-b)k z#DMa+t}>kH;e_ z(B1w6pw(z=$p3p#$xDGXrTh;J#qlqImvRivhva{A)cF#?_04jvY7iN`_-Y#WMj!P5 zVa-^Z01zch?0oYX#HGmG9hMlpFs0Q!n%iDcVQ* z^S|7g*$Cb7KUpvU)C+mJh@yN3qp80waVAx4S}6G)FeIOWcqR9z^4|c%WOogqHqM+} z#KSR9PggTQV!1ft4nT+^=l(!9-UAf_?}1{A0K}DWxytR-e%EV{a^}5N@-jTEj1QUr z)^EDoYH{j$yuZij^!#dGfiLoFPGa-I~lcK(EjbFqNS52|x-irL;`6?pZm90wDX4QB`T(IY_Ba64nr{I2Gt>36kzqss9oW@RiCeSn zZz7dxlO)UyP3MKd0>BJ!AOw2~AT>Y*#P3oBhSvZCrgSFy!cAqn4if>j40nMbE_l68}y^?Kac{Gkq-cl5tY(!z=ayG1~*;2kYoVvU_F!5 z1#oOMaW9-(?i|YG+I81j56oHRtrJLR7&%dtDMQ#}-U-<&`QI<oI{fy1G^%a;!?Rf&7BYaqci-2wkgY3dg(m)d3}P ze1O=c4^WA2ILSY|{v|tiNWHVnxNLz$;{|{Rf3%JLxfqdcJ8swPx%yr(KF@HV%}fc{C3oSr`=xkb3?zHGGo8OZL&3AwWFEDeZFc z{W|zE^(sD-&He$erHaI`(`Qaf-?47dmLRKE8Jtw%2c)=mPEtl*DeN6f{iRinY6zcF za|0f?Zf0`5cdiZ|p1XeCoCH4E?>5;I{V?cafG-;Y zqLF&qug`#rt(RlUhzjZ5UYFb9C<1L3ydn5%qWw)N zX96f0n>%JXL^AoOkJ$z%AM#QVb-m3UcxU$e9Kw|b%m0a+E%rR_Rmg01`B&Ln89m+2 zZT{iv7fldc2g;ywSWo}W$_}QX>cl()NE|7Ui319$q7k=Me}B5leFm6BGL~7r zIQnNPYXt#a0@+aL@%2}8P16_nia;YJPAE8bsWBKX)dywx7b7xQOg=78TXup3Lkm$^ zpC4cJGmz3Cz2ip@cA|O8p+@1rg{3N&)pUjl3JPPBK`R z{2@bzR6<&t!3m?MU`O^2RzBG{Y^4M~SX>8+bkfEL&XQ;4w#f2-YI2xgw^(rxv z{HHHi;xvy%WK(`^u?>7+`%F1&6C9Xtb$T3j%fHW0W!D6YS4ujmk1r?K9a69QaS_Za zhQwAk9n^&j(CdbWvT$ue)LF7fF%$QFuZv_2KU71_YA8dz@(#VaVxtAFiskDDUo)&U zQd(XXNo=N|c6BNI!n_<|$1EbX;13C^jbpFJbswz;iyJ{G@IJ8INz9jbceU=kMNKU@ zKyr7R?s+quuJVCa@UwcB3qTIad{5nLWsnsMn#(H=Rgkg;U2zBapx2JxPKYSVN#*6e z#mnyBGilA0I5m#2PzmKkOyO##HYna?uat9ljq(WP>C`uTI$MkD81do7`;+s2zWR9Y zI96VEx-P*xh|>h-J!I45wCO-9x040)yEu#3^<2T@b(P4^H~7sa$ao{>gYd&j4@fpX z@0N54`RcITK8!}*GGW6a7k_H%{NyR?6x2&v^Uj*dlQ-KQ*JQ7Unf*TM@|G5UzPvKM z^t-zbk<+#`Z1d4|wi&ViYHM9#pzb9|TIm}O+lKAeWRN56k@=MffswS_Fe^@gcul!HSEZO)Rra?INL-d=8D zp%|0V%|WN^DZjq(a-asf7w78lKUcwa?p>oKEw4;E-looWasbEW?~?GKm`ZS_twdLa z5L3Xp@!F{V>E;43&Ru^%spn#bL}0Pj_c%z;vzzhsB8`(nim7jI-0Mr=Ka``E{c0m1 zb}9oZ)P)rXa~_znRfNCo+gVr^1-D2* zL+cr65ZTQm+n8k&8E`RR7Tj{en&$v=blK?%-pa2|^7mSj1a;j42 z0v|<=@A-0==Wn2`?v$sJ=GK_O`bM!|Cf|P$(`YQ z0l)S@-%-MYVv$nU_aNV{0AD9b6<0UX-Ev#*qpv$lD1|H3*&G?Go=mO^Ts4~#UH^mM?7 z2=^9CsW}#5G!KtQ2^0N*N3DaRLGBp6Z&E&!v24hZN}kRhBikOx(&WVDu@*uQ9YSh*jDS3s-ewiL-w|p7PeJ8ZT;{B6v;Uh{WvR|m4NauB9*s8N% z?6Yp!N&@q#WUUFPEv|p6u9i)N{Di={>o*dXiwr*&qsh7F}e+6BeFBYpi3ZR z+JJfWn_lhRcRW=~DSDD)OLdaz9%I;Ay7pDL=dK65r`QpqFX+FzCskqMcDVoI`#tB& zoSPaFD}AcZ@7t9M{;}H2-|u|20W}vCeM&Dts}+p9S^6U=i@|z0Q!T7E9N>jh7b*^pg2QAc@21|rP|u-#OxI(4!Z&Wgp#Njl zFgdjTMsQ&1jq(6s?dyZ%@PAi!kumT*z_3LaM7p1rH`I^Ir3ES6r{y^;)_gefW z2ienpA3>hZcjXM8SMl^K zr1fp`FsEpBD$A6U=xD*PwCUE7G*#B_s=@So_9oM9ZX0%V`v?du@D(x}VQ8kpg@FsTr;L z%_q@;*;P-?^5||0lMWgCq(91G=ypbhNz&Nm-gyctct;J4$bBaQZU!ikG=@)%+vbLa zW@x#0bu>m{Yw(;L(G!hHa(!rfF}qEj@>FlBeaNY8LuxW!M$~8ZI#xu7x=j~dz3>&N z4ZtHbbEElvNoywgsYh376fWkU!4$*w)&%hep~}MTV(efO8)kUF2P@^;gh7UjO0Ep3 z(*7u%ik(eChvn;%3-ZZ?YIUTXd+o1o)r{CQWH)?^FO9voMLu|tz%bHr{kEBFw%wao zH)d99jE9X6Hgz{lJa3A8R(NuMBlS-qqQJ#d82i;)=kfcI%=^wgAE}0=w?p5hWWOA) zo_B6uj7pnmShSsA*gjgkZB{UpPV&f-yG%NYhY%KM!*@#)?-hdDe`blr50?p{_%So1 zpb3&Wu;V{+&r4&0_~!6XDYb)^l7t-o{qn+kJ;qXLExr(9dnv$B_N+PAm+L+3OWo^q zxu%rs=Y{G-J#;2e5fa}b+mwM@)Fu3SOgB#yoMNEEq{Gr06;=^#odxO=c8<%5nGnpO zKWB`1hb+eGgyy@t9K6i@K4T>?vDZyUkrFlSM}|wjZhkV&O~^vWPQodXq%p6VZ#VH^ zhoJkRbk5DYZZF3!JT}>&g{qGZPAIeaNzwP{738Dh-EMlgToPU5HRQLt=b^<5|E7AF zyB8tVV`%jjd!UL(DuXlODWli>W`s`&tjW?^uBwmo2iu45cYQw3fznf7A@Y)ZMFSCr0T@${y)K^(f?M9&!lx=y+M`(A^FG@Z+w7Jmv4fiNnW} zFY|cJb1y{5QTDTHPajp&%-QDflhs>dY8#LvZ1V9Tv(zmwOhGgp6XowQEA6OQi0 zUn{wZLmN8woKP>ne&X1hk+;o3-Q0oroo2obYjUkVHNHy=qQ1;&R6#5we&hN}Z3Wmn zs?ez3j!C0PE~?9KT66r94tlVgyGMNSYE72pG^B<0=maYIi}H?mx2}(}GE&MZ@qB`K z)=M%VB=^=;p9_~HIUHXkuCj^U?PJhw z!hwZYC%)!ZUe2839Mnsu9V5RM=c_LhkJq4YSn>MBv5GXSXmQp}xYhvYu`U+X^ic4SnLvrS`nf8MDrE{L- zCg;dfxM=ztvBj6)2S77}(Ijta$?w1QA;^y>NyeIw^_YBS+O#e2H~p~|l?l5QK;H1+ z$Lp2vzK0+fH}E+l79aZb{pc6jl4C}BgG$rp-9>Ue8`>HwJ)y}rjZ~~f`+S^Z?m18d z!4bKc?&GGW0^`hU5|kF3`%|O)hI5qpr@^w`E(f-N^QwGFJ8hzzR4As2Wh2;N)Zk;62qcJeMQAQb0l$y%`9Zw^1}WrVw{=ygCksrIOXFeynR&3-09 z=*_G{LNy^;5kijpqYU=TWIZ|(N?dya@7bu@*717ntf~x0OO!?kdg^dkR@INxAa`yH-7c5!R^6{MU)xeateG;q)EX z4;{S53q}X&xV1$Yb4O{c3*76DlY{{+Met^`e8n6dw_8M_Uv93LivfjgV0cvP@kJ!J zp5S$S!(D6N@l=kbsF62x_RDs6V-Kk(ev6*aKXpuerr9r(ghaW0>)R!)n%W4v z*FGhwV@~wsFUUvsjKO;hB*)-0$-K{KVA3(NBHW~6Q>54eiO_j+VsUYw{`~rGNqu2` z&#UQ~>)EwA+Q>Uqj|Xe(9_LpZFYt0I6(TP0!Bn~59xtv&cb2p}J(iwXUmnwawD~T6 zK)J;GZoA}XHnerQBZTxM>jvYePHA1%Fv-?;L6oVMj$>CAu}zOxit_l>Yoc^w%a!iV zC~OssDZF8+V3Viy9kZu-(o`JILK5y`%(R6g#nkldX=mC5{;`fZJ+VpmEzOX@J|E4K zJcOdmGj@B+`nk^ThGJXC>~4xJwi>?t@yF|uQ;TB!D>9CN`6_?YfT;WY;oSG`6X;bV zeNgyw!T?sfnQ&?n#xETmZsDSgr7`jyv|MmzXFKitD?#>l*?{q~5o_4~g$fH%w?-6y zO##9oY^bPyOygr)WVlZQj>B@#lNQ3waHOBk8!a@#NLo zq-ky++Lb}Bn-YqzcWu2L19^DjxQU4=MT3>O?DQsDcCewR2v4jI`SP?WQ|)*Rdpl>- z;?b4>=a<(*4)1H-DlX{kPhSR~K`Umr-R5f?f1dUmx^I;IZuS_?bdP=KRptR-Lp#!% ze4K#RdM{dSd`mu*oEv^d_MUA%f@ULl*x=qr5e(1+hRYOuFXwNU-5FP6m770m{3toTxPQ!(?{aJ3i%!U z0=YW1(<(JbDZc89LERX}zjBq90WUZ!s>1lAUH68PV!ll2RnM!lA-jM@r`smoAyeWe z-F61!InbM4*Eb6U8to~jctH}cN(FCChDtQQOE@-01nC7$9 zyLEOa&&w?ndiOY%06B?(>Vrx}62-?h`tVb36H)Ji93{HZP})e-rtnre?RdtQBn^d; zvecI49%ESLWE*5eH0+UlSf9vDtgolY#cC1Kh-cE1*A`V&P?@ZH%98inv^?Urux>Zn z%D*lmN@AIv)Oqx?+xWm${KLIbO~8I z!6V-#RR~;z{kCa;2{nRha`GMQ4TVR%3{&+Ih5*Tw)njA_5TlI1LhY0Gijx*=Lw6~H z#9tEkz2SKs&19j2E1+Z~p>4^)EzS5#HGCnPkr}==lC6m6Su52kxya=v+#?uO*2&lL zTon*%1TVUrKgf9w)&t+Go1sr0ROCmDO`10G6eAC+9R(ylw%UApb9R6KBYTY0uRiuC z($-;2^|#nf3YR12hjZ#C23ybOt;#(pcGgv2j&~(;={XKx@2VSDXjzmAS#}@pYTh zjCM+S9qCsN@7RT?k^3xJqBSZ~K1qoL!p3sPHbmlnmS%bJbdIzG2F(&yX-q$#1Y z76f;Xq?xlMlM#WOCM5LiQf*@;clEZHwbH}M_~+bPE18$`R{1PCu9X9JoS|#P?M*U`+N)f(3B~T5?$_y6Zts^E)|Pzrn_}11A4zu~{7QFsXHToP#9TkoX&`%9 ze%w1ea}hBo2*n92$0r}md^skau|3M#+~;{vpPg{AJQ(A`>XYh7F!OP0YL1rsRbe0& z0Q-zoLp^)Q`^c46%Ie{`5*AaOrny`2t&p2NXf|HnnA>a|@}5&{wmM`fvUFve6k6&C z*y^I6xwDtB-~ADjg(LC(XY2LU-wxKBD*`-+-OWI^(NYulb!foKV6B^3)Y8u-)qoe5 zovOp1HphuS2sTTF(yTwU^;QhHbMkp1FiiE z?SR}JTHg*jA4w;HAUHeL4Td^;j?Y^TRB(k35+QZ(uaF0tewgf*e$6Zqw@8*c}P(Fln- zaZgw2!IP=mYMfN4XM>IGyPcn+8mcTq5l$VBlOqQiCaU>Hk-`V)bXSnxq3}BVMrdrF z*lr$54|c8RKyxpdyGUtdwMsiu|YALgjuQ$7~`h$sP`}!Wno-2!r_ysq1EYBZ2 z*GrA1cKOvO@YtUK`<)Z_Q=n54&5qMP811YKBxk*b z&)#+C$%C#16y6|MY7>m8=m1XoK4)J2KkJbQXydo?5xbw);s&i=#@caH(n!`KCQqj} z0-AnqtELt8;W7lM3H|m6x+=I^i)^^m=l)aKh*0(RZ*uxU>DQ~7sXp>hWxW39sXaY2lk6bC-SVH=!SVb6WXq*C_=~mOy`>u;;4$+_V#ah^T{YXob_J}qO zTi|^Ia-7(inRsy_!nnc|*JkipU)L%3hse5x&f2F7W}azDBwm*jKZ~%UF+`3+n%e7_ zqn@J_hC`!fe3D;s*%|N^ey27k*1mRM{#szrWn=P9lJ+0DI7?0_1r3YUsp1?Mc7cqF z&~F8Y&Nql}t7S7O>$2Ms(Nvs?sRrRg!Hhjs!C|NEMtSzXQL@92`ednQ@N=r*Y_MPw z`>ZzWS?PPI?|4lU=_c0f$|}OI<8;Wi$;k|j56FCn$KXTA0I>9?8^rU;^ z=x*H_7^jCtoUD@|fqn5TUB`4rV(gO@JU(GEu!U~qnto!3Y*95_87=U1D51$@nT@7K z%GatSUn8^c!>y5o+x;4|D`>WIDza;IPAWX1Q;*bZW(g^W*Ymu;$zYST3!U8#X6wBn zY2a_Ig|!x+g-f(`z-3$@;+adHi0ff({9A#vpsBCxiFVhlq#)$<1QIhB)gxPhwH$BbYbM!H zbVPJPU1S!+ge1?LtXaP*@PDMc-$_HVNP@F$b)NDT?*gjWGIcDAq#H`(;iq@;wD@R8 z+{M*(lNk5LMt7CDvDo#Tj_BpYdKRADJgl#7UPZ))+o6wQ{e?|K9>=}Lsk+9^1of^z zh1LeqY~FY@2PMO%Ir%84+QTR)FbGwwy}bc1CVBgeeg8+*`jG#OY zG8^RO?{cS*Kqrrw&G8cA*8Fx{WecOC{B^g#&;yK31R?gX2fKPVc<6TlWM##TK~ zaetJ2%At&9n<+~*DJL8k;ZDH6i_q;Rv*?nQ%M1ky+?Ci$Ql&sJ(%`lE?=W6R9Gu{2f)#ByCH0N91A>nILBdk;DB?@Zm&mT%n z#&U*7J(ge+b1WD7#(#vk)VP^d`CtD%vu~5WI)bcH{e6b%o*T+z@JF_!5pRpPw_B#=`vG6LJ zFSZ9Nno`5~-KtYz=qD)&x4-c-FT7ewbiCM}%c!{jrxVm}AO7zBF0s*aJ*Qb&k>dW( zA3yXnz2>&`VeVUX;wGLKx+w<>-@~%oQY537ho89~wvWAH5yz!|j20PG^!?4bnp^j9 z_k^%kQj~CA=;i?pg9V==mcM}eAmtyABe(J%-E5tD9DdT}Cex8)Iqd%VgUqG7eeRws4kHn9P>N36rRfQ=_Fi_sgi1yS)OR zXwcKinax1vi-RBW{*1Hx>hRa55yN@m_-iI2KJQJ27xTix#q;m+r@SZSL&D}F6-RG# zEZ%Mf{6wz2XWY6`;o>UakZhebfxRL|j{2?>DLfk$K)*RxoS?%xtxgA(b#~P%4s*Du zPSYhubp$!v@f(CYsMH3VwOJ_Dn2L7y3^MmnQD!Vt3ceTgy53VuN$cPu^W|tK=|28j zo`)8f1HOW=xA{irkwv^z+j$&BqZArYAzeD$+NoNabn_G}x>?1^T({Hy`l?RFrqRbY zdC2OkrRG0dThj0=Pd?V%4cA>|)J(v^!ZoHVjenhx*sC#T>Bm6)`r};0Asua#+ItD_ zm1l{C^@Dhsfd^c7gG04xjKVg!*K}n%K8w+ zYM~i9;nR07jhg}sIdu;OokL*4FDUNN&FV4S`m9=&MZ`P!i7r+}G>Eh6v0k>>wMP$2 z))-S%g0rqYtl|#7wqp%pWqTboYnVwS$v$z9V)&C!ssx)(4H=bAE zX(Qs^boyHLT1GiOqKjxfq(#$F1^wxZ)61|z!w^PT6mCaeT4%R~GQ#5eIYgG{+5?w< z|2C~V=~T%tL*l8~*Y6BE)&+T%uvyv{*I|{|_Uh|hN6j5|u|}Hu|00Y1v+N!FYq`Vz z4zu6skFNosGj7~c82{JHE~zIqAsb6-8HdeVw;%l6`1IiFq%;=iEv)4CA^K?j%rxst zdaL)=SDfRC-qQfz(t(~&zim!y6Z0rtYKp{MQi^^~R7&^b(tQ>`a?jp?TH^mw*w|GL zj**yh^>)i~BMj(5}74(QiTjmX(*(Tx1%)7n4)v8mPJUzWr_qC0Uu_J}UEm(DJoGskz zv+t&qYvQgMe~zr|?5X#!j(3l4$%pPAY1Axx&81PwesM7?!KruUe`VGJq~2~otVVWC zlQT`Y{e$O~{En!2#d{IBkgXG>m=yQifo;(!gBYpImlU1%eOJQe>nwBALeqVtXrSZ z8p#1J^xmA*SJl5gpZ}?(k1G9Y$sU3W#dnmuEy8O+&u>5acK;(^ny(~dc4A(;!Cj*U z>*i~QoxRl^aZD?86LXfuk*&{ogk9pkvCmFWqumW6TrkVl7z zQUpzl!MYFI%2)MSx==rx4Yctb-eYm!h3*MoL@p3+>G|IhR*NUGpcK$w=+r$b(}9t4 zkbMrRt!I3p$MX9zKeXq0Ym8vbtGHq0q<&A29;~du9xuE#0yzp*QiLjns;WrnNyRt-NjsZxqZjYnFBkHcX*Q zrr&yOhu4i7zC3p>3PkciZ9Bd_Cct9`xiGc^v00sy7LZTcL6>~(S;Nxgu?z&r={GqI zh4j6rAyR6Mb{rXAck3Vi6y#74PNh#c%&4$Ope@yzAYYw;e-w4g)6*%Q;d$EqMX^7H zF-&8&G<^kF$2EjLE^_7|-?F=^o+(XPF3m$5k=k2$o5Z%nAmf97rZP4h&StZ)^w((W zLxOMVKE!+a5D#A-{Qn{2Vt_bG0bc!wrv{%!6Prde=pG*nbZX2oX+{7ViAcJZ9bFPg zlvvV!_($67TbRsM?0(E2?{8tP@4SZkiJv}%31|-5>T`mR4#l{>c#reuL;JE7f!_Xa z%ZuTQ!#{ej&c2vCnD&|?5S}MSoMH&@IGjOt1$?A%_rC*UsujfKS%4FD!j%H|Nu2g+iC^KNq@NX;q0r-SaD_%)pE}p}kfM3|Jd{ zMK!5GI0=D>hTF_CVe~?c)!-#~Of)|Wv}d{{MlkY!_<0s+GT(D6J_v+irN2gs4LpKP zZ|aZIK%#E_hp?zhUnXN}$j)ZnV<%d0!^b!yir|Kib-@$sF7-TxLdANLY`o=R)R2J~ z;T?T!n()d%B%Rsuy?UPinm*}gNTmD5Fe!tWfYHZIz)sWx5;OTN6mDkSe{~6(y6J&l zd@=+#80kQIJQGtn2bR-Qyr;SGMB#{N569&!N(gbv#}72%6_6JoXC`s`{XaZp0~aGC z*x+}%QQb_5F}?ttNYxN^h#)F{s0A)5@Xqe~b)#&r8rqjI(-*XCtqUePf`&dy#?P_QK*f>|b{l!LvRl%6x|G3iiWTU_q5q83C5i6iV zdL7Wo)nFG{-GvVz!Cy2Q8MLej^otQtB2#m(#-bpQ0u__9&~Bi5_JzxS{a^kb%4h|> z+!cl)H5<&5@&+t=U0q#P1@Q!dl}2^jm>x@mpoNeR-}#J)lcdMyC`cSeEs9ec*H~YF za^qG*Dg#hJ+hAK7K%VG2zDF9A|Gw*B0xRQ%GRyd#fR4YuN1wStBJUI?Efh4(F>7!! zG5%I=+6uTDbJ{@rawI{fNCO}M1I(ExARP(A&sok1y5V&7GQV)@PvjL}^q@lRgCywv42Wx)reR%`z3=dTRDQ=3r88KhEg=JuJhotyK?ANxkol}5~Y zE|JDv0jNGxFzG*z^mV5q5xTr)&0av$quHhrBa$18u7@By8ILfiwHhhmzOGh(ENGJ~ zXxwA-EPDx)b6gWojgDtm3fHZ$dHYlvP;ric^gh6_YCB)=EVKcJI%JAz`5Rj#4M)rG z$r`-@6RG(SCQ5PyRO7nVXA$sciUQK{pe6wHmA=a>ul!s9>h|FhkRx)dD-XMlYWyWhf(`GY}tQpn+S+3^xJQ=ezo!Dh1&}gmHJh*bEBei~Q>Tp|2fV5cxd zAk<*eJ7u*G?{h tk6YJ^@xzyG%Gf@*Jei*Th@1e^96wQWxfz>q%&x8QxzYeCzDZ zNr89DOrQSgqV@6bwz>OfsmN4iMm1Z-cgXW)>#2)Zd_+&f5noAOxt*tyIjeF~a@7^w zgZ;cb4~WrlFxA3~x%FV!<34o2t(O2|oHk6r0#|b7EK@E}Xuac?j~J_LyL3=ys9(l( ztMB!4jn60=OJ-!>F}L7{?$6e41Q9UvkVAYU*=w4q-?d*d@na0J$w!;h`n+-l&u%}W zr-Al^jE&_qE_2ni0lJiYW=?4n4iP)N{8bKD33$d!l^hyv3nI^tV@ORRx=4Oj^cy3E z@It+YzG|zdTW-|{INh4lGf?{NsPN)!-+5*5QI|pyR}2DS=ye#c#QZ3qJKF~bCLq;J z_|82FGlI}O-K3~JY>4;ng5Fc5viAmfV$YWrjF#8)Jd>8uQ@+!Vph;0m%S*X${9|(u{uzsHKoKgOaLO>dLw|e_&iVrMLQcR;N7JfC79$0#~ ze86wYg%l9X{aW-`LX0KBVxd=-qTjEYL4xeE3>0bCsFz*W*F~ekoekZh3vr;_f?s zj7LX*xfy&yUIgQr)8%I;h&Q=6;5@F1S(J9kqhR35o;Q}oSlV4A!C5&_IH)l2O6daLXZ1UXkxx-?1 zh<;#-Eq4*8yov{XNz-{WQ*FgT*X3zPDYoi&_JF41WGH! z&gHo10TG7I_jc=ES=sAoaLXQzw{?*qD_x;OX{7QncDyjZ3dkbG+2G;E73)4|3 zF5lXgw!fsRbd1Aq!Mb?95By_qI4cu1ggCzXFzGKz3rHwbzU5~>Gc^rN41BpcntnjP6wFrnZ%=z* zkrD4p>U3abdVg-#LBZO;OQf%^fDIoL>MH;~wG!vRQv@O`mUQQJ6BsQp3=z6}B;cVH zWtqXEmF6=nl7;=W-JFo?y|MYf`3OwpBm!wrK!|ztn<1q|z%h76x2p9JHdv5g)2(2| z@*W2hAKZB=ko+%BIj3bd#<3pt%r#^UR!)n`8Rv=53wBMaalS_BeUCpp}D;OxI-2$ zjCZ^6`5Rcb3fl$z5$~09$$S&DicO z16Zc8RSzf!FaUdP6Lbi~P@sc~8{o|`OSqa_TU&d0h^9|C7f*r5sq-=uT|uFqX-_w? z!mFqD5%w(rU=Rkn@J)+_a|D9a{h7)l1w@sy-r@`JhTWg}0ttmW${$D{0N#m!+?Vw) zyil=`_ckZW7)f!87p#_Ol3jf7$1tZVcjDc2q(N>fX~ka>VlN#NhB0VO>D7Z7oFx)3 z@P}8^`wKKf{*sFPF`Gb5h)h|j8-)$`$XNu7p4#=H7X(7kJ@(662R!*zESqCEm|!}c zy~}z|=+v~gupk6tRbsMJk8ygZu%!cgz$Vx{VQvzDp0dng?Xy8|=38@|t^k*(pw9>v%;E5MTo$`C6e?4e)JOO)DF8_QaJY}p zOheOZtbuAIqUYh?8$l5!itolJ1OjPbRsSoH=E+LIibP0SeX)E5c9ilzc2qd{k_KM4 zLM=j44rTeT5ic8vctOJE4Y;a@yoI`zOd)4L1H`3Epk0z9db&>hTDM4@ghFY8|i zAqCfF;x%-RX--(tQ$)HhiY0Y1pB-Lr>Tv*ixR`|&tvw0u9ZRUI2M z#l+ViaDk{L75Roz_z6s{n<65E70R`r>oG_LZtsz=rTP!A6P+&{rv!Fe?BitcFj}ya zhyUhl|2>VPM&Kei9CKHV+rSe0@x#P=0O&7ax4v0e4jAq$A_+pb%@4>K zk_X9)#PDjTkPNL)7)fz61iU&$!aEr}njnCCD9iv$Le7|P(9Yb&NEs$c;If!hXU4P? zyxRA^V1W|alDRn-EVFveHzqNzV$aXmM0(b)$!g5So zSKws4CA~w+|DT2i&^(O{G3TWgUw*x^8Nl0oaB$Gq*SER3DIc$RbkIR?OBz&exPZQj zpf*isw>yFg;59Y_pwFxy2$_y=4}h4eG2qYd2tN1=EAY+%PNWTRqJKq=ieeF!pqvwQ zEx@L|f41Px%Ix)hiIl(Qou?$IgL-heSx|%9bIA`NrLqOQIw9~UB!f@fZRgC9*2OpA z_xc$cbIQ3oT8*2;pNlOC)Dl&%f?KT4dksvz2B63<1Gm42`~hh0`yL)v_cCMX>%Xb= z!+h70m}(Lwh3{M2CminJM^T^H3z6A2N-G^D6^o*$2Z3i8T*kmxBtn$ivs)J4Ubp;79xyq!!C~Z_o$B}+@2%=n@m5Ys>Ct@N- z2Q!+SV9_P@nKmn;P;-rCly3m6XI*Jk0PGD?878cBn2&&3Ub59vU7WophO*T89DM5_ zcLV;Cpz--OXuDZrMeg9P5AI>|`EFGR3Kit}N}mY=X-;sABSs+V+7)WT)nF|vF;f1& zcFewd%{vExzjCI+!BG9uM(#_{XxF5{Ws!y8IPk;-#z?MoHmeS=eu7P4?fnlR7F7r$ z7d`U_H6fTLwHfXgk-dUP2G4&F9Yy91f`$SQL`A#x)jXW$2V#dX@JIHOfz5cNL1@WP zsSZX`-Hu15QbVD}^-(GjEv+HVd1iiF?|{1>yVjGy*5R=8FX+MFz6xK14or>cuMom? zxKo{fVddp#&XffZNZqj={N}O=LaUM=+wN-?1=ut|G3xR7N2k+bEG`kSxct)_DwFjp&5QeR(PAN`|qyr>=)}9F0cp>8^k1bHUhAq0}F`a~9Zpj-?e%Df*mmFD;Lk7_UsDP(97axEqm(kiMDo$K4pI7)T#% zAjUESo^~$b>q(=S_n}{`B2*KI_&Knu=oTyeCZ2->@}X6BvBbC*+yVfx#Q=!?S6G&J z#nSbpuaA)I^Xy0a2~Y*!<>_z~Z4EKR5tog^l!|{=)Q$%ZyYNL1PFGh6C4kt~MtQHN zbNrJL8sHmPcR0>vA`NtU6~v5TQ35`%GN>Sq(FntD@ye@ffzoRk+y_6`#Xl|6jOP}d zeX_n3wO9BLBQ}FE{<5dPs!suN$4Hjc8PJbBciqZb_<)HlNvzaw{&&!-2-!E`2`q@D zkq&~l?O*K7crb@0BmiIj%u=MS#a_K+fuZf<>5pHnK)GFPX?3nf}3|9SZ(+r z*y=34gtu@a0XKq>fe&a}lI=b$>2%#1>9W{Ft}HFM0s0bKt$+^9AFV$p6y~d1_5UZo zmMa|5viluqYBIxa(8@^o8goNyU(p#IeTT;@Xz1t8P8uM)Smssz*5m=u73sqMa4BJ zCV8rS-sE{9Sdr|DMn3PmQJtL5)**jMia@#sk54(XK_Wq;rorzZzJ*~LWMf+2II;6% zLuQBX?o91fh--s49`7R9qJy?vP5|e!e@O*ELL=#zvuk~iZI?)Y0e>ZI7ekKFmFxsM zUN2+TDKr@#$YB8NX|4{XsLDU>Z&BcJ>hvg7C_Mo6xtMZ#{WL=)!@WThYf7v7_&wkh ztU>936Dn8cTKe~x31a-u*6JmX#Xmv*eBWWZC8j;D=mjEzLgRtWL}aQ6NbS9Vz^kKh zIXdp4P}i~&a#d{q)vLukt+5HH3zl^8TGvbYNjx(C*`+|^&dkRWaxl}f)=n=u(UvPF zFl7Q1kQjr3J_KK}TW7opks5j&vahH_-gNuI+PI1O0?c-{9M%?gp z!@HH!5xCv|tq9aHieMXg4uWiZwB=9bDikI-oMiH_CRJw~-h$^bO1aRz?c}Q0-l5X=xD=k$d;%ZicCu{RHd?KJNyA z3ke)is#rbO0{=f( zUys8T>SIkX9jKV3yb>umrqVEHT-y7}Q{W~2OAM_>4p9+2!bzzezJ~~d9ue-#h201t zM=zy-)>YA<2jZ1b4+g*oqvIvWsHef0>F}uNN_m)53xaqn7bCsVj6kNcKs&>%0qVxw zggI;xxB-$*=~P||^Y1>^0iI*V_N?UCp zFSE`2vYkZ*KquZm!PGAEjC{HeYI90I@S`ntWQ?6Yb)zhQI5{}~CHVm98XUgXpM)_^ z=iVDx-t~UcT`1s&zg+2w9(+nNu>GafH%oNQw^!8I$Q#~@0dR(n?dfGGAp@FqzMkM{ z_}E?rNL1Y@a7=&`41=vFc$9v<16vKbU2fP7{6@75F;dv-}{h!@oZ6L)Aj-vU7 z2EDUJx4pBAyJ%g48UbsG&#A^K4YKdYW*`DYoI~}^+X-cRff+i|@Bt4~`XV(`V_|NchkrB>i5otYlQN)>Djrrr7QRorRDbxZ-G zmEB$NWIOw5MH2*^1nhT6oFWi#kBS#yju&OkxJaB12CCq?W2$yL%I zbg{roAW>2N{R+?}7<1oChTNHgm4nq?cRBqIWMV+GOQt}SXY|W)vI%KG13l_&!yNt1 z)j9h3q|Rq5DJji&+76}PUHF1S5c3!du1HtBF18vX6ODJMG;@vB%|^C}V%0bH!;mWq&_>B>Lu zX`o3Prj_0K!E#w3KQ7pz5-c(MwHav39Gn|{`)G8aMAIJ^faZ0eR(fNP1DUcXvjp#3 zR{uG#v?4`YGPTlvwS^0}t$R9wSiWGIui6k+Mhw-XWEM-$1p|1kp)$$=*2H^`X9*a) zFb?bjfajvr%G3W1rl106_8Nsz^Yeef74>lkR%o!{BBXdIj=NFvjPXc%V1RBs?v)0h zfg1PCIu6Y9F((PILvP~xg6|v`Thn8{sz4U(2W~YrV5V!x57m43vUQFIb7VzSj=|B0 zx<-m#0BikEF!QJlyqaJP-yM^6$T-+n`5fe8TwX$p*3gz}bvyG@Q@D5BAhwwx1rVnT}Bx<1XZ*}R5V5j zm|5&!Qt1_g3p1G&Isvm;YsC=T6|l9QQw#l@#BCd=Q#k%9*mR#q(}s3Nb;BDLZAl!mv;YK*AD?*4?YL^ zGPEC$oN@X?`vo9%Je(OOv42T3Qeb%q2xXS>y#|wZEuLXC7&(K*t+@FbN%v^gR+JUo zdnkOhV=DvVUnXjKEUp5t$vw-u&Ai$ z|8nBqTrJpOfgkzn@T(CVR~%Z9;Ww-P4e0a&K<9BdSm!Gp3E@Nkm4Fn*2Zvv^bfd;v z)Bwc#wlirMXi2o?2I1lSB-r3O$I9ua;RyRn&bz>qo|H}~lfgwG0N??RL2E2NSo|Ak z^$!sP`2rAOrQ^p5O))J*=?SB%8Ji%;r2Fr~9e_FTK>b)IRf8M=_8AfH2f!kb((u2I zj`Zt7V*hMxR>&EP?U_;hdA`!NM%>WyAmI4L;h(8pL$%%l-jP?mO0mpq%&Uvd-eFP& zt#nN4FB$m2!A!M*OomYga^~p>?fh+wq*}h$x7qPTtnEktc-YFHU%sE8f0_~FzRy1n z>elui-OD`!2`3;c!Dn-nHGAfcSn88Z3HWLsMH{INkF-m5wN%qPN}x6X3}ymgusxVw zL8~+C>Vyz$Fl^{n_|G*n8`! zD!Z<4l$7q+gfxPHG@>*}cSxs{NOww#NNgHONkKs=5hNrPHZ3jP-QD@E?d@~N^Stjl z<9ug~bG|>`G0?%*eXVP)x#n7H&fomaxx{X~H<77zN({Zh1*?XD+40)62CxohycTe> z%c{IQNb;|(Cov<|8W!7s1%1K5WsygsAo zc^Dsq0f;%z1A|q@DN5N5MECyMbUi0FfOg3lZuS_>n|b;iY5E|5#2X)gpr*o21b{I( zEmT*Z0)ROkAWgnUpcdWcRP6(~3&2hagfddXs~Kjtc;vglW%IL&*Dt5SwSr&xz2&k$Q+O7Fs*oO?4xJg2>xb=$jT96~!f zU01Ml-hPv77_V|Pshmob0&C+Ji2Qexq7AV5Vif$62q0}wArI`wTc`%P=xSO(F~Fyo zrF!Mdz{kb=MG3N;Fp`%F5()Lx+}~xRxN^CeG;a%#lS2EkS_I^$N7IOdX(#fj@?#q( zr|I^5`%OS0^ns2FMS^TJ)ukIPO&-yKy%`8E8UiqJ;b_D}j1)3bY~cA*ONS&3I)}K{ z{mzX=D#-phzh(&3#4e+J=b}F3@Vi2%_LG$cd+-lN@&&#%_S@g)f-OD!&M$Nj9@vjw zZM}$?9xn5mkgYx5S#5*_KW^UklcXtr&TuUWv5s5e;Q07V_{`&3|26W3!v6lK)vX99 z2yr_4AG~n}PVNqI7*rVf@_F(+@#y~4xdK_B%(obki$=B*wqeb;NRrR1wC~pi)VOb- z%+TB|bJRA9MM7&3`{X~ekLm2ZGHs9QZb|!btj6;q)YhaF7jk3V@xkgWI^_Au4ok3Ef@H8&5L_*kP~W^;KSD0|6n_UXuZIK|1>!0C%An-uw$idgVMYIKQga zs7Y=+vWNd`d^FPZdVDmeMrBJ48~~!4sQY<`%0$T~yy~kGtNIPtLdvScKGuB=*#aeV zmCaw7_MHJE-4d(U$QSUl&UL0KFadyn&u~CS8w897ibFsM6MWid1@zfL{z7jqAgrDY zA&<@3q$B{7;UO&+b3CDQbeZGfJHQ|a9jP{S`i9C#=&gD<4}-GQxo-^HmejmrXCxaF zA?izX14{cBIz?o{g4U^%|F%!TS2}PcFE$kg+ayp4#G| z;ZZLt_thb%-KpaeT*N**-MP8msoRYCUUzpFAV*K1A8TpHd)8JAFZ&3BjeqTw-cqpz z_PRbH8u-S74Jku}&dwU)=bT)D)$I&K-r4h|{`%FQ)7kA#VVwSZJwiJuTHYr!LmwW4 zoywOd!WZ?y{`Ir>JT4H8o6iQ4cB8MaADl-S!RvVeE64J)X|&b0e^@X+~t6OD2OL!}=K*5eEu@7I!@iwPlZiSI_E z=FQ4{^bJBlpGYE1a^C|^fk5G-$G{PQ?NnMjml?o(?s9^dZ(8mDC(RUBSNmU`OG8OP z@mh00O%yA97QQaj6&}C+ z)5!cy{YlWL=TP}$Rb1b%c=dm?rCt#CO%48Q{^ARWzDT&;m~pf> z0qi>6TsdIpK2!uA-e=_&^`=d;+Zh|v5r1PS(*fcU2pQE7I+vA;`WrBSIs0=R{r1f6 zfVG_jtZR!mVSo+<*wDY}CC-}=$ik|j9NWAZ9gjzel;LJk%*-%w{>x-~KK20%?9ra> zPz4CpScO9g(m^ZuV@&@Q-3c-PIusU}!A1ZP+E}Q%4{*}IP?6uZ0WkI9tw>ddKLn%u z3zljFuvBzU2%u+^(wnaUoEM(O5(ReGzoLCIz@E780tWC+5AHD7(?EK z`N7Sn3kG{P%Z}cT*GY|9`$+|NB(rV{dSs&&-|~PsbHCVt!O-a^q;3NNJ`^0OCjopC zYG3m+bKb@b(hJ8kqJ!ajxDQxRJ!&5o@yo#RhNBacca*^se=-Wz?0VT0Y5eWShDHMv zX)?->d*{upM)D4dLH7YI=HI%{i5CGUAm0JjI)McQIPP{t&S30dQckp6U_RbzhDFJZ ztYz9@`fLAV0=t5L1)RbGOB!YDzvw*3C0Qy}0CZr6c8-6ayQ6)8@Nx!dnSp*uc!1Hj z^Ao@~mgpXLM``dbQ+qU9ay4=N@cDYK<22#TPTT{>)SCJ5ktF4)tE$6(0oxm4;J7AU{-&@@eYKA5 z0vcM!`R^(|<>R!_^RueXXaqcu=WNDdin3-8!bi~ z!7Hv?{*a*Buwt@sli_yK7zUj>w?%-zCjCEF(v**yVWhA8IJAH271$e!%|u>907vSF z(EvP-KFIk&?+%B@1_2y0<9|w@3>G>1^eZS9>Aix>jDEOucB1Tnbn*?JKh zur{gKiFX~4QjT(~$;fZ5U(jZ7j`*IB?VpGlTubx@WF1#rFwZocY*%ptIZ}@sCBg|T zUElu}=dC@0lfITCQ`z#b<`+;dE{W zj#g|qMYr4giGC3v(UmFVi$w#6`(epFDtHcM66FC zKR7&uQVc}z0vf#k7r*JU1qQ*lq+m!>U*!$EUAH+tMZ#wQgBh-;zuuV*D8X=Vni-r! zQa}d9S-=Wi*+%MuV_KO`@R2y6xpo15pfm&BAAr9;_&@KSDOBLK!(hU5aFnnZ`OC%` zz#I;26CZUPT_o{L!fp)8Z0Ft<2lVn%K#ZU69ecCfohb(Kin+MHnn&>0-=>>0__G_p zl+a&o|2h4VLgI)MPpfR!~gN19JfGicOW&8?mR7gno4$(s>i z)o^Bk_{v@~B$rvxB)MX0)2vF24b<8oQv!eeWepX8!}{&(d+%{f5R;5gbN%}D!4hSM?00^Q3KdVR!)v+k;lnjr42VJAT)r|OGB;CDdPyh&2KMI z0j8M3W7*lust>AJb8sYWAHCv-hh56%&5SPZa3o=dnzMmDsu`x>kU`nK36dg{`wfKt z$c9U@cn|^Y`1<|_@Q?5HC&FKV1F0vQ@>nFj=->RC$2KDgP=CC)TAu-zhxK-JF&vHt zsOTs=Ne_I~9cp&DzjHm)L5AoW9ZlM(dwm^W|%p{5$NVW_1H~?=;*T)+|+7;eLYqD_w`WJ zCC_+Y2nHbAfiW<{<)Ul8Y#hr1o)BF)Q~ls&0$4fkUDFDZfn!$>9P*u;c}h5*qAt?g>5c@3|@$LO+grom@wLy?9E^4v-95)gDZ zQK+n>;a!q~6SG^zsQ7YWMxm990xg|)50;K=+EgNk)LVs~8u|=O-MD~16lXDm-wG9} zNg%caynsg=EE6jD$3|*l0`E0@4=o0TwMQ9R{v-y+^g-zqZV&3~#*;=UROGZU{?9jV zdb|`^i3@mcHmzLB`G(>KvI;he7?r5uhvDE;7%=0oseFLJXOZnbi;z^ei*L zracm|)go~XSO&%Dkp%Xsi>(zB<2LLbC-Lw#LQbG zSsuT?EP87RFiEhXs#L%?$4xrI78tJ8*7rt2NG;$$m4ya>{cco}a(s}meU|J{KN$c& z=?DKh4XNEoAy`)5aY3&0)QceSJ_(~akbxiC+_+o%v7XG{qwG8KkM|eg0N<1lcP`uI zu9FObp96HlpG)h=rtH&Gj5bYocRV2Fzz=wOW&t+1=T1@8DH*v8MZb2GF&H)OI;JOg zEtx4Ld&k?^yop@b3X7;o_|w{cl@a0oy!)4h*olYX9irQwWrT zZGXtz11!W4wCBZd02$jUt2)I>m*eBF?K}Jq=um4oc>Apz2TytS+EWm%2Qn4x-v`07 zvQXel9;7!wS%2-GPa)4A7O+jiHqF${r89kQ3D<&&^2!^j2iOZ5uoJvrExiT%Bj}|r z&;MR8q5UM(n_nFC4L85}fo4o=3jSEzN!`GNVFvFfyR4nM^J5c!Z;R*lWJe)}tc=X3 zPZKJ7{#Re0muj@h zuhPwN%ysHnt7zZ>4i|0lu6*DGj|OvsFXr#SM+i=UKj%w#NH;D&vwaL6QKu2{dEM1e z3(WLSroq*^b3soB{Qw*Fm^S;r6*&QWs4A0`Hm2E^z`HEgePT zz0M6xkh1T=^~3P)RjdA=(!FHFZjOephjE;hKUi$SRzLp7uuEE3L;*7zXdC`7rPX|6 zWLRPEL0v^^3>WV6hikQ1@Ug!Ps@6Rvo6Z3Yy1&*Ja*C0!l%&czw9BI^@7Z5U7IHrTJSsudphoIS@^1x|1t(nEKL2&)M{N~m&nL#E*_tX z(MG@K8D;%BU~aYDxK_kB`pJ4k3mwah0wZ3iF3Wc(Ai%vNx0D@hnmZYZy;A7m&TsHR zau*Sph75vvu+*I=ksI@(j3fDLM{k_#Pnt>!GcT85k8fnv10IM4^wbA5*bIzwq@9ax zpB{wl6#LI*X!W+8BoZ86xl-4tG-U#Ou-sk$jm|M)eb#} z%z+CXPB=89ml)>H28MG*Q(4{0wa5Xh8&=)ZC1fI%9}lEr?QE-nw$N|t$DMXZKxhtK))Vv zE}M{$F^m+TIGjnU9`#1Kd;H7RyGbE|Kt))Yi+=z=$}A9)dm+}H`*RkyDlZ#ohUHbL zShWCveq zQK}WC5CMfnPbUmB!DSAhBns6Q*so^6(vM~aVemaE;Agp9G652r?2bI(vDH#dgKCJ) zk9t8BkA!Fh7%7+&D)3Zh%=V>F1aKxks>?f=y%PH?l373ZC2p;zo6mB)~3iE3Nt(NvXo(c&MFhrh1rRd!U^x+$?8H?&vP> zeMn~ers}I3HDbiouz`_=S1fLFj&~aVS_{bbIIzotU#(|oN7c*>c(ZNMS>cWZ5GYlX z&_2uHGtBA~nAqegmm z5OxefILei=BO)B?PA>lf(5+U$f&-;PLDiwXAOoWwuicwdn9+^FVq@0K(M*ZYaX>@a zWtmR02yij$e{y!u>>HQ0nfHvZKQHWhEoO8Gt-Ur_e3(;XGJVz9_<3>eRN@hIr^wgm zdf7AJ97@G*VxKi}(@)j->PSf2@M@8B0S$xw`m*PS-}Yw$NlV9o?9)=eGa9j0`Au3n zo@8u4-_y~c)9CF+SQqt;XAjbzy(sOMnpz&Zy@%nu0z>zb6|9U1}tMuMD zUw(We%s^Ds%d2_{rz1er=dhijbcRqs?s{x8p!<9|6+Q@>B46wN_hVvLu;`@HD*t$2 zwMg^X@#2~3qx`O$wd#W0&UcS*RxS#!b>-82D?FCJ(=0H0#NwyU*j@PEd=pvlqCZov zYV_K(e4HyIhu*c3DS8A`r7mDpdCKm$UigD1k&u~^IlTU-Q1We2mx8?P*;g}_S$JR} zGRaM}X>iKm;ouanR~H#nl`NbP`PYEd8f8j;d;La%>zUT0H^aqxCLJ^5fcsvgXYh08 zWslqi6la6qVO&ij9X~Y@MgCdEN7|gJie^(^@D<}`XQ}|MvoaV?B1}GUp=13^p-wUN z47s)Alz6%(Z>F7oqlcuHq=NTC$5(f%-e-j)uOYZ^9ymHQ(*Xb|wlc=Px}DN^9P{uX zuCqU2G9+?7M>4eaigiVXRm{0AtudWc{~jvpM@+(T<(!N0*vCPg^A__GJo!tc(88t| zt4xKrOJ0(p#GiegMNS*_o1^T#njx_rfGD^A^yZBOrI%r%-W4<*XPJ6tVf^XAuOl)8*J+V^qDZ15B4W?kUenXEXs_ z{%GX^70vJoP+J5Pu7Uq#Zv*3I!3UrA5-f{rQ1!(ZB+bDS`#^S%m(mHi0Pq1wj0Caa zbY`!Z+GNVVJqhPfFPy(VONY~x0nsJ^MA7#hH@-vjQd=Hw8$0~1tIKdc=;EMW`BM@8 z=|`XAZZAkZuQB>pAH-29066zBPSX2nPY^~DoNHZ?{P#YZf;Zu~7EG!CHFz^Hc<9f; z@!!LMkL17nmK+hpdub1Z?Y&330r{?1;9h0d@Ovas7w7j+EF1%C)K2frtbq&gehpHr@z)roh{+%jc(I%ahsf(xPZ?%HvcEs^E4lc$GW>dI^>-@SUrita zDMbZI5kGXEZ<)D1uKMseUlb(t07j}@3+oR#S;Sj~_icykK-?bC?3q=rcSFT|!7Yw; z%zRW>Ul>_XJvK)rVujBK_a|L@x2EfbSPuB!yP)Dy3!egtlQ76oX=w*HlN|$|bO~6H zE`{;;0fIezKiGT}ECjC%e6rm)GndPtY|Kxa-{Rj^Zr^M4<`2 zAV9K*S1GF7s+{NnT>&>1Ca3$583fAoh{6*SSNzZp4B(u;OqEjdpCAX`vx~ioE3+Jh zFy+3jwjimEJSL_uNTCH~Zu&urg_1GBvtKl>hYQ$mm%woEuqYG1dt&i|A5?03AlLTD zED6Q`1!|;pnA}V7s7Q?1^(mnK!xL!; zS>P3T81-tYrMYx}f%9%^fnA7IAV=f=h+%X8`G(02aCftR(gqwYC7bZnfnp&mhJMRc zH{h66^x%Hd1h29K^2hR7dO#4UjQw6H9u2iEBYGR1co4X`HM8H#E=aVh=_jC_^>&N~ zk1bI2SzTFgtHjprce1@io5})Qxh#063e8=RTf;yJ2;z$pHIiZL*RA=jo!kp2DyYF8zmuoN&McRGh*c@r>S&XV|x!!Jftdbn5F66 zF}R@h?bgJ#n8pFZJh;}lL9Ud>XO)idVA z3qD=#1l&AtJ~xo_gl862#6JQ7R;)N@eAY3LBe#|th?s};JupkZt;&AF<7_Dzjo~c0 z2sI&heEZzwtDAMT_XFAEVby&8`Q87nP^b)|aa|TA3BV(8cAj1e={R#WXa3Z7>fvagY zH%1h5Y;EXukacPGd_-*NtkTOb_xi9P*}Q-WqZIK-`*cn`I;^WN{pw_UN)cExbl>?) z0my!J0%NG76ja2J<(XRzl1G7lY(zC0b+V*x8*Q=$67ON=1HCd*i> zxBcMy<&4dPLmtD$*Dduobp5g~;^ZUAXFOV^dkh1p%6$Rn4ZdhWvCU|N4Zco-s zN(|D~%IzmuH|u$8R|kdZwbqe3N~VBJfYjgde|I*+?j?!sx$$j4+sfECcjq;< z;3xLR&O{>aQRx2A<>g3kxM)oMbiq{+OXP~1^Q<=nYtpgt%7c>8ak4s&=~3%_;=0p$ zsP`_dK|#)zHssY+BAbp29gEWDjTJ0^&yGG*sIA=dGx|56S+6J^+B;v8WNJfPJoP$= zwbc^Ci*&s}38SD+GQ15JNx#?(G>@~Ucf^ygU*K4rdf$B@_Wsm)uXg4tdgYcAr|zje z3|Wwr(^zRY?}?QLe;8E0#=I$t0D>lrz_cYA<^q_g2x5UaxjyqTvRzIDPZ?s`C}ohU zDwZ2So$TEhG$mC2g*XYfB+91LCAl_aahK0sJHNO@@cZHe4lM{PwB}M23~S{14~y7R`FL^xxrjd*NxD_;aSTD!4FLtR&`s= zF$srq*b-V`C5xY(J^*cb*J*IlDUTDE9PCThO9#;2c&`{xJ6cEDsf?^kfTkbyv+Ep7 z7^qMWnFNWyEX#8@asv5TxR@?;DLwHtU77r6G&g%RO{!{vt~9FJd5lNR5qvG=u~uzC z(PCPC(a^xhwDJR)d?>dE=qXJ><=M|T_Ydsx(+w@F>lC#U(zt_J5I?N-!rXkMM)Z^W za(6koYCtaJQ1@`=DW(&G%O|I>VxwAq+l*jti-j|Heh+OKZM!Erpt_E`-wTiu52|L+ zGsTIUlM3oU$rj1GYgl5+*a#+=cye(d+@~Owc6M0tYm;8MyT@$^gw9kh#w?qn7i<2z z-s-*H7r`E*=$E^k$%c}Hw;vKer6WpVX;!9z*Dpij)_C}Q8{~Ly&hyZwO=+qKhOAto z6w#M;~QNuC@E%oSKdQ~DTS0eI*h9PD1Viz6ykYq zCV2g^kB~aDSK{0ENVEO*Nzqo(*(;~3nmZeqSd5<(F@OAP*=WW6g zC+C9CT&Y3_h?R+;T!Bc9^T{_3~dz)FI>=`_3mUb1`Jsnpp-aF{p9% zVcqP%{R)W3k$&6sv90Rjh)*#p>y2LAW9toB;A^Y8&16WyWFYr7F=q3-^kQY+%&1Uq zjk#d0oN~|ZSyG61&QLSbZHJi#D%+efHRMFznmxdg&co;v>5^x<`}~dkBuqT!Qx*-x z-sH^r3CV2194-VYSUu#DHyA@K?)0?Feoww%%Nt~KD0olcU^?+HhEiKKm0^t} z>X#B1j5e`0iBKWXop46t5LWIcRq-+BMS(fE{9Hxm`WWK@=YcWClUIdL#$s~CAEwvc z?MuRu#Ehpygv==o?9^q^r>`McpO&*k>?9hM6Tz!Rhiq*Z zCU-H9?RmhBDTnqekvSCC9SDx>RM))njv;G(lzW}FQIsTHY?9cxEz8 zn)H^;tK3SO5oN-e2H;Ea=>~;6#c}W=2BR3wmh3vRaqPP!#fmL{<#MGmxHGTMj}63c z;CB|$B3J!0BubdL?C9)K_i(QMdVb|*&oko>w@cK@Gsts_6IH+VoXrEiINmMfw{v>p z3EP&yW)J$EIq4yRs!1z>3NF8C3`s>Kt7f~Lh=2;CbDKYM;Od~pk>%j7r3{g6-Rr*X z^W&%ebPP8B3n=X>NN?>f=<)D(v+A99fJtwg&WZA14stx`+I?orbobWLsdrCvL=7r} zF^++p4v$v+y*tI9LP(fAQG-(jI@;8_1AsF}0k{OCUXTe1&>00{ke52zd<6>{Yn`W` z;lbh-=6l1VM6rm(*HwQqjV1GHzmA4WaeL4A&E__V10`Nahsfu+v6!L02q+gFryp(t zvo(?p&eB;jMntzcf7Q1~tQ%JjcSqIv+7aK_VZ+5IJ<6vuUn9T2xX^On_dM<~i z=)jFiH;x6WXZpz=xcZYkM454N^Lu#-DoE>1V&j$>AxE3)E=os;=p6>HFeSY^`!F|@ z^1GM$Tt);8bWbCYa)hVmjs*33czK&i;PU`jDg2`~9?HOve1ux97{W*wv-Tu{7Ne;w zN!-v^8j+MK%C)%W3-(ST!g_U|Qbdex-y)gb9LDib$DM`Y_#)TPF5A+28PiN{1$myJ zJ|;YOi)~LYIrQEH>w4Z0H2(czYp=wYbhTZfcV-&qp$0nBfXVeU77bivxOOb5!e#<%rUBw9UX=v|+iP`jn^V_C2=@h}%u`wS*2K;_^O1zeXQkxQ@@mHhi_%HJjn0y+DOx=u7sIW#PhA_vUzV#iJCf?C5120v} z4_K)j$<8Eq8T6~M@Ce`6{&JF=p4@F>Xj$M4rrVk?y=6Y9+!y>wld@v6 zI+>UQZpzms3`wJc;+G>?Fq3Kqcl;!zsn?AkPYQLtjOS_Zoz*{)2c4669C)!n*uk-1 z^hxY`Bt&Og=X2d@Z^(*Ki{7kzUg3S=sMs=vAdbu zuYZxZH?;!)p<`{~_KcRBn}>^*Q_j-b>X{oYKOZ+Or@VukrHhlJovE88t(%LxB_^k& zqn)G6V<%H{OIm)=z6NMZ+0@mRmY4s*A0HoCySb`ax=1?OJ2^U7I=In3q~%nybg%;L z^Kf(X!QUWbZ3mjgRSEqCI_o-mBnGxzEG<`H*k+MO-Yqvov@QPrOxTvakYp8I}Wukp*eaI?XyKpRKi3OW{lo-NWx{p^1}{=b$+ zld1RYnrgs#VbVJtV>=(|{NpBR@7ZmYtsv-rlTpSvGGsnT$I}MSFdL17l+MF`qSoSOU!wBBq4d71>fEujt7 zL`|LHjv}viYyr?I{Bl*A)2II=;O0bZfxOpinQ852n?dC4)8LK3r^7tId@Ikdgw&&X z3m((|m}|7HpsdS|tjqAM({RNVSv>D{NzpwbvAr308$7%1paA!RH4|!^^OMlD>#ezW z0fW|(c$XW&N^fG=jNblMn34}@pW=J3H+w}<{15fAj`Z++`hxkI19pb~)F<27AOj)$ z)u3RUh?`+Bl3f!#9xA(T6H^$x?$GNN4I2N$sF~BKm#Yb)YY7drSPioQKurJ8 z&uUicQy;zLn+5&%Q?*?XzkZ0{WSie4;(o5`)sU+D@roGe`X5hitOworvJWzp zSbl9GyWt$+G_k8w1bmu^Hj!1Ow$ywavfa!_q_p;Ozn?FQ$X*ljvtrrTf z6pSn@yOAi2IyE}1HNE*EbqpZXOEHgsHGSOFL+!OHNpmicbs%sv&*#^f?;CNFgSYOR zam8>c7xC)svO@KO@8dZlT7^oym9GytewjvNcu~;zWU@D-C;oXsDb;X z6T?bdz-8M-I=I-jT{xDWiARwk>*g#g=I);YIBw#g{#3NN5_UPSqZ?21y?IfVOY&Xs zX=HEqK{NF+*K=2s(-4zqo){b-^Cyg&G_!M2*zK6-kQDlrd958PPN9vb&>+N;QJwld zx)vM^}Fa7W7_C_DUCMZHd26|E6DiH#?%*ugDe>WaN>ER*`*7$ooQ;Xk$NU zzHr}U`wHci@!I!n3zH_fqtvXk)U|wb=Hm2j?t5WMS)cE$^utI7Q$8e<&ycB*y5@BXNQ|;L5_1kt0Shn(CwryCpMIbz3>m`LO zc|Z(^cj$RVVxx0o0xqfoYG=IxI8ZWjDp-CBvy!}Ymr>8L4QPJg8=P`^UV7t`n{?rz z@GgF1lJB1Ix_Zp{hph7tvSR1`9x{_LFFU=7A%YnWt29j_ODw9U)q8pq^3T;pU1ERG zT$IraLIci{15#^aE&T#av^J%Cw_fTFa0mPx8ixG2V~>s_GZB+bGz4l%h0Qme#3;=p z)J)-2tQI@^ZHQejh@EG3&72p{tS8^8%$y;4eaS+-@w~7RbAnb`NZV&UFmzN++}n6RKDll$%JF5!CQm^LVn{Ji~Z~h~M85@auO2%PdINZHc zy?|?i*SDfcXnnq*6L6%%;EbeXbu-a;H35f=0u~u)&MZxiE#+bf0@1R43dxa3=+5Ig z&j?Gk19ndQcZ6onRMb01OHU(8X(bHFhubHI%##yM^2=Qh4H}OO;CZtFTOn@8Jf6!W=qzGI`PL5_+&oF zd{GuRG*Br3D8xY!o-cwT(kEHQ#x)cig&;Jsn**_cUXc@o8!i&sxt{kf9JGxyeY=Aj zr9M9kr;kcJ=U#o{xGQ}_Rfy|!-dTFt3F=-iF*fcemcD!x6xEMm6Qm!oix#l^rPOch z`OL+1!;I?xO{jKBpraduwmc)|aA&b{>cRF!X6RlBvV zypn(KiEl4_XAs-*?kzt$Yhf1cKk^JX@tk;il`(ThMd*Jh8!*JNLJ$<-+m~{=$SkHu zxn{}fx26~+$KT%CQ*AUD+e9LE*(`P$?OC_rxAT0)ocbUI%>1>nlwbkEXivp!8-Kpk z$qU=xR)pPF(89dzeY|nc-QKn$W&^8R2Oi(Vf|i_ei|@{^S57!!$xT?k7tR0NZEK^y`v=F zk(-}=vU;@HX&g~vrQgiewkL>rmGTD)pMJxeR$tye-d2BfkXvjj4zc@v=!Bz1htVJk zXbWxSqzto-3FsT@;dtz~WAfrJy;Z1*r9tB6l#FZ;okhg+nnk90R!<@J9kNy8!|MZvs?WGA|Ft4*~J^4`DQ(;+) z&6m{@U+T~r(Q!>s(H+~uh{w31TdFbMpSvjk)I|2CJxgH8a+ZIVvL~^pTjzrEiKQuRUw!#)s8k*|mF+SdJS5vOLT+nH z$BwIWo28+hklr^w4iluk&DGR}o*idTki{>wi7D_Z|8)TErX^cb)5p(RdUox5BpvH~ zqp>5mn^-;f*KpAD{bbH;KLyzxd)8r^hN52X${TRSP+V?W&9vw7FG@0rgun1E!XAwE z(O|WNDAp6)8bE2nx2=DmUlyWUs^gW|q;L`DZQ%k9R!z8Kz*(%zN*5M?kj2w>SNp<>+s5ki z3*iM^nE!cxz&IU!hn|E7x0?SKr*TrpHmL@xlG5{!rDiUKRAgaTUKA$Z)cG4%X_-Cu z;@9WzU_PVDRNdGWJE)IuHFlv_qwZvzPv}9qx0<#~Ys2a0^}4%z4!=@%Hf?rnPu(V8 zz}))Xu~%m5SLC@_&(pYtIIxKaz>Miy)boqa$q1ykUK;Y5Rv%kth!UAf`)_I!iIhqK3K17pjjO$F3q}ZqeH{iiH zPCYJN9(&?~LX71^rrP}B!Pw%EQoM1~;EP6anLgCZTTjtUqDEPI z7PZ*94lDZo8b_m+%Mn&XqHVk&I+OY)y@?L8jERfaG>EdELG$#dQ$+Fsk>W~zK!tL} zY2B$4yW+)L5q!M7i`&;byy94bOvHzqR$>!E=&^No)XM8zodflh51mkVZ&`a~E$R3# z>77mK3-wIfT$O>)J?umsy$7;|v8W ze4pDE82Nx3lb3yg~ z%eW^wpXj3n)X9uddl4S_N^Ce0NCq0OWHVY7@D)lKWU1ZelCM8IRaWt$X7e2%%p{eC z=@7ri%ll}9o6nqY?ZZ^CRNJsoJ7CPCI9*T3PLHXPn5vX|^*U%|Q1=_3w^W>mMI2+v z?)yIa__HJ=-#huY%xYB$3I(Gx92NDga#bsN@zHgtaI}=QvR)%LdK=T2D%J-q{@{#x zn{!FL{2)bOPC{!y4MPGdWXmG(1?oBD8__LQYKIh9>&BO{BK*5&BBg!ZTb61{Rq#n z?#PD_BWIa$<28sH5@3>H(vewDo*Vlahwxdi!9Ao<23uEW(@)-{U->J01B6pCjcX&COO zvR151gbs0ZUzIdV8~k>i4nK67x_2c4ta+g{UyT?c!mP>&z<3(6=BN#_DKMLUn)XAa|5BKo~@cIFn&_ zf~IEj+*U)WZxZ`nzq~NQEc|nxhq(;O_6b8ZM<`fh8}fcX(HDVIwSuYC!;!=5+sxAh zAq0aU5g(0sv6_CY+0mp!#l}NLe|hBN@{f3v`j?>yU!rI5Lf?{OIl6|SAo65QAU=U) zf0*OOe)n3>RYEnDB&byjB`F^@$b-F*JjjP2GX)(>eSJrM_TNswez=w!3?i3u*pqj}B4n23@d zL3N4c-_a**ty`ALFiH?RGs&)5-lnuG&BY*D=45U3lI8asyiWEx($+H2z*l^0l>a_( z`IEP-yq2vR4kI$^P@zDIsue^qPG*Gu@U@=pdb|Hux+%K3obtj)0gSgvc-$VYykFD% zb~`THLlYXX%en7vwT~l_E~y%Szwqm!tal#`os{ILcP z;?g%4arn6f+#XSUMp}{NXIG11^kxHOW@_{{${*ON*LH3hn2TyS8V+Pc1wAjd{9qPT z>l14IT`-cv+%Gb>pn~rvWGZiT+g-ZdSKS2@BP%IJX=8lqnPk)%VP&75B<1@^RvY5< zr!uu?4ke|0A8j5sx>!^5;X<`K*`8g7U+d*WNE_U(tO)a&L;HzAVm<|69nDa*!#G|N zW7cBFO0?s7Lk~bU83|`(}6E$@hzl@!$J(?cjGUgq(t2snA~GQ zrW(S!%)$_}p#7oG-LA}?jg=nU*F<@Ww#zRmp%BggO~o#cP!b!dDa9Jg_h^9VQc~Ww zzbP@}UNZp&%*KO2m=A*7&M9Ke5w3;GF7>1hemz|f62|z5-{}vIH{|T5){@#1eo?B12#+ij z0<&h6`nHjNQt*fnz1#S~3@*NAeI*_f@$4bpR=)72IYq`HZqYYCoV@bdm^WcGnsSZ< zjg!s@cyAVBX-WsWxz47vNy|>GLq7e&oShhn>z)6X?{q~7HZ>FuF(?M~m z0Y4qk@5j0jC-RegdG0@b3!?(-b2eu!{~dewq!U{2$H4+G_>4wN+I*5-LXIsP$j1;+ z{mD4)&R!4Or0c2SYYd3nFZQEQd?!xw(0iOj_sXRCwQ~o;vt3gvb46FDFp2>8F^9moZ;bvIobQ1Z&ppI zQwCG;pzGRAPE0-p443HmNa{`01|$V0&s1*RJt0&=O;^%~$N7tG0(cv0Z z-G^@!nxmDfRW2xLlyq~kACv*Q%*oL`{aIN`@mzkh`hGCF`5 zj&QyAP&Ij<0l&ZfJ*MolMT>{LBxv^$pA@7J4ZVp#;Bw!~LA7aod5^I5>&F2@HSBf^ zf@tfS=Okj^Ifr_(loScHgU15zB+goBRjab45cTl+P!j&!?(uNo6sd{Rfyq>25547> z%aJa4S;&LWG^Cu~ZpPze_NIBa&_-a6jWI6sw&jaHjsko)Qx_}TV`jX@)U^sM)%Yht zD$thZPKwcx+sOlr)bEik3tA}Ot@v~D(cdTBJr1sL)H3?w`b7>MTs_$0gJ>Fn26{>|ar}1%-3hgd zttX@jD>Rp63h&Oz8d^;ByF{tvp|b1{g(}nvc@)SX$m`{Vm<7|5hg7TZTOJWq>qxt- zC(0n?IM8%HMNHJRUmtnHhn68t44ePz5~rYNdIn)eC5v_NL@&aoG*XM?yA1p8gkC#9 z^nlQ%JypPIhuHk;waqG5-l}X$^+Q$0(}JYAT_kwkN~D6}%2NQ~!PqCBu< z?8mOHU+{NZHv`9=%lx1(-=|~0^LAGtnTuCH@h4V1QbwaZhI@2e6dF&Y0|ne#$ft z3{nS!Q6hWKvr~~$P^1xV#rS@`HG9$?qx70AR{Hs1!jePUsm)71Tryqkcv#F3uE!(o zCzTdIW~gz9BM=cMNOzGXu#(!t&7O!Cp2o%DbUkK(cH_?8*&wb8fA#9FbhS_ohWPj9 z_gvCyw-{IvwB40C5O@c;D9&{D7<6&HwBydgdVhWw)PAEpEB+XH=`m_EV$an+1I5QU z%5MvgJ*RyEs5NpMu^XfihY*NfhW(_il2YBh-x4aitXz%y4Kc9{yU>D3;u4+Yex$4D z7iH2h+$Zl%4W-M7$4!OuEEv{W8c#Ir^zSHN)|8eK2fFV$Q+o_U6%NTm@;%Z*X~JF8 zBu}5x@PFl;3nsmFr|n^LjGR+e$CA?XWHQWWQ9@jUqH%$9s)e6*^Ts7m*(mi5qwWUU zir^jxqeb$X+UJ_tmRPFH%S64UIU9mZx`ke{ZU}l-e4(<7YjMNA9TV)dDBsu!un_qm|jwBlo9u!)v;C;s?!61ht!%$Gr z_Vbi#I%-**r3RyNZj*IDD+r&O@{1M~8(GLu=FA zN>OO1&UM+|Z7Y^W5pQfw*R}kCfBXeAtC=pZy&gfQxD5=s5-(WyBV9sqIeDt`s&+(6 zxTzHOy&rXLZ$7HUp&Ga~hgno-n%_resf(b&aOXv3>kcP<{j$D$Blk)PS{H{}%wY zKuW)++8{=#z#O4#FY+Vc8BlSs3ivT8ld}avPz%TesRED$W^}UNVqmmviyD{~M}7oQ zVJK)6++x@SgrHUz%4V;}NUmu{xC`Bxf6wGcY6R&GFTiSS!H?jg;zyt_w-|^_9I%{q zFhioc0I*etbITll#C8LnHGHDLMGCO`V)#*zISc^gJ3h^y<^|4Vpd~Ll2=(GeZX$Z} zfS_fyE+Bp+7joiO2sPvn0GnhvOOw%W3FtTkZ%$OopxP~94UI7N~lE$B|H!}0YU#CeaLP+pQ$i27!*_n06(=?yY zy6GbIGKUbmMdoydFh|nYP+f}yIF3Cavw!g;OU<|suEaSdWDF0|a3bfaj2lR_V>XVG z@ZdL1k)lCJDBW1&r+{ds4pA2bIGs4O8?<=uTWDkKm*v-YQ&OxKqkZGB5oq zvrcVE1fsJPKwI&tYfyf>A#Q0cd%VeBAta%nl;rR<`kX43@*`uQuotNOp!-j-oTqMj zq{ezQ7V)SOIpf4Cn^FdF83;KAbn8Gb`P7hKw<5|+VU^5)y!HMO1;|u&tSddEjHm9H z&a!`GX!7GBzN$SsD@A|VMxz!5CR;gY%*ROg63)lX{au z!;ZN@k61If*o#*wRxXNsV~EMuoTv$G6Prh5$RnTfFSRj3D3hmZFR>{yv3*jnud#vz zCiqH%>ZFoW7j7m$6C^_xGG!mf$TsdDMF+-O>M@R4WV5`3b6NZu)hn@cE>ulJ&fxURZ7?Q!^K=_fahrH-AR;_^n*v}L%jq@YKVj9i)I_t5uVF#L-E1~Vw!MJZ08ZJ6Ed}QDBT&}h1F*%GMSf(Q2kNZ(TT-Ky zxlCPgR8==#@bFB2WVstZ;#kcQe#E^-KL(!D{t?}nDJn1pm=j*bYj~bBnT8QtIb7sN z=5EMeYM>$n$)^Jlp(}$?hdrPn7 zQME+*1n|;qYi^QYMho`FZeU>eoc@y{gu7|pp`OqJwn29tKYsHFL=TyCs?~V&b89bf+!=$u3UI{1II&_d#cL18FX7tW zH_@r}edC*$QN%GknQc0RWlz-B3PKt!(xK!Oc`@I=`bjCp30Jf1Oomt%?KVmy{YC6CW`QL>R*u3d}J|Sl}JCO@bEN$uO zmi>*-Nno4sNQNp4D;g7I^HdeSdNXBlURIrcAv|P|*%)O>L2GIe>=+H-;(Q&Ml%c=X z7!Aqu;Kf60fXk+#h!A7TyWaIKy-!0kR)EPMo9l$1;wYQUDVV1$r40QOoNmVLyy51( zfqC*z1Z3b4Vr3wfuc#WsJ&ki>NLihVd`%I>MGlz>W`me1&&W3NqhzMDxx?6KLboVq z;?RO3r!?Q_f=m;Q7`Aj{5H@#nzRu$QMshlHd*D1gpihZLqt=z-N2Y#bPWF%RBa5_F zAmIwrt5Hb5hL#uk5%7#3S@PZS{Ud|n()}YOC=&;4h97zD#js#RvI3LEVUrh5VHw|m z<0iBTbnUW#bS6LImUG=df(gOM3*$%X(spJm!>mu>)8>)A56-l9x43`g<|02DF&Lb0 z3JyOq7r?Q8aRRtC&508inhzwyUV&KGTGn(aztNsDQb~jT0{`kxE`VocCFosqOrFm9 zsuukh07h+0*)#W#pm#VyL0W;(T59A+v{E%^+BL%+bRyFwe?k`+5c0ls|476NS2Bwq z&C&k?^01MY;1=Xa8(9s2Nc~C@lO-2g)Be#SKU&;B8nxv#UD$FoZva2Au0C#-cYw_{ zwD7<#!3IUtP6znPdr9izPoo6n!7C0PSjQm*P6Yh0KD>$1W zTLfb0I;_daO3rrt2+@FM8AVmm#enBzycjIKsngR?Oo`0?_>{qKK&3qE=O==}H*RLnqI4@gAbKe9}1 zq@u$r!?|VV{*k%BR5FJj8J6KyzhAfG?=!$o`iNP^njX{vr3eXIkY468<6|@?GLtW# zL+^4j_Dp_+*(nPo+bTkiz!)1SwoyzXrd^XJZ*U{GAQakKEk<}a8Qg_D3w+9uG;u8d zm=MitoDghwCIXyD@Rei%Zv(uAADPHZh$J|)GwvV3{0GaAG=yfl{r1~U`e`8H!6NVa>1%ufrwNZu`4P9{IM9oA z6`N23BZ(ZFN;U}ikk2_YZ6Uvn0~?xfh4=v@1rqmiqp(bW99zwG_>r7O30xjZ+>{>? zLII^TAAR6(k!+x|ZUE;{Z&KqWevPAwAJvoxL1`mUKg$Rq?@RSu;A8|`AW>3(H11VWg$OjE7~bVk zmyWD1sNMkyO99CV{hIF(6DIR8RY6lqDvt7(G-V@@ujG-`Zs5|P&##rNjd2b>%U#Y}_VwH;| zbX&BDI;G4DC?21vH?i&79W8~rT81*NLJJ~C28m+a0^W!#5GQ zNT8b`U3IdV0!(mPN2S@>XNWk_{UbjL(2zgzQ->%Nx9}wqt`tvl!XiIXFm{P9jlwPp z2yc<*e#CC{sZ{upfwcM2My~737vKT?ML*3NovFu&VV%Lc&?Wu6_kA4yu!5nFFFjvp z4wX#zro#LbK=_fm$kH36YWkcO|@xn1qBlZJx? z%$O!Syv9w^gtU3w*+md&Q+@zt`K3J52f(_tfiL|Z)(G=k!o zlha?s!jLwVOpC|GkJzqXh+8hQ$P9$1*9bXe7R+D~NDNopbnovoXczb4hmqr?A>v+L z4*(Mz#OlAGwZ1UM#-u4dwGs;)+6e-9xY4J`Bu5J_ZDK_kt~Bwt>G56n((6(1i)Agd}?B-((vWJY0f8s zurWLjfrDp&qIpM`hdf2TPn!{%OpQ=IoEfC5I~Znz27MBx_gUvRju~~4*^wW4ngxFi z4Ln2jKy1nyc&+Ul#)X+-P^8hPj9qh~xMaAnE^C4GT)hi>JzF3(WmAuG-NVWE{~@osqM?g%);{xmU08`R6Gt#gARPz@IhL2z6-c~vI$oThl`@JN zllAoV`$yqN834_yR;Y|)?1Fy`l9{BkAaAfDmXbgeeLm`=KFS-JX$nx z{T(3+44B=7jQ}PS-q2V)z>`3Qy-@&6IjgZroG=T`*lppcAAqX>{ZeEY~P}TiM17_r-}(0=|MA3}u9fv@y^8Yh?ju!2r<#>JY59+gjS3 zdI{e&3B1B@ixZzmCM?4gLwJS`m!0=L)PfAVh+;um!9;0C=d4@gE|E&7eLx zaact{2UKTdL##BM%!=r_bfb)<-4P-kd?`OtwXGJDk>Oe&u~}^NRz&ci7+dfoYO9*e zjPrV;B%CbH7-5Wiurxglr>rwOO!$#G&M=5#SVRg%VyPnp#OmE*%&d_9pRLULe1B&p5_y@2@ zeuQp_Pg)tJkw^Kd$|%bb@VtWbanq>If%-K$YGfK^IEI8zd4$cwsY%W4-|O~81R zz;@xQo6fM2V+t^g2sRG!NmOVc4}?W(HKvh5n4U-7KhEsEb6;9@CCu)AB zowGeK(*wGLPN7F+T~1`07Y=a$2yUdR5g30l!kZ4D3j>r<8dNi$yNOxoXbdrq8DNc{ z236~I5NrUv0pFNoRm7MEtOmVg2DfsOoo?fvv4VU8&6QYyVFW>_S$Ne2Il+n+YK;H- zyP*$sG*y{!4YqVM&t`%!up1VPpDHpR*^U9v4Dtp#^N}gWu;ae3<~T4(S?v;)Ob}*} zOiUKOEQKCk_y_J!qPqr?M1EM70v#i2;!8Qu_e zyb<`P!`|(f~kAY+aDlRcr(~A~Bf+sZr zA8IB(1ofAOUz%0V!b!CYfySsU!lV354TFgoW}4kbnrJ(osSJC(&>tBqEY-MCf(${X zHItX8L55?b79d; z*9MqHg=PFmaGx9<-(l26exx8C1hT4H)L9`n_Ua&#o(_&~!H*)737CkuHP{;Q1h%1D zgwsmE7=^?Yg?YaCk&qMoLKI&xKMI5FJrSbsTf?!yBFqTX7xZq!mtZzE*bwJ8`!)7S zO*G2l>FAZoSCSKvF|iuSDPX>Hbkk(Snal*UGv9G(x*k!k4J5lBzYUE~b-mh$ai2QIT;~*~F3t5-Jv~qVRft#F;eVH1m`Z z(#Wrr$<%ygq9jTJmei}cJyN53nXj(I35&FXPv&cG&BSE926W*Q_azyUHtVmtgs6d$&IUsW0k$zN zF>3VEELokYJ#Y>l5Q;j*;qxPtyDno~GD$%%2#zTp^^h=-$jgHRal-C-l6XlQ<6cvj@x zAv3RM8g0x_a;ovpJMYx8$_A6m;3lKYn+(rQ7e-pN!sv>lQPp4zHI+p)WR%&8lFCYy zS36G1|1=>Jb%Lc0k4AerWdJ)3p22byFr4y+vYgKeX^T_=M{zH2aCn)+OdxY3G)Pa$ z(8_xhlek5Vd}yvT^=nEnK%6s&TTJl+$;4qQ2dljEZDEC0{GU zRmTHt*98K?nQzfgq_N%H?JJei5pWz$EO7`!+@y?{VX3xeGJ(8mYPNWyI1~Yr5vzT5 zIvtI3aPxS0zSd`Yomw=C1l|+&8>Kn8D0zq_e`HBItPVJtBxQCJ0!Iz>GHB4~YRpm42x;BJ zY7!8r=_RAIhJ!N=`}9{9)XdD2v{2RP}~&brlhMH6O8r* z3I@X_ob3KY`NgmD&=YjW><}4EiQtHYY*$ad4 z`NY6zu+;^^m<&fK49pCQQ%^0jNhlr@)TNtqV{T#x>Y}HrDG-*Fna-W!M-(6vMs7s^J85^pvMsI_ys*S)tb!1H$J;Pa;uL@5!rA`-x zHJ|B*y&lDxh^hgNr7|GDX5_Sm!C!c!YQvpTluD98kA}sMjP@R>i!><#<5Ny^vB8$f zK8fWV_a)jU$?rlo&gWiDiO0!C0SpCSKvJ}huclW+0WQzR+#z3CR`9lFHRfw#gTIQH zoLZF9I;;4RrZn^!UL+HTsh>;**|LTosZ<_AQ`8oL0@$pv5kDd!Li7U4vxtk#GN6bi zW>oyspY4Im^?)9l0mQ@&7wI4eyMIJO*xtH|O<^h9*;d2cF($YJ9_v}Gkkb?Zy<|xQ zeh30FP8t}EW}ZSCBiI0&Bi~qU)IF`?Hj*t7E438BEW#4m_*12-Fxn7k(4aF-3{$>> z4Fno^4FdFpEoA^ySfNq_j!zmIAx$5KFQo!j*(DFHlE*cCYpF1I=xi!6ZbM>*9ezlS z7FVehGYx2FXZM+NYWfLKcLB^$$+&9%GLxE5t4K2V%9g5&Pt-2CpbQ1bq%hM|rxv!; z-0YlM6!(Y(_nF2C(I?&mJ{f2>8HRqJrq9721{L!k0T?t8=` zZc614Pf62ii7}s9qZYBU1>Ph$wUn3_UD`1oo~ialX4ApNp^h)Ks&)8E#JcH1KNXxv zglqyv6bVfj0mK^woW=hbKG;2cJM+Xwx>L8J`=oCZM3?YdWub$)5<% zSMo&&hl4$EtOXF!=+4s2GjERk2>UbaByMLGpPx+(2)SUtbDiCcb)2c!7}KQH$!-E~WOk%hw4%!W1OT zg1yFyl#*FrLqLFkwOa}>Dw1iO;XNxA*~CE>)TLwcq-+|(S3{XvNDu%ZefFwoYx9dt zLNpUUsL1kyQqp>Uq+b}y%p-~z6G8(+&D6!Zcojn|euRsuOa6+MR7xvNZ0AU&R+-Fh zMvN05okn9a=h`gqgdX?ufCU`Gg1XEvsE55~gMe)0haag|dx-(^Q<2s;H_<%7z_&6- zG9RwtM+~%DVtCP-{39m=734P!C%~5OAE{Ix3K-~2i(&w+Q(UQ38q?N)%Be0j8rjUS zl-E0W)xa1ptuNkB+XENlfedJwU!WbG?lAe0*%`C|a;$k;SzVgYjX(%FUCUW_GPy$? zxlhhyx(8qD=_p)&_a~Xxe3e`v8~f}Xl5m7cPBRM{pM z$rY!5fA+E+jnx-D*f*KOOW@i?30UpSQ*%X}Q+~}*~diuD3#A+37 zBxHT&NE60@*?h3H`%D)MZ1P%FDf$3&q5xnvGK;4mv%VrbkhwJk^B`b`%xX<|*oEDw zQp{7y4is39K;gfZ5!{i%=Nf(l0qWz52nNNAAAy&^bM}w6<41Shb(e8NvZw`7hYOU# zxiGC;?+QO+IDTXsMbikaasMd%$XLg4`~^y<7`F&NpGmH*2G~1R*8WTJBjLp7{IAB* z`P||wn9ZLEg2gvQc#p!U7F3)SFnP4v$d909Iy1+8cG=o9LXr@Yf*+x@zJ?zus9rgx zk+awbFMdQ5CQtYgE9k5gQmi3r|Hv)|s;IAdWI!JGkIv*rY?0#m2xo}KwEuuTA+87tvf$X)H7l&2-cOxkHK*PVr=awg)cJ1L=B4!H?EY z&HZ#c4?ud50JLDu&CF#Z!;+nV3{c!o=CPLwYBi&oZmdQE7^YW~COjEZ03GoX>LgiA z26t!TOxYw8qP08I6Ldj>l{&`^+$a3lU3VSyANdiyr}^y4xru;iL7xbM72TY>1Mo!4 zd}<>MtW$w)4!goF65z+HBg5Lx$#f9IfH9q|(!=U_{eDA^^2QD0Ng=e0ncCn|m`W;u zI;odFa4%pF4dR=Q^w>PIF@a_1+NM8v*g8B{+Yp3H9epeb5f0p1#IT>Dxxvx!Bacj= ztN0Opl!907S!5Fs43=MA?u!uMS@+-Kd>x&Y#lCGl!|-;65C<_sADqITuLOL~>uGr_S_M960A@G&$Lp+++^ieMcGb5myjC6CZ@p8nt;GCDWBP@ zqqax9%?beiMBUTqqrJzaP8$JgLu%p6Jx2u zMC0kI^L3hu+YM9dwSmRAWYUNEc$v*Oi$5x*HXSB93t)b8=-Oc7T(Kro*Tl53$kJ>1 zNw%8A=ORi}5S7J>O+_u0-#6O>J97GNWpn$4tf2+x>4z$E9r;VaX`{B?MeB{LvYV>&SPTla$# zt}`1w%otdsmHwg;K|#<+3qmqr26SORNIMD=@H^8zD4vzo`7}f<8I!>hxJBS$&;SFm zYFwkzoJVvp$ou^b3JYD>(&iw^bIQ)lQ~W4EYsa~1X7Qjbpw27?F0Lv?B{bH{boPv( zdKVzB1rUq;WDLewhd>pp#4qdzwKLnt(*vB+|b1CvY;doa28 zE^VNo!+`6V`$y4Pq!EbA*oLqt1u%ow6O~xR6=b3K7}p~Hqx|sB2r~ z>KQx7A`X$wWMQm!0Kg0a-Z=2!?OhboWM?@P%5q8ssnmVuV^@+TgTIAAM;c6Ls<40t zyShI|x6X429?)38C;WpMS?(E_em=0$Dbkd5BS(&+#aP+W`wNMN~& zn7n&>n*fH~{3CX``8rZ}mQa(1xAGJ@uN- zR!NW(7={&rOg$PG0C6=Rt`TkZN(k0Z;(&{m;_VjcnA(nK+{cAAtG*9==LisBuWEUS zh0g(REC6VvfKujDVvQjNQceaV;dZUbMQ|znDPY{(lpj%2(uhvVfz!eK*6^KPGc+N6 ztfMEE;rP=WegpbD(S2t~d%2I3K+d-SpBWEx_fnJ839ail;_RU38rIaTXrysB!! zjE1<$b{TLSod_L6)?z|!cxhSf9&Md2)A|VVru+yWq`ZwGHPVf$YT+gODfSjcTAE2< z*aD-izHDblyYrq$lMu}vPVlQlMiRE$(9xi1mxexJGN;KI4>3uUs*NqUu)gM#OF2O+ zXeo^-CJ79p(^a*sRX#ch3B*=p>MZiOPdy~mxk~iYsO8$=LwU5+HlLfUTgs1EVRZ;8 zvxdWbp{QTeabnk;uT&K$_>q`lf)J|yIH!2$X%C#M2ZXvF(fnx5q<Yo!A22bnZ*TMExHu4F?Wg;*cSud4LPmW3F8gDX^Lm*oKOY@p}D(DNYqky_rsnPcj z(*v3e(r``^yc89Hcf!M`lMc5Edp$n$LJ&37l3W(X`{hQ z?l9QC=sDr5_!0PoP{2awnpMfuV9WJW9!!;K3(V6)btRQDS#!9*s%!wEe?Wj00^v3q z;C~Q0WJf6)lB_|U&Vmm?ZkSwtKhk1_+*c?xKYgYaSRH(|qoJW;d)U~iJP;kY^;JQo z&}SxdFJ_@E(97ZOgTZj1J2XL&V0CIhm}`_DjiMw~fo;m*+wM(^!PaxNpyeN<2xXfsRigUed^kKr&sRDnf;Z+$bk7k6PM*3r9$1 z*(4N6bg6>v49}ZNoTF1v33CzHAvmh$0UKW89DN8s$_AE7vl)c15vYG*2f{|5a+uHv zOsuLU*;JYfIX$xI#6|d#RzNq1lEVAgD@9uc@fzev%DYz{p*i;ZLLUt81SUUs*^gsB z$vlAd*lxoPXj=+X17BkuJ!O-4K%Ag6YPU;>1*{5hGR2AA9F4+Pbkl0?xF1nIiDElV zFl&o-6fg(*iWI8?2gl9rnrUAh9BCp=25lifleHikn8=iqIogqza9EAbQMja`%+Wr< zNuZr9rF^9ZwJQQ?;;ZmOc&UnPIvmJj?pL1q7fMk${75sgy7|$3?{&`e_JA%g+V$w( zKUxJUuF3ttFoTsj$Yc#{Ks(pO_N8W?K*`hJe9PQq9k`Ndh>Kt|PK)1`N?3K1STBPl zfu^gn_5DNkz-e@xFla+G=u)wf3(E^YyC&W=JctGOMHdM=BO&hW(GT>=`%PjP$e}qC z_9dUHtN0P5XGme1+E*n{L3*%l)vTu{dTPR&Fr(q*tk`fq8_5CIs5xuq`Nl>{#JSp4vdc zGH?N)UDM-4^h|y%MotaH8#adQTC&~#k*7(xA+f+Vb0m5SPN*0YWIL?RcD1X8IS@N1 z2iv1#2&1P2;!{p=sl`48u4D@j$FWt!1V3hid^t^ujD%$&WQO^}}_ zA^&Jd8n0?KK6j!_gve%9l#EijFU)e^#8 zqJrUZz6Pa(KpGvTxUY`MDV}U$$9M;$RI7-&wVH2iQ`HFoG+AphT#ZP&4BOqb@PY;Wmb}ESjlVJlz*)+0E>AgJ)z(On zDKWzwmC6gq+NQlTiaKz*G6{ zIysUAZ^OEdV}Z@^AswROsLYycVrfDpJN~dSj-!4?**I|Mmp~v^25g;tPnlzz2KaXq z;-$P&4ihqg8ioA%2Zy4SEe21MDC{d9LBl9X2rt=#a7Y-sR&Q#D@JWWxX-+1q-SJc& zTG`j&3bjMm^x>kkg0HoIgk>N^o_a(#3`;Gc6>*V3BF9lZRhN?Td&9`h@G@0vSvwIV z+-t=2ui6REY6jg%U?xq_E7p;q7FB3^j~InVl=&_Mz>OO>;`#EDoFYf@Q=oX?ZQMhzFVqJTY68%zk4Cg3Plm!2D4FlyvS z_CrM@X`|sA3GB@6fjxR49i;bTMfw4?; zkdiwflS!(WQ8G`Yt>;IP7Ew?-RJIC+snN8UJhDlyB{ys4O&-`X85Td~9}USon`|B_ z=#G@@F=thA=0!Y16d}?moIp=Wa1kYCaFL2UVtb1Cq(;>xLmrjD5<6y-zl2my7n0&j zYcFqCL6YUytk5`4l=F2EGHReH^OVk2a8!~qF}&1E)v-D`<6ifZXYn%*DU)Rw>mo`9 z>Mcqpzefrp|Vl^K~|u+}y<$eVl)gEE`hZ3UrLq_9Yu5wpr38Hg{K@IK)@;NjZ_SFI#fz%qPkFlG$?3+XG_2vA~?I>hpo;?d|I(e~uON_3vnJ9mCQ!b?&}-{b_~cHzfA zIS}Zy9@^#AJUedL=h}sNZKq6^Y7dMa5S-1A&YXFVD+81wX<4VEy=W;p{%t6Ohut4- zfjZnopl-hTW|-O2GjWIv-ceG-p$Ml1oY1x!M&?BFSW90Yjt4Zi1K!@4aN69g)NfH8 zPSacgO)`Ku1vj2k%5-CvnRC7_Wy6f{oqA#B!wa+!z%ao{r155dEn~tBXe|qWB~S?>~46J7oRxuMD2mW$sX#Z$Tx2wJa00Ok8gTs63jZ#_xo$s7V?ZX5$)f~0O;6q3VtKOYpwoEf?prY&-1V4Y$#Aho|3b8L2beTwy?mk z5{M%CZK#9Nu$4Jp4;Tb?@4q7_{jdccmhVag_2Wmvr6UOwbo=L9VB_?b|A6Ukc4*>?`p0~%f6ndU45`tKEve2YM_ z?Y?xFI=5EG;sGJFBR^v4)^XVUX#Tu^P&v&zW-C*P^-O5w>XD=JHj2bdpG>Zs$8r&h zcYgYpd|{xLs~ri)(&*P*&nw1{zZYFa*6%005Z@cX_(e77g{iLcTJ3(F`EF{<7+>r-Ma`wzF5*FZm9s0vvHcA=WWYmo` zH&fQnjoLqglkFeb&X%(zyDrQOW0UNJuv6lWW}$E1qLl&IuBxM|B9tr*NuvzS6)$O& zi4N3|nF;hvy_LDdDy6JEWX3L^u9I97lB)9w#!nQGbK-##zQ>E`Nf|1YEvlwDdq>+T z!(K{CV}6<4sg_C+cVv!CpHdm_f@fsl-jrQ5Cy_%!wI;Dz(^tEwI*2%T9$r)v#dS+1 zP?CJLkhYki@3aTv0ih*&1^nU)xe-#Jo~xsTw1ISAlcVWCvW6z*dS8-{T~54Fo;h}N zTL1Pyd!RkA)B{(KA94hCdr$6+M*P5nrgry!#L*I*0Db`O$8h^N_~+I02@ zM{V)=EjVKRA8MS-?v;OUjdb`yIgj92c_cOZT~Plcz>boijC=XZUv6v6)|EGaD)_BMDd}$FhtT*NfCJ48EikS z=RBdq#?<3UG)qA#PvQIC_r6^8 z(wDwePKMyW3Zlk1%c8=i`R*4Fc)$a^wd$-U-C{dERqem&@s$Rp9zAtKjmSSj4#)Ja zt4&FUD1$wSVJAf7hl;ugKcsRwm&b78iX3NhD|jFAJl_6jm1fkzw=$g+;q;j+>Hihf!TJxIbp=>-IoAkO;pT{K(9h zRR!j_&?}ctpx5nYIHR%DENR48B*NFtA#HDapgnL^J#Z!Y5x9sxjd}_*ePeh z&Mjb4Dka&=O{fP#XZH%e4UZsDjS_f|#n@d!VIY5$$94}`YyBUzcIFKML}ADgsJ?pY z7hs&+vnPcQ`cWW2n#`DhPkGbIPpSgmgb<4fB1(SNjO%b2#|3do$F8CVB^AW5vUx-S zWQSI6mdWx+Py~ceJz@zVAFTuIZBihrkT$TPpiK~PT^tFwROwH?8 zb~F$Kp7*n&zG^i-#|uzD1=;n!_q~r;ZHjL27_l-lpRce96qpC-fO+{u#F&GZO(;O= zzsp7Zz$f57443=>oi@@ab~D|)=bn2A@qTM~rM6HPAL5n57)cc234pQ`>az|&4rk)j z8bt`zQx_E0UI@6@P~$t_`A)xIMC{n^WB$Ir<{n7Y9Xme?1#oP@Q07O5t#25tc6?Qw zOjB((e{H4tdW?u7YIB8?>O5nG$DrqC?jNH?t#f;zJrBvvooTH(dbsXq2`q$8OzTiv_vDO(Dc^6v+?osF#bp zl4gSjiL=+k-c$`;*pAVZ2rp*}Asdt+6QhbqDl7A&9`z_~&2J)^aGtai>en_9Ud26< zjoY;vI*jBpoU65Hq|K*A8yw)6Xy`lx3(I+o~B00mY?8s zf6)njr#)amK%cJwKhhs{4Wp|O#;|N%B17)hyGTY_V2w+VX>x}TeZq}EEJ%rrfR}!BG|0yz$naA5kp;~BB7`XkI|D+T=3=Rx z2#f!S1}fyt1N9`d!p@64ATcu)L>5pF_dR8cPnI(Cfe(Bj5bj7D0E`bJM8vu;$sE`( zzpubEiebCT5iiSzj#co6RG2Vd-6s$R5Lylm=IEdeAUi(jjI9tfjWqlS9pGCxZJ^l2 zz+!StQA40YbO!Z-bMa~41bw5VhH%`AX{KZUcL~Y0*@Sn{S?w&+ny8kt_#i65%;*5p z!z73m@)!@4+IzW(AN+PJ+tE_Bq+X$d_tBHz@ER_aQ)uB(xCYu{Z;P+A)J-?t1U~tS zOxd2pun5tn3`BhF^f8&=*of<~QE`|}K{vrsT+)HhCL=IN#Qu>;vzD&X^YCG5)fdO>0l_0Yj-4MNLHLo;M%Y`#FrGN2 zZ0}o#+KwOTym@QY9OTG>PGm?lR304y2@f(**p4@8S}wC5tw}n#WpBmHR^T_fG;RKtX7BYe@-%ttQpO4+bZ5FO)K%oZ1gc~Ort(t{rKAb#e59EURK zL-~mUE3O{VLdhuHedS>^M_Dp?Lu=Y`!+br$lx3SV8EHK41t<&- z0<=d77LHz`EyjdH`H>SGO}l_b0B~ArBCWr+2L#3y;72-+X;G-_8n))0M$mcf-Xcfa z5dj5FA`YZk?yweNAhjxDIcv?le3*}7z9HIMmPRmZWtOwt%>BdExwUE!vK~hrSK!z)k-D+Y?2Msr;ZAQAmkqk(8L)G{*(X%EY%?{9LMGto&~zs`8w?agydDDNW;ABba?qUTScIST|XOn zUQn_-Bah;iUirZ`ljPJ~xD{aLBp%{mdxcSHtVIpa?+%}c4F<+=frOQyLe3WAN63W? zvbE0GBk=ijmboj!IIF>7wLRIaCJ*)fEYzgmQ1t9bE5a(}&^9uVHg&W}KSV@_=q z8T^wb(`#jubG-IdA|d%b^3}3~U0sU|mPB-Ci$9i_?7h=tB~ACoJF#th#}nJOZD(Rz z6Hjd0wll%R6Wg|J=j?gj-`zQX!nw#rCF!o}s#UA1tJnH|qA*H51?awtQrHa0xLn0{ z5>hgmRd2))u%!8%xBG)m(J{L_<+>)_^gcS#YuLFaj43-0lddJgJ zKgbenk<;26&X{i4K?AR@E2^pf)`MS@E~^Ls%(Kqq(KqiEMB(_{m%7gMiQ6>#!)*Y( zo&Xym?=OY`$f_D3=LC*lcQk3M1ViKCcaED z!d>oXBr;l(8Cu5?ECyi7<#7$?xJi&xcKqJL#Qgb})-#kfCVN?!s1v5KWu+pT4rRZK zGW~CsB?tsvtJ z=dz)5#PWWv0@s<>hnVRhOS8u3O?+lztx1c@puoAri|KbA-Pm-Qm`pT3bgpD0I&7G| z!kgdwPh$W1I!-|(T`50s1?{F^mA#f#An2_Krcb?I9XBg0mWfFa&i7CPPGPtL4b32B z-Uj`YF^5MGbx1vU`t)tsah}P~Gr%w%2bK+GzX7C2(K2%`Pa&Pf7)~xH> zyKYgqOA2asD<2#~RPCDTG#!rb+k zC3CJ^$V?xabd&^sFa0O?ezX%nJ02Ugu-L!Tg|7n&(95Kgr9cb-3tn6hQam~{v=`Vm zG!d51wLq7IIqi8jfA8Z3DbNTfGNNeRaLcS_%|zFX8gZfi7Fr|c0FWMDFGVv>oCxz6 zn&L^roB`qCabx0KhlFye#_&fV{(0lGk^U~}lTotcGrVPoavjV3Og;@s6f&aG@!KYZ z5kz1%4?6HIgU6OK=vp|0oc-xX!XO>Zi@n%ZqzxB3TMC ztpwlA&ETCYyjFj#>IFSblcbinLrZ{hhaNBI-xvJDq>8BIToHU&u{=Q(?&lXcAw)VQ zbLx+QSQikgu^P0kKKkqNBD3_8F$Y9{7ofs-o=j+kd(2PnsfQc?9!`Bf@<|FfxKI?| z3GH8|taBhJ_fXKQE|_d2txb+YF->&-YKN$k9QXML*i4$GMqX@Vap zIz|>_OzYU_{wVBa*0iDsFkj-dA|Prp7tnK|2Bfc!J1$0=k}V3ujs~@0i)fN(uHu+w ziC*4Y?6qXsJiT!xxohhXrjx}*i!<)EJ2Deuzr;TYZkU#9P$OJLu%Jna{#6`)jzEOe zMEezlli-NT(0F}t;whMsvhu(4lwFXZ%)#7Bmu^JdU%b7RGHNveg2zgMl)f1d*8n{H zq4#St7F<75k5n|2YwD49XiyRn;kL1=qy2iOW&by%ak& z7ltY?p2&53IZiV6getfQ6UivpH~$0Rf$YRNkK|(%UGD5p6~Ce?Vh%ZLxi@0sUs3}0 z?D5nt3zfwd!fHKHXT-?-syudm_Vr?rupMLyfuO%* zO|nQ~CxYF^KUsh97eu>*!K{lMgAU?Z-$17pRsUa%Ho83ESbYnIu<%PJ&g}cFlNmBLsP(5Vx9{7 zHy@raS}YXwBelgXL{%CGiz<0VG*+Fb!dN+Rh1gIzk&$yQ0KxH;%Y6c7Ik&sk%Caw( zPBvY1Ir7aR~=d{CHO<1h5?{5g-Fa z8UjJtzs=lm7EgnFY*M2`$i-yl)T*qn7FHu%m}Rh|@WB1*-?g?0Un?YsSg$8AQDPMx z&mUDJxBB*tFl4bf+(d7)J3md2QcZD_07ran45spX8Bo22B@Tva5Q(*k=4=_hZx?HS zyR7(%sQO>lV^xUe&eb$T0CcKCcrhA9A!BENRJbhuA`>1&_Qi}tpJlli?}>X8emhA0 zv_g_f3)7DRXlKgANOJlzNtGhCUWbV*xSYKMiS(bYr04x%B*S`l&OB851prsvE} z6&s8|jo1zx8%r}@_wFS@QKC0~H_ve`7sgJ!sycQBON%lW$h1RNR>kKLtVl~provxp zDDD;(2guD#yvCZE3hYIdb6G!T1khTRmU?aSK4`? z&y)Tx31@CzmX2V*ls)|sx5~C+73Kce5ng5r#jHfh5WiU=^#tcS4y7v5uEpyB}I`YP%xzMP2VB#vXj2?XOAd=Hc76b zv%HZ?2Bbn+lTdWZlNYYYzw1#M{AJMh81u0-;@O}qk3JCOwls%knRAtmrtvfbjTlYM zMBEStdjFVTfahWe#*Y$QV3+mpGHbe*8f>Bk`q5TX!|u%{RWALdcLW}+szXSZWh(Y} zVf@T^iHg8=3Q>BqQt>YTS`Tj}zX*?9$tVym&?`#?Z(K~b+3vg!kger1p4wfBA&MfwCAaCxltd=EKZ=SP4QzYyxr?k_ zzo~JET=4PuZr3JSAw)ji(7I?`)ZQh3G+`IpXAIBR)SS-~+u3EHRQc`zl(vKGvjAij z>3xP4!K}wPvj_>0;)Br|o_wQi`AJ#ezuE0n*52e^rk0+8N@?IMF4&thd^{4eELAuH zBRJtmT;rk{<8+8(m7r`aH#27AE!nicRsXjg6hOkBs6iEI*fVq-=dz-j@iBFS?n6>^ zoB*ywdXQ0q@*b#JliInwCWn3O0ACAaH6{`oi=igPP&rMmU_IYK==m@>^)k{t z+=v#cqYxCjP-JEbEK}`77kDu1{&qoKD9U*Vn-1r|@T-qlE=gmh<+hRi6bG8D%@UU1-E-2w)-pxtqcdJlhU^jNl}zqY zEe2#_;^Xqfb6o^U=w)am{U&pi5~wbj^)if@a5+r_#|sHxcIQwj4pF6L>dE_7#P}~o z68GJWR@uT6@i|6^NPD*(pu_r(iW}ixK=42Ve$I8-0CR)Y&_W~}QrVQ{)yW2fBN7A3 z5F~qG3YgxZ+4JBZ46)}$R-}5KX;3UmA(M;&YdFFRxl$gicx<{h3bbKpM+bRi+!l75 z<^+EeQs5svwfm)1;qdZFLF@hC##pO(+v5`F42#Yi;-fxrVlWqS(9dg^rojphUa!ge z=}?mhjoyZ~i2$g6rU93_FY)>P#3uNRO&P=2h5q16i+NFC0MI=V)dqSy)0Q%`t%!rwQM~WDuwir{zZ%@Cn5{lOU zC|4VNz+)uFIa3>F#hTS2e2-2oD&^G-kW?HX+>f72;vSfZ74>oo_W@JyFbm%K8YJ zMTv4N?vmBnqrz_0H4C{U#po)_7^UG;TZvXsp?>h0oMv=U4G!ah!PJ>&sRL~{yF zRFd)NaqB1D$U`bT&O?9Nbo@(DRVQs(!A6jYX=%oX2AvvBWrOIYQU30ER;oG*F$hli zYdd^7B^!M>OY`@OY0Od?{Y6G$fX`%6MG?BVrF}@TBU$B2-|6|~49l&VdD5FANX6Ot zFBMkfp^s4(CCi1SR7BY~oQHN1~{CPe3Il;A$VLxih1a zZo{rL%{~foP832!0`U9l-8Se@;@#Fpl0$Roh+hmds=7{ueF=dh0R*3cee92o&+0U~4OR5m5x=7741@k=fKVHsu!+*z=FH86c zz$8$pixgqbC%$CfWSYCz_70~K8(+w4G}Nfy`osI>q}M*^Q~|C#{Awzqlk2rSmntI~ zD+zN;>-WvUbox{YS%u7Y-zQ)$l0efk5`mOL6;rni*)WTk-{M^4jbT*YI24LG>n=)a zjZ|J<`{rt@v*@kJr;J5~1kdp%9sujNpvyP#)fw6ja;gN4pcD0sqB$_+{B&h?u1@UiLWVR26JZxM9ThsZ)9m81-eQ3_cyhs&4X<<5@m z;ZG)4r1bA|c#y)XA9RbhHC!0NYe~dJ4CNX^7v0&Bn9&zJ z8Y5r@ySTSxnODs}n<9v`P#ybLJeq6oTz4eoXLlta>vtvm!3h#%FA24j>O-pac?Ku% zwe9+XY*2BAfP$cv9OT5z*3T&BrUq-nHfYgQcc94*OvyAnyEq1ocxIX`X?c=~@Fs`d zcK^MeLGAwgD!PqOr>G6FvknCj1gST6;-z*d%#eK7bo|TLKRzB=sV0BoK`I9gLt*aM z2yVBBrgr;q;%~IUf(7!@+Mu+P15x3T^h2FPG&5US&Njq!9^0@#18ZkpE>;KO(lQS& zjS;a}*ePHnh-u|x)QCE+>co!V_A8Rm@lxwTqHP=VytjqVrpA*N&DJvOZnEbmnp({P z#(qzcZ7(YUOh;u?=}VChLk_t~ID>~VQ#a-#Sn|Zd)f@xS7n3t2LPjAzyVPkrP`|RH z>us#jXkz4Ulzyq*9{lJ4V`tC5*0nbWQDT-U4uY%v5KJYI^^Rw+^MGmFtpP|BroO&@ z)w^$PG!P7~^t?zvGWU_*?TR5w^`J&(iA{=!5j#z$89HIEK!XF)=n96pj-o&k6G1Yc z+^@j8R=uajS6F_SPiD0@f2DOOTwR`?mR45goNltTO8CF1`LXf~Bp`C`-sIHvUp5~} z@a_`}Sj`9GIXczbn5^w;ARvUy<*|~m5^=rH;Mrj z<-AF<+$jc=EdllbLg4STzTaYp@Ic{-7DtF6i6ZnlF=$6Rkx?J}NHI2NX4=_l;q~O^ z9^^8avFCO%uC&1B+SW?G7!!*z*ffuQS;tei&w^w`kpr6581#VeRoaUqWbaa|{{sY* zhJOBivjxKo*^54s3a1i6%RpJDyi|j&8aasN&E8s!*sG`s8d(O_oFM!(?e`W>6g)+q zZX>0PMjZZux8Ux`{cYI-tG!oI%@-u)V8n_sP8HHWl+Fo2mZSGH4zIm#P>yeluouraH9P&7jYijYP0cr4m}~c zBda~V5nB&rv7=hCK|!%O^qokKJeG6`-K^m!lH&AqLn@XAD2lOT_AExsr@ z;V{LgqJ`Mz7=BXmZP|%YVKIf27T=ONNzRE9?sTppHF|Jp_E7v4GaLhy4156pLMbHg zxi1ux|G^nlUXM~VJyq<*Hu>iIi&tPbkW)cPp=RGqj{!Nt*C!;vRFR)cr}w-4otK10 z=&?p9z6p*;v80N5=jp$`j3-unnb95wV`k_OwQ%%!b80!qmmTjMKmmcfN+u1b!w#{g z=eCi6wiVe%SlkIDvT_(@;p5Yimhv^aVun}=z|YS=9YTT#d!B82uNzV}Rx4qw*rppV zhWmNBO23x*da!UeDVWzA3JfF8G;<>cGDJin)|Ulqk~XG z7Gt&qZoDd<7CZMMPI>;cSkL_Y8ip(c5RMRNUy`*tfx7lWU_BEd*qkpr5RdYcr@vre z%@|y%aQa(qFX%FpQq-p$bs416BO(rr)yMc>m{}gM2~cb%v$4LQ{IN=#<)|1~2RCDe_1`W9S8MRy>F21m6NRThnb>2HF>b6aHl&Z zbDyXm`BoB1h2ZA^i9$f}zy1~^snZ8KhMj5zFr}wf~9Pi}4%|@x8 zMaO|eHyOhleV2Fzg-_#0Q408+D zh6A-Zc|Mfbc}eSBvMXks1sBlUO;fYl=F^9gLbUBFK8*B6G!}lQkZ=O`7VV~{j!GZ~ z_i)spttEOh0=JgSkGoLGFeH)rK@Pwb?>=;+A;;=&DZEYEu7UGY@FPKUgxvqZYewot z)Ve@j{{owE#rFb(n|(NE)WnAw0!fRv`{VxdgM%!YdnIKCF5Tsky_wsk1c#yve0x-pgHishEI423N#yFfiXdpaJWL|QKM+u<-D>5z9U zq+7ZdrB4N&Jm7j}_PbIZ*fsbVpvgql@v3=H?Tl0B<6qT=kAJMsz1|8|<65R&&#ZkK zLpEbuB5&eUoUp4A8Fm=EG}e5@{PhU7-pfL^kw1M#ah*a=TeTp0rc37m_r^ zGO%+kYBia{dB{}YZcqWEv5(1>^KGyJz+Wr_K)vILjLwZoPxaJs+6GjwBS|NDSFDRkTD?XIhE&^D;=oilI5X9L zaY;L`9>A%5_JbPmJMk~jjH|Z6!u_j;(+Rw-&Fha{CVIgu4LGo7Lk5)Pp!efpvRi&? zVvSqEywqF z#{E`P%PrZT^CPT3zIVf40AeNXqbz5|7`Z2%+yB+d3mgI4bYWHZ|7`;(fJFj+(yK&p z`>mHQ9s{=9#LUg|JC&@@d-Dzc==vdLpgq4u{J-mZOs1^j{Z6f{zb$Y#&T?nsMH^WW z`oE^20h`hyOH$GCU++Gm{wv~iRM!4igbkP=0s44-)MQ-M|0au$c;0Q{gxG1qf2%3b zBgui&2&^)PlwJOBG-Uo2&ChGP|0_~~v;X>kH-;UnT*m3YyM^?yqm;c{jG-6&rv1N8 z1r{^wJO033QuPIfu7*g%O#Xsd=ZO-w($+7<3O%dAW|9|-Zf8_r;mH!X3cZk@R z0DVf9Sh7=2Dm$HP&csbo2O3Qs8T2(O{@S6B*#2L4!sSRAOX#un)D$zZnB;FDU3+Hc|Kz5ZQ@g z@7}T2_4!cy?@2#%DQk&7jwQBUCf&dPJ}$`Iye~=ZIyb`#exnyCsL)U(1crBYegRc- z-`2MLzTUPBq!c9ATSe-+ea5^lJ=|B6w$@8tW03yLuknLMT}W&Eo@JMtyiLX5xJ_yG z**MdG3Sscs@q6mX6*ceTT0LO+=?QY6R_ldP`vSb@mkH6^^1mNi-5pps-dG7&zb0Yy z8o>X#g^ti3!Xt^}2$wy=r?$U%ThBv47_Uz5=Y6Tc%cutb+sf4E($9~jQh|??S>#{R zniG#J^W%iY!b|Owu7tO7zkL32r4Kp&yqp4u5z)O(#6&k=M4IYq=HLA?H_pxX>9%QD zyjO%tlJmUU$MobcSHA0xX|iv0_yNhX)&jTjvEVazIZwO}Tv2P(N&ep=#&i#v5z;>a zv4TH{4P_6yg*zzog;pypmnr8zM9c71G{Sb-xq>nQEG)&$0R!wI8_#G+_A2SHU|c~0 zI%o*4OdhMBMQN~HQ0e7Gn?G*vj#u{gOI%k~_1>cW^f-RcMCaTWQFc8x*EX};J0)gb zbHOfcE@=|yY4WK28-uTK1)o3>=VRWQ7U6I$L;BXP3tNQI7SyQ`TmILX*zS)D`#&BS zcpe859hkc^x&LQv7|6>L?~;d3uP3FEGo%kNunnkNJ?qnZKX~_W{()G30z<$%|KUD2 zPObacwe`w?FSuR{7{mRc86F~s|9H1szyRBif86e23I5wWC_c&G^N@&880f%^0HTk7 zjP{h)&V%pn?Qk>&J|eGGfE0f0q@eb<^&|eaD*Q{xNyklUXSz z;8cg~*wr}S&KpmNxWG}*6mF&FA~Zw9(bb|O0T-5M8_|v%K+_0Ds%N#AZmC&t{8`Gg z5$-io1Zsa@6uOYlvoK424A1V&nil5zF_NYiQ~Ix~zkr;|M)q=!yXIxrhvhM*!8+z~ zB){vRKfviIa2Ev`8Rj!t* zk;5wgx9tt-ktZR(mI9(enqb$27z{pdQ^^=pISXVk?5o#|gtP(z4uCK-OdjQs-< z4`XoWGh$)JTjYer9#L7QX4EK#s5;cf2bBQ z|M=bYTE4|4c-)x;`)C(mbHF*6^VBKfm*m7P(KiYUf3NkT0IN9LieXdaEjA6uHQC4i zzJt`^3GB^C#zt0GU0Y{SES!a{jrF@t%msg7$$gQHz^NJo^d#oKo3gRp{07|0 zs{M`GOq)IW!GDKi>A}6gkiN<3J4mZf;>!|#7}zoir+*!YrML}b&CSEO3S5Iw_W%L$ zKRFYVyHA8kO|(GP$qIlHfIIg^jOnm)9}rlJTt3X8)7%EZ?aNflUKfYx~Bv|lO_ zUaD0XZY7H2T^U-5SB^jM8&QLU02s(3JrOo~#It#Wh=+J@3*4M`t&~|}Zqu|~96bu1rzHc2H7k1>{y;4|K(#VVsQd>a7_*?7uP?=Hr2qbbV zHS|lutL(;=!ixX`o93hoMpK}_{yDLK+;n-6A7qd!*WM*}zA|oLUusiiwiqsncgX*a;pvUZny}|)Ji7DTkZ%EXev{z6*oU! zCckGV1@w*P^fcx?RNjP$BPWBbcCjAbUR0M3l;72Scw@tO=JlOT zWivGxE}XJ!7{4n4AwAm27H(^Hi==MR!YRr&<)diH>wn%QqcBJHxwJ1_Y6OuZoYC!>l=-o85y^J3xo8A)TK9gKWR0FWe&a!ww zuA0C{vXRHTZ1iKj*&{Tq2g0Q2d-gI2KD*=i zdKG_W$qe|(@&Mftcflx#I_S>6r>-ks_djnNYS!F}*f`D=1u@PbIKi(MCj)rGtS;%fqyPpo7P)k4UUjRWwwllc^&u)-lDYO!^l>h+Ax=Go!l03224Bmj$A1KP zeCSUghCO~&QWpED_`550>~i(FxVueHcp575$Z(vR0KKtd@IN5CNZrFpbc5;Q{%|9F z%0%0@T}5%HqW3X_&j!^JfXtJ3MbVy1B^m zoY|Kv;H<58^o+y0uqbZO9VZj!H49e8Ae+tB%|X1spAS=Q3_N}WrqYN+kh3@mrl`9( zl&2h6x-1f?Foh@3sfZ6#FnCH~_}D6H9~Fgu1jz%8cQ`GX1?Mj0v=@fK$-FtQI`4dL zu3;2B0^j_Mep4E#o5=|UC49_LtH6k34PvtdrGBg+`!|Z<>p3fB= zI>|+|(c;LyjLTb^vGf*fI~OekDK!DMcRf3ssVv~*M$KvzKoEO#0v(L#1&j+~*+vSzh0 za@0cxkWKILE+d|XaV@*>U0yAP9}baDn>22!ClHZnA4eePO62^8u@xi_cKtw9B zf@%DRU1{)@QCwAmAh@@ib#s@E#8aB4@CQ(yHcUGr+OY3h;+>rT`+J0IJo2t+UTNs{ z+SaGKL0Z1tgYNUPf$PUzZZWw9d_!v>sEj2~t&;~z_tAu4k@lLGo!xuc^pCB3{Bl(b{7pwu<3PxUg-SAMU zDL-GF&`#~5Vm-%A7)MTyB)Vj+$ll2%BceCbmFQY(_xLM76+tN=t`U<(aI7RbcuC1$ z;#1GEXt{h``gZSwDTcQWi1nQkV zwg7`FY}C^!3b^7ppv8K(WTTRKRs3Ehp!W$xGjaUm7)J_~i_Lhq3qVGZFBAMeZ_vX$ zRs;Mfqh6?ql=M$vFv#d%dWRHb1hq+NqT`eDm)nYb_?UcdtNm~37Pb8WPxB>3;D0qC z0ZZp{Tx2(Ikdu3>Lm}$s=^8UUN#m+`t8FT2nGi4xZBeVscxgeSGZMSwyx67VN)WyX z6>{%rq2>|UYnA2i7JBvF`{$gXZrV0(FS3B7P2ejn<&nQUF2EIrLOKJ2=D3Fy?ZDQbR%X7*PAQ=rMmg?8yUAU2 zlfHyea9d@r9x}Euq79%HCvixrK|c*^5S}YlZfA2e4NP+Rg~iej%2JJUGIU-G^RB?r zKQ?*e22GM^wABz;Hc6ja#p2p0!Fj|FA=?BhPFokZ6|Mv1GLt8S5|P=9hw@*M{gv*A|EONKK*Ze(oMW_>HzCL)6BELDT25T)&Eg`!)4c!vXa;UBC zWxUiS)F+pSY4E0pB|qq0G6JjOyxj7iiO2?cifESjcfD03h0;$r9+Jv1Q=ck~#16X? z?(oX!zx!9Ih{L&Q zYGum1R)dDrbBi0FmD3kc<_j_Vm|e`L z^g~CmGfr)4;?`1MNs+nUR*e=s1{{QaO1kUauofe+DgC6+BfZ|jj0-R> zrM`chFb*p9YIr|$zT{iQW9~#C_<-ZLoNt?@!0+z~#9J9c%<=d-AE?MrVK|r3O~d(} z{=e+fnO$Vs=W;t$n$VX>R~SNX#{WDIGWZnY!`LS^FkvS3i*eW(d2v!SiSKq$*Y z(QU|8{@g}DD3@Ek%l-1nT>gH<(|%j35L={Ywacplu8gELsK><0>G4-e#}bYN5so+% zS$KqbU=s#jS{=meM3?#{{yemt%p2;Fv*sHJ!pfhM>(8_kM!|k~e%ibuIM5Tz>imxG zM^csqBBMj&vfE-tA}aU=*8_>}=>c^myT=hm)5~$Ziyx{f-#jkh^DaMLP<-+RiqdnR zb}e?rD+V8@4fmJ@Z7*mvaZxF#)0zU)%d0ZD!78CWa}tQ8e)#+v4hTyhwRZJ#Z{9RQ zbV%QLewQpoj4JX*ch)uD(flLtiXh=cz(=uH0_ew4e1)GVLztK~cTz{QPC~3QbV~Ql zDlwC|F3K*P*&oYxP!RM;?iAO~Ay+XTc1`VU2 zb8*VV&lYGV7=MH>9ZXiI15yu|1c+zqD1H^j-|CfQvDv1H&NimO zLycy@gf9y@hn1IUgDPI;FX0q+JD!^K78!@8#C98Fs#vt{Z4EE=IA#br(VqPCgUAC6wdEeE-9(?iU-hIBDJ~L^ z_WRr_HQGDTNqP{fn3#89IAnWdjIlH1gsBsJx0jcdKVoRn5=K^IpU%K7ng$pzJek2x zAYX&!NTS_xjB3^+`3UR9Wxo}-O3-k`BZFv3efNu9A=Yy{Wb#?-9EqJ4d$>_h4~E%J zJk3M|mkKr8(!7#!q)#}|%4+Ps6^nKB6V0TS<<(f$(HM&LID9aC5a0sU^ zND$#WA&HANla4j$1Zndx(B5 z+(#X*O2aNX`H`DlJ3~E!C~9G;lvbnncv6iGdgi@;g&EikpsRQn~SFfCqVQ_q)myF)z zn;Np>*9Hq0Y0xLF_t)vv4+mjrDb^E6+L@}EAf1bx4g*&lTw*F^wRm%!_!?-F^$u@} z(z6)h{l?X8p&PA$y5&7i#_aG@T~n+xi=BzJwS%KbISJ!&X|%r3QdcK|6fCY7y4oS^ z&W>F<=-d4dG71aui+xP^U`?=1qsz&SQfbpTS7z6tm{h7Qf~uS=Q{iUN$d$6~8Ot;1 zGK+B1CO4o6(wBwKcs9X_vP=uIaR6~q+AdQjTsFpsN?cjp43#LvI<{GMhlO`3Dbf1q znP|Uu2<|2cFg6z}e_~QbdH*suCisa5$$FuF_BfHvI9VyFu6=0Qx(SO6D*xVwpH)5H zoSJha-dv{6!(ag~JHUVtTtg@@yY%<~2SKeqKwk-MD4?#wUQCA}{a)y!_;Y@b{{YBO zz>cO_juB^c!1&W^wz*?tYhJldhJlQ6)w0s}U>tR!3m}LHge>ccsPio)Av~x&#t-S| zDNk{?^Z=XCd+npDVk@!R(7IJJgiTe1ni9Hh8Wcdm8x_56YtNW8CZCba29hq5aU}ZM zZUZP>FhRcsDw2G$FhGvTlyQaN2J~h0^*Cy{$VUN)>@>@I0xF&J6NpP_k#-|3B%Syv z4&Re6k4>Uz<9-^bJC(B77-42qTr1g7=SJh~MLeb)RIFyE=`0 zIkL+6FP59lGCeOQ%(zqSyw-v@!tlUk)fgmqWD^Tc44nq$D!62N{8%4mzkXRc3T;Pf zi%dSKZOtf}(vo+xs(hjnd<%r4O4mT!?4eye>Qc#}`>l@>!!ZDV9 z1J|OaXM;s)a$`agTi(U~<;>6ydI0a6O1h4e(bYav+) zSlFtHIE8NQH>EMMn4y5zGi&2>`SrifiqI3`1&}W;4p(m#?D|yG$3k|)M7pDMg_*sD z?_3sXujRZJvrFS21NE#B8O!>rbJ9i(jLB+MQ`>Dz0$V2NH6i zFPE97KQkCe(xzO7tfqdsAC#+J4@Wg3U#&UU;iIT14X5x9M*LF)fQ>8(k9RO09W=nB zqm$T?;^DrD_pVRS692im@clbNdi1L-Rm+jW!;A8JoX8$&Mh=>NR7gnSD0&QQ?)Zp& zA@-_AiPEq|lH!LdV6d!L~^!36U zSdm4z9roArpk9@i-Foci@jhfxs=vo|xUBg>MhUWX1tB(Ng3OW#EY_5DD*CU})^==0 z41nRDAS4nY}p#(5#SSy74;oB3FHiXS5=WzmNAy^h^-`x~dYYo}IPX&pH)~F3|-qhOu?>ps0gOh!4?Ft5LxZtmNxMh@^g%Ey zc`PH<#)}Rl)U9I*<}I^8h!nRp>AhN+elK(xt@%ZiY`j=*d&)6df4UVG4s z`h;PMN~!P6fUE~6V@{g;#zKP$+j5GTR}xt8gc`RLFc`Uc_9AM7af zg^J%z%)~lzD7Uj^F)h;lSG9u3m(H&(m+2zapmbUYj(p}GGhi@=WmBlxPrxe<^^9-3 zzzh{c?ti?jcY9(%ABNoa3Vy3Baix*vNiD4-ya9LzXONWK6VJUDI!EQ;`l8gpg`r8zQNaJF)yB`%f2c2R09t&QS;|D9Dhziw8_cnW&~dl-IDLP( zJ*aCPyR(MGP(szEu5~*Psw3q#62-;YB%NwLg-v>GK^2inE8MW6J%E!Wb zyc1~3VIUx(q{Q(gEVGz=YRV|X(akvKxQD*X@^Oab1CbXsphfc_d{vwn*+q_m#SXSd zMhf5Zx5zR5UC$d;9^CRN3TPT054!a@f2jG9LmUxA*W-%1sPro#lRp<55^?efvyJAOx6FX7Po~{WRT6FsJreE{|4O|SUQn0XWASR@t7O z1B{@A z8-rB6P`Z02J@74V$z{-dk=zJ4WtSo7dPsLll;K^^`wpC35a|>dY$m#qRiGNMdy5Ny ztaDbfv(5Ww;^iJXGVa~0Qhhv8A4iVuwhdF{Mvx((Te49I7~?fHBaqsiYNJ+Ir;1V9 zlKd_8piw;$yASpujaN8R`aPkg)GU#Vs2wk8ct0N^C>7`{VBKDu}GWJ2IaUWn+^(a}Pk^6qb0q zkP#Nrz>gwHyExb(`!%hcNRie3UoGJP5bA{IG-i1)CiU-q4L_PhA)X3gz!>Fn8cb75 zWmPA_v68C@V2SI!9MkF80el0?;ul&$UXsRz0wT-CYpXv^@f(m}{gt?2UZWj^!3QKC zEk~c#R993-#nXRzMj7W+*sw^;{(xL;!2k7Ql1^uPR14)Qc=$x7eSLtOnRg}exz93F zlzD{&#xr#p8D0PfT!i_JePIM8r_E(2IRK^jDLhR=$HbKKwnMW@j>e=kh@wgYJ~3Vg z{oYjgmb1V92gOqz3|1Et1sq!-GP-uI`I@|| zAc`an7bfhmoLV_e0?dH-yIvYK!izG??2$xzGaZgIi026mOIwt2hjIkf+dyfM2IbbRe`R3+jUq1W5Isu4>;Pj zmov!vCfLv_RYIrsM-Y&2@AvEttGF4(!llC(h=@RsMhwltD{!o7$X)QwmaiC|FI@=J z<4@SQw#qCin{ST!LQzIDzJN$c#^u6@bgQ8!#)4Bjr4SoUxp{bRel`(xX)Nq~T`*hy z^s;!ZKaR_8xR3FJ8+;j4kHFsTNKUyCXYh2KXOqN7^r6iZI8&_3}-i~a6ca`=tJ$=Ea)qZAqz(xdR-{w;J6qVNE`5I@qp-gF<`cyW) ziFn|e<5C1T4VF7yt%Hs=-Q(|mi>AB@dul;ubTd|R&&d@uiPg-4Z5)i7;R=}>Sr(*4 zkYaQ+#zzVY@Q3THs0OH1+I*5lWc_5UPcA~H3uRX{EEj+=@b)w9Q@DZjC||uVBZx8D%n`&1r#N5&fVlnE|I{YC;!Hy{dtA zm?m^4EaI9bEi-B^jWy&pl_{8!uscjt5 zt@kUes1FA}16if&EP(%(j9k=0kth*G8uvLU1MZX63^yV)EUVcDb9w5X7cK$kDy;$s zH%NE-VTXv|_MPelWz^ISnS7E6dNC6F)OXV6c^hf8o(G)m1?AWI1`EX zs|1)PgQQ*^TYCzLGJ?(B1J+;2>{x{yS^_lF=vk|xoaQA*o% z#rMVG*~AeeigB7( zT-2=_R7I=_G_g@ObR7yS=By<93_gVXl9JQXAZRlLA@3+L2Qt3(q6U>x1@Wrzb9!5` z1N~dzFZ6Pu0i0P;2m%OFL>!9-Z8*7n1m*rBn$di1tAuc|A9td(EDI%RBqM+#yj!wF z;jrz@n$oOUwRhon1ilJ?DFHr@gaZwbA zg;j>!k+kM_utxDVD%xr=m;5_mFD zYB}P5>jyatTDNKNqj;ivR^35Lz8Nk)r?Khb3sHKJWNK=WRX>4TrLtz@%wHX{t5tk}GRD57G6a9~*LkQ;SYf9$` zO%Mp~8`*(=!HWo}?f78DrXs8(|OXl`}XcnL-rroda!{>EU$RmO~CIu(sWK2krVGgj@gsG-^Yiu0BCLg)_XJ9ho=tA}4OOk9k^oVEQ2D1~kX@XU}OO(TS8tVzdPHmnEw^w?HG5L{&0d**V1aWK<5-}^9C1`ra2Bi(C`>nGkm4U?zo zV0Cm-<&joea?+0sEPl5t&!y_vzXK7p$Hll7j0Ao`&x4NcIa?zus%@_F%0+>ya^JWm zN7*{Z>A(=E%aba0&j@%y<&Q+);vS11at(07WW-E_dP;-}K}5*Jw3DmwnMB3iCVkRL zZIvd;d#n^ZG8rAoBT|lyUZCLr<^;yosj<33a}&&bJU_>P@D#T^if;ls2K8={!r+py z24@?!U80GGfdug&5mE&X*ypruHr7muz>FL+lrx&G19nNJex>!oEwgL!^CF^tEGcmf zVDDK^ZZ8uZ2b0H8mHv)8sCIl_*+|04d0j((uS94v^jnq9v2OeU0-Z)`r`-$Pnw|v; z@5V3$(GhcS_4!rOb09QiZO%VcF4J)YU4H6PiyFnLdzB`-@g*pwJj~WY%wL>X zi{j_@VX~n2wSHPnAZy-0)K?PVecgNKndWK$D!~Qa7Q-rZJ^%bQ#8(bVx{wq2s)Ilk zjYh;j-Oa4sh75dgWJTU6R+T5rAK>z!GXpED+(Dhv@S*b=$kik#UBDnp6&5q+bmppz zT2u=l8K3%4I2<@l1r#Qx`e4jIAz-$AD4$fF^C?pf1J;+#I1WY(=T(Zbxl$!j-i6Kz zLSk%gOW@T?o>-(GJz?{7NqS$q5~K~2_t{zkr+ZT?Jp!O=L^_`&@zO0$K#X3T%#uKk zAv`6XEc!5jWQS4$#x3Q#lv-5Hm^V}Zni>{t`%;_`z$Iuo;{>5oW%*LyB=YvoB$=M3 z#l#Gr3(p$wlcs8t59G5WFhqcV*+uu$U9gLc;msj+0F!7o%$o9%jgy62eG zq^lS&Z}j@oM5zzgUV@%JKveX>!zi#~3Zf7@beg-mO=$|Cd=mX44$a(HQo@CE_rJT` zSbR2SZsJ_d%2~RroO8|3dP4gHW`t#|&&?iI2!)$K-6X4GLQ1ZbgF{C@myvjX2>Jm% zGx(&5SQCoabZl;}9|2oC#rk^&s8odnncQe48-#D_Nfr)YN*c??e#PK^cz{;M1td-X z5kG=!k?0#UX^{OY3zwaKRsqY~2w!}thXx~)mt$G|G2Qr)KUIg}9b8d0D6j4$zs`@UkSgH?Zy$usG>uVY7_%Paj>OzHh?7yWRsZ;(mVXr#i?~`4_5*s3x}32mw*E<5MieK zD&;CK2Pq4bx0)28FXoi1m9N6BiPix!Ev?I(>yy+O_s}PQF+xp&hofRZ9@`LkDxgpz zi)3IKCz$5M&fs~omp%cfB7Sto;yqX`b+k`9yX?}gn4m z;Pi@aD9i4IjJMd?Bf^C{)faMsGkBRUc=wN&LME_uohO9Qf=7Mh&=0ftX*D+Pc#r8a zO(1D7_SKnipjtSlS37$ow5vFdv+US`)P{|?a|lEr2h<@a$5Vk#@mBL)iP zpRFqKz~eAlv|*(=gxYD%7Ud!!tcWs8gpZA5jbjhHT9@Y@VHZ=13_+;-A!wROTwp4= zHmkDb#9(LC46Dq9zxB&8xj~@*_&lVXWY|I#TWJ!B0#=e)$$-J=)C>MnQhd{WkBem#I_%=(jGYnHJXG5T8rL>8R9(14`P`0Uj zQ1*kakJO<^PQZZ*69O5#RW=0Ot0${sY=XeQkL4H52+2*BoZt{U2Qn7}Ue{wt{zOTrCj4c^#5 zU1$Ln&r{1QZdJjE^b-_gqCj!SEw8q29IrGg_n_^iQy3PLFN178Lw*>kPxJv&URYw1 zEZh%hR+T;+M@d8rXe{a8oosKS^=|wQt5jZw6?KK;<%qAE8(%B&>CgM*{ z5-wD3stL);QvQ)f6**t$w8S+mo?SUFxH9L)OtJfs-`ny;;!Qcgt%6 z@N*4wA?C#re;LG7Fd!|LsWufCWFtXEFzAetdtl&_)sU1GF2GL1pJZrlX(Y(Q2Th9d zv`EKU9-SL7wA^_jg_l=J&P0j`+zeJx*=m|u?;asq0VDs&nKZ~rO#2`3JXF{Xbt2;W zuhgUr{cW5pMunM#$sAZoL??qk7&Pl3gUvo#YyX6q)OPeqoOdjNPvc=U>UI_r{~Q@I zK!ZakWO$xYO9U-0ngpz=t3OLg3}!P6(ZK*%Z5_TU$I zg;4)4r82!6L*F=t%ix_B-Z(=^-iNG=Vw+3G%j9rVMI90`4LnO1NI>FBDy^^`*ADxn z=0$|ENI)rclQOOp#-5MKhUy)p=O=gyl|p?G4E>pB{|QY=vdPkTsVs?9Bz0d?o=x=B zNYM5pp|V^Qb%AiPnu-X09_%94fn1R!6hYXibBJLY`K}`s1S)?fE~h;LQh&m@IQLJ; zWYiM9bLM$(Q&EIZMYK<7bLS?v4Ny5&~icY~-XNP%7V?{Y!W#3O}_$Bwv|DZFpu! zw{8rDAoas%-Kn6ayl5ht4@t^ZgBZXSwmU-h_CXECT_bhOkrpW1vh=4x37Yo0QJ4}g zA9asurbNoqr^p>~IMc_7?j~6=^G~LRwf4yqQ$(Js>YmXE~#Ck2xiJu$zo9gC#68eDPD|>uZ z-2F0@ZZx;dmF(Zg`3f*YpVa8b zB4|!b)7}>v8(E+vj(ky(jwEqS1bPGY*-i18qC(xq9nb1ndenSx=mr?Xjm zHRh+PrHO8Xar^UbPOYU}jis|Jai*@gSRX}G6cC@h7`A%Hu=iGyX&d=#Wt%;g|&&|S_7Vx zTwE1dTRL%p+L%ywzK_zV=E2IDE)5CypT&A0lVh(P#^a|FNyX!c%p%g7V^XDkD?1n6 z7-irw!^h(-OA&oJKvpm|Vqk0zkXCzY#@b5iN3=yqvMtJz$(*J|A@D5F_5}3@#Z4bg zKaGJ?;x!CpQ4rcnwGEtd+cgJ#^xV&Z#!pvcp%8>camJFUC@UXG%Sb)3*N$~iHN4m^ zrBDiyNyiD`7{HSYEZ6$RFmy@Wh}o8QZDC@iVr$7Dt!!ADEy7mn;Vhfq$sBL4uG10P zuA^=~F#t=O%xCIf;-Oe@=1QJ#vLiDZtk+3F-YQw^2OET>OlGdj%*8i^S2JuJAgjbd zq{Aa83x)cFZjVbjdaR;TfY_%a3%0#8bZU!##Fgi^dqw-eIp{u!h8WD1B z8TVB=R1JGCaiUR;-5eqO1iJ1` z&~uHC71i(%9WG$R0C&ky_w<&I#heBEtdIVT#;5uak(T8C4 zxCy!%+O&Xh9ZUKnkoanJGp_N43#+E93IkW(nj0o7%`CT8giHYojY#+`7l9a-BafZ^ zbUuR%NeHpwdcpPtzwxOr1f#e-MSeqJvU-Vl#@>*si_<;lN5Zc0?gmB{HC{jE=)%?pEUtd4pHEArT{Oqu(oxZ%%HFk z7cMPyRU7*;USWGt8tn6vEGVCtwh?KNEi%dS2MwE(G4i^+|9(X@s0sW4!9;v#s-stT ze#pX+QzCd7dpF!UnnQ`9tI{M865Lxegy=*f%U2yk4}<=DFu%bmnuIl{K^i-J z{v9N~eDrVw+*JSwZy=LCGnB+wmnbn(9bP#N=YgJ*g|T>1cgnac$qALi$1)1p-Y_UO z8c&%>Jc}NNoPWGUi!>#|W+0PDP9PA|h03@x2(QFWe8eV^O30XJq`FD1j4GRYIxY}X z_Rqj!D9*N}&w{M{E6iTk4Y{E`nNSh+RiJGFhG9P$16LW1g(Bbi}|6{N!C{G258Mst^lx%2yuQMFht*rYI*ubtfQlWE;?bjyyD10cF6b&VyNJ zKr3V-|CHQTKF?RlaI6uOgW*gN(t`MF_>{r0Vit;ipu}z~Cz&vP@)MOEm)~w#wywOY z6+pX=zy03+D};cIx;ovY@EyW6C5k>l$H@wqf-~+k%I+aD4{e@Nb zLBE{0LTe`aGlCrgjOeovtSB@1OksV(3v{tP?+0;YcHBwTA}O1L!@gdW6rPpjaV@QZ z#yP5~9TRj)sZ~z7I^BmeVQ>coKUAkUL`ZS8G>1kx{NI=5aH-_j0dpMZMQe%s|Z#P z$G%~+>q4V%-nNC(H6Cz@?nxGhpwsQZHYgU}&VWG4X@ai>URWt6Xg{PQ<~#+~kW4kk z`0M1o#2&K=-x7UABM{!~Lt+JyP5`?l9m*2KB@hT4NtogrfAe%h0H*~Dg|>VMxNLgu z&ARUDAfyfEE&H$)7Lz!zAxpbs7jke)(ww+|NRh&9 z{4s4}e=c03{{@zG@unt`DE2=CW#<<6*Q-+M)n$l;O~k3dyu^cO`qJPZ>e zV)FRYn2ow2-3%_SkFRhIGx5jcM31;QMF)1LKQnUO?+-Apo)8wPSrYTcR&l{zQihr3 z%}K`9Ac!Ak2Wm0J*`E?c7ng2|MLd+?6{muKvYO;U2@0-P?MDFH=3tbyu!o?wRaz4( z&5XlITWP)EHhEaCnKO~EzevK!F)W<93-`+Z%+)$HExpNdtT}os z)gDfjPp-0e&%Gppxaxwgy9YRwj+6im|Z%Cw7b8ES)jSG zMshA{sP~kJOqntgdY@_U*BX$QeHZtcywCIJ)GawK##-=*p`S$8-V+)#^2DWwzhVCm zxez^+jP;q%e%6nS|+#OMjL*n#n}R~8SW22ho5`P$Ss1J+$<>5YK0=5kKw%_ zrb(h^qPThCY=|;lImxcH4av(geyi|2B@Qzxup_Lku{&}mzCk6+2#BKO6DLC2X@$9h z#USx{3H&rPW(3%MsCvYFKUk>t(5L0VZ%5efjhE?->J%ZM$xV}C%$|RgblO~f|1=hF zd2mzo)sIxPVE=+@G?BktL4JWjCqq3s&NA<|I1=C!v$eXBS&7U~^ti5*GO#mLUxTG) z^n2dq5KCpM#dSX1pCH-&>askT{bTi&s}}0g$)6%Fp8}EX(SmqarTp)C{$Z~Gp%AaE z)X+^xcWLMp41;NJ%856-it}R0skWjfs_eJ_(2R3>8WQUfZNA}J_LJCfyTgsx| zi@TQz<11H%)m1i@Yh3>i+zm zkn1g|C%mg~P{?X`)w{eYRnbI$b#5+Q}=FwHuIDJ|cUVbR| z5UqD1Uq<>9z#Y;HkG=eI13QP*kzHE3&m?m6WcB0Py}gb_Y{xW7Q=ZdBC*g4PrLy_#3{w5IeoDj@ z$7}rUI zC21jk>HQuSEj{f?v5E!HtITshs$Md*K`1Ch7A`QB_*tLtmesNzcW-cFT~bRX%AKjfAszUg^8eL}=V~*Dxb?;hmcabLV zw79)~*XI&@%_{29HUr6swo+PQVfB$=WmCrNjLnf#XIa8xlN~qk$}r^h7J6{}d~k8Ft0?p9>WK-T!C_D{%jW`^cp>xKWzR5+$i%6WfH?8qKoOn_KD7K4HE>M+-nYpGL zL1v!U=60^gG-Db4w)(huE)c5KE9P3yhdJ}vp3XE?4-!AFN7=Ox z+Uns|a=NwP#ljvwdn2)p%xb=U6Y-@# z>{dOSFmurzOb};reMfAfIiFq)(h(okLYb*T~66rrNEd+;nsnZhk5 z?zd$zCu)}#xw`aCv8N$KspJj0!plU+-uifa4j;*{6Px}Bc4`BnBPhjFI_QEAuhY=A zt`^m>+Y4CnsGq>HjICup^fZ~tWvZV9Q_LheA&eyWK7|g1Z5@IBgnUyZb0dpQ-2N5U z10mS4ZFPD-qh~7cJY}ZqJfWOA{j+8JE0oJW8oayd}}cQb4m7vc|-%Pa+B zfY~p}t2j5f#8U|AG-R$H+Mp&$RIlV%rA9C5EDnpsjir>=h`|<$o+MJuIb3l;9)j|a zGBJPl$3JNMa#2r3=!D0W#n->%4XbOj(8=m=cyC#K&Bd}l(-A>G_-BNPJ=tDLMbS!N z2)FV!vJ;_0*e)}Gg$N{I$!W`R3D4yuy~bewacj5O63W7!@Tk?D2)J;ZSwVS8XU$;E z-bDN{R)=iVC8$Z@v**?+f-jc_zt;lN8=rSYsy|D9j>iVj}VZB5Jg{JK?AiP!wY~Evw0lKKgJ# zi}+{RmI{v0b+EZ|n7A5gF9)^yaZ3+VeSbs)o}wW{MlhGVq6meT`S-}lyevW`{2h@i zCrH}bD?a+AO6Mhc13y#;y$|-vAo?rl18V35_OI6Hn$FBpeub++aL=Z2y49cjVuJFP z%>Uj{bz{?hG@FA=O%$uwUUhJ|LR=L{`?4d`CCrS3RXhCrOG1hE+iU@kl_cW0CmLc2 zzLNEX0R>zzMo7Q#vyc)VozXy70nD1Y-NVNX3=|_1c1;2)IqPG+NbaB(?l1kfz{ic+ z;Z=%m_nT0BQAw~|zfMIzUYqDwLxb~;DKf)DxG-)uxx1tu>1A;m-VRHdpc)K8Bp4(6 zl^IFZ0wLKc=gIgr%_Z9-5Jfihn2uQu3T4}B-9Sc3DUYp*r1_kb)69!(0`17DT+a>7 zYL||0F%zrX#C9wpUn*H5hR)}ELI)mwmiR|DpXBJBF7Ff~Q7Mlal$#`1iWS$fwmIAA zAg}gU8eU<+D~Urj#?E*#gk}>uISje&v@H8a1V(MbhCW4u^Fp-@9vX!mb7wz?I8Aes z_STgOQ|=i!Q>cSAO;Yu;K*QHnex+Zf(yRaDA2 zS3_&lV2RG(WrfYLSoOTXTX*^#98X4UmWm3+M{4Hz<-u5rYt@o($>TL?1*VsTn=(rw z%_=SkWhV2hM3m{KwMiU!T_<8SZAg+JwFwujO%(i1pIwJa6TmQjwApIt=zuqo!pU6z zh)0i`yh2;0T0ry5vg=^sJB(PZFppKNX=hBelChW=a_V1X^$4L*THaXxpeP3c;Cnc+ z9E$vpW8HRMRT&N?6T6^oO)+?F<;tAK|M)U(YKWRjjP$nFRTryZfOiImMDz^r$KCJL z9GLLQfZZp7p$xVk*???vwAMKwiV9+$#-O{uQ?vnVPr%n6?ozp1uysODU@+|0G@}Ek zxlviVZ6!-i{T>n_gik}vW@4IYVV>A9WbW&D(6l25*qM*7P?sxvLHKC8L!vtC7 zPc^EWi_I85+=pHp?=8Tx1#MEtmwns$jkF^91}_GeEeL0_L=FBZG~~ulb6b=Z9Gu|$ z7?6HAR-0a9c_1TT$uq)uu)}X;hFQha$)-8TVttB>@*&{@F^z;nU0wlwKVB-_YRuA# zk#;UOaz@51W(a*x%o1fGU|i^^NuF)azFMxZj$pX#9c8 z{kVvtHyq!QaY7vn=B+eb$+u*@&hq;KH~pg3=?EZeay_{C2GyGZ>fE?j4j#yRn)*eHQidDIln_n z2M-XJz`z-ei+jm>CFS=Q<^#i3?s!(NzV8Upu*@XX&S23%%PD<4z_@dwUY{R}Oo*By z2jhGzfK_^kEGXX2lBZo7*~*THqxV z5f<}R_E43+3C%Q&Va|k?f#l>$g3INNo)0Bb!s|dj-B-{nsBvF&;>k7dMyEVSOdc&w zl&wj{WAqt-BD+NoH~lJ{{DIe3BuT2Exfy=YV>dWG?4h{+P6;?HnE0x}^gMx$i!@69 zDkr%6k#7l&bTq2?*Z5A}K`PsJ1BP&5JE%`UMdVN5;WT3=9KVvHdiec8JH+#|-4epG zcr$ILR1E18Kg*fWGn&}V4E#!X&`gNEIVr!CIUSPz3hsDGXJC~Q$!WqAjio*OT(_Ev z3a8OB7zG?Ynr)a#WwIcW(y-wSrEC?dA;SpeKy`*8^H%XNR?g^*aCK^s z`>qUEiB$a~_@442STUGY;t3V@+)_&O*W&!Cc zTTT<960I2BguBJHSrO`|=`J{@tD;X}Qj-29k%J6WyuzEFZrVp6zR&G*F}i%EYX3N9 z01vE;5c+AM=-YGgm#mlR;=ZEy)0E<}g&5#{sHi6MJd^^s!sG(VA`^RKebhyvOqClN zXIJoOF3U^O1hWUW0|!LeH&PJee$}+UDZa9cx08Ju7(Z9DUbfuSaB&jN97-|J5JkSN4l^0RGUS0 z2zSoNC09^b>Sg`BNM2v?T9#Y+(>RqfnbVh?Mx@CQTC ze~L07d-WG7P8$MdQ!H>y3&{O2LC!ha*h@#7m-eL4m}epI+lt(EN-}j7%8}0E`3rRADpZ zRI>oMqfJQp-8*4Zbeo&Z(f76(%HUc_*cG|R)VOp&RT4)}mq!l9nB4alu2t=yJN)Mk z;OsRIR)zLr+wxU40I#;axA?OvUU?WL96Hahu;^IXDC_Wp*Un_TBAbftxJ%8Z>vMju zuPz&<6;Udgx|dH#&2C>@xUKPeWgCXQ1Aq3q-=N616F)^#u) zRUpi-Q@tr@IEEwE=o{qDMQBV)*jwvV~{^( z*V~-ZlGgrZGm#w+B&=jkzzw9G@`FN=E^+D`m~)*0OnTb>8A=_TF4M~*}EzVZtE)*R_Qk^6xtCp{kzXVuxhFkV)uU51v- zmCM|2R3r#x3x6q7GsqLouXCD)yB>=zJ$e(fkZ5D*eml!mfYr?MObMel%i;EZ(37c5 zZvWHWd4#XIIe0hBOKp(2;yo^R0JtY+=}ggg@?;z>#HfG}9@OZk*UXAo2%h*~=Dk1c zs9iQw%k}ZD*WiD8&on@*QM-#&cPH)t4lP3hY3~RS$ho_4vw?E8ZpjipSzdjAQe!bd zys@LIf0N`j=UkO16}ve^FY3VYf`M@-z^~rW`ca&Ly^xbVrGr+x;pw+L-1Tb#v%}&N1gtJWCnXTKgrVO#7eRz z3$vMcd4AoOvI*JjaZ&nm#a>+)ES!;6y&h*MCn|sa2VTt;1vspNZStK8OKr<1qfoxz ze_-dl@eXxQIxsw{fBk7fjg1~9_^fbZ!{-(QC-d9P!r=37KNnsmoH$Ug@5LzN`Pt>6 z<6)qL&W050F5k8?1yDN9n%S!y=Qhi>h2UIPbYd{!RdEpW$6HBXBDE_bbEJT$$;2uF zpB6Kj0`e*o*dx|BqXQuW&iNGRFeO$C&tH1xD)7-xIN2uZV0*%XlLs2HaDV+vlZg=i z<*%_T`A0c;Dax1Y3h>=cGljv~@<(tfT58zTEz_|lx9Zg`z|p8c6{q~q(PWS*J}D9F zly6X5BVInn6PGuAK5uV0)bnp0{~#qrgBqYW6VJ@svf?rRCZ286@5p~+^6eO5)0u$Q zfV1v|iRY$yq@y~C_O|zd7ipZR18O>6shO;-3CG=ZVb(xqDqeaA5>3*7f0gtob_7Si}q=~-d23`=UVm-16ad!?logYTP`S&P$(zpm667mgaHGY zR!sd#I8e>V04-urtKMPb;C1XTvG&tE?Ldun2Cz1C+;~Usa$Fi|EVeaFkJEk+^vSC} zY1mX>Eze~oaD#CesL@E4lbPJeOd-S_b`@Jg3&mDIr8MFjPH?wCz>2Q`3aJHh=d`Ya z1Q!kTS?Z*5H-sP$z*7k}-SHa8*5r^tjECPl(`zu3XmRw2f!uPHnC(>`VT+~iU9sN znwy;R=id+K5P)n6jcDrY{xwSjweo)dYahLI`2U;$A8`Nw>BruT)W3lO%xmy>UNm!x z#`pi8Z}Z+yz3q>sV*loDln}VTf|DilKS*|Nan%3Oo_0Tu}A@CDP*jU&0th`<93GKdQ5=2+&)OutW5J&}TpgLx3l;Q(kHS zZs}i}!@#v`NMUyu+Bk2E_5liWf zdfxw9h<=|TI596bz5h7967MQVaDDc!kHAdyVg6q#$+p)k{P(ZCzDDm&>d*MImhwGN zIMa!bPL<>LxBKik(8l58? zbxv<*27h6=Iz))S*S!N&-%d5I=iqW7KUZb$^dRx5eX>#M&`#{}h$1rDS8G;bZ)q5Yr8&M^TI#g2~vnKEN6)(vf} zFq1(=a<=!s%@#V5Qt)0|%yWHMqXAxaC|2XUwVA|$|86jsn88@aKF^r z=-K3tbl~u|4Tb!e`dH@}sNs=I^fWJ$Y~E7HmS( z7nw|#b$|luhy_Hd1Ht0D=YPTCp9Fw-&@CRq8Ls5OGnDT#!$bT$7v6hU%0ybk)q5RV z?>S7r`>Vb8zShBKecjt_ze=O$6jtc5AK)J&j$Oz(crWT~0#M|x<=Q#`z^Qzn;GJZ+ z^bS3IM@|7l+wukYk6$iq40Nu-F~9OnBhTe*o||*|T)N~VZqE8YG%I)xV3-!Xu#Z4n zn#5b=d6jibh(f`dKP1Nc?gKEYZuSjvHj4E9#K2fP+O~eYtzThWuK=s^5rASkrGMQp z`=s73yyLA3Cky&FIBk-;cM|ryn(@7J?fvesw=OpG{T^1|VVd6n-tf0Q!Yjx6AkmzM z)Oz0o0J`^3E_h%0_&O@|$7$nFA;8cjCw>|O_{!7uK0nV?Gum&rJQ^Q~EYgStw!uF< z0wCUd0J*vkjE-gPyuiq*+T;#%V1#BG5QxEJ?v?M+JJMMt?*`LAjr-#bxrqlJO{Ld~ zi~-$?yQ6uL(9^hrKQMToF)<=%03`cT3(%kG^{)}a!Z(-sKO3?J9K{j_{IwqI%{DM2@ATR)e~!NN9)D)K(KD&% zr)_um+kGT3tNu6r+v~wQecJ%Ag!wf@#*XcGI`uoD_nk}`mjEEHe*XRQJDvOWaa5?R zPyY}!6R!^-clk(O*1q>1e)_6HEp%gE_A2>6nC-Q`zB#g>YcB|JeSLxc`|ROw(Fhs4 z1;5fr%^^E@iq$W_y&eg9+`({-$_88auzdF;ZFnc+Ykxxc|B=G=!~hp1L5jZN_ia$e z?j0d~AQJ!Ob&o|2giqAj==L`VyBjRN=W#dsTIV}3JG8Li4qlTwzM)V_^vP>4T8dx!M~a0=TR~RpWT6NL7R$5z>E6VucxUs%y6D*IR`Rp8tgzzz4sp zUTgx%e(%L4NBO%s2mvJP?(=;vsBY9!ez%PmZ#d_d8Vdm#i2LlVSBav1ddUpBDW^3m z>t{JuOsPyZ%yP*6jKop?LzYc}v)Opm4;m5Syw-=xJVM*sCqwef?6L;V^D92OY&tv{ zlF$ZeA_Ktz4u)0>zc0Cbmd`P8Cum$N&l8^)z^kl7Sq~;zPpO5R{r3rnbBGTJML(*_ zU^8nWFJzLh<%%}+jsA|mbZ`F(0MeOEtn|}-0BfbEHJ8-?nZsjUU`2!MF*5Xv=;g;~ z9&^NaaxdQ?liULiILx@-xs(5pj7}jV7h|6FVQM*$2*JCEC>34t$7Rl^I=RjQAz#_T ze6WY%e4cwBEV}|4qeUA#b2=57HtO@3H3ETMHK(K4j|8efNl^BgapR#0bV>{&HezKt zz9?Am@QS0-5+?YdyunRUx@Z46I>?nry`es??|pd~hhFl5+G<<%<_pf{j^@y$tuyh< zQ}3U>&s3}6fkuTXXwPpIg!dGR0A%~a0aO0dl*Q`_zEs91^#%xoo{a;>auuE+CYGL~ z{d*ul$gKPV;sqXt{SoNoZNp`DxFVONgo>j(&J9q9Rh924jf<#@4^ipC4Tu1r@g4du zrIBO=W1YbUFC;7SZg;MkGw*EHlcdJtYj2MQk-*=*zk7O#4s+JKnH$ak)gj<2>qkP0G`!3L_=MP^V z2N|Y$vg(^fvM<2p2)`RD9)6d7T37*$o!YCEVY8&h&;hdX-h#A20t#mzIPFCGiLA_q zrSR0IOGx(o@^k5#FP+EdCj94!pNN=zT5m8`Up1cwEx#VL;i?M0)aiH`{Mf1n3t>s} z%Z>cqLj%EvXrH2x(omp{(Yuyn7Gw1l%MYuf>j8wh8PwUP&l&h36E@1u{TL?9ij_u} zuZ_}?41ximsWLEZv5R-A{*KS z`Cp=w%lFRa|9!P!VmwVm#$UpFTAz=CNZjdDCxSxVB2B`|eSDZN7rHp4H+YgZ*NuXT z^{4v@i97?wZo~W=@z-Hvy-SN&^(G=X+|a=9$Ja5u7LNXpTi0^fT#{jlJ z_=16HC=ZBBl|0QifkxV{Z9krtZ)f;s|0Lm0Qd*^zHqjo#i9WYPOi95*Qv~+^mpbs+!l}VmX zyxBQzXJ4Ei>3pchX2U|EKKk&=ld8)up+6unz^jk>H_x5*U+tmeU`mQA@FbZxD}Gi9sB zfqPdfh&0CoP~`ayL>evIjeWKW9^>c8h^v9uTJkNn0h8PlI7W0R0{x<$45?ib7bVjB za%M_aHL>9Q>lh1ev1^-6dFwkO4JHm?*MR5yU`QvZXN+&3>V~#UN(xGPZ9;`$?$RUZ-Zy1ZLEtFEyo=@V6L;;ROj@(gPbW~Xe`u6UF9ir#M(y2XTlx1Y1UyU-G+%#p zIo*CT+zCYUOnPezu)PMNYcx=heqbE09mvWa>Xr=q%cob=o%q~{$PugO52c_#u#;jy zL^79d^C-c9C>R~?(hYo`{e@6$m_qOl$cHjlE_p}zU-s0Ua4$Hl_UC*ub1j<^pg#E} zc?qxf7|cuM+KozM_ZuIav$GaB{p0ee960ReDZ$Got?kEHH&vgy_HezEC9LBPaKdW}AI)h~`e_t`dZV285$#=DMSa3?Wcs5*7-Q5K>*M9;O&@ zd=NoVLFcFsB+-a;Q8Wc;AEB@%MxDe~hdy#a4e2S~z2)7OL?;7##=U-D`F`fs-FD`$ zAFX(uR+i^gxy)Q?D5$kk(-9n3$^^T$=8Y%lEKbBl4*hEWoib11pf9(_&+wZw5%>hN z(^Iy54aX6gOD(4nAm2$}V5PFN68Yy0meX`I+QZD6+`2W$>D!8zj&3YUab`;mcF_~j zT+?Zbi3K-oV^X@*QJzm7b_<=1gVJtASBXmz3{|5gIZ)04@2XVBox%s&OOLa}&LXRa{`E|byEE_}##{1& z&&NY&Fu%d~rU|0IOyQv}wGTGWU^v{LE_bmr2GknD>Zj*Th3JVYM6^bJ+18QXcr>Q3 zKus$t?K2c1m?sO?Hf(sq6*g8}MK<)-NLmTsKnl_PN6WYqMB|R z+3s|?B_jv2JwYb1j(DX@cQrQ`kpeg$K+v(-dLBRB&hMg16eE@FZOF&RP|}1EHJf>N zr3sfB-Dn3rQr~Ls>DXm!FAbA61#v7mIZ~rbg4r$Muuk*{{B7v?3&gWlXa64Me-Vt? z_YaA)#v3#I>RHXnN(_Ivl+2MVc+UB~xCDox^+r@bY`N(uAAc0mTkjCG*{bf+L3}|C z6XcD1($i=ne9v)yaRv6Mgg;9FM@-24S1ziUZuN@iVDm5xZi-jT5zNGuVuDlcd(%vcQkc_2LhS7I;rv= zyh3dUXBN5kj@{V_#ZR?*u%tp#X>4fqOY(UBUDCtSU`>|Uec^uccr!QC4>p~XG6)sF zq<6XY$HYh;(d^+qd!o?HbfRf6*;6zcz{cr;qr^at#yFYpr&EJZT54&iT{#&JRNtKni%_-0?jAoN<$e(v(||bKrBdo2#(Ss z6M4s-I9WVW##m60$PPAzp=oT1qqB87Tq<$#i^R@|Uv6wF1~Fxb0g)P=NA6gJgebQ5 zntWE7iA2LIwItnqC?o0X+MNVDlwxdzS7;-tF+12tHK&%!Dka&6isJGf4|*Fl3TazR zd)dTX+^&!Y@|c~Ug%iQ-m5nJoGD<3vVz(#Nis7gqhFJH1a=@jZ(34d~Wcb8Jhm~Mv zapbco{4G}e7$ej7gTsSXX4dupL)JTmR~9V`+p%ri9jnvnq+{E*ZQHhOt=P70+fK($ z=Ue-nv;Uj_sk?cxo-yXCQ8lV&)mutM&#GqN?y_6OqGB#|?o-JWb4c$KpXDbVF>gvr zroKnp7t=(I8}VSX+;R%H&7s_5L!{e}oCz3qM-Wz41J!;|d}z`v<1#dGJhl^YbLcM# zeU;}naeV*Ue&&BL-jVYJBI_wM@jk~)QilU2tlG^Wk#iB+dj*czXJy!%2wVZI1XZzz40V>_yCx)dYsPc@FqtTGh z`Ua=sc(zWaGCRGqhM}c5eV%FvBhX5Ly**`EKnKK~_aiy^c3UJ+>)V z1+1WXRGq+iWZ1ATNU>!q%9mbDm6s;#_G0;wt2Or|gjC8bJQ$b4;izJba|x0(h*wy` zhd=<}Do+_LeEur&PFpQ~th!f>T&tNW3M$gRk`Jbr5li0P%b31q1TRVy<&ZM*9{Gex z7qd^SE>XQH*CZ7)q+AwLjVtF63k&c#tgUP}1Ik==m9&0r%iZ_o#!`fXLppSlS56H44G zGy^DU>s2p5onUzT-Zat0*=P_WELaaoZJ$v$dTuOm0%Swnted_r!IBMcax+NE{lnEr z?V3XK)5D9JrQzq$K54K(HCzIT1qK}Ct&XS<#QNia1g$VCn!|{KfbbAg1jsmazft+A zdBc`2z+$0x8Vm|}qe=Z{&}i*x9fxp>Cra*ZmHi-I5A$-20sUR{u-=+cYV#%!`>QJC zUy>M;iyS|&V-a$wQ_2vhdT5^Vcd-IPi3V|Jw9jx^Ef$*9Tx&snsK-Z93iu&QAnUZ2 zu4Xmo(#VFPfnpqsl~Ki|CDr;HQ0NgPrJ-$D0oD!s-dT@6y8kvhy5T_JIjw+>Ez z1G?>4bX!DN%E)WEFwsa|>pr?_By6F=qV{x~!whbIEPoMo0j&5=92h@Z`{bn@ zxJLr+fl&ScK1a}T%vr7*BFo>}+c-N+>E$X_K1x-UyIf}gR}$UXMwDD((FL>yfr^cZ z7Un6H1V_j4*Qht08g3MBC@$CxUzdhO z)O*q^9!0!M6-=pjE0;7i$p$v(k=Z$de-5$a`ixM}Q{0#OjOKKL5e18_7atjL$7GNJ z+?sPfh(VP212f9-)D99KqQglu6u6d34q!ro?axXJB1Sz{tp3pEPU5Io7@PxvLeXe* zFnLdGV1CxBhBR?@xG4vnnd!4(r-IFe+7IT+eppfeS@D!nAAhd zV>XAj4Z^FKe1q$7SkS%e2f_b=S+oXaqv8%mw0JTP%OXhK!YHAWHVlk8;xM@#a;j4Q za%lBLCk0Mez?LWHLwiJJ5TvX86qlc>Q%NDFJi?+6()^2oKEhnF);ewYgOpiX#_lMa zVs{;OXCej(py{MuEjN`cnCO#$!O8slRYx2O>1wJ4^!Pxi2un91y^}v{U-A&@n*GjS za(rMNT<9R6jVaXWyW{DusA4iUYtHE$>$lD?hviHLHy)RZ1@cynrkCvD?ceFIdhz7U zF5vR>cbkhJ3i2cVq$nmd<7_B^1a+k|T88=b-f(1zHjExfBg?hY)XHHw@>CKscZA=d z9oFI@3$SGhvVG}nWTsnFACt_@Qn8tuwD(}QR8}5!K{fz?+NGfbYKi-3Y@hs8M`YqS zLel8|x$aUEm-sPGWpR^f_1hUixm)sO7Q#toX#1spQ$FyCmB?GuQ)!C%{5-sNKo126 z0m@{?PM3DfE0>xBU`z^O{79?4TyPPXkseY|0bquNZqlAglMc^`k{)6rKKyK!XFPw+ z5m0b}0Fge47Pidc0=cSV)}-!aVZHPkKYC_Gs?v_}0k;SN0)-Z-`wuT3%c}z9)K0|13a-hnvJeN)>#84~J z{wExT@OdC+*}rT&PHe%U}>5K+pvY=9r;>n8RI)Hgr z62xaM^ct%i#s&F}3ZH`#MTFBz{d+lfQCqOBkM0bHhm8@{ayf+ehFm9*(~v8le5+9S zXU@VhAzVtx7mAwluMHis<>Yq?D;43wBEmf5j2WJM{7bLHU%nXNuSCv;)S~CWQET_r z0#AGO!nZ{mpWGpVXM$?Bh>M%?96|}U#%_o=`v0=ti-)I-) zg%dXq#__z}k^jib1|j0HGqdXi%ft&nEmq{VZ|?GJE(=ay0n`x~4vvHXjp9=m>lm7Rb3Uyn zF$asth&XaMbx`=h?hAla1Y!1SACpxf*N-p9V#i+$z1b6m<}46}1B>48E4MS+DWz2? zQm&}$eb#AgsmM(h$1x1fvk~3T!JN6{AHnV_LxGFXr9rV?Mm7kwV_Z%i`D&Bx^4E;G zB8}q&&~o-GJXZE#|MAGfv%XC=+i&!cCtdHl(ip!P5d zIzwm_qF-k8z4*2B%AIJTCi|M5;D91u^JbdQ5n}xyQ)b7Ul~A#o5LUmeT?lQ6@w|bb5FlN3QL=KHJb7SJJ!(k;6_(J`%!GCX z=!`IW6DY6@XxC=}bM;MB<32lfRgJ$Ok@OzR*b2XE4;rhJiPW47Crf}JjhDBPiIDOh z@Vba43jq!0NV>Q*!T^*y%MdKj|8hYXv4`9!!FpE&(6Vt!o<~Qs*my^Rmr!STvmO!6 zK^$fiLt@@1ogvyogn%aa}^LL59I)r6!DiJ3OyT(#kB33tzw+vAdIc( z2U{CcU=OORd?8;Obb#4ku{asL;ukG$!{hV)yB`z*WU#UxANXy|#~^BGfLj}v#06S* z$#Fr~j?3dho&$P+?nV|o-v{a2=;8F@aPQ{XI1FI*MTEXFt0%zynbU;*YbDD6f^7;t z8hBmME9|;@txLFtnm%HGKoA*CzI>bg=74^eSn$WUgQ>YouQ}MJyI6|l4N5R*^itBf z+AH|Q!#8-+e>UaO2pu{LZkxJ)DyFkS{B&P53Gch4wUt&LH3bN87t;d z_fj{OIY@(oO-1_-Myjl-I*D9UXBCOk|Ggwpnp{38yKtunOuo2Gf$qRxQzK-eN)CJI zM$|xhSIuEc%Y$3sk7q~&;0+f4Ru1F)wFn;@RmC(HnA^dX))6#B^y+M>G%yb*E3bek zj1M78zfcrgkfF(hfz>cEK(qd9aUYSWfM6R|zLq;_!(5w7qhKmO;AioND&+lz6g5T+ zfP{p;EXk3VG`t{<&sca!5z%MObz$|$Ne~84xut44wL3a6(zk0TN zOICWmBLiG-BrzVF8+VU@%OQo*6ZQKtZ|w)-0j)eJ%PvHEu`3rC%ab906BW4$EEDQV z$vm_wWKM-=g~$sG6K#%Nib&9jkkO#{1g`fq$0~?285j_>NxQXO!TruBcR|_}5DdsH zZ04Z059tzUxW#@U3^G~5Tuz8yd1;f!>KK|`Alw@B>blSe8NH~XmyU=~kQ@?WuRdj-a)cs`GexR;eptyJSNnbIzd}6w36si6bZpw>kx6Tr`@KwSJP1v3i&S~V zTUrI;h$B6Rl53rdnaie{sh$Gf)Y%zAC*GmLf-yC`xJd~5D~tTp7h=Oi%#26WxYppK z=V~-=Ys^*`W9q7H4Rbna9be#l1)_ilhO!#5{x% z9txk}&n}ZCaUC8`mAQZ_k3ZpL9Eq7dmdOh&FfAUeY-_y+2clckKK(5ehru``rw&JN zr9BiXxDW>rA*$QrijkwG2@ah^y}AR1>`d)bNGBp{0Cd!L(p zA@@@mw+VCyXK$Tmo)Ua}B!;(*L|RTK9(F4*2{s906GtM8{P8#J^cnaA&ke%8*IMZG zcqr>A9Cr$sr$EqNUgZ!E8Y#;yX3cXI)G2>+a(!)*e7Weztp&PRe!FYAtT3-&8|&w6))qs5C%R z1#1i>`j?mnUO0tqVDv3)?1{}WAX51HmY&Eoah0XFeZtO>He}b^tJupWaIUU3R9{qi zE&>e~%7rbl!cwfwvg{=EHi3(YV?rfKFf7{tXP&!Vpwkpq!7bXOr7A7eU4){zAlH+y)%e=o>V=Txz7%SSB!qW|vbZtO{ror^@4G(E7({kD)Aq!&63x)j$<@Rxc@=j`=W zKiTvC?vm$=#pp9b*__be;_T2b|2)uFHQ^!>&`!#57254ZA#s?-+r49gfu8Oq9%7!7 zZc!1xwwWZ(u>?tv+s8P7 z0I!YiPm{3L>+3)dIe2Q|WuFMyA$w#MERA$)iT0{g|~Eggjd z41*R_H;6Tn8xhHEoKr+BO1W>+qc>6&kMz7$s@fA+1#-PgajO!|K(T+ zM*J*goTnUvxO73o+*Lho9|VVovzNAeph}FgQet1$RX!`?Oo@1{hDe$GA6}w?_+Q7Q zK^pu6xqL{}kF83bbpkQQ0yOUjVxfB=V*}OG1X_*EU&dK<7>FB}5NUu2i3QkcxcaY(kAqvyX%We&%vbQk8BPivJWd$nC*5Q>`LrP7kG?(;n- zP<#+_FS`5vnSYZhUDOt|hsAd;J&-K6Xhj&Ucs^E(AEx%CVi>$kNMM*ETgj-n29>p5 zBS|(ofz#|-n6VUIoEeB4{Fd>>L!#p+FUBDQ@VG}GgPFA(IUWrN@e6-o5UA=9UtYqj*7;BU)N^5Hq0n9IBZyZ?c zEmNWXhRKheFffZ&<`$&h8gZ;O#e#~^2RF+kFrS2+ilxSvf&0zdtejLVKpo_ArG|3I zo5_Qzz&61fJPj)Eps`Vf%|clym^;-)u{W#_$-(&}$3L68>;2w;S%qg7))oQ}K*@ay z`gGrheqE@v*oQp0AvXYZ;^A)vzjJ$`5QR5swacKv>ZMQaPGVb$^lX;SVK)B=*(s;v z*))w+MUmNcFg5-|%X=nwt=m-aC!Mm1=+lD)Z<_QCt?AbE)gOz06GEt3t8&+B&I ztHj>70)5igAcMvJLdW(*{Fk1(Z%oOhQ^OWM9p5h2|2Of~-{do!93JsZ+=j~{` z>i(AOqe_!Wb0n^NHiv9vU=FbT3A~aD+>Hgl$7Iey3;=={0wBN~2k5rHccogbtAuAm z09`cy{2UYG-h4F|*bdhM?>^)Tq-wN=1I*WQmxRQ1uxuDVto;p3jc81mBEk%lIUwXHE3VhL{wzq-t}MuV572Mi8LVmNgBD#ZYJ zF8D~GV09hj)M09Jjk5?_-^1eK@>;lNpNIp_Xx}T37ccU0%Byn4u}1hfW(oSUG*YNY zE}dI98GEE#hg7|qkc>oB-s9q+-Huq7WbbK;Cx@nBgd}YswEKe7GK$RN!O^ktEalSy zsNB`92Rs{;2kq7k$9{%2RMF26-GDic>S2<}iFIHEF#-N=MtxUQ)4qs()v||={eZbo3W(Z)LNcZWeB?xVf<0prJmBago*um64T*vYr{zW% z?ciE-cpT{h;W%M29^cB1HP}5CBAn1gyzAsZ0@6S95HK1r|5P}*sL7dd(Q)+k(>2Jv z#3$g-MF=2VET^=TQhXDm@rEC^+@8djBNP>DNcjqO`}1;3GST*GG4}zU0__(#>aCh$ zKK^#iA%F7i%E2Z%P~tr39}qzAV-SU_8(tT0$yrc|8B~67e^Fd%qmwXoWY@Qu2U6?> zN9UGSTP*54A+iJLP)>(1g5Anvv8dx{g?` zbr1(eNSmqMVQ;=wiRL8{5BWqA__>B&r@HG0Oc_XExB*Qf34&P-g0Okw#cb@2!Nm(c zLRXTtSl8Ld>RMyL3BIDPsnm`5a)EFO&NL-(A12v69<0Yz03FMvMKw4|1&;USazJlp z2yP9XR0IXCUbiN%n}kVHr)6`EB+|d^W~2oAzuE=t`wY~0;Xk2jd922WaQ+~lwdO*B zM-XEkQUmYqxh-Enw3rUF0rgOstP@mTAZ54d@G;x7&uoF&j_cF(%g$X2vF~B--))~+ zpMi$+wwE2Rki&qV>4?q{?tP>z&c>kh$uMrqNQR67ilO-in$+^CLz!#*exaJ~^yRqT zn}Xm5VDahT$xn+4DKF@eNKK*qpfT1pa9q^jN91Av1eO&^Ww$3VJkq|AE)JFRGQsv( zzG?gLb)*wIW#n2N(vOjY#8A>-0?5Br{f?`!m>%CokD;Kl?-#se~BJSfnqyL3@G7=sWYLicmYITfy zm{t!wk@+;TWNM2;&K32KBMk%MyD@11S_OIU)rF$u5h<1WmDBr{iekF;o|%=zpsoo= z1N#2o$YxnO?yE4j^-jXvrzDq&jd4Ga&q~0L#aO4ZTO9#kSgO?;y?QV9^2IlkRL|O+ zCTWwc>t7A+UR_3`+iHIsK6a=|mXLntRP>(gg#Q^-i;tse0ckq3ITTQIRq(AtM@baH z*qNvKHHVRjNF}5Jl{c-Cs3Tc~77>ZQ0`1oSO8{|F!ZJ}l38h_~4+Bmm(nm^y)qzZ; zZ@Z0M85TWLW(a)wAbeOs#@azP-3&*x%&}i*uEX_~p)7--<_wh9PQms`@r-?!mTDm2 zvNScLN#2Hpm1hJ59pf$DZ;DLbjg|2ii#J@FBm5_At*}U&C3glt8V%z`L1u?c^Vx+* zdjFs&s#KpH=BOS!M7{jk<`l{gjXfLFbnXE!hl*0VhTs|Ig-U_tIzHD>%F>~9cmUsR zmnUr+1-M~g_VaT6lS=o1GNMl?j@KuKfB3=KPmUQcG32H0c5%-sZu02Mb5e&g_Dr!U zc_(L`2V!O6a|xSe$3GMiZs8HaI@&G+vungBf$6u3+Hi>U3Q_5sC&eeOi4Y{*;E?J; zuyzG?md4ph?2z;2MY$38w*@U!Q&QfAGR%AHV$kTM68Jg!F6`FN8JC|Wklv3 zB)TEo*7}yOPSxA-Y;epYCjbrSynxva^WJ;hhtf&246WU2z=%faX3Ddr*_nalNX$CtrM~a?xWi`KZeH z5vNyo_)p615!rv`yNp!s-vuaT$KjM_z@0wD8O#N9bG~aEr2(2!kpa&qOfH1OxV%ad z!JOQB_W^@4=;og8Cz!qwzfv<=1}H*O@L7IyeDY1W<23GbEZZW^Gp7ZdcXKpLO{!uD z4sN&`K%il_rh4TbIGQpwU&F9U9*=j1IpM`H#po7xdZ+e;-{btopr; z3LCDgBT4uSABDyw5iTJK%?#R+nuy{Ldy+m7kxNo$&Q;VJfD2L26XCf+{OK=hHmG~C zK<&tA$s>aOUnT`QSJuku&Y=U3N-xaalF%SaPojvUvOUYmiqa{oaFS+?7q1cd5@Pnn z_P*9kAmiv!hy-mgjq!oRcd!HH^xPhy$R*`q$+=w$&7;4}G7Cd<+JlT8esZi(W)C_h zO3shtk}L2XktMCUnBHM~2WuI-(OyK^?5Agr$3(od6alt=RWjR(!qwi^MN5#tA*!Gi z&EJtP8$@V!4k4U!kxvAnpYxbHwAF5NSr!iq71%+th#Fb2w$lAB86zT^BMUEfmWwMT z5|_1l2=4dHZ^j&>9Yo=tqPalBORj-?!*N6wuAM`y0%ftRCT0J@{n>=d?d(e`1ur^f z!df<_-r-hL^o})ix(@!oQZx-tw3IUxcT$_(a+NM2b0F4I#&%e9UgmJx(L;5j!(DMY zP~9n)wf!af+t;qw(e9hKg*M%v#XqJ`A0+WC6x6<4(UAPpKSUhrFUXNU3;)<=yMiNs zt#z%DIOac4!+suh7I`0~W&`F_(msJT`QEE3<{O`*1Toe)e{60V%%F=t%&`j{CI#9N z-Fz8C`wC0Xb8s*F9LiKtfXbWzYflz;!7hL$|7pH9bOr*0j{F2IMetqUm)252<&4_x z4zsKJhNM;Dy}Y68vjUk5A~(<^SQD(lU&0$Q#;G=09zP`o4CjypFVId(3`=jp0knNh zD2RST3TsXcJfldYOcd5pvpEStsX518xJhk+mWiD)(WF6O&$|jbKJ*in@t!^{C&bdY zq&k*ChZcdnVuFqlm6E#1oHql6{5%>a{0fJlFxdIb)SQduM4}e=ociHxh)Ox^p&k3W z@E3w>AsLcKN_gslm^rrQQKD{{5S_@pfW}TRK0)E{QBaTS`-0LN5N5C0^N_qJm(-7^ca z6?1U>^<0OWfV1o#!ow}h_IINJaPA9~yCSJCuOf-cnQh0>#g?r*8+_lLp5w?x>T2%Z zt?>dTS>lNFpiBgMA^$c^ zcY^d75MvQ=c!57{s4oUBuYnmxGl(hBn2HW#%mXwe#B(qk{dp9GH0f{y!4oBo(}0lm zFW=S*8-7DjLJcG@=mwSPx?(`si*oi4ehpHb#X{o<%?FUrXcGR90~kk&2tlqFkvhx5cIX*!Ve7UuqS12D?cehr`P1CKG2{OYOvZ6Hp(;Kk(Eg8`Hm0RN6whBTJohD zI#IcVBR>M8Whv_~#+_$CTtI>y8kpuvkR$TtSd1d)5ZU&zmJ>77o^8LyBcBVk9ik0LKSCD9a3W7t{={`P zSWzJk(LIJ$ENIB0nHa^PSs0~g58)KS7|`QN;YTq|g*fs?)^6#IgKtox)-$(#*+E$m z=0F!X>91Q$b=UatYB=T-?HT)6Z`~KM1aLPb{GWl?1s58QqjJ^bwm5FrV)*U58R9jS zzRTW@AE@u`WkxHNz&VO*>^SSbJVs1_@;p`LJE6v3y@L0*A{i$6z;;4=u13q)rK#a9-y zfIzo_E+(z%Ps>2SV=(_~m~6Vnx$=|eousX>@#j+iT(JFbiMotg4n%6J*q#o84@fFz zJ*S2Aw57;0E@W=$P)e8{nD7gIhBotgS>@9Da4ijn^cP{opf4Zq9+iGSmmcXLb0oVr#MjjEuMzBoWu>@^Hg5u;jdjyw%3S`$50p^%Ownv34@aPE=J zw#mY9*g%n6!m;y$IbCkchn0%F;y~pI4muS2$nj-gvVwbD$0pZa?GfETfQ`DHWi)QX zd7EU|{m(a`cTT?h4~7H zogB*1SB`*_yYlq+AE(EQ0*j*wW{AHr}z4M~v;l|=m22?8bihz#uOX=>ftdggN#5(flP z2ysGV=B4@5qT1@`yUd-P(bgS6y6K2qPDP7_h?$+U0R+@rlu`a*V8ajgzHN+;NfCMC zD4$!G!w0ocV7;Ul@e15&iStp9l%%kxWes@MDS=EyYMK-kB4lU5sT?I;NEBej*oB55 zQUf?9kgsOH-ix-{gmYzcG<+(aVz|mlF7~nZxaISrwS=~W)v$RA`J6eM<;i%?wfq)G z2Qmz*FN&-mgGXr!*5x?hSU4|DYu;6{exp-TpU=f+rgSk*JSf1Qt4M7LY>8JlB;$xY zBzD~TuR8=|+R*r)s&E3(M^NnlmUD#xKT^4+jLM@OBI9Vx|60NL-VGMK9tIg+?%Jnz zbNEAfri-%|Oe8}Lse*X(q7BJGEVb23&w?=ESh_NCttN+c)(6hRxAB@VX07YTJ`o_# z$>c=>l>Czb(ql0*SuMx2s~QoV#>&o{Eb|QxtDE}@skrLVxDKX_rEb&8+{Tt`-^(o( zF?zk`AF{!?1u)lLSO$V;km)S9woSM)AYAxt0~ELT@laCmY{M8N_U7Vsk|3mPW*}bh zH2J?@>-6|3vE!j$O9p>;L*dcF;-*L%Dq3P9fWs&cA7tChm@)i4d#m_0B%iOrFNgsi zZnKe$aDs)3rJmM0j$b$$3UI0Au=-q*BQdVF+mG{IXnIPbPHH`bSdpwIC&#HJFVMVg zTr**g>fy<7R%IwwtpVf!bK`3ADk)d<&;XeXXR6=FG7&1%pcu#1sVd8QymBU#%?^SF zfIn|2@K!=3)(;Hz^;Lk4_$sW-nZbVm&55rnO`_!lB2(d=WERO6>G1NH*y3Rhlv(Q2 zFhLE)_H&B!2+3hL__yTxyI_F1JTC+10keDH(34aNzRGbj5)aCkvGR27HR8?ko?L%?(U2$f~`Ld;<%9=-%l*%|j{Rzm1G;DH_th$J6`SX5O z)Qlty5F6GPiMp9rmTPuCRmtF-eNrS`TO4N-8@n$rik&zrmsv&BmHx?ZEe34zLuPsS z=TbzBVFKR>-2fDK{lmK=lTndRbHkSq;5eL?ul-HNEvuQtoV35@W(<`gP@zJ5STve* z{gNIJt{?^ayfL+EXJd7}5 znss3RM=@(AS|a<83MOJpNv=itE*x}DIKPpp)>5QZepD-d%V2Eq3QdzBMwb)bk~1Fj z1PjfcX@a6Mi}{@M*>)|7_?#0`(X4GdvLz9*cd(mj&*p-A-31StR0LQ_icuHka+=KQyOmwK!eQ z=aW=(n~!75xYteRec4X0xjL=>eL}(`ey7=W%l3hj5Q;^;nD(I=`q$ef27%HgtU@rm z@4Ul6YZ{Lu0JDNm!}FTyX-px|ZH$=<5_*3Eyxn);FcPQ)gy3~iuo%!{(Ap2E@l41F z$c!c-ahAD#elw_p8@i~&JgNv^J{lW47q1MwU5Ek^&<0-#x&Z{|q^eX<0z2lWXPU1G zv1ZUX__pdj!D6F@W0u(4=FicyfvkL%?k1RzFAbgPV%59O)xGzHioH$ksGq+9hnlur<8L1d(u(r!% zB?bHvPoD)|{cb6RKgu0XgHdFTKKiXj$0u!G7+rtP8rRGf6{0XsB`c}Y=JJtMYSX{< z(wyp)qsqY}&}|{Vxw-iR_lc2HG0*TGvoe^le^`qb6i7-bjT@rKXHXu#+x`yxGx5Ct zD|H3Xp+KU1?PRGd@QpJ&?M$pYVHJoBLm`=LP1O9+HH-P%rjUgu4=owi6RixszsH?F zvsWr*DrzG#QfR=10b-rUQUJNiUZiKdFTG$uIDnKHE+qw9nW4BoGwSm_$2p0cVxvR zr>OD!!S|n6AWKRu#M+tx-Y(W2B(1M&mbC@VoDW4Oe>bu-|L+%=QIL&&*_-T6s~G;r z%aC~K7xTow&GYYkYjFPGll*pQsF^s^^PPL9#g~6B(~~hv zEQEY`v>@@5(?nzcBjy*tm1=f7JT(7Tsh)Y5?R}ek{r*-=%BHXJ;=Roy{jSn%sq#8k z%*(xBye|8u-}pzRNa2+d9Qw37nYL*3rLeeqZ!TA*46qN+`vYk7_Sk16ruMnkm7ku3 z^^FA-S?bz#iWRxpnw}}I>xPIB?@n)LuP0>kcN2jr(p_b^Y+l zMkv3z-o!6)KG}bkvLMyKlYh)!GAMrJ^n9G!2YA6(j*OQ~#cg;!m{t6D(W*pe>BLVX zag4;gcSUHyRa+Kigl@Y&>$zTx+g7zDUVnAGpVy2sgm3-%2|(5Kb@K3zX-!nGx*CC` zBa!FVQk&N8)R)IOBcDO_0X!3vs131_=XEo$yc^r!R@INQ*1#`^9_QuPzpATrx-EyU zA{m&{Zo1t_TO9sD);N0Mmt&?=oG5X6DkOA2Z{#NY@w#d6nZJCpIQ$ucv@>_GpFLM0 zbt}{^=8muVj#1ye6RT_iDJm-TNZYv&DI)fgs@CdERBB7Z;ptaFpVk0G)es4V4gOoI zY$oJGHgGekj-!TZI9yzMWpxnw&#O=zWT~jdw|V5;OmConC{q3V;r(Bw$mc~y$RsX# zb4iodbQoEYLdw~0E??{E>^6cqU4^v0qw+h%Z|&R*tgh+ti~=^X_SSYkH}^1gm`@5J z>+C5q{2`Nir+@)T3d$KJTy?n{*6KOs4GFcX{rU@Rac=(Wxq3On<8%p*tPOJ*Q|<6^ zi%{;mAknx|l~E{~4W17;!QZLddt7YwIQ>nn?Jzvl+Uv9V^`b|BB(X!|R|96U`&g=> zru!>EXy%XCMb8IgMFiy=DNh91JA-)E0sSZen^=*a%W^PqVa<3_MS8w(!p)cPLoF>y zvLw%A=wrOB$sWBWKwj{CfL-Imw+9Jm-u=jzfop4hsU zk*i-Ow?t!~<=t*}sT2P_SjPbchhk~6x(+8RQOI;}^H5pttu(&oZ>T4ZW2EqW&-H2F zXJX%vM@fE9X}#81dBmT48fJOC)9M^&2Vd}mAg0g+b+6?`C+`H_w}NMs3e-x5pIs-J z48D&=W?yf!azyE&gz77)qxxDH8J`N)GMiiAN$7skhdVXJJ>N!sRc0Y*d{Wqz{ z+50f#_xm7Rklw@kHojCLXf1{Y+$;8vCsHQ(!E*>T2j!8+*Hf+MZNK09A+ZK9bRhOP zBA($g%5s!6hK^}IXgfUd-UI)3+4Y(IVb!gB3Xc5wV3H=YVb@EUQ{XxCm_Ues?4=YZ26cn)5V*9oR8~q zY~8*}SZDlcT^9RZ9Qb$*>m7HQ09fxDL}-q?sPzCqfEEMfznNa0+#x z)EJ4-QhDinsr7wuepjjYwGD(pI6f1&?-iOmBaTuC)82<_SxVl|_W#E}U@>iZ)Be|} z${-^!@MUre-jOqd&uMmhGQ!=i8TsiQbNIb4>J@;SW!Jmhk|$#Q0r~v7`xz-l>@xyv zqle!gGoeccYu3WJB}?A(TiSjOnD#7A5a1WJIqqSwfer^ zOif=7-+hAGGB?`s%l3=5f(UBf%&S6ezfRuQRTL1nQ1*R*{p~+V>^xU^-TJqpz5C8= z3COZP&8`4qFTRZse2dlM7<`?lSag7pj9%#D&)YD)5G(WikqOuA!cNDAnW_5TSCKn{ zw$ofcjc!l#*8~OB;2YpU^F9-*{kQw=Gk^N$CDE zGkXFm&!A1goj?Zx>p4)8zn#|eNEWpJiJlgUwHDk`XYl=%mQIYBeA>C|6I;qo%KR!q zr@ZVvwMym>`F-+JZWMGHlN}K)!hLhI^w8l|wpx+a>kw7~ZaG%yrsMLhkKx<-oM~E=9R>>k@?cVc4gZxQ5cJUEhigO3;NAj^W}$6} z*yLgiuL<<^Kd_J8Q{&JVtwG8ZH&J>%p{pVhd7KtyYH5rtOYwQ3m%_%U(Vb#dN&WyC zH&%5-Dm5{t(8Tq*mq3Jr+ZG%ZJG5MSM0y;Zm`~-9q|X-ub+K~~<@w=Im>C&)eP)`v zl|YR1h&q_-AYv^m{3KjHx?FZODUIB}Xs3r8h+bhh!~8#ZIuF-fPV+Z1F|f!T#jcWZ zBXCNT0E~C?CWH9AnZJJD>jWl_$w)L>+Oa3Qq>@ zHmCFQ!VL4I!U7<*J_VuB`5bp+bdPftHL-vX0H=rTbuzE-rj?M3f&9)j2 z-`g)5A)E*?=>y|RcXDuQd936HcL!AEhSX2DUN29*&u|=rzNbEL>_ZLU$VDhhchrE; z071fg=K;GZ+fVVA3e8PC5qXn4RC+p$0X9?EjZP3gG_;P>+|vS(@Hh}$J`$4P%8e!X zc@m3ygaZrPTz|Ykegq|EiCH=X+g1YdF_=jm6^9>xinGF~2w|ECz>S{-ppVcd;l&6& z&%95g6Ii-}y)!ncYE^!@XLOVE%Qq4ubAbqH5I2!kyi*?Nj4#6^kD;!4j1n>_Kr+OB z!%+!du}`YEjPV$^!-=U?YgW*gWO3t^Do$=TTv7vp9+S7&L>~)j|CUR!E~Lt&KpO`& z4Lf3PlJRsP+Xai%e9~uJ6w;Q)=s2rMsz5B*XuW02&|Qv*$1-HSxazi)S^gX9;^PbeBLm8dxe_*T|yFPMcV zm_?`)1>EX3Btd~`W3xgNHq9~2X*thl8U)c@LQ!N0C^D~7sB|;l6+L@7DwH&wYYgz% zjP4uopTAM!B_o9Rt{jMM$m;s=LrU3Au|d`tcZ!e$iky+5eNVi($6sS-Bnr?~tD{gO{U28hG%L(2Z>Z*=r+s$$@ap)V zFbb@D$o+w4eY$;|Fhdul#-oAcpr}!*{xpec+N`((0^E3d{UB_|t2(RHd~~2%^{cph zX1~5WT)rh5+x&-R=9o^JH*Fy`kua9ZdoAG1i{(>ao+9u#rZ>}JwjE+|GF(uYzXy?l zT@EfhPLK0WGN6Hv!KBh0JWosK9KJ)Qss3AmTu`3|ng&#S%TP5fF)j4w*gqXfbV*Pl z_l&(K@VpJc;B)jvR>&ZK?!3amFMCLk4V`5d;pks%)Q`?6D7jivHHCW+m=k7H4z(pm zi-=nG7vEAy5ZkWi;}Njvr zTp<>C)O|X&>~8hm!uXRTR}n7gf#oH^L^*HZ#fErgBd2O>uLf3RAG9#hqW@_kgTITgfbq+276f!gfdMfUSZpW zrL5V0|f%YZYj{@(eeM8^Srd z|KfEz?B^^=0n4A#@gF>iMAj2Z< z#&+-h_Jr#q1~%q1i4&MI1{BQ^Z-1mcWNoW?8(Lxo!x9G`3|VG=yi1_5v+h~H6VL6u z283an)p6Uq=y@u7o|k~RSN^t!f(H9cfI$gtv(Hbk8KNE&F{ao9$GRu_E>93aH?5Vx z7zPm-A4MqS`&X~NNTENZHt-`GA>e@lA%a`t)PrXJf;v8t&dThnM1M!&{CgT$KdNzp z2YOVR0a^$~w)<&{N>I^~a4fQspoLMrg3~}4eHLxw&-WWPx#5N&W_sj(Up-A|0}2+%zi{%%_(JXtEooz!(OZ@hA@b7NaEhG(M4@HHZNt+PP#|b;l z(9*JBcCjOt&-b^F5Dt>w3h`CbbH;2Jy=r#7Dn95pod|2T-*xl%)7M|VFh5ThTT%6@ zm`mn^vy9i|T+>g`0%rW`)zGKkpzq@fG#($H;hWW2=qOFJ9V^i!vgIZe8zouo7ot1y z#Jsz5HzKER44KR7pp>tuR@q_-rpPFm+lU7jD;O#NirU2rCH&T(f8nYl%eLU7Hmh(EhF_yvGWp^$rt zEMSCbj_yy{4)?!bnaFPf5{|`!)_3tGq4z>8_Qui5m+U9s^Zd~%kOR_Bo&LQk-E>s? zF9P{eyHLVzhJ%*iEp>XBb0eK?guc$eZ~zz<@-0Gr!*dTwmdGQy3FuAO5JRvERUN_W z(Hvm=C|f!yIj>Z$H&pb?kP4I7Pf59`gY|^s74Zoz{D0t654 zI=IW=?iMsiAOV8ATX0B%2X}|ScXIE2_0@Yns6wiSK7G1(@7`6wb77W2ilvcQ(GPu3CjQOVycab6 zx&;;`;fWYMXry)n+DzPLoV2HaoEqf={6h?9UaWW)_FTHuUIK4pY+<>Wm~kb$dgC!+ z9FA}Li?Ua^7iJ~FGu^+p@DgsPaj>iTOrE8Dj9EZ))L@kezu99KRW$TticPiddPWsH%`);} zwxlzQrzN3{5;YOW@Fj2lxH~IsQEhbr+=}w?JWzNgPU#hpn%GJN+>-i4)&f%JvRb)a zln@t64MQf%3&hsuN%6#IE{oF4B)%NHRw9gp+gD}@(`R*C@5%MK)2M&d^TU(maaYwb zD^58)ol7YMiwQ=SVYzCfwc2@UKArXV`l+R-L`?Wp7!mDN<KS^r|ipa*aMUPm`bUBlL}x^0^goSlp~U9=r<(GNAzLepBC9zAI@$MNPC4F1ew6lfwldA+5J%)kwE+RUJzW4SzsX><I4?Zz$`iU03`M+D@nBUpoy;u7KZH~16Wlz49g-Nt;VJ_)FsbUKpWUfmh(LZ zT^WwQoi7>0QX8J6IIRackJ~Q#ZB5@uTvQbFnP`Tr%QxdPanQaeUi#X}-f$|I(pzp# zcxk=e-;K)IQ;GLUnKPF{qA?MS{tB%-#iXGk1_K&|?fh*?HGz==^EBijuv`-fHl{~# zt;z3WEqycA*Nb4VD+7*wMin>99!m5e(Var%25C+7eI6?;x(>!HW1rZHTvHOR40sNW+$(=sEUQNgA%bcLde8AiDc?>S@7BLq zPk!y-(3-o87~O}mF1qbfwk_@eFTBJM8j(j`mk|#NXA#Hm=@Nt9f48cPG)c&eJL^o7 zDO;6kD~WiY6%9S@wgReM=AZfaiMbpt;tT_mRdHPd61V2`z6@x50*YF6IvhuSl6(ge zcc6{U9Uj@5HvZ_f_^gf2vN`V5?jrGMUCKFa{sAGI2b>o z*{D87{%(qoEiYHVBkxy>BIkQMm@L4hEjg?Ay(%||ibYQq{k8eXb2E(r=Gw zjS}909Edx_5WQ2gTj5i7b*m@*PzK6b?oBk_bF(l(zd#*zFdl-e@Q%C^34{wa`j-6V zNZsd|ZZ54tYk@u1GDdif?g_%>lk8kL?u_wR$y2I(+sE=0ZxL#J^;8eHaFyBi@MhZj zGCFg%G;U4>8N{>!b?WsD17bNGKB%@?=eSUg>lhWGWy8&Ku4e~RRu^9 z7LAz;Uen#K(&@WuzZlVdXQs4T+cK@OTm&O(H!Rv8H?aICvT8QsSojhR zw-e?erxmw7%30PXQWCmh<3*Yko!0x){HHSTTt)YZ2j5ptf0}*8i7R`#CAuq_^t6~q;99w%ez6ZxV@YOvs!=YCo0x6^5 z6Q|xl^17V6&6<4wF}#@EdG;sq`!iUKtOTI`_xY$weP7>{m{!d2ytwmAkltx=o$gAa z4Y{~kATB0|DRLIzoYr}S28mx)JSU8b7o#f=h0-~g$>j&j$eFmD5i(I)1fGWFR1-;A zp*_fWnCM7^N*yRUk*&(KmM5R!g%~jh&8g|Jr-%H7A=vS^6YmXGVYr)_!-@UJtzA6b8QQnC@5s)=C*HKC>5}S2o zl3;JO4ZxhhD6R;T-%331oS;BwB)|5ExMNeg(JAHlkvIP1E}$R$W!ok)AR0`wOfSx| zA#Z93u<_KGG&uf@%+=>s$%+YINbJZ%a9A4P|4nSO15pQr#m{lVIJ%Sz+@vah5v(|+Qv#B z-FGOKh#+|~MrB^0To3IIC}@d~&(B!;qg0S!5*x)iB*z4r_-6?ZgHLh@t`g~%z*5VN z7ph%d2J)i-ejd7$i0Lwaspx^}#-?5vt-MI_UNB$wxOqG1wdx&y( zl!SWvnP3I~WXfD8KZU)SHYsJfgVD_Uug%2J5gsF36-g~{``5oQmK{Lhy{C2(JeORxRDlL|Wz$Kkih6b0p|0M!S?uJORUxtu8J1mI<8-NUO>)bmfjsg5qvP`_2sM zD7-neEXoKo328m9%MhvcDQ6aYHq*T2-rgTYa`QQ;YS z^kr}wuIUy#ALi|J9HxFmgA)&9z+o%SsL-m3T4{{XncE!ibrq%Mb@>Jp4+HE?32#j#AUsd|U+)!bis!7rqtX5(OdaMx1tgtpNYLfCOegCB$bXv?i=@$)-0*~ka3I$ix zQpML;cj(Dl=#nP$6_F;;yI5eAPrz>FeHzOcaKt05^mcn$9+HdWEXrxXK&A z+(4*AOM(C5`Kn!ro6+EIt}d)clsLVMnNe6YDLe+;3&sRQ?4&+t6RP){?T?XLY^Ug& zv{5;N+ zd;yA!*~LrI_*L3tS<)EQhSR2KRhGg<>Xb=R@al;SloA%Dn~-3$`@GjJ__p_fw~0;4 z44v!pW&9X6g%{Q_6(8?$Cra0C&mfNqwOW|l4B`>FSe61(p}zo?_kJFF!(zh;=|Z(n z?L}WlWs`7Q`YB{7e#u)AH%SI?i3lnas!FGV&r)B=_u)M^T#tkbwmcFZI5XRIbxwJ_ z5z+@sCmzZ~5YUiZr~58^`(m4(L0y6+_t%at6EzrY;g+afMPXBB?w4J?pKgoWSnx?(BLdL0Af3x*xoj z8Z0h$#y_YVnr8?FY&TjAsu(m`N=+`Kze>MTIc#w|kLLZzF68F1Q1oeu_k|1pYtpf2 zaitSg-4_o0ofDcVfqYGO?(}G9oT?-S@^F-ycbnp|a0U`MjVKAEwBh3HRP~%>)fN;h zyL{yg@sN6o-e=Yx8k=}x(~yg@pJX}$!j$z?i<*SPNGxx#^G3_5F@^(Q4=>L%QWJaA z(6RoBv+Q->QSWE`BO`a%rs~qWV_VbwqslscDuiE#1-UHi0GWd!mfV1lU32Hx=)h0H zq8B^PnU}~Bh@ak$yg?fZf8Z76?^L@UxCJ#pDCvm#>bc3mwkg)Chh5}M@kBm>LHu~W zen3z$2@yA&zuMXq%P@x{Sz_uE6LNfsG)Yl8O&54#J~qxUeP z$Sjv>S|#lW-li1F8FlpRfoZ2^}L1HHxd#`C^Q#i!%qst=Swyu7=3a;4uS z4=D$|Zo;;~)VZW3VkseNVt`T;GCS95T4 zpuv^cKSUJagA0SVe^g={3nuPjID&J0vnlE7gkbGHmWTf3q`f;nJ1ic%xL?Yoc zl#rtbhNa6&V%Zyu7UJtuxc!eUDrFXuDy$?Dt75LV5H?= zjG$NECygZUn0v)V`DPeXP@)H4D{5UOj8+T)G(Sv_O_8-La6Ew!i`LsNzOdYE8~Pl# z7&;?NE+&i%H|Yh062dK(ohmZgG2}I;TF0=AP6XK%C%gFW>I)Ob%gV{f5wkBZEg}p= z%-Fgu{a{w9B+n!_y5ahTPoSYC?9FrKF;B}j|Js!AnusKMuET=R(*GinP@IQdHHH^1 zhS1`BO3K3kn>uc6Ha5~>A-hDB00UG;?&aRB*2fqXAO#{VP-iTXGMFEaxw_?SEqddV zvTrSkG>9}r>9MOjxa(-3>%kt`I^#%XlrVKkQIKqj0n#y*f97R%5cDrFj~p;Hj*s_d zyG#cur|;wW?T;cR?ZELog=oM_i2S&uh_$7SPw3`s`VD=zcTSgc)x5qYm%b*+>+%K7>NpCH z*UH#N64VmRddgi)f>?6Z*YGQT)ZTSqy{1Rj6#uLcf(8sB(!s6XM3l7 zGE1jkt4Pk!%!Qt1bxsSaSg_MsR%*sfI$^P)I{c&Z1w|yu{yYh#<^}3!L|oDInArOFWN;r9--dd})+(eu4iQ$@fL<>v zoy_Ip1_z&|*)ZkCnAf8V;X*{hFKvniPCY`Je$aw^kWJohOl}19BaE%@(;a?1#3D9m z*bXM|J{>}6T6aPaBh4p{sG1|ui8?lKP5;#YVkap|cd8<5szIWpwQH*gtLVKQ4t>Rx zWh4E8y-y@;30+L! zfoG$99gC}_o?fE5Y3zS>KplXz6)$2OojO#Nsx!E%u(!>|j~OFC?Hq0CF=ei`oIuS# zH*%;Vi1vkEA+&R7)F@}|t&C!96qcgkW!RNeQMn=Nmlb&MxzAC7Ditka-DAh zwgtfL2o@yfyzYd#ejWDg!Sm`m)~<`mw!Yk4v@^Z#a`H0yz9yfCT#!f_Wa{zUN5{oJ z3yL5Bdl}mey<{i*{>BzOjRejh6ADgH%$h?{|GU)WLQYW^DHc(JgNq-v)Ph2IlnXlv zS)W|7?RzDy!q?8e7DjW;%ukU<*CDf*!gaR#OX}os`Jf@LcnVXvUoRPAHj!45{8~2` zVL1ibCPz@9`5wz|d7w-lZ_Z^|zP@AE`JGcD#feafdbr(mbFbPRKR%jkCUu{LYHK&8 zq3?3ib92+j9sJ2ALE9_>=^^6qYcU+l_}&`DTnsuj)eG^r$PfOH3vWDh`-fP`73MdZ z^IGLSX{$Z5Uf^(AV4(bFq@uy6i8cEwDACUBkNIMXV;xrvsS`PTR-t_sFcpsb$~^l$ zFhI0t0`3z=Kmp>IE4n>aXHXjK(2^x3UN4ytQ}@&$6VU>H@@)um0f*b`{n>!ZqwvRNSk5xFRQ)25-Q^vm(0cSm z0O|eF!kaJYm=Pk|y*}t{1#Zvou&rN9h?L%N(-V)@FV#Kgg>*&h&`*n-uhxn6rVq)L z9}xNGsnDHb+#ti|eu97S3Q#GOlHz*mxsCYgWO(5iCN$^B%r5DibUs^Y|1mFtEoqs! zsu(vQpf$@LQ_qx@C3!}HHEY;S-n`3q3QO*a9u}HO{$gFr<7itOj4->Jks`9LDLX`Z z%~kMKHRcBb(VNe_NJD{H&9QgTggSJMU^G368LiRn-whTA*_ua1;V2fBp!HP=hk|Ujsntc0o?u%{JiY}Q--aIi+ z%CnQJCU7{W82>zxP1F8xt_?z~imWiA8`-r=Q8PBad^bcI#7|A#W+6~fCFRn`C-V-a z{LKu|3(KVZ?mSK>k}#Ym5TT-sjaI%VY$KLde*#hQ2mia@EH|I zamN5kQ0$}!PBN+h8FY4{9qd&dJ+eH^Pi21F2iLLg_FOYC#`=EmX+1uL*b9334VfKZ z1P_^O*>N;J0{msSLruaxWtco*rs$ zKMODhrPg_|LwB&=73z#Dq^YNS7n;e52{W?TyCKv#kgrznjQ{rkd$;NkP5usyZ3`G% zIJ&!4)BFCv7cA`EbuOGR5JuM+AJ=oZWo^4a#v6ezZSdRVTVK_lU!8cff3gZfhqKE@ zh^bU3;=>CdbEuT+oMU46Y$|7Ies;8YzRuuyw7Vuh>ZY)zu!zRX^WuA-6am`kURkyu zCYCZXuQ)mJSIg4P$-nS95o!Jr1;bww`xBLKjqO{W7_*)^r|%KEa#;7|o3ik1(x2_b zueoE`i`lt?#5Gdm2q5Lct|||%Q`kJ@L~HVC)aY#cG+!hdVWC$_)2;&XElh2yq}9#@ zQ;j5{?yq$(^ux<8R}F<7g2!OO9!BO^sLO71>wXE#C@DsMMp5%^Ov^WN9R3nz4iu&b zy!KpXorzhjFIkLScvLR%0q~1qHg_(b2pC_ZGnL!>(iHp|l9;JMKB*Xk$RB~Zx-af- z_`d!Ej4lCc@=)R*6r&$6n=pA_x>jF|*U$K(ntyC5rse;VTE|>O`D5HwTBm3jrR3xL zb)ezxb}7GGM!o8p%QNb1Pw(jEB${IU#h(M=V>lB5g*Lzs=A>!C_~E4U8TxSa_2ARD z83C2kZ*a7xVv`^bAym2@%^@YpMuN%bH^wkZ;_5mJ=wyd2cD2 zRKFx*BchyvlG*J&J|-{vOo#j0F>w#cHOT5qWeUX95u?9z?ci4arI5PX+%NGt6YRd@ zGDS%(z7YxGXuq5R?9`+e-Ua+YXUu_%P(D#v4|K748Tc;h`hDkm_zS;U<8~i~=HbAx zatsJsyaKv|X1j3p@952IX&j*~z>LWs@L=)=I@?(|>>@3NcMC!$L@&nv`Y-{#OEb0{ z{c|*pNTo-6o2rWN< z!Db&2C6K}=<#6(Ws`viwULvpMKioM$x1R-AgR{=ANaDi4t3PQy_{5m!g&>RHvS|IN zu=m#vt+sh18eof~-cAE9M*e4sag#77JR^nOeXacaS%7yB=(EkqgM2i;l->Mxj_9%73_0NuAXLlZ8 z#C2liI?k`8-(ap-JQ1%2>}3K{u@^#qe<}H!ALS=9{-=eeQWWkLhA><-+)<8@s|l1< zUnS-L=U6`;?=C*7Wb(Wph}HjW>HS+cd@r}d>uiH~9NzZ=CQJV)&4cq>GnDErPbZFe z^zAf2R7Jh`R>G-QN3D2n&#o{nRk%?(AhXv4ZkmB8q-@CZLra>ir|M{qDjB&o&8smK z=pgk5truA;k&5O4N!n>`J~%wIJ{J2~Q)6>)-udqqM!0BHVtSiZ0BsaoDm^r1d()XQ zoE^8_s9+h7Q%F4>2X<{z`YW<7(g^iLv5Up`FjFg+T)-=h;WiPy{+8Gz3Hm$N6EOAb z^m{xT?7VKO&Gp%@z^H6eTVzw_(Ts{#aJO;Be=M)6V)e0mnxG<$pgJw^sG84XJSG>M zZS%e$r`r5%<>@}2)9JF@@SdT@fVa@4-mK!_U_O8o<<@3?Ssa`VJ3D<7NeJ2 zqj%Mp=9r7p|7pTGgr_={LTAdj)2I_D!4 zq~SAGtNf4YE1GUF5EwuiCn0;dCNf=uFH% zV-l>NQX2QCW`NR~S$q#AN#?U+Kcchs;FI1jO+pzURxGpKLk(&N3mn7N0pY$U?IcGH za>HfBcI6EV4=y(9>90X(pS3P?d=YldT8KmFfP(j^*GjJ2eQuT(>r7za0!ZG~p3m$%x$6TF_G(~J9LmwoGP_q_Di#sT||kyos5%d2(+SOUaGsYq>bcQcRw?C;8~LLA~K z#4E)(&b|L@{_C>7{+qfPqT&xAIFYgb0pTsa(1l4~cGGcSnkVG4h~Hn;2H5-ZeWORJ zW3>B>;9IujOzsl?d${u~&av%oCwo{F2wLs;PiAI6ffr+hwXs_aQzJw-1jR{$?R*OQ z=wi{1ah) zE^Wp?azf8A#omB=bT)cT($=iY*24^{RkvbrA7&`}Wm!ij1T3~8z9xP?1&I_bl0g6I zz4}Phzc}3zV)1uG)jNe9S@hQLah_`~sz) zf6Z@opmb&L+h0#%mwq3M&>#`Fcmx8eopZweT1fN94K#J4vdTzW3eoWRD8a-ndJdvp z(7R1dVP{rtLcxlp+YcD;r4klJayY>Q&X**J2{NY4}G;fIJV#8^u%yeWq-&9gv2-S&{iD~%i+gh4;jbw z^G>VIgG((^t#C;5h`gxc(SVW6*f;b0oF#pR5XrU0!G+Ez_oQI?v|+gCzTj9i%?wG@ z8G^323ehzMyvqnDTrDxArs=zbA$3^JnT8H6{jUk;kSr=6BP;OF7!DOVN)X$N7?k8fK@iAwaEUiCFYrX`TB`e_%=s5?Rhy zrO2kfCvo4Kbq;-v8tm18U9n#mtE1)_W0^TgvNn@}DzYTcd@F zB87feFN6vm+^n=)Mvosm-RFG&@$n%?XVPiW=$pr!f#cC91IHSjxgiqN%%6!%ao~zy zMsHK+tr=w1S&kWVnL7Q_*K3KI!f@joUw%72Xl60aa{)aLZ6;Lw{_ReifOZ>g;b+u= z5+wnAPlu2kEU`El+qxxRI$F?8_!Wd=W$G1^HMI>`DlG2XowVtp!OBKMYe%+7-J!V6>c?beH5sKmVpxMIP#CbW+vEF=kKbxAy7 zp*Ar=-AeMN2_ThmAXk_;1=Emc#50NLtP_s;mc%x$ThRdK7*rIVi6WvyM*L1Fpg?Vz z2KhamTA$Q7q3)N|)G0We2`MCBe(Qg29FpD|k4ldiMDo^P6q^eH!+$q&pa%JjKyxpz;)5so9j*^h?WyS2nC^|CR@fDuPW z&I~i(qnxoNFNQZ-t-P`PvkaLch$QtLsiPyDL-%5-C2_3@K%Q+Wjk)rw8XwH<_{nrq zYz7xZB(!p3sYY984LZF#Yj-MmcU~;}fK#&Z&$?0}Mqm>jFg-8!sg>--NdYbjFG-_~ z6g(=pYC;N;%)}bDGN<|jLU#ai?w>KMtI}UE zqx@XWLXt#96p*M&)bM$DXRAAl-0uvqo2&xA#3^uZ<^5#^&ipPdtP#Jio~9> zU2z%IrLLLnJ8v~Lcc38vL}5zL0;((*6B|}PVLeT!98K|N(U9P1X2$qKuV=uw{a*2-_!2SZJgNqoAPTckc#XNMB;TF`p zf+)eV>|1 z{}yC(1rm6}IR!j%wCf$R`2M=MZGguz#Us<9M1ka3Q)ecAP=9RT^jI*AvuwO(7*<9p z-SBTHiR#Lr?m9Fds^4{a*4P7CN7lL;AUI;CN8}6QABVN{*>Vj=7zvRE+4EpS37;Sg zlJZdPje|p>b6;uDdYKcQ9O1z$Gz66HKzU8ODsSMT@Tp~oJS>Dd()GLWK;Oim{>T#~ zkKq$uw-*}aBw9Q~7~t3NRHfOvLqn-g!BG^OBOnsSvDb#XsmoLKXkT5ML-j<&JzuQK z6qhHDq{b4E4iOALe2=Up0F!oFoal2q9t(Hkh+sZzh(Dqwt&2rQj7#Q3SyW{@Vo9#745pb#cwk9XxY`+a`vYV9=3$ZB1gad#-hIn2djv zJ}JqaAV@C?bEi5>GF`8W+aafZLkAOS5F89`-rOFk}7LNB9FElBS56ufS` z5iiieFW3-BFEq8HZ~vBk+t1NcBMJZAZ)X9I-T*qW@l3>#a=a^vj?i+NmkMcGhjb)k zE=hIkVbM`dS|5AZ0_4|iW;tnT1+Ev~Ii3+9(eok5a%z-VWOJ`%WB(+5vs#mqaA*AS zejk4%``xZHjdz|VmQHsk-;r+JN3t`>CwgmC@ghvJSx(--9>ow;cqPxNm_`K5KYr}^ zjJ%6l#jiJuze&u4m}q31SJb75@EcN4Nlf^orO!r!(vKxF()^IcqupIlOv`{^8Ysc| zRbyBgs*RG@rhtV1H@=cWkdnYno+zy3Wa}1dLJdKYckI@x>Y2?ig$@H^(G}PIOzqxt zd_RYXGq765P7X~_H!0fUO_mAtb>IC=!dN;wbowGp6$&pKncH(qm>$P7afMPvAU3ZbLT(#@_!TBdpD5H&r@u?x{53?#w`m)5`@Y%Gp07u$d|<_UD*G|7AuEiEjc;wEXc zG0>nPE}MQi{#vj_BIYs?$q+tTQf=iyTdjHKvfA~6Nr5z8RKr{1f}IJ5hPsglu?k$P zEvq*gnzhkpe#f!@SiTtGod`saA0P#&_5kevP7Fcr_?Uu68!uINR3J&+oc=Ao*4rr( z{BG|c@Y%8n>UpXp_u{o_(Zw_qL-LEBNt$)}k(I;Z9uxZgGr|jzq@FgRo@>%|QF63k zb-`-XAL>y((af;X(5lE5s$;r7RrqSv*&Gvr6iIU3t2Dt;#x}P}{(Yc3Bia6$;Rz{2x;H2E+OB5mM z)zt;~v8B^bMI>R`gvas~ zr=+|85}S)CxZ*^~j0f1hzdG5j?@bXL1sI|ImhG0InYWH8K>s!}R-L2SRJz*VuBWDe zJ1Hkfs~2;rK-8Llu0 zij>B&OyAP3CUs(GF_T8zR7IDc67JP(H#Qw=b_)?3;_iE)Q*m}nc=evPK49=C{V_}Q z;&(cqg!oAGFA8?4u2?N)iMH-CkM5^0qx(DwTIIvCzB3Jyof7qWo^p2NtvS1$jVh(M z$8cPU#n}$qr4wI)IF9x)ubA{PeARC%B%k*^XJ6hXe(Hu1I?U=nXFQe{Bj;pBNq7QV zZZ0CBP3^xeNCN!qeu$33t3_sE5`FP;abfd~z6MnQrQrA+eztB#Uz-#bbfE2zj0Zc> zCI!)XiXZ4LOE+@@f;}@V)&zT`s*dgu<=8X)OzdauyzH z)s$ex6q#a$BBL5Y_I;8(TG5K3Vxp-E>Z7FyMF3yKy&nY8}XxU19JM7)y(ITypPQI%w zLRD^x!Q)2!d2cxO z3qunhst`xJ$IcC}mn1sbfxt}&cVK45Eh~yOgH7a$a2j^cIM$ci& zu%4wn?#`E|O>^WYD`!wRqNOKX5NtV-vrOT=?jYpn+p-OZstJ5)Oo6*z!Q)*#AUgM5K)P!$}`M zBS7|XH!Ua%k4?@!42%w9>kQzlv)rkmT~-uTRkJK0d54>}HH!@8b{k-KK}OuL#D`dE z5shq`i~4?hc@-=ae%OKL=hvJX+2_<)s39P6M(Z5CE{1VA&vQ53!@sHZnT7_~zBdI) zp8sXoJE%c`^l->Sxj{dur|!86Rjg}`B-By_R(v-VVT1joG5qqugT-T(R_bYgrXowH(>)wJB{+i=vwE`Lm!AKoy-9@4YQM~AAPIwfq z!InojJtUNFK)M3d(1&5fpUCpFu+f1>{DZ}=&j8#gfP>Fu78nCL|3{jNW6tO>X|75W+uAHZ}zEChXIda&~M+q@_6Q>h7!EdKvSwVp8i!%1fyy zijD+>X};ck(8{@9G~ZMq%}w_k9&n7ziY1t<{d47u>UxCKsoy0^Q|270C&4IdVt)SS z9SgX@k_zTJvF}9=ksTsdL`F;ovMU$=#;rMCZ7m+n_>G~y)Lb3NrbAH`jfI_hu z|L1J$QV@9f4Q@o@7Om1XbGt4OGal0{ENQ2Zfk*R?=g?>S@6k%oVqb{kFYuLL9NY`t zI&hyBd*v4u_iHvh_SW;v+}P2@O;`2XWnq}Tx-t~QkPz?tf>(W@J~-ro7qyX~AFQ#op0(1ppW4@`1YlQ^yuP=b3crk?UnVrHB_X4?O~+ zWS0}3lFJHZ5Sq;*`1k=<|YG-Xqozdjffljf|k;KR^wp4=CkRq zD0?XBB>+-Hen^zIa{9k(7U@1$dpH7!p~j zu*YrL`=0=KH|_|%SpHDkgo$pG*n7CVTO;eCd#);#Bud?@&ufStHMlXf7NIef3z zm;u7stcAFj5j7P04$3QKIy9vsI8WCszT6_wIOrLZJ&d0msa^mtP%3{R8O=G9H|f5B z*zL|Jb8d_OtvP#~wBIm@XHA$5|2y1Rl%TLKScY`j^!X^l5ksl0&fZiB^YcmM3@w?U*5tzuYA+KzY)U; z?GY`7e|kzp&wFONo3_TvwWI%MNt4lXojpbhZGEMicy;r($_c8lF~&P7x>u4M?Y(y# z#hABiRgr&@^ZV^zSPtlU14`C@^pv&xqB@?XL1UXgSTs7B#SV?Fi0_W<#C_Kpd(g=; zj}ZDGP_t~!zt!JJRTmPHw@&aDI*TnlSrO#ABqE{C88~_K#Cc6LYQ&$jThZz9LhzSKp)w)Li zcy+Uy{8UUv&ZRH<&#ckVaCrbXNs6-g%;{e~(K)T%n^}AA17uche~$hN2X#KD0w|&d zr!Se|Y|?v`dn!};rJMV;5ZwFBC`bPT!(Vq3o+@&wWmqJAF z#)EW3XADhRAMOK59JF;m-*<;m2;E{5=HHE3eQMso5IU=gNV?hY1%NtL!5@UA*WZ;K z$RF-zv zzaoUG$$LBj2#0svA0nA8{sizj>!xovW3Ybj__woU0KahzczE#%zDqcnJgMW4wz5=z z+oCn*{WXAzYhBD6I?9Hz>EGs(%uart^n|~;S!NZt|A_iB4fOLO??ytdCn-U`%h-KR zr+OsdaTEOa%fHEcwX0Ngz@C16S{^JrPzw|?R&5*R3GRb@&Qhj7VrGMdY9=ntySISz zC-o%eqCK7SU7q~nm3^0a_df|pcxV^t8RSb`A2B{xZ*T*{SX;%%gWArYn%M}ZQQY_` zR*4uYJ{Q@)#vUz`+5!0bOPigNJ1d5EDpi@03jn7;(`?!1GyRlxdbxxmg9!A`zKqy! z|J_`r+iqGkf_NgCjnM00Ic;iFw5~MYb6^qx82b#M4A2X`szUKhCHvCYD*@NW1ebgT zhzjv(&1;J5>dm5uc#t09d{gr=6?_Roc!+uTxB(oZ*=yW!X;8NsRw324grVl%3b#_2 zF}l&7Gjr%=QghMKf}Si5I4_@-!BBAjhuEj7H$9Ow67LLr zR|1|Ne)(SPS@2Wex5w)+EuL}W-LCoB`&*qA1Iui|nt#5R^=24A_Fn@{;lG}rJY%uE z`}Bwg`b|E)OK^6~%`m+4|1zf$IF=)i)W%{=Q)Q0n{tRL+ybyIP+G~h_1z;Ohn^PCfom&l zXUXY1*C)1}n;m(LnvY7h{QR47SmgY_&~NM4YGnno>D}HA-wU)?hd!uEtSI8qV%r3d zg*IkN@vQ+%Y~^qK2vb$px7Q@ZJVK$jqO9sR{vHFCSydqYDwRiC)eVv=4i~26uZ$r? zevH!=E{D_Oq*%D((HQ%DWhN$tNCygclt5vxn=GuB>RJARW z6bzt|V&j8@>Q7BXLGWtpp5AhFj6*+9fHB@_C7TJt6xl2;qG57JhX76Mh?1Qw1J&5KLhqGQ0=<1FY z*6SS^KnE*w{tN`;7xH03O9~z4JnUF`UiBFCdLHV0b$Oae@6aB@jUgAuSE7+n5KGR$ z)@K=n*=h9vZUuUO1boxJ#eLaAMY!txfgzYjIW8Z(E-w(~98v#1bFhcO!o#i|?5>pQ zqOs8azUd0V`A1;6_IA-*Pqqpua+`vlXg)G$lxM0ZmQm7@b#7U;PcBd(yh7+|D~jW( zLBVw|A}36^Y+h*A;1Nq22_qF4YXw7Rr;J=Ft8#tI!rS)W%HFO4@;@Y;El!esGJX|5 zzY0u@zL)GG$@IWLo%pd8^^Hc9$bNXA*Pin-H&k)9)L`z9sE1fk@f!Y53o~+u(4A&GQb(hzF9i350fmBIWG=c5!N^T zC)MYbG@-alRK@tqY|%g`h?sRYPUD=KaMnX`JY}d?RN;I<(8t0xB(f~@2QYf~A-0n2 zBQ?5aQe?40jQOZ3J(wk;M4Cy{xi^_qa4Rf8^_}~A?XCaSTpBiei+nMQ)s_8^)>Px_ zcaKBHEVw*JJ(jxESjzmqeNBs^Rq=G8aGe=s^A04J(Fwe%pCd3nHU;OfE4)%uC7M6Fm|wt7z>+ zSt)>Y9r=NYyGA*TYyIZ;_EK;d#MM^eGQKKHW^1mk zuae7Siz+n8F**mo@4l_WjDb_JaxbkxsCK7zeq$izJBOe2}Kb zwLO6$S3l?Y#dYb+orldCN2RkeVK8lgc@zGJhC&F14?>A{VOlWY zP>$6U3|kIn_N83l-qS5*B#tR#V>o40*Dd#^^dF|)K|s$3o5;A_mh@}tXOn> zaLad-ZiutKEqo6wu|$;QYZ(3oYXV)F9}vTa#6%OSHgVG0)ODFD68TL8%nF->t3<(s za6fY`Ez6_*CuhSoEYq9U+2j%tN6wr4#9?{!jj8Wkm?s3`*q@hOL#mOZ9b9B86Y!Ff8bv|gpRb%mqUD6*hPrfXlfB(`dGZR2;@H>ZoDzOr7nFM1{6a>L%1uozsN zFB(lcPC?nqhhl@^v*#i|B{z60Ov}koJ^w`|8_dL0taz4oY42ykZtv7ht>UR3q$gTP zbc1Jb_~w&dOBa!%`urOh6+L&lz{pj>SYfI@LlnA7dgBR57PSey3Fr7>FH~IdTi;?W zrLGK9By{W~7?r&^UwY5&uEM~>mXPpj{RmV?lUrD5Mb0ONE>ya74o;<1K~?a`vJwNK zBxBzcth&s<*YC0HamEOlup|yftY`G*o0a~wWtL#_ zZa47->^;AQp%Sr#_F(PuU1~w!zCuxOg{mZd?1CfS2Qil;D$Gn|(oFn#Y-$$dkWNJ# z_>fFo%T`45L3h+xKF{_F1$6u~3S$E<_T}An_~mE_5(R2mi`;ITXh$%+HkOReCZ5SB zHBAZgokoOrZ-04g%NctYSLE+KqIOp*Iw5oAs3CdvLv!JSILEQ%A4}hbZg^%M$i)RM z$xp6R?zed|V#1!%3ZtFXTQQdE-N|*?q$lCGPABY|OfxGhUC3Ysl)%`GZaRpmRzN+f z1iVWVMEU&1j1B8Nsg|-Mg1n%^uY$tj;P3f2{cHFKY0p@r&cWnAABEN?!|~d~(Sz&P zUy(n4**&@d35VdXj3!@c7rY)e;_(ytMr?qc)}DTA5*>^$U2nvXu}5gpvbTc#g#L%1 zvMX^tMwR}}J|V2o@p1J$VbwD-{&o{D$oL?FlWm_C!o_EH8U62Gh?LNCdkG#Y(PoL} z!5?KIc4sWJzsV#+bClQTLbFR`ovhC#7l~QbPPUgJWzeoi*Sd~{AMTsM&iX-6%`?gP z1G*xrtB3#!TE;F;`ZVG)qYXpTziifJVn`3c=iINUC`R{xbpTJAKRBh|Cc_4CPAU_~ zNo2I7c$h>S+A47M%MLSv={2f_bB$tF-Sk3x`IHPz7) z$4;wtGEcsBjF*@Y9V1r{+>4a;NMi(qkph+wuPilwjW_(kof1uq0Z(pl+k)19wHZYW zCPRMO6q|e74<`hUY_Ym~5%SBy8d(k&lP^AqPlKaWFc$kFhatMg8(Y$p@NU276YYv1 z>E96phF6>B#;j_+N{I(7c?mU%i#zBxcW(gzgX&Qkb!S|++-VcL<5*{{hS^3A#|pnmH$$ zS}L$|R1cB6kW5`4HB5}>u=z;_OR9Nq_m6&SYtQ&H0^Zh}BcWdNFTjf+s_>38$Ozlu zES{78fHSmQW)*l^=9JN`y>KvSFh!&>^Q`FGv?N9TDV9c*>c58p8j|1w9%X~|1pd!a z4>6X%ONw9Ce=R;v>uE2GPJv|0;i@f$E)KZTZDO*}L{wkDo7^22wOFK~DzjXytIWcf zX6zqXLMRLRkXiP?O_Aw_u09H$@ZRV96a3XXg{*@CTjO&=4cn2GOw(d2w@0#EcS(>P z6E1q2sYg@rXT`*%dL)esUJJRrzsQxmc28xN>E_GR)r-E#HhGkV#$!zSJ!hIecm=K_ z6L>$ZdarLkENnVjAJvk`#8R(1g5SRK!rl#^oERd2i@bJ5q|vX&98@14n+vN&AI2txkN-7eBJSsNs~Po5I^3jB zi|*q_WK;CU3@Zzc2dD4G*sVUMz)RP;Yx%Q@467j1v<(Rj|z$6bW7;T_hj6xr;w#tHyE$(FK@EX z>J)qTMURBSx}c8`LqQ|H%vU2!=qT@TRZK?f#^2!P%di2dA6ich5o&>D@M-%z6j3Q@^S(o94WmaE_XpCsi3f|r5{l^ov zF6-<=8Cs^MpYP~L3YgICdH$$<<}BpdA&5iwm_QU!h4KU*gugvC#f?+lvdu+&n{ir0 zz;tIIiqf{dA~u5@K^ZL`hR#I$aj`&|w4?WWvt3VTv9uZB*2r|<0_7*5$6gHAELuU_i>+ZZ-?nX_diYVN}i>E+xW z)^#CTsqTfRR5C9y4oCokp;+NM2DVG-R`ft|yL7L(g)k(CT&DIj%@xC&5qRLCI*|c* zi{A=&y^osjy$M+~p+`nbFNgegg5L@#iRYUk4WaKh(x@n^+RYf=S^XpqV<@s=_W|LP zZXcf z=W}qHjENaqrKx(;Cz0FD zlA_fYIDk>cHSbjEZ8ssfa*;eRs7;&Z)UT^qx~@EJ#F?P-euauP*4gB9tXrG~`K?vb zu%t5;*8SSmDe2?NpeA08`t(QvaHBwX-fhN>FQmEEL-8J}b6{eM;?omyK+4-NKVu zAkq%4`cWl9M7P(rQAId@>?79mXS{8wfLr*&BlMcG#_)@-eN&R)q7^zEu@T>$rH1Vb zt%e2@?6M2d{H5bk-N}S^D63?et^1Ise>(zFW+5Y_pZR z?$D)Wqtsy8eFf&frF#9?;m^NrWh!k~(Hssr#e#|s`NwnXT(2hiAW&zp_%~Le5TOfl zw~9$ciW=`fEMNqYzHXnWI10|SDm2DOK|HKAQmKcl=0B5C zzBmZDn`8~bC262Zv}wfdLeP3@lGGy_O zw2B(3MRf|InU%E4HTk>jM&y(x#mb#ND|%jOSJ-K{9iGo1+kPhF(H)4sco3^XyRv{I z;7tTeZpiuPT?$5QiCj8XNWzrVb6_GXQr`7K-RZVeUf&*w{jK0DW}X&#_8;VqyhIQQ z$qyw7lD72l{7w1!*a9A)yuU)5o}-2(XR_I@e3b=p5~zGJ24mYh=e$JgpG0}uQCt=* z5|iYDVGSz?;7Z5fZ^XHXFU&h^;Bl!5e$p0LKBkrH@9Pz6)YlubSoYU(E-_jN>)CK8Thb*H! zfxic8r(uq8>gmid%bvq);&}R1`qvWzv=--#ib-R%pi2*7UHTdw+=MdieyL4H_ur8+ zrgUlvk_g4%bV;to6tZ`rESKNQ3Z2Q9ZH~3_{}Mler}8`l2ByQm)`x|M!HQsVFyu{@ zSqK&g+>#iE0uCmGEeKt=BGfvBOQwyJE4RM4tF0lb3F-$ITbKv`<2QYQoL0vEoB9SJA&z#b&I-gb+nc6%QZ-k&E}3E<5wRIU!BT zu$)J~g=PG)g{zdSyh<0p&~oiTChYrQvN}=Al?#2}ZqHzeFx7Fao3atYZDTJBoHbmYk^m<@?M5Id%~lrWTInRUDMEVgbdoVc-b< zc}g-$s*_wJ$E+;-OaF4B7R?QDq13unXHgV2L<^@sU7|YB({u(+KR2ik?Tg4QPrSRP zN-ip@_unp8-GSZ@7h8v9ICs~kZtA?0AJO2}zY*=mqnNpNw^@)KTQ()s#e#e9+@u2T z%N_{Om|GaO>=VtUaUB&(Z-H;w`b6xPji=n$HTCT(6FO;n6+3nG%7k4H-9WV|FINmZ z{jZ2p@@dW?e{-s=(9~Uv`p({c@@b~Sx~f!j;X4fykTAN`?1#lI)(f9RE}CTD=I<)` zpO;~-t+ECp&kr96U372)wg#o565{5~WEhB8gScv!O9gMP;sdk4d)?(+}co1=L6nyMM5K26c zghqmvA_iUe)PwR=U5XN~xxSnDlm2gS$`H!g*k`y8c2?EF6I{zg7(TX(h&7RMM$TS6COCA}=EYZq3c?xP3eD4jrMOvfdq54$)9K z*0UcE1AiIySXkGv8d^rDaGx ztmu2;on(!X>+5h&f*BA;v?l%ja7uM>wnxKomO^*821JEzBwcp^Je-P!po0w+cM3W5 zt3#Yhoq(6daC6;KHef#4w~*t&BBnEMKlYM%4<@YMs%Q(_iwD5wC}0!E_Qz>>lIz9l z?1^Qek1U5xv6*^uCbD31!L7stkK!AdArm%(EN_|&$RCDOP2V(7J1~hU{b*?)elpKx z-WLlbo}=f~Ts%h)-Gqc$Er2pnOPHkd(4wW{m9eAC#uAlHU*Tl#rtkS=WX{WBDoqL7 zSz7gd{G4!Fh=Ts`Rzwwr+M^*}{Q!OIT2V!=?f$^ul0aB5?{5(01!XjK9624T^2Ya~ z%tyT zwj~(B7Zcu9Zk#OkGIpIPOGWPN4Pbne7Qfug?1OyU^eco(WuQ0&V&Q%dMo;onH(9`P zOG=G{5G=SM!SlW@BES|6Zv=5 zMT~fHI%&oa2=rkN=xEoVXV#k>T{UuYn&IbdO|IiYXgS2dgOCIy<~e(j{i1q0Kj|Me zgt1V2f^41$)=+NLEOL0PemQW|?_lYD@4ilXYI#8tr=<|4Ylql+lD)K!dX!Akxz znn7*Bi@JL1h))F3;0T&(1ql>Gw`}E6rEd!@1La1b`cdrRqu0!QC>Ps&6h{a~{gkVP*vB9WGnlmH(C{FwXPY>( zgNVCZR??=@x#*{HKoGn#Z79el!(nVl@mH$V(|*OHW7@9T)#M|8g6;93zdGyac#gFA zl9VDLLryU*cQ13;U0>qkWvMFXx)R-&Bi4&gl!7sQl6T%e$KS~-IK8{n4s!{9XC3|( zCr!dE2?A}S^8YpX>AmnDyQttK_GVFlMA)Lb zkgoYBJ!35iLDeT5MwX+k6?iG*DjT+mOJ6r?>T4YrsmjC|F#2Jla>Kpal?SopD?Mt<*>a; zs1(p$s`V1pV-uvA-w@UAP99)$)l55Gi@msDy}a1Mvu@87=PNQ--xh;@lC-K+ZgAy8 zJz!~z@xH)}RHbIG>>7%x9DBe%E4e(O^HG1lWXE6|AzvxT6xa3z8J_#*^;TM(vm|M+ zGeY~QJ+eMwK*EykqNM*gkm;E^6WUyy0M~>~WeA@~Q6A!4wcW=Fe@@ey%@`#M8#6Cw zP9B)Mrj&^%YB}pzDewj`v{GspbM+ z@`DVfh#oB1Sxg*g8LbP|{=?a31|6wnbBM49ioAgm;WrVh;pk-2V3STkA=j7+?xV7V zVf=YC{>2Rz92EYuC1n0KR>$_zO#_oBL+ zWFyf~a-tNJP}|V3-!zSNUcV1g)B3Exw5MLJu7SGn29N%$sZ>M)4}{}BJ)s9vFhn8B zc}ED;8VOz=-**|5bLelUg3pqmU842}yAhmJz3OlLG&00-k%i!`YK652~byhKuo%%yPmNaaJ|{k4~pAdR$3$p z-^MbPiIvzX5ltdv?3qg!VJzbj6nkwsZ9|*TDoW?Q$KNN(J7?OhoVODzW6wh+IW_6b zNr5xTI5ax)UZXDSv;$fe(7N0TUVE*s8f6e>jWk-7F@5X2D)%31CEVqz)M)9OK=V(%S=9KGx)j`rLK$f3@%BU)1;`mMq zs5*q5OZ9&bzx0?dRlj?-I{r)3qq>cT{mt@cQq3Pl!KO_SD3SyBNf_*fjbi%Md>gk7 z-{6CWQ~ua&$V3u-9?1+`%t!*Z7({bhxX=J%UHnia3OG2^v#w%AFN>qO7*#j_y(|+T z0O;qw*VFXkgH#Y`e1n>HVx6+V0h8~lVIwk9nJvzi^IS6VwPJsYKv-FXwuQCI6J|r{ zmKOP@ABTG+p4D%U$IE8{2rSF=L=! zHWzVCenTZjOOj@p;rnE32leJ4gA?!(k|n~344}2$Wj3Ltc7H zsDLFegB$pN2^d^pP*Y49OLG7DS6J8p#P2${`^xe^PBIa|?3&wu#V`EtDM%K831<`O zpQ``&Q?lSSP#yiCs*J$@7LEQ3Ln`p$=j6Y}-~_)gt=29pq?Hc;$^$~}E{mxZ9(Dfr zGg?#$s7@iKG|}~6d`NveP}_pr{Z!7s#?Zn^hy&GaH}a`||5qOU3sWhPecQD9U-9`s zb=i3DsrTgn(W5Re1ntk?d3^ujdJ$njb%Pd8C9VI;lSc&_8^L|?f7u5iV3N2Q)5XXB zp_M(`Ky511hwq&J3symYp;KeW*JT|3m6wSJG#0~Vd)oHD;(clAO?DQ_JoJ>bJto}J zbG^TV9?pbJpM{=SR|1zBzbsL-08wme-^+O&4|Mv?_}U!4djbLbN@Ei_|LZRh55omC zi6Y17is`@Uaz`$Cw$7~yO=bP}kHOfU<;!A?PntFV7p!*Y@@)N&d1OZgTEuGj9n7Qj zum8C({Xu1>`u^`ToC;(O1O)uQ3Im2?KQ8a%f9;nJeiC%d+ z+WJ4kd;|0}o69rc|KRnAz;A-Olcem|FEA! z-Ujvp6}O?O>HpeREc#*@EkdeS|4JVs2BxaG9@JjUNYPUZr|6LJ3kX?Y_o`{ofa!L43r>nVzF4|h|P7QKMDNeX9phi`>g zemB2-=2G&1r(L6ViPq# zaY>C{TZrBB)8BVqr`3eZjTW)~x;@yD$wyvSZ-GIUepyZbuMsvIfxe)x9CkoTDvR)s zTO<*uarDRDB|D)fZASv}$I`{|o$=84z7GNR>T^#GhFBt)$*w!`eBCc>*o)W(K>ks< zO>p$Lp4>$PLMpjHxVc^|kQzvD{ie0;?g5CDeguSUBtlld$fzgEP61LMr2uA|WAvwE z$-re0pGec)!XU5E(9UtbOaXZfxBx#UXLRkxaZNFtCC37?Do+3>yftok!)aWkc%qB0 z(OUgtJi5T_=ytV2Y=QL*cmnue*lZ9fKaSfM#~8AyTI&q|!1szfMHdBq@o@3blfB~; z&(2fopnFn}7ze)>ZV*6cZ(fdA0N6Wwq4v7Cw9VVbe&#E|Tt81gKThjy+%HZy&jG>Z zJ1;CGKuW%3p_l^JR7;zpy_ns!&y-s#HLVKBFrS31q;TrT;IU?C1nt>PP22i?yp#XV zi^vLqx(UJ|l(3Cl#Q-jPzm11~;pFexK9>~JtT9bLzL*B~|JUpQM4I*>_90p=Xtwji z!;P;wVPpu|-Rb2AhQm_;v)+v&_*9-S&7?ENfX(Qt&R}j=_FX&mwe**K)vstCswIZ6 z1KbZwGm01iEr_!hftHuQmOtH?Fh(>FH58)6fNQ`Fb;j{*07>sJ&DqKx4_bT8KDCT|Q& zMhD2+lrJwcnG63mvt*X2!d2wo0`j-MpgYfbXa0~pUCqy5Sv)a50L!Nf(4NBX=o5=7 zL`lx|Sk!qTe^21W3+`4DDRBq2@vOW$;;^$eu`LzY42Ti>iq{mA#vrb3` zaNU_thSy9ST5}MQ`&na#3blF)bg7ml1FyVJ-UVd)hZCnj<_YvlkoQgYQWw&s*em`_ zBAmb21fKi>yP4qtX^QdHmTu_L&gen+8g~a!RPo+pHX0Q(gJK~KIA&BBD-lG{d`{f{ z)zWcTWMj+pqO&yg*@0~v6u7s5Hr$eZY@vP({-A*`TznZt)&|H9R#7}g8ICoVe0s8O zUeG*pDI_xa!PJ-*>%F-4R)f*^TWt7nxq%E;KA3=OaFsfY6Lkqni#k0I=B?@>rQRTw~BE)Wun}2lc({ zWlyZ(@1hsgkr&hOsq`)|=d2O%9XPu-!BLm$>+$R&#UiWf8Fa2=2P~@7A@^S+PeRZ=uieFaZJ1blHn*y?$EdOtM*Hk z_Q&gXMzhsdep<&DnZ-X1HO?aLzmn1*vNWGQ_lB!*c1ZkW6JH~g#wsI-7X64kkda4D zvHvByr|)5q(C9JDN6vdp9}qb=5257n3It?ju4pcB8|DrN&ppqxWq7M!`Q48|g!>#J z;Y4${pf=>MFn_{Gh^}topvjYrWY`qwT8O+LFX9_Oh|22@D*2;Vz#nxPL81dIrGTlg z!?GF7qHl1UWc`J(YZLJjrJzP88|`heu75AJJ(lq8CLqFPa>_bY_M$9yK=CDHP;!34 zkHp1h_8yS%+KTBr6D)E@VMIqM78I811nAs&%7^9Q)Zpj>;ZBbQ^dTg~a{yPtYlgD| zWiXT|XdH!6f0fTQ`gtKEx9zy3?}j0OKVKVGa{H-k_dbHuv1hhOu^M*-Q(IJ5;-Z4= zkBU+%O6g-fy?ZmOZXf-HkzRZ%BjQ+iask&kWT2o%HD8swZ%^|}=CBJ5M5yPZJyBc2 z{JTcD@>vkXK;EWK<>p-h7${T z@J87GtiI*tD3&+Hj`ln+ypGGyJLsE*y7NuWl4CN=k-hUOf|cFE4Gxd*3E73%yQ;W_ z9MhH)^KY#<;^id2s0DGYeZ5SpJAa~rv+U`EdXr6@_41sPOHfWHtTAVf?`0TKoMKsW zsb!so5=xkp2ZW7fwF+vqRXjA{E~x#4@RKl;OF4K;sFzxf2C@9WOzJH^M-B-WQVRE$ zBo4<|s!$+{6ZPr?tBK!gKfP>bE)up!F5yDqUb%obU2)5kP^0io2L$JFHh|235=SRb z$Ghs4h^tlz(!Hom7fb6+K}86X0!@`F6*uRn)idyhC%Xc!=&_)$O#A`l2QG;_3iYJq zfMsf1toxy$$Q)A1f3{v%q*do362~^L*_>japC-M!Bm#k^T=^lA4UyO;3YS zvqBWIgTL&W3Q_RZjwW7?*aNH=|0fc2Xh~s@wk>Fg-Q%QXsR({8&g5<%&8)IdyqFFQ zH4m42Y;AD#q<0szK=1>sIuO`t?_%j1q%F0+i%w)(li+D8_nMlv+%RxmzM320*D5Mj zXtxZsvq+9E`_9ZUrTcHEpLq?3mP{G`cOpTGE^`d{$k!Qi6UHl7<#H!J5d;mry(0XS z^9+dbw>wpX!mVDFw?Ew<`w+|jk+(>{0%GLGb5p_{rkPcAu1J}fsPO@TCg!}uZudh~ zF8WijB=!Zzn{o7&M;`s0u{DqSRw15SszE6KHZppM7V@>|aoBWaOhPVX1T3cM2m?nvz5!cfq$_b|EFIo9^)ea4uIbnmep_g0q`qX;TDxTETJ{FBya zI;5BZzSl(4YH?&1QMz&+nh|U+)g4-Uz|oU^AWYklIvNX1Lnc1l&Iq849RaGf+Hl|S zGON6%k?hew)HE}d!a(mEV!H}wHvk)w)q@4Ut3@!P@#kkFhR)=+PAJ2{ELdve^3>FL z5|hwioS9jhcto*t;JE%Ck9*u|d6%6n0Xkn)GvE;lIf?N%R@ctsQo6urDtNS}ozQ%7 z*rp-_cd7w$D&(=SK8=B&eZhU<=K0&RoAm611@Cjw$nR8~F<4+kw!_46$*?DREzfiQ z>TFi;QD1=lvb`(06(VFNTv-V|^|v&e4x*a5It7H87Ko1|eG#cbO$aTS(dA70q@&7Z z5T;3k{5u&>I*BZM`29AmkQ*gu(QIPxAV82StA5TtVQqZ=1Qub!uTm?1T3zb*3!m2s zjVH5cc02+pM0T;`q()yZr|`%#H!qlkY3pcc7k9||&;e)E;q}gHG0%099Cwz)Obi1W zZ8L*7(@u*I;0Bm_HQc}V7(VxL7}D@|f52V@f9k;XP?=wcTGp)T@5g40f{V$}T37X2=AB z6D&m=G02>iv{7!mqZ5Z(|84MXbG|umbBb9qXNykJZ?v6`2<$CiI`JpS5l1%6}sc-EOLT2J`2zS1GCGF~%;QjdY za0aCox>YeRQe-Oerp>1(JU|KIBwV8T_sGAVB1 zos>)yUy#!nEonS}%)%aEuCd{pV77M-cG)x?nPf@7=BK(k%JhK4dB;UZb1SMKOsRD zDA+K3wCg}5l2(E+6-5PNM=VN7!l|>?Sz<~vPE_?uN2vq{2}u&cH&exP%HI0G0CUS- zkC>$%lz=VePv5Rh3Ap)BV8R-Ch889{o8%frQW96j zIc*=;lMZ*U1esOiQuW609@c01Bmtt0u+joR)GkebCNvt+@nobTii27WNhpDK9>I^l z3#ES(()wI~-XO3}lYsK$wc^jAIBcQ6bLSSnr=f;GU=L}nPj?7q<=1m?HA498nWivn z5_RY@@n9tuLJFtoz*2k=r3uaNLDXwP&GBWJ#(_neR-eUY030Dy4;qIiCYh!|bxaGD z&S_H_@E>JLaxb~IA^f1glqgUW^%$^a^n?e(&Z7-^XjoM@aiU!n0y}uni>Ir&)O;45 zc&oK_cqV8f)G3J5Mcdnjk6wpR?A7uFYNk##J#ksJb=C*;)yq<(hXc0|O`o`lAqiOY zeNL{VO1bb-4~yNXOS&onMM>Bx(@usgS+HLi;iIGfok|z2_D=ngZ2*P7=48|WW{5>5V1SsKW?aFISs~G+B%)fl!J=(9JTxk?;H3u~BwCGbjdAg>vZNijNcB zB@ykOc;1TMg5HVfb2TI3IWiDUyVCsxUFS{o1cpJ;(Z`vu`$e>?9@NZ0h9)7s5oKneqPw1(XmOZr1uU5{=0_ z#MLjKICF4b8J$0H4Qi-ndy3)AXN3#<*wZY ziXcmlt_K$9uUl+8im;}yVk-rwmKpcr8~3^wZ242CVt3IfO$dXI71gf&X28yBb5+@$ z1VkssX=lApIaA3mN5?+$t+XDxj`36RCIoJRrC8?#!u>etPAic+yIzF76bg$i5_5H2 zJ=-ubK8@w^8^j(>ycHT>hZZ1-1ZVt;_LqYVI*|Bipu~n?N2L+YQXB!%)x-`9TM~0Q z(A<-PNd&cyzzSmt|G00(y_?a)in!texYby)iR+eFI1LE+g|WygNon{-qK-{iJcCmD zFKrCa*9tB3St91?GW1PVX5a0wX1A96{xMsBi6lAd zb~cj#dcFDXx0cj7wZh+GW^3k=EH5&8_tA|*`9me0XE#bn$|^gJyIe`_0QwL_y*9{X z%zBj95=ZY7hqvoRrZPfbv^;^GRhn$~KnpjT+Zysv6K(__ahw2CLe>@TqX~TJ(|+Rg{AZ^Y0ju9@i~?#GC$I zHjoo1g*JWuh9_ZX^4%R4Spg)Emwb=OjwkmznOZp}+u%JfrI?<0!2*5xN6#jCU|Go{ zzzqc>0$JZ^iaW%Ffo0Lka?Mo||B?JI>EZ_-S-NN2=gh&{pue2-kWb-dIL96lYLD*& zY)ZfHT>EQq^i4Ja)K=R2{B7gL|3nU;nFZHY~Y+UaAC{9xv_9g)p4C^L$9+( z-QSzI-hbk)*4N|D?h!anK^;*q!&4JL%oCN-xq2rcM2a}JQNex`cPYndqs^bIR?39< zmL8EmqP;dO?^yYLfu%g%@weod!EKL_Xd*##0x3AZVN|Xcr^&svaonv+R^4Z$8C0{% zixqxo=y@U4J0y)UkI@)c>8iOKha>nHmBhR01AX`F(h4nW! z)X)f`-+~%-v@zs@-ia{sUd8FNw@06V2vuog$%vjZ5pY$xqR3x&Qa~*zz*13z`m479 zSH`ROFA*Nt!{*7eQ(!q>HNoP3BHtU*Ol0x-v*%00FcQW*XQF?0qq~pB>xdP(v$dFtk^%Uqn zHcDS=qdL*-KE3dr)SGGBz5!T-4-OQs4b2t5I}*IO4WdPR_*R$OjUOTC-sxXGSW{9H z;fo#l0?gq!bMT&Ln;)a7Yg}KKH>B6ly`}Dbq(O)GRs15MryOUhu4G41;Q$1a63AdY zPX#^>2NKN@U*YYla=d;!$J)ho#O?cM8ah#8$(>Ry#pS*)@_Z%o%~F?JD*Lo1C;T~z ztsMsO@ag$!fxQgrHT&b{b8(xmXX=|CS4WZm_+^MK} zmn*$vN^H0sbBZ|ew>PsYG09aesjn9X+?9;n5_MGFj-aNisu9~^3q^Kog&TQZ)W%rx zrAhvkdQk7hr$#DhH5`#8 z%7Qb%=CiZjMmSd}W@bN@r4QMc*Gguoer=r4gflWO?KOF5y@w{^S_q!d&n&Zs(URon39wocgtDR+ii6(v4X(lzc~FqeHxKfyvx(4`x~|iBhR-;1#Ud)rvn5o5S)8(+8EL4+NH{gN zJ~K%gPW)m>{=D3LaEr{bC8;roXeNr4jSBB6>f=TPkD9ZvfXgBs0RQb$1$P~Lu5X@2 zR#4#jQe(sE2eRxHIL+hjywq_ErQu9AkDDg&3O4Gjo<=^~l1(kTWDN-r3dH2x$a0=^p;+=d z_}P47`4ab>iHv{_?w*Z+fXhX};2y~Q;u zQrUNNxwYVOE4<&83{T}Iwo#e)j$s^a2{Tt&RIa0B?BkGB6eIC%YS%*WL;iTqUsZ}P zYr-o+M&oH9)Vdf$%3-8k&2^DQ$HB<6Y>%ciEf=y}?4j!?DN#l%c4@0N7gvpAkqBl0 z;V4s=%g^Wjm0agO_A4VrOV)gb>sOvsOMVM$3Y(JX4oM0#gh7p;tAL}9&N9FtxbNzR zeWy;hRHn!>psf10l|Ktx;deFFe65zarMhY$LS)~PF_03u$sT8It-<_n z>|F^54herGk?}cVo?26E#Tmi zaXZfcre>U4WH??R!4t0#bTXm2D~3@tRm3C34a?9rf{vl`T1O>tW^-lAd*Tlry9MCws?(Y?pkg;wgDBxzBo zw+ngL)k4ClZ9x&uLa33^>%|_|iOQ;2CaG~`3shBUZ`4o?l{t%@t#=&c!djJ09?T4#y$V^98sAXAcX~ z;Xx#2_{+VN;!~~16byX6)_V<2k6-g!KM1o3SbEx*;wcS$4@<*<0P6PD3vfvgF6w6> zMJyRIm#AI{|H9zGhxlGlveS4`3X#Apay;##uDZY}@$3ihn1&9OGJm`?)*_hW!^lcR zkq{`xxcFivybt%VYCZ`&d1Lf_C{8sy{oY>K+i*%3_6y1tYP6K)=5Kl%T`xROO2~_v z*9WD^&^IHxmhZU+%N1f|Lo=xC?5T}ONsQ7qg_oaAZ3c0Zl8=!teZvJMMa07 zlQ&t}SH2-%%Y7@caY;jlw2nXkyaIFFx5<+79?Q#K{s*zZVQX)WVrb6qN2>KGRdJ+v;f8l>z zUf84``+tUoCUXf2=qj96ONd?}EKTg>Ph-K0!}xGqWVwNz#m%E+@Jo338Mi~(sFhtt zYCcbg6n4fB;cLo27Umg|$!j7zc*Pj?DmPA*kYMfqTa*9JXV&@dw|$tOd%&j8Nx|aC z+*ix)IxNr5bm)NasR+)+aRwnf$tRAX3g1{0ZtMc306?zSogcEWKk=$ab*xDn=?!}M z9N8U6siQ`I86zNAf4L8yp?CW6^2F4u$-Ba=dLM4bA4K$q_|t4hJ6oU%RyBlf}q&Xff*7^&{sMF#N?ocOtm&w5KT}q4=%DV50Y`f!%8)-558s&cW;8KG} zdW|PGzj-oiy8a?Hf+F6dwH^}*YtlQgbj|k$s~zu{M4%BoBx*}OvCyx!!FpjAC5?^C zrkb6VmwprUt{8tmG5{4q_-O1hy{{7+)(b6&zZG3qKPVCQa*!qveyv^yxJj8V4EA+h z%U%&CXQjgKxKyg}zi9mSOn`{q1(=I-I8lamD<*j!@6 zD^?DtHTmA6FyT55FVyKh)LIQd+q-;3C-^fnIA&%d7o7h(!%PCP0y{FWB6vQ(s6ARk zm(7l4#MeUPexJ#zz%OsfzB%`lcSPJYX>e!3%|cz+%3dUrNUE12cQ{J}$00ktt#_{k zp9|Zr>PP(UjfW}S$Bs}Nb%zoaHCO2PFqb)SqrG_XZo$~a3YW!M)4!m8A-!>wItnG$&#gLQ;v2w>WnblNl_-CX`Eh!j<8*%$8m>>p#1kyBlFSn zRdC1x$Z7Mp7PXtN5!6f??&ri|`YPV1C3%b67kR7o_~q^@fvjuJzsQLeFJ2jY(0R=t z9;E4~B%<|A(Y=jIOh5 zw{Wb+Nn_i#)$E`#8{4*RyRqH4v2EM7-5sC(e&<*I?2$1Ro`rkOdCeGF`7rQZV_Jfj zpJ+G2+Z3tVvELMaxws;P92V+H7n%5FYe2c!UFCJh`9Dp1rrICJt}J?HV?DiRtnle6 zfJER3$@tKyQB;-VRM>HT%R>7DHdrOYy6ArXjyhB>;^94`L6A@>5==IGCoTpQGhXf7 zv{IUp<&2AnwRc5gF%Ru)wE?BoL%f!;(l=#sm@JVk+?B;YhkMq`NepIksr((umcs0} z?6KgyQQgbnJM3q{g)sMQb4%c)2Z@Rha~m)KYQxHVw$JMZ<}!TA1u28Y0VKpOX}MCG z*d4l^j-#ZV5^|!xuXAI5o3?y>Uc@?Va;M|7C2#~@89NoUt1|M#Ap z{+}*0;2GkLce)j$YKec1WMEs~*gIg?y$a!Oj$AnyT$Je3tFJl^#q8LGOwsoA4{*TH z>+too$W;DRvPb4Vw#gskk5o&GC8&5|N^`U24cfYd(5@jPFV+;gWsC}R$uZxd3HT7r z7Fzm0wa(CWsU|1uEnCrF6}gMeStq(LxBukdnuf~ffTDLU+ssuwQM2u{>vN(wanNX3Zf;WSEEsUjnFQZsb8JwNw; zA%5dN{4tN(usaF+H1QjcEOu{Xm$O}g`uqY+#v<^q0`IO1K>XX0=$>F-^qjeH%LyS( zL~KD2t@3|+(0?l9Ewk&%|8$La;`v8{YaS6_jY2l-EKRNhi*Zj`Zq+-D<{zcT%eLzW zJL_^IuPt^9^-hQO>FaHVRvW`b+!`@ww+G?6@(<-lhGZJ`d|$R?hO#+V_;jvrEg{tY zFD>Q+rCTZ0E)}1)H4;0cZ)=rhYGVR)><^_Q5yV56k(hOUZN_|5Etuun6Ez2kt(?)c zt#=U!a^pN`_HhoJe#DNxSBBnEq1k;#c&UrRlA*4yVyYXhas!#3jvM7dPy2>wYk%8uq^TnYIdg z9Z!)L%>+Bj=5Mb>6~U~w;7YQABkOp%Le4dwmq4Y-c*HHc3f921`0?KtZTb!)w<~pB zgpald@mrDv+@#7~_d@u#E0lDW{+)t=F^|q|I}7ND6hgg5Bo?mulhRFW$Uo4m)brq`+k5XLNlKFk1eXeuRm)bF{-}G=v z?k?c_w5)>Gi=>HOHc#prCii*_v66mYMPOIUij={Jv@PSaW37YPcDuq~3NM{Pd1n_1C}J=>lB-tIbuZk^TGtT=slLVBF|A z^)t%;(+$^S6n<_S zv1}t4%Jj!Ar^D%AD9v`mfnEd@Bk$faCG}>v$=8-`KX(1bcUoTN(x;>@Znc;*;Gf^b zZ$aNj1l*UdAL7?N&5oG=w9a#}{j}B87UgpT_W%)MwXqECA5{KJ#X!z<7F(at|8(+> zqgvry_%#zbZpv`C5AW-8-7*U}ndKV|f;kh&EVuhbQ2K z+e6cH^{JSkOh3D3#r^twByBNwZ=5><)c5LVlo~{%-flY_>_E-N;zba{^mi<={7Su7 zllCbtq@dmowPIXz$Ea+0PmhK^s9t+5rh}OwA`Y}l6{y}4WQRPStsxV25d$iA(!n`w zsHk6gE#DjG&BUsqk-gU_AJ&l5;a*pK5+;2)iV;mSxE~az(6&P!Ch##vT#Izjowr;F zxKx$Q)d!)EIcpYWoUu2~gJ8YWi!|ugo8WM9ifXNi*F!SWKaYX|2ac&f4j)V0N z`nVpWqg>EOa1g_(Ew5uAtlV@aoe2)X2+YQ-M;gMo4a2JDdG_>CQ`;pLRvLEulb$$`uPd^h2L;7FZvn-{M#}>Bx zvSx>I;0j-+fjhzdaDe+9AGK`@-pAjo`GifMB*qxNn6y}qM*T$-t2ZU_NOJ! zZ85IQk!-Nf0%A<-Yub+R#%)g-e9HjkEy}eY)&f)!VIE*!5`IS>w`^=>)n~)U{LF z6+JU~b3d;L{_@C?O5{c3sPU7K?`o>g0@+i${!NT1A(cPpfr`W0-&!_~yy8Q0M%7eB zgLaVTk+k9UQ+tl@>9(0i+F&R*nn0xGaFGAc2hYP~%(=^fT@A7MP7}{iGFlW8zO4*G zHE~%v1F&k%sX>aXqXcBYctd*|np^sVmwb^X`DUl*cX?z4cV}TQFI#{tBPc&m;G@a& z9#Ir7-sht=Z{b#&;#So5g76Q46_4)s&zBEPa&j8+VzSg|w8nI~$4HU0-@JaoGJpJjghp+hn!0-ek>f6LH{RZXSSSDmf#A5%?mR zf8?~b%VLEbZEMX<*y1%o3%K?PBcCHMo#lIaJ&&?h-Ebp-2(a7yr?1f2^EC70=_aDt zKheK6U3~lchgwKR6Y_YsVMXv5B^s^-kr zQK#L8v(}tTOQVnE(r^ar8#bDI%f`?_E2R0R8fFC_G85d7BgF?585YNu61de0ML|xp zC<2&fFIa+o_p)ALexkg|%Hw52e9Q81jIyRn`;1-zi+ z;z)`8s<%GYt3o)@^4d(Di1+N4^dwfd=XV9|xO5lod^pulZ=#^gq>4^S75RBLH*jn< z+q^kLNWV)O^gcS&x}hWQT<^u^vMLOR2sz+VaS?Z>}^iI+P){!)^yR+Qm> z`XKUS%Z^`1k9nSNGdlrUkI=*f{3jcta=z2!2r2r1lxxlvorf560r3TvM3iLu+Rppe zi&}T8=47Pft!Rk=6?xvFGX#kSxSxyELU)meRmQ0+MF5c=5B9vz$Fhr*4ZDsjkn}au zem2K_`%EM0N$JZzE-B8l^Ri*0)8i!DIj&_oOV}&6VJP%J^G@63^@|M|iw~5RUsSB0 z_F~1##{5hsq7S{*~@@N*}0hK;_S*>}Xlce!lJ#%@sPWWKW#?^r*5|nWEVSX@u zuS-9@TuEqn?yeO}GKs<+)_n&u{FR^7IYId6aa z?!Ta2fXW3KDy{yY_+4L++U*mBj{b~Qzo+Nr-f~G+nO?OSN8B_}WZZ~v`U1rrUVw6H zD@t!VZiJE=xldHBI1scAgZ@*aQ{biuq~3e~n@^;D1L28bo#3dxmkTzjRv4W>uP-!Sw$lI3RwU3Ptp3M3C4rJ-cLEib%0I28XPebt z-(+qzsLLYaKsR>R4LaMFH<6#EBQ1gN5_;ElDV(IUuf0cDnnN_{eT-{#Cn@~{f!4FH zro#IZDGU)nS;$O!`I>nPcQH{Q&<4`yH3&QUpX~t@U)lXKWpDNsenVA>aPaWBpfCar z%4ro9-V_)3c0WE@UTqh;6ilG&ebvOUk@sy(_HZ4SFqQ{Nx7wvkRzOjbEi_2AAl#xPIo_~-Iu$i-00w%!mmnGnSS{?1J35VH8(;ON8dZ#Q$qR& zw!Y6DHi%sgVt>!*p!ZKU+wa(^$8xA{XkVQF>yY{n!|s^J-E}5+DXm(*U2bjj1K0Wt zWMHUed*i!7;%>Mj89$DHD+WxQ9?}xaFU!E|_cI0meXe`tBH3+X`{}$# z3Snx1qG~u}%+j45Cz%M>bumWvvs=!pu(?r-Uo3|_G&Z4T&TyTZ)y#O#jF#7XlZ-qY zua%|l8UOGW>jsPPR*Tcg-<&L^H_EC#Us|eM;yv<~ZLbT^blL(zu(AKkZ}v60sUIY( zzwV#EFgvDIXGSGH8a!}}F3_|YGHO{QK16A_l5z?RYyCdNVdeBsV|MF5j5_FquZ)vB zfd2lioNTp;=C@uB*HQdEMKUWE@ENl z+S+$@rT5D$_eEMkwn*j(r6n~U>mR59L1vnb>G<`FM+5H*HgZ=?HOeap6M1f^-lOW? z9amUk@~Gx@MgBou?B?%Q6hZvJDNu*wdlO z^U00_&?rt~B1v#XS(6Z@P$#1zBz~w${5q5f=2kc4p(1M$d#UWk+=B{+j&Csi1}d1to=k5*u>RbvvT%`m<9m+?*TZ zebxz<5OFu&N3I%hf_YKu{boUI&1>I-Jew!b$+AyhU`u*PSYakiwviE7@NNoW^3-tHQ<}=pFFp z6Pic6gU~*~6^M7u=Bgpl6F85lnKOsORcZeo0jZD#EC;}XOK4B!@V9UXAq)nx5qVFt zce!H^xMJrFk|SUn3!TX&Jcf+|o%{8Er=UrV#{-Qd zK||(*|J|*QSh3uT5W0YNh~RtlG#y7lkV`Esfu6D!p6g{TmD@v5oZPyOddpi~$_WiP zV9ArKD2D5{S?LYDEi|W4m96%#s|lr$kx+fpsw*-w<|mvVZlb_$fHtFcGh$0G?AcyS zV+OnVw(E*614o*+O+bOkaUbTU0?R}&iV&Rk)6EX?$K%<;ub7}9pjTQ6a^#P5VJXge z0nK;;&Q-6pR*+ZVIM4VUc&D`&>0HMM{aGM-3ktL^mjW9i5c0vv{?+DG62Ki3h-Y(T z9iX8l>XwN@z%%;;Dk*GsbeWZj_dXj0lL=XEtH1cSqVLb?w)DV4s+|uHVbN+lg6wt^ z^_@OsPcDZ~ZRL=aK=b}M%O1JVDo9ToPth}m>+z3!ijI?2=H5>(EC!jIMS6*Z1h}9C zn8MT$W_8wa5~AGF0DhDRalE9U8nDrlO$+}u3)R8`C;$*oy@B?Zde4Vr(0MDA{H%Gyj@`Ya45p-Z z9%M1K`-m9qc)RXM#;r0~w%TBv82F<6l4OwjTCJA+N}jp-1oZhY=8FcKd=>pQO{MUe zm<1!R>(szqRP&7_%q0HqX01k%U!%A3wkSBt_EQxmD0)*`Y2W{(0Eur?wf13l@wpbB zr*e9iW;E@d%++625cSOdNOhw;$zCLFugD-+ly6gV7C-}FppklxrCws-hT)5E^1*SsWD;)jbNCny!_XjsYm=Q1Nu!{4`08~hDxM8@HPcT%6 zfKK&VJ;s`uVD~-S0F;D6>)t@La_mC7Au!wu+VC(BP--;44hgbi8f;3j2zX5I=wg(> z=~~7v{A{3JCjlGBs~W=3YA1I`$zzB9^%UC>5zUlQK2O0tueyAQlDWhLn@LqYd~!~L zNnJ-VYDDA52qXjnB?$;WN7)++4zf7jJ0(QjEohasS;dBAwUB&blkI;uJ2U*xphyT@ zHr_i5MCZ)2iTzZf?+9$82}a>6E1;8weQ=PA*eBX?LIpZFXihwXW}e(0&6u>tPsef$ z@ej7P3XPujjYi94MC=1}97(YA5}I)eE5z9#x}<-IND|-5%Oj5a#=NiFM&3pf$!Qfo z(LS^xOD9)G7y^J!EFB}zEktJP*Fpd+Rp{4aW0Cmw zAW=O{Vj(wjxuL*op~z#OrrG|@W;G4(hPMf5gku`Sf-*`1&44VQo+g@MPV}o^KH@CU z$!xnt2K0p{muQevm1=)91NinO!6Se%jZKVbR0eqL0fM-i;BXB7+cZdo0<>Vzh9c-N z%3wmLNZ@)8lX<=Qg;He>^f*d;1VV*m4QH8JtK}3NlBfeeMuR93r|Y!FdW)d!W??qV zn9;?eLFRbq($Rq^bi#iNGiK?IY1_bnitC^Zj%%a3a>w2E1!nrp&)DB1 zQBp*``?&7_LuJsz?Yvo3qkz%7V#}t}w<(O_)rvS)`_XnPM$)!PoQG0;);>@&vY}>E zg`9}S!w9jzru;FhPcWF~#SZtV4PUE=4)>6H&JXJ|t&L@{ zS)|TjB|bS=&b`h1I*NSbCt?^RJQEmplY;@aIVyQ*sf9|fTux#lY!gK)V(S7JbRQSx z15VO%G`t8FIAXc63C{vu8Onka?B<7thiEyC2LyJ#oO^9ImzE!feRzh8u2>wvL3&LY3{;>%tO1wqe40M zB6BGjRkAK7){{ae1(B1aB=k&y7)-QhtbFg-&wSJtftk)5Vgss zhi39`{y5$emEwp|1Cwwe7T722LrfTfvLXH3OuJrQ#hsNbJvMmc(}$3^8ic^*a7)bU zixd@%C@_Z=G(eo0&#HB=+5R#r^q$6w?2d5iB}mAi#EiOk3s-w9X*_)`nZ&?$70DXOgUt*bZH ziQ7#~(^YcXZ~gt1r8l+yXu15HRBFp?yXp;h zJ%eg$U8mUdVOcP<`h)j|)PPIQ#8F9|6Vv8uE*^`l6rrHZ{ zCQ`LY401f3`_x7IpQ^(cn{5Pe>|D-E^+!R=8`+9 zwFKUzPf=k6(D#X0*uePf4IC57Cj^CjC*DsWEj`RUq$oVnLb3025$&|k1iH!qN$)Qz zR?RGv%jU_g9%=vxdrgp~-)T_4HiQa)Cor~JBi39s?bniH8AZw zf5r)9=sf=}Sn3%(?ap<{(P~(xjqiH8Q*66)Tpbly+nGiPR{tKfyo=s~DP0&+I$F#C zOaJ2yyhKJ1pteOMA6SHks;EJ)C|(^{pX}r%r|85YBSB}OpOB}$^aas?PRu$MWO%uP z!C_Drh_cBP^Jf?6u(hX=sx);7sRss?OODkP0uuRWob2%yL#~IIU}2Fw;O9F;i(a?! z{ozmde>I|ScpRLFBsc0E!4YMyL%GPY#eIw4M1qRRFtAb&h*vy^KEKnn9Z`dIqZq*;mOam>>jv{E9LoyyiIGMi{rhZ!9u2V4!om*2sXTIa z$qTG8%bAy%6_5xUREIKC9LGGY-Dv+10`1uUF3}wt$G0tG#c1y z7eOlV>r>Dba0zkoB9+~~ZwP%xIP3*OZ+!r&(9jt6B0`;`nf+#rbD)6G+SGMYT}inK!k&B zA!Pn>P9RexV=gpIy`sd_P*eA|$uxnLS;)vvEj;uvde{56XmTIdi>5b+0U8ysywd*> z!|y~Hvf^Z2X_uf!DQh!LH?#SAt9a{sEFZGPqNhV}jr-D#mwuNWO2ggZ(_-xIOnP~U zR-^M&@wb#;7lM>mN5*FwKUtoFwpEIhoiYLNoa6;`rrqbR-kR7*pxfE%QJiFso#p&z zrkO31x*2J0oh{ufQ!Nx(PC(M;_{@y`c7yf6Gh|ZIN)wEo3AG0U(Ma1`qv_1M52+h9 z!vXtet~sR;!m%g_4{zDm)!%y%4|km^g4+3=C3Kba8phFGEbLI{cCHtXKpHjq(kZPi zIumXWjHWeNfEt_PSf&?39>-?S9B*c}Hd-FF7u$Sa7$JKt!-u9Fne->fk%@^620rYV zlg(!&&Bm6IqKG)z?@vJ$>noe&@`r8p4>)mPI37CBFn~p)7tl+Nis|E!k1OM;t@DHI z-y;()6prEd0f0%72o|#o3~FR0`dCKX-1neEve zv=0?H?koQ#YCQYWGijF)RhyOhZP4mp00^b|sqS()_pMpUA zEDDGxq1AARU`$^1k?RTSb-qd7CvPsXp#lrflPx>Db6sTvGx8Y(n*2og!uWwjOoBez zTMLyM;)Ku#3q|bcss;n{2XbU1+@i(669=-_;i#g!UxiRk!czSB(FQY*uJ(!^j;wTs zaEmx-kV0>|Pj0EhDzyI{y&pSY5k?4vB{YkuUYqM!D-ax0A^n0g5r_Bb13aP-hvL!- zith1cg5`|v68sVfF7qv17{6WoP4uKq-a55iikEH^KX7kbzUQ$Ok#x0}dP$k@;joj-f0P-n1tX!e zTm%#i(S#BuORZna8@^j>y=B&fleTL-f@nmy3O1P+>W&uSP5TzHbn@R!{IN)nCQV4e zk>x8V_vB^lqi^*G71a$zR0l-{i;ivq__^NBKSd;~_@sIJ_*u=quyXG%Q-ziyI zL-`Bur1k-F$7FTT$u+2ij3oOV>rf)Vt18TTxhYu2z+-r_JtSuMprc1|UzduL?p$Xj zpn(xz6R3v=7nu(c$q};153{bD{5n*l31ItRXUW2{H+9qyL2VOGTzq$~?*Pyc&&C4V z1L8X$)TCFb(Wywgrw!Wb0|2dvMr``HU2hRRb@WrXt4Di9^B9;l2^qh~aU799qvxr- zJZ&dBYk0qMPT2%PAz-Fbj?bdT$XGH(DpI54*w*$jAii~3t5L~W*kP(;<_;ebn0g9K zm?Zfr4an@1%M#Kp=A1dCyZ@zfNnV&;86U(Y%yc;hC-x*U0IjX_vyZ9ryV+oP`(|zd z4Ai2sxF%yG>lJ}e#A<5_zWt|F)+CkK=E)>=<(65|ho2Eve~3-dMJ36dL%P%g?aO6s zb`KnA%W!1yYUG_h?EZ0H`ea#+O=-E=>dorOu_*cTDy8eEKBlusb2xBuDhiO6S$Gt= ztsI|l1z-QUj@C=QLyPXmu*Aat`evMK9Aq8l$aFyrgEme{O~?a*;Gr;$E`$KXXj0%7 zvQ24Z0*r^l6(C{IOY31_2e)Kf7F7B-m>Y^q+$ZuQzATzSjhxTY7v?iR>JE(~qyWPA zoW0K2(@L}Q5$hj*9%>{KGZPvd8TH_Zggds4D2P3l;pht!5LbyiQ}|SjOiIH0z=KIo z?sm%`;CE@Lc5fg~swY<0n=#*o&reDl0+u=gz?6O1|0mV|9h$^Bur0}O7^CVQpeXbc z)@if4Ukpi3*7XbqKwQ3k;a7*Y=t69zyMk{x(hLGrLos90k7a@Qs0(=nP*4o8@kJFN-w-5RTIIpqZ)LQC7pv_y9>;1;=E=3U8%B9QGpphVHANBSAxFDCz1mlzrcMF5%C?#azL+g-f z!*r3(R$tZhd+;in?2GiJU;v@KPC`hNcpFIW4zmuXohftg($QH54JBxXnxXB3=;9|lWy9w2!VKKW2*UhBFWX*Oe zAxmNjGnR}lM_qD6vwf;;@#+fSF{Eylmhc|oTPkNo0)8-3+#EJtQpDBN^YHOQx%x9i z710x6FG-ivZQN|$?lIC4@uOkdm} zWmmaZ!tfFf6(6|?hhL|6yabm6?>uK^l0}@+Q7cI05soehT?D~dqi672*SCZs$*CtX zjs1$%TQDlqcGFQq3otlOk9;wBwgg2~kYg^$5D&UGJU}wM=E)SWZm^Lh5eNB6j+&$p zBC|H%j@+d}xF;dM@onN66|a7(Jm*j9n!~p4 zDg;U@pd14)VgY1pQlrU)fe~*7$26muR?1_q^%yVuFgivu`y>@1*|+ed7|^C$%>W6f z+Cx*V=f`^Ifhgr;l$$C%7nP0m*E77WwcP_{U?2V`Dr$PNQrRmydd0e=CQdhb8hu#- zU4+?qaoJ307_uoMBeep`ts2y>0WjN7U~XIs=Yk*hGvad%FD| z0Zz6V4ur9GX^u{Ma5e>?N%DWo>)LBs6)L{eOZiVVKY$F6#paz94G>?A%3)@RCGHb< z%7=V+>?Ma1C#aIRNq`OjO9^Dx0>{4efuZK<6{29rQ@#V%QJc!Lp52MU80G&)o8cH@ zxqX}__?}29lkif#&89*CyAs?xyiXuTnp^*O@>g2{HW03U8%h7>r~aTzKd#9lU*S*4 zIs4Nb91<{s!30SdY1ULVvwRvUSYlE`FhZl#;lA#r&~8N7dC`Gq$zW1L1IlX@T?bqo zG&`?wXuGZ_b#U)jr*Bd4kLma%yQrn9j7S+tsFN;m;tbjX!JN)F(J;9o4=H56zgyGVWj$czmAKYST*eCBfhiqK8qYy)-SF|P)}4x zAa%Z_ouQeYuD~BT6TM{Ov~tdnn+3iInZdyf^t;pfrMm-1S9xg|VKBnQVI1%4n=N~l zAE#vA0cDRxxu|)jp!wh_gUd32$y&a1RFhpu?Wrv@K5I(Oz<1GXoz^yASrko?QIu>M zu+TiB^3*PrPavaOP=63W1*(!*Z}Hcfn#Z#hZY8Fq2yp5vV}VXiG4-xLY&}z|g_>a( zaTT^cIvbWK!`NricP3qDsnVwq{n7+fgmngED~9t;g&}nW7=9+sV`;VahlLck3JCDR zhNedlAZ%(*$`b!NAPG3RjWCW*G#x#}kO=|RhY!FuTeCHT`^ZdT>im$x4Kztb&St+A zp+yYLiq`d};mDla4b=&+O&Y@W1vy=_5TrE+j)2Yn2;*MUEJmOeiN-uFtWQoTLC6=4 zE6~3&N#HRq?u82`EftLqL zw5ETJMobU-OQ4g9a(4?YM?RsZByTqryjV;DOVe{$Qq30nZ@a!}4lkN;^exl0#_~)X z?4d48ea;)NVD&y;2F0VKl`)ZvrA@OGsomG7S@Z_gCx9xVX-J=@Vf;3DDx(pU1Pp2BX30Ad4}hEcsA#%gMiC4amLVma?a$r)S>j-*RR?Xc#47AL>p zNMh>8Ku_?%69$$j)}bf+ZCrh4q)gso;l^54RA!`>!(s$$gvxctbw{lJ`iQ zVUsfVAWu~02&G(#nvntFie6UJVGmDc$^*q@criRc_xTuKldN& zL+ZVmoq;tf{G_2OQNItMI*-z{$76mUjJx>G=8O6y3ILW_zET1d>i+!1O^R-kgIrb) zinkKFEk7pzDZ1Mk#PweVckxa#EKS+IA~q1cMX9MF3d0Z`DWxJ1j)_(viO%$^j*KpL z{SvmY3{TS6@d@&+11vMB1Zr372D4Fgm>;79lzmg< zE=+XF%x6wy7%4Qx34r($sry75A<_u3dy;OK@yhSaduh7=y*|^5!iM?S+5HE{4Yt2X zS*IE_wa)(${f-q1dQHxBz^7GM3ErUbbzfn-sy{R;43vOeQiS9J94q0ew4C0(>V|Py z`TPFm!ai<3uZ$5FjoxffPDb}h(R~&xZ3H0+ic<)FJ>)LYCy^{g{0`Jjl-9};Vz09l z$wmINK?+p#N+E-+;ct+~FbM-f2sIoedBr$29A2t&J4n>$K7UI)SWUu!9T}TJFwDc{ zLjg)v63!$BQ8Y~cOlTyR<;JI`F?Janshk%HiXZ1%pJ-cew$;WEi#w@mxDAJTHun)X7p@swQ>ccPK%xbWgH=en6J2wPcc{bvPZ0q|JflLO;rxc#)+d z4L-++`yg7(3Ps-77EmH05kzh#rl^xyd?1{#GtHEepc0GEAZ)P<(mmcCHr~jQ3|^eX^h%lP!u7nEef&NI}CCYT9rA?r&Wt+(GA|SUT0_)RZmJxzLLA$zi=b`H&U}30wJR ztml%2CSL!LF-Vp`x~#8RS&mGz6w6`5tlA57&y$spM|1U3kP9q=!lS^G;!qsmVBuZY zZa$3+%YmVF#{S;QpPQHhs-wL;)kxZY#Fckm(aaE3OEypyE?OYfS&9xCl6-+iv$ zaq_mW1iojW>V3J!qsKuUcO#9BKF(EzYK8ccim>^~z6SeQQ3{M0riur%D|=gl#qOph z$*-sr`4!HtGQ600qZBmlC)O$&+wI@d7|FbexyfkIsX3>DHJ5{oVtIQ9G%eNs1#O6tCP9 z7_oJo;J|G(2-mT)W|?_3v#t@RJeLYmxK#ctpET>`Bte0jEtbacOmTCNG{6Wy$@3So zk-ZWP=^&e;ppfBl(skGZL9anP&MyKU2ZOD4*9gw~qek6%B9C2gA?z8J5>^C_f&T=s ziI5SHo-W0g#ha86H06cwgrmJ*)_E?b!nW5{s-=u`cXQvG-Cotx^0G9wdCK*B{BVNU zjrJ7Ri)6}ZayCJ7n{f>Y{!#e=(j$KsH}IDBX6E4Wv?w!f(0KsGaDdbx>Ur%G`(lx@7JCclB_S z2OI{r-NQ;$^QL=2=_C0VM{(%cQuSuwOC+3S5PvcM3V}Kk}+e0X|c@6Qy z<;L%=raHTu$glGPNh7t|t_GaXq7mTm@1JeYeWpcuzHf79*3mH2AAmVv=0PTd^(eK< zC58SwjPAA7e6zisVK^Ld6BFo||I31(f{gmVLA1!Hvd%x=BlifILnZ*dpD8la~$Vl2FVMzFwmi%s)nlzAwiABXm#a+W`OuCiZvgJ@U%-guB&p#UaL}T%} z!?1U0Z^xU_41PzYJj*!Hz`laGkHL&J2H!&(%l-nn`+M$&@nzE(?&Rf7nn_6l1~uoJ z!JSj%qvCdy@^qT8ct$ljek*+=;C0By@{mi(8K~KD#CI0ySS+m|>PT|IzZL3$7c!+pWYKlrN`KKyA_9(-sP#Yd@Zny65uaxlH;S z7gwhR8~O8J-JPq=w}C_GnQ#ag@6klFn z@ma##?h_b)K9^l>u7&{>aP6v9x(99=$IX|8?Yc$N`xk?2^2o`cr|cz@EOK1!|F+6V zm=;lH^&p+|85O0j(YY0iKt2|f+)|LBPK+!ZnJ~y@bZoDLyel6{+(xgo8-W^GBTk;M zdGGHXuKxGmSQ2L87SiHA()n0$7y}tm3XjO>`$hWN>=yWkdo%laPSCG!AWkvKAP7Q_ z>K9_YOH#uc0pAUY5@|>;(txWwGR8`iV?GF6KUEMHpso7VMW33cxO+O&W)^V#-rsuddF8r5pETV$I@xaz#iLM{Ix zluS;oMa$sKRU;zKSd-0bzP3C7@PqEU!D)M~)kXJ#B9p6JaJK2H`NwVLt_u=_a9?up zl$EW2j(|$5KpK3TaEamn#ta>4(FAEx)n^c%EFLC*_bw11kzaqfv>Hh3;kFA=>IWty zw&?fyV%|+^0E;j>HU^GCLfcJE0L*RG!sD`8%@>8_2^EgefE(U}4+_?)((mbZ2SO|c zDFPjPDRB@6!8%&ajC`Q-9eFJ$z6BGV2Ev#-%6bE5+VZ@kSo|?yl`5;cwVPlP=4KtSL z^MRwEK{1elP2CdDEnRPQ_}TlG0Fwo6|`U$_(D1r}|q#m59W{$UFy zNVek^cE3peLzMY`Oun!z#O69Rpt5a3#O!xa;Gn^Rm+TdYyGX+6QW+?;>VoDi2f1KF%F{`BhSl5kMbo2fTfQz>_6^L zq3AGXou?_VL-5*mfHd>oCW}C9s%RDv8g(-~$olJ8Ix~&UKJ}E^EXl8sO49T3?kT>*JjM_ieWL>$jCpzw{v8Hv-^F4mh>VQS8>|{HmBu&ti7PK(d?IY+I23~$ z-Qr;C_qx=#k?ZwR8~JsbK3uv;OQg}VF@VH}{PROQAU@8Lvk$5|<$cHT+0HSz6c_;^M zoIpT4ouk+z?+asVnD7Wia8ec(Z?jW{T^=3|$6aUyktj+=g7Z5qgd{)G1Dsecn+J`I zym;W1jjtde(>cKr5}YkHP)Y|bLbNRT!rxM3Cv+l@y#lq>A zeAlP_TjJN2BWBrr8Gp}#I2!-Ivgx9)o@Ry6j=hf_zF0etyOfG=+*b;FMZ6Q+H@p@^ z!V^0k@khQ9dV<3PG7MMq^Q9ucBv88`9F^c%t=k6A`Cp`=t_#CPUIue=N5gSMixrEQ zt(52O6CTpT%YXVTdOp_cMGXTid8nPJiklN>D3@G+pODjJiyRpMGjj*R*5;|AT+$MDK4fKs7W;7-VB)>V(Y$Eb(H_~={~sGw8~Vos|R z2Yx$DH0x|OI1gz9@RALX#=#B}BS+Au7#q#{U2Yd<4PrAuBBG2hWDPzP8|u^Xln2-| z+p8!Ewc-#fEdyaPh~Wg8*lFZ*SkoL(P#qV7*$?PH99*wx$xk3$mD05mrNI!T?$ljG zzg0505U?paCgdrsiRy^HMYCBf%=Z)>fg!Y?I=fTlHB)|3IG{&inx|Fyz5(HO%ak7V zUC?Ba9wHlRWlFO%BlfD#?`Ln+bN${>vat_`_1Use%Z$CloCzh~xjqkX=lN3x#eU5r zD$a)8QqQclQ}E)1G>O|E4qs0V)C1;M`keUqCohHZ-Qc#kgo2a9Bt?u&4{FIp*Z(8y ztpef-wyoXZ?(XjH?t}({ySsaKwW?-~ zIleJ1EMz+I(*kWjlJu8$f;dCDmJOUqDt-J5wzbK>ktQqhPu}CYp_}G!;yyJOm0%&30BH;8|<~ugsv#XnsSPqB^`kDdKAg-(4zTh&J?KVMh9gXJ%*PGB zRahs&`qF>18BK}lBXA>kVx z+E!`>&U=S)LU!}#KU>!$V0P)|1O;)RoqfKULd$MX&eZsI{+kAa0&>F`wjI`TVRW;_8Nu-}&vDc2)oa`q zH}a2$s}JQzy-GjtD#p{X)mO^w`Tp zmK^Vr)_FBDH`cVlbucTZ-OBv_>Cn4ul>~&)7aBKKK02TTu}pV%d;7W5gC+z@7Y1P^Pzqr zvkZku8vgO$bA_-X*v+s1$3C73QN!TJqPL*MpQ!a6Ie{;a^gwv=a!xMUWs-D06)548 z^jI2;I^m?RUla}26zvMj9(oVxgdKhg3#@JAXK0X{@AjUAFJQUJc?}-z2Qe_aoK}rq zVRTY_$R=Yf;;uI_TV>F(CPX5)zHBwjVy-6u-adT zSU|CL?RG8n`=&v|G1Gc^OX*MO9|!&qe31b7eAhqje(IeF%EJ@Nl4IL6CPBEaJ?VOU zP8_x0Bz@NH3*G#9?ZMj=*Th57MJJy{crS#QilRRCyx0MI_`Te)b$w6FRJcg8XDD6W zY>Q`Vb+7&>_IexZ^EG|5V|X1&9_Q-CHJ#(JtIqjwo2sk){o&mj?(x7T8d+a-xds;U z6C^Kcz=`EA4>JB=ComJ}nDGyuVoO|p_pnkWQdKw*c8O$}FpB5u!MBlXDak%(jU`3yjeUJ)hG-ng}ttdl$jtM@687C0Goej@yO6YBn zd0J-px4ig1d;1*-rVxv3uXka0Q-h5EMaad^tlw(3|Yha+g2ZRG;+^{ zy;h^BKgx)~7SKt9M$_ipd3zEuZ>E`U#EGY9`ch{J7CQes`pyZT-p1UbUq3S z$a4nqCvTBQuE5JvdTIY!?O}i-hZcq*D<^~#>ES14wWAID$H97uQCG0`Dsc&uhj+pi zgtLY3M~$weFDFGo#yDTIE2d^bu^x!c<>r!hne;hY{;vpKQt;Upcedm?6Pvn(a~M1 zEBChhkGye`h78Ne`M|quw&f;AhqaMrcjv`UvK*tUfCv4YkFSdyuOwM)U1CE(CR}sD5&qb%2Co+BW z8M3me=_~?_fA-6vjWbv;E)e#qfz9FNu1PG#VCm(|)UuKrCh3=G%2@lgGI4acFR#_Ojb?3CNfmx)(~CyXE^hr7qEmfsl~f`d!K4UU&~Jx7>(hM;8$X1U7|+8|rsph?-dK$b*vkN_`~?&@>;AwE&L}KooLVpzG%B5q#=RDV{@TxV+tA9-df!n(Q~c+&>cOn&xom#Y zMdZ}z{jvS7(!zak`1us6Qv#{oGQM0bq{(r}>H%pgQcv=YAucupy0~zxX}qS$>}*|m zs;f-@JOa5bP12KEzFU!`-e^2YH@w~+0hS$T%kan6n)|oz-|u%#femQ_Zb9Llo^03e z^K*{QI<>_R5ZdpRyYxmy`nfs)L}<;mYUj~iyHCvOf1&HwSI8EkcTa>lNjF+~*xjOV zJ3N-ik)@K9H`KhE>qCGoAN-3f$M}!`WmG!*3=%eZHM008?~RT7Kj*#YpGQHpP0JrY zf9c$mzvV!$82T(y_Lx9!0FlIEwIetWtTIzL$wpo0flUMusS5f-q2~HoI(+;!;N&RO{6#b{3FOjV6 z@A>3r%Hp&E~f-*!p_e3A~uLRItgOnJ$bu{qBA8a7d}q{G?B1bBnbl2Ybu@ zkohKnFIB;+cWoPU?dvowi27elnBTgJ$C-d73L8t6#POf|pET5Re(*{hcTRa<~12|Hs1TNOrkW>qSV5J$T zhmTk5g$m6^Kg2ewRLg3UzXi6Yi_h5(V#c;04txOt(GwnyNwE;OIL8a%eD>e_QRV=L zROVUA*?3C{WzF7Du+ab2ed08{Cctg)a8qZ!A>9$@+g;#l{A*yjp7%#h-|%^p=*Ld$ z)Y68^!WotEfwC$xOCLKbD^b&4`>WF<9);V2JJr|7^1p%EgAD zba#)w4DlnoM3>wSY4I9H>fLyEj7);}s#!7M^Bs4+I9++5Lg%~KN9#wKEqW`x4}6*1 z&JElx!MFyI-ex&O6@NJGObdgJaCQrUvFuy}y(5F19u33`!l(R*Wns|@mEpnTf1U;!t%oo zq!|<09y;ZqEnTgZA%Wd%Ix$eu(NS?qCf|6>RSp5y_Z`Rky@7r7BZOVhC@NWl}}A-IKNiu{764H90e_t+xgKI-@i zX(o=Y62X+k{PJ+2?Xj958Sv-qr$r#mDy*$0A(ds^m{6!B5kGpbMAg2g#ZcXv;2 z@ubc*1N0P*vhpx>{I1i|INjnS8{p!XqLoV#)BAk);3>M~x?9LrpRwF`2~YF`MeOT{ zmW?d#xH}q)Hgl{0N2vs|>+@6fg|vn9pKg*0I4@gxvhtX0jk+ZOX+an8SgnmGfo)<6HDQqw(A(s10xS#jM09SCl!H0kHy5y>Q@FWs-jt`?mg zv5q>bF&F&9rwFunpRpnHe`2YD%M^nm<5-uVNFFzA$@Yz{JUSTCz9uH1GR2lkoS+Vs ziBWGDE6ot9E}rH3kpO;l&dF-Y;SD0B+R0`h%#S!SF;NmSxy)H1@{;QCaq=d}lrM)W2Lj3&!8(PAI|Q+HSeWMxtIS({h0?rE zYzGI@Son6MDGY-H*xam#De4gph5UUXRxsHBQNdo1IfaADSW~Fp3*z+2gO#IyJJ&__ zl>X+O-WvbSf5JXVKB8$%iTlA-#=2w&qPnc^jv-`W6zDL;gl1SwO%M&shKYVO&WU0h zeZgAxK2lNtRYJ_N9h5mJI$!q9xMwWKH1+ACay%ATLa3QkNu2*X%kqMMMuNMs28H3F z2n3|3IZh3kZ|D|2HxY-zp~0315%P9XWjUqO8+6A)d-hLYglZ5A2G0sPVl+)o=S#s< z9W!m=A&5Gmi=uwM?5|ihz(FC0l7Ugkrw$3Yqf8%4_>zw)xu(j`fh!{El!$=<1JR1f zdj0K6!8uU`h_yF^xWo{6QcxL`$DobRrN!MYI zxnMRF7&;PInZI?IYjT*mbgd<_C!qZsZKVUv$Ee+x=;YmtBjHh|8BWc zI0+Oq_+Z9>^sT@nYg4P4e{EDV|F)D9G2mk8e;Eh7Wxs?nMdA|xb>vw|x>BkL^>Dne ztZXJWJ~<60KMyorH>4{`P%;CRX{1o7FU=O!0<6X?t260m21!40c{QeEEe_EbwRj&z zeE!$sJN?cGdF+X~@Q4nFOggjaOTKopeZgQy0?45Xr6CX^gImXwKsA#mg8dD7kNcX` zD_j33$}-7n^;>xW^Y%7^S9Twj7WYf`*NEBjQ?;c0)U5-BZg#PH5c$~G5Df0F273ln z=6H95TE7N7xoN_|uuA6bK-p5!ydrQhJ;|C-e4>Z?Qbf7X@np28u7w-Q=mnU0EM%Ie zlHb5Psp=V6M8!PzV&r^2ORl|LdAEU};;C(_kA(VdZNC3k)B~SCsmR8ltSkb>1foDwtnJHnmnftJK@bVhOTdxRA*@G2fgA{?&Qio zrW^wsgWrgiAuearApdI&pNX~b0QftF2Hf@3@Gvw8L%)*2w zCivl0a@o~?)E#X=`Ui3+OrKzv>i$U+jrsFU4W_VW2)I!*4!p;wiu#fM zEhh+%eyUn(Yh!)a=sOEcM42mVA{%CNKN=+X1DXs1M0O#J|GP&M zyGx@LO9dogp5xy(b%vBunwSqoR*t*$v5iA+`U@hccya5AkvE9ia;wm|;29Z(O)$Tc zZ+YIROu-*k9c#OgO}QJ?lCIpuk`ilDlf_p2YF3y1E4svs&M|4dq<{X(T9=Nun$uGY z^6aX=2gFewcR7Q@WxoK;O!rQYHBquPid*azzXe)8}dSv`%uqz$wW4XxxT5S5G z?&Li-b2$CKdJ|B`=0S+jGkd`DN@eGd2~Xa?fqT(tOCyj;Km;4{zjNmwxtBi3#Rs>2 z7+%Ee_I&6cBSf<-R6xFwwy>~!(5wpMEZ2GkZ_eCn{FGczvhUJbMB9CsXtRq zTJ#Bs`i+~wQ0S317XBf@)S<2$lTo6QiL3RJk0p^y&D|`z`z#^|Mmrx1Xw2$_KbykcCu;GG z@$y481kt__5!Tx#d<)WuHwk0P9_r}bz|-~$@ocD zCBuNos-3*4AlNm2r#WEO&uH81^JCdVQRf3|fNdWhvC(Ccn!5~z;THi>Va-VOB}Ms! zBT*vQ8rMg^|C|s>Hx!CW*%{3X7{9Iz$$zunqS^|dO-cTb430vM z%9hHlv7oi4?6h0HQy6$pTw}9s>B)wPiD2~Y@bp>lKUyc!r$GDTO~_U^!9PuF?Z{&pBqe?lQ=KTq(pp^;(W3m&=5 zxtiztMlvDxd+l~)f2+x4fn-OHZ2HoOIu6g=+-7!WJ^E07N7r|>^#Jld&+&F9VkY={ z4cI1{{!9z4-e1ZTFV=jYqOnAPtXIULOQ4s|Dy%>qz;f`hw;YC@wb*HoxfdI~Bs=C- zNKAJ7viX<-Quc@ChyNLC4IM0h!Ifs8CPs5?KN_M~Rh=<_@Ce)uKHnx;Fa7>g70;(R ziYB!oE>7g*!dGsbUKhjoY*V>&-uDxsZj9;XLxJGq2bNz7jSPs=>VFmtaVP{)#@$HX z7PkV}9cj7@`9#&vj=9dYL@4Um41=&ABm!2D-Bg;Osze_GE^?@;7fbT`0K=(kmGIlpygGjsf`WTC8 zH@bFDpVlSp7Z&7YL=OIm8PWByntM+AU{_gb4dVr$a;$n6ksJ8tzu7}I8syo!tve}1 zGnXo@avRhNixSAtwduxMl(q5wr=jS&R%3r(g+<^}M&LhQrPG2POal#Lzqj?W(#--V z1vd!#NNGJ!w`PA5_0LIPU57&Rs_w!AZx+JeUHM9?pJ#Ma zYZFF;FiY1Nw+e-1s^9$<^BI8_NCQH#dCX12c;J(i7WWW@l-|$rVe5_hg=3^jG3bP? zbVpPY41LSc8QBQ6tzjIMUKR<18>8o-hp?WSwCt6wxL4Jw_Pf*3Z))$K|Bjq%@9Htw zz8q`dh=vd>U!GJkq;?baZk1+P8~Yh|>v!{8A`-J|#epd;Jom>DT=@b3`JNw@+3@vw zX!oGA4}!@frjo8K1d%eY!Pt5=Wc#??3a1kgumFqm9xgG_z!U#S-f?e*9= zYQHooNrrAFNBPCXp(T?}?=(Vgx~ydAAAD-3kyc4z?;c;bwwG>jHQi%b$iBwkDmej> z2tGT1?*?2IldzZn_7-b z%^#C+>MLa0qI&H8H~Nw;AG}SYx-Z_HnjP9cUxSN!*xxCOSkFLUNGjS3fnSHkG){vs z98pvYCCVr!+k{adL;48JDBI)wt_Iof~@2v zh9|eB7isQz&{~3sIHY=>McYtOH=<*cI6|U3zVyI8F%qUWrF7hh1j}S1LeV18u4rl9 zxJ~-5qfpz9i`H8+eWS%`_Vr;)C{NjMYY{F0o4mBSiGjU(0ieRq$`|gd7sAG1Yhf5$to0hWd>w&5j73noPP5a zCM4;_Nqxljc}GtvjRDrKQ%V84_ZzwU$O%YaDvbZ9T^0ZsujT77Et#@0l z+2VdRl8j5ehSbaRdl4!t$0HBd zl;b`(5NzsF#KHhe?kOCc&Sc>E_-H({U7cnkBpB?(mKh@-b5);R88YPo6Yg{UJPDt; z?d4f)ZvxwB=%RCqsn5Okd>qiD$2+(EMNLuf&$n>wASypEKXmX9sbqg6JT&i~RGT1% zoYCfBy}i9_ow@_{Be~o32#C@$)FD2Lp;@55YZQlv(fAbXg01r<75qhAiNW@+_*8r< z*wtIpjT>-?-M{6I3~LvdTJE1xd|s{aj{Uj%z6=oxna=C~dy4f-6KbFw1q?hlCT%!g zf9+j|H3naNO7Vl(s&YJi_LSjW56}qj%gh&r^20vcocAplXHN1uub@%VJ~~zuO#acd zD${wIW#3m)tvV@rw4OLqiDN<+arxO-EJIgR=qS2ow1VBPLGJq%u`0u`$H;WJylbpL z(aBjZ8M+oI0E^o8E1>(cRM&Djh9z~R%&Sxw77G<~&3`(SL=1JGEVi6*Vq*-1Q0plI z_RTwk8M!G{cOhgugQbpS2HEHjdi`Gs(v$!7p=ku7P(L2sZi~-eOQT$}?jPXsvK|@L z{CjhMR;V1lW*FNO^}S_4@(baFAJsx5y-G&;s&fJH*q>b=`R^`AL)a_l6korvV4F}J zH!rO1mp|SDqKcW4e1IIp34#*@Qr3mI46^InBu7o{lp|To3Ml#s)7yl8qAuoz(H|3` zFV=0D8`5Ujpot+lebgO2O^5CC?DT6ToVEJi`jP)?$SSDQo>_$mAvAI61m0-($wgbr z20mpAt#xlQTo|uOxO3FwcTzg_LYQ*=r63HY*SDh8aoy^Qr}mV^(=b8IVwgeb(~y-~ z7`veQsBbIy(R=cJv9zAVm*YHWOAsCliK;coBySaJ8}pT?`WrZ03353uRv3dIbgA}D zcQiJ-k7kEMPuW0Eb@Ihi?@#&ZD4Il5GoG+IslW6bkei@~#e9F>b^dOi4PxY4p(k(q;L{ zJsJ#~iL@BGld25IKhSDagxOo=#8hK9uWgH9aXG-h;mT`7bu=S{9;n+Ve0|d4FW)JLvuuLo=G9DXuU8N>d zfPNVHoi^4GlKk&b2a0#|R76gP1TE^83>8nG{OxhBX4V55QDy;F2{vJJe>}!l14@D> z%qwsS-Pn`WQubL;jF7$u)H0Fzxal(cp&$KG7J*MQ!v0^okqQcTqT!?L)$fCeOg=@D z`^}MwDvgbExj-GP5P;f_wXt4$h{3dpsg8%#rteXgW97H|Ba7(Io;Dzl?Db z9;W$1m2rtTzP7cJHNj$GiBv12{Rp=ZaD_p!ZeOjJz0x8u{`}OP*#+BJ(}cgI_#~FQ%?`K9->Yd_^loE&tH4Vx@P}{F zPHvVF8_Qj5^Yl7v@@#}nIip;Xxp!8oj_vdZYGf)TTm1T;eE^qmn9^^)+OX|wb&J(n zvvWHnvIZ@Z9c-D)T?L5}_6CHvJXc|UsQzhO^^Vf8`saC3 zP@3-Oe|JVAUs-_hEK} z)dYY#t!{MqT2JNpFI%QNQ)mW9=hgyGsvG3}C@uoN#FrzJcw+T6Bs<%Xgw*IZrAWj?=W_t9}u>X(CQ2 zIZ|SeVqra|Pnw_pBEsmI0ID ze+wClJMr@)J@0g?<<=JI>nE&$WFc*zP@V9EAOzIOvyZ|+wW=(KnV9H{J#P)!| zI%&lm9e{Mj*i=9$F$^UrMr7D*+1r??Da~NrA+g%eu9?@#FKo+Qsw&pXCUg8BZ(@_@ zV?+MsDk-;jrVvCX?B(=uzW$$|+ZTa?<)?9%csS4Bmjtx!SPkb#41h|B*vCl6{Lh;W4V;N(oL%h*6C>Qy1>_;1 z7T~?*v)gEOIBYw)%?M~MnOXM2&A$A<-51D>`m?kc#sPTypBQ`YQRJbIylAbJ9< zic+QQl~NKCLARr|7FShORmI1Snp=E)SOT9sOl{8F=>}_MZ9$LIA0@T-+!2_O@()^b z@W=f>^RX(1rXlBOTRytrhFU)3wD%R3W+A)Tpv!F zzXN!}ZyJ><6i23<%LfPZ55QMz+?w#FJyoIbs%qY|Ap_j)v|t>wzScy1J)33p-1>gf z4O-9rwR%4|IH9jq-`o`FY8?f}*F(Jvl!?R7f1l!-68=wA_|y*$^V6lehc(wJV5T}I ze8u5~7mmE;5BnFU>gJsuII=8Z?`y#Hd=$)^BI$EILU$~YTGT8w4F3iYC-SPpki|Dc zq`nGu%MGO*Ss6nMSgpxbo);T`$BX2?55^I=KJBMB)EmU5dYmig_90aVNgAvt!oQs*u5Hc`{%Auo>8eVqEWlT`G7I_AYEkPD1t+eN{8{ zA%%1SaJc5ZVF(o-FU6IBlU@+n4-@i`)9i4MjG`7}7C<9j?iP(->ZvC4%3U;6+6Z73 zpmFz0C-s1=$g!`>98H?(Yd{L%pO#v=)z0`;XCIUw&b zJjY39#Or9T6uh~qn8};(_pt5>{OWHPj_p^lLEbkLe7Q97rj?rzP_Xn9Za^G${cGh^ zJM}wEkCeN35v*#K(A}{?XFcsqvoa7XPvA{|JF-s zCQ5K%w;qo;NqC?Ar_)sPBA{-~oLcI?Y&0wl=pF5{TMX|f*?!fketBKSYjOwF4$(hc zHC6GUkh_2?(|#AN*=PN&wpeutV#b_Yh(H3LR zY1nY;r+S#AiuS@e6PxxhRbxENr>VgA8(_}Cn#&l=AqiQAR${#R#oNPXQ;~L!(FBsY z+wz|rhQB-97a%a{pS`?mx*RV^(a~zvtib~LpIK}uIxg>HSIMjXsovQ*|A`dqE&#AC zm8k5G#0YeO47H(UNQ6I0j?i&>zvDjPrCZkw`w1Dn5&S7woX&{w#tdVCylbUy9RY5#f} zM|t9~f1`03T zivLO7=@}iAr~3_#iaiQS`C$iyEbIN!4b~^^dE$9JZJ0_R7P!71W4lp*ton78_M=WJ z3ZTYJKl@6H0i6Aj6t%u=u`}OR_T{8=Um>*E`D&9Ra9EzNRA!(2z?z)OsfOj99>>)#tM>)f>oBj#NOY7!Dgp>r;+nUcZHGj$pc1`~U9PwM^5OAHbl7{p zH>y1tNNs-g(NbGm%PW~tLFQ^28={37Yk|Y#uv!yPDses|(1WTB^SMkNgc zpR(96c}$V2S|zshvUUK}p6dJks$(xk@oLHgbyxcam)EnG+Nk)JZgurQGz7VUte+f2 zQ2)diS5a&2;cnECZjdugFd}uFqh(e~ns6xjyADLL+}?2q9Z z8uY!VoR9CFv?|Gmvc$`j0e}(4@oUlON0HWfWRsTaX9O9$nSF-F>F0t7631Vg{yOWV zRH@&Su@gDH?D+XP2cgMG8te`|4p7@Q z_Tc{IiAOLJwJu-kHm2;Pa0)Fl`h#}2pM};y@J()t1CVxV5gqcnxlCf>4jx_c{}U$+ ztjG@ZHlg$8&~APp;zAZS<64rR*J15(jIE2=xYG}yS#9LUaHF_<=wt@VpaLi6?xZHS zVh|ylzXY>B`)j{Sm|^=-$Hn)J%|}YW>|4WUvA!;gF8;|c-lbAW$loD1J&hPs(XdJ7 zxENH^`$AtnT*ba|SxqrvfsA6XAgnSAZi56_MyB4A4G7PrgN{>6knl*L+4K3~d@fi| zkaCd;7;lmod#|HFVXnuTcqO7o>_-jbFmcRM0v!5u#hK_rg`S+|E}9j4kjhFt05`RLr{>t>C{_FUu%lU(Xecf3Ha>d|$1cI}-CG zeQT;VXFU=S#gWGwSWJBcceZ`&AG>yVuauI;J)+uiFsA}1OX}0yS4DiB2)tjc55Z1; ztTPM<3>d#Pb$O6{4>6?KD)0(nYHp!%Vbf%C{7sATp;V}TYaZT|ty6CznP{Ndp@S(! z9(|BM*CnHQP(YD5>Z^1GEqM~vO&`yFQa5MQA0~&R&(9htoOp{B1b_8mE2bv(3(^{T z^5d^NbK_9tvaN=EBprimB$O6_LhznHdEWcEdM&<_(Xn{}AeMX)=DVtGo2gs9^+T;fAk8u8U}=oI-Wn9-krB}?2+KnDP_S+4^M2nV%!AHLWwX?Xd8LcjGAzn46}b9 z*v-!^qH~rW4#Vtt+=(?S(5lj-DUscRZcP2n@!BcmMq%iAJX;*rKPM4!wL2t*8yplr z>VwQ1wDJ|UH&9yE-+P0ek?O~Tsr0FG#r>pp{}467UO1kSN_bHAsi1rz{C$^aq>;1- zhUhs-pxED~RwCFPXxC~c(F6ccg{4TEfx;oEIgjfV5NRHpjNIyftH0lF&SQGLqof-^ zXRIlZx2sRKC;`huiSFpCOUjp^C1GQc^8$2%6P`K8o=F&-YPsH@ZZGm9U7q3bFTZHg zgv~0y4#eO{WN1iJP|S`S8h*#pw=lD(o`A8W#ENS6fAN@O+*7^*1|EiH*N#04MdK%NtCUm?jYKX5CI@m}t=4-b;S!RI zs*NO!5MQl=9qUu~D-WYqu;@w88h|C@~c?|UIdq7A{{%VhHHBN$xH9ZM|kv0Cc3~_53qm z5p~P{RqCQxd;8JfL&Fqe>Ov5ua>G~&fjPAfq9u2Wo886gp|ShNECg6OlqL{>lGq5Z zAx$46LfH40D!#BkFY5J0&J+^6xi#6O)~@P z9~)I`kR(3#zU#ychBfUSyVKwL65E@UO2>t=o4DxNDlnUP>HeZXdBgFHEy#PHmq-eAsE2%Hs~{y> z9~;5Uj=o+@EBLc{?84|s5H)`eUZEJfGQVe5{3BBPN0ff9fjiJLiR(Q&G3G|Nx>CZ5 za+4>#bOaiZfD_ZvXquxUUAJWd{HiUK4h((y9TVgYT$l7$gv{-Mt8=d3^~hwl&_HH6 z4z1iKTBWB*T zEkP@xv;6^)Lo>x~fZF#@%CZn5HZr`z&Q@@k-4`W~+%RP{*X*J+7p|<`Dhi%77Vft< zQ({;;J{YT{C9X&iL`LkH#zwF#mB~*J016I-#><_GThu46Nd{5Gt~5^#{F%f z!ViowVJGGHRU=HAor5pJaa^tsuRD1#Ovb>&v8+#Hi1dOmG@~(t78P{b3fd;O68QId zAA&OrQQA;Shp&Sx;-$Oy-!f67*IG?y-ZcX$|iDi&-jxfdw zuZlcx4krGBGdMw$5@OwlKv9oo5zL|~UZ^90yiA!y8*#QX5UcpRTw10w#{APR?Ev*G zul%jmnk3{hr0DFQ(6&Uf>Cqw&IQb6qqct~rDALtCPq%P=sPkPbQv#5C z%;3%I3T(RVC`v)lxJ3aN-*HRKMf9vXF#~{m!F$r zIBk-_y7>_QsEGjKL~`@*CC^ov1g#?=VfC9+=M-{IPsy= zhzTmN+dxB+p1aO!PWvJtk??frCC+E2lB|4k@$TS|(C}A|OiTEm|D-l}4a_tg7y1L_ z2_!ipYI+2oas=Bg%nEb{MtjG%smhB00rweNdnP+M1QHi{BuEqQ3s?;MwsI)U|tCr0*SefM972vz!dR-KK8ujFvom{b8sn< zbjG#3_G-y+3)T^mdH_9~Jcu0pFBmBmr8%uvOM>+3YPfa|{cFN_pHr5hK$al>2ePef zesW{0vBzKXzSN#_wg}41_|hQ0Ay*gl=rRSH?l1wAQ}+Djj&Y4ay7|6FYt_i)^*z(z zK6&Wc5sZH%{YX^tF-@ndLwr3N9ySi8)Cp)EQrrO8YT3u7#ZyXyE9wb_Wq1|Ijtd2n zYc!#g5*K!mP?F*Qo>TQNNz^yBz+ebE7$drpPA>7JdR{`f525y75voBq6`05`Y4W64MdJ${J)N0-=cX1kex|IIjI!ILLW>S>GYhlc<68IBI%&i4k2Dm&xt7zsoAb zlN|=A641Y%*QWB7vJJo1ba;?VJ}>C`;t2hyX&#!cK>};ZY`aY7h(D0Y-ehwUm#~AC zdfN3`RTwTDg1!>@G(?}oS_O+tMCrqoaAt0!|LCksHNu~R>8@q9|DL=-zT9QN>?ClF zfr|Ollja3&Z5_W@`uibSc5txL3kQEip0Hu`KO(%A<15HNdiynt`|^DSSfX@B^ebge z@Lx(FtZtf`>^GZSAA(Wz3$SaxwcV5PdwESnko*YWBwBy1Sis-bIk$ zj&&Ea2;GObdXNRQHXjs9Rad1muB+7ezR^Xx2Y!q_jjgS&^c`w@2U(Qbuh#`mbxIKd zf*HT-zWFy=oykxPX>ZZ&j^`uQ$pMa(p6}`Q_v;w?1m8PO72QN@er};&Io2MRO%;$QOh8XH;5>ExcSF|6<<+4WYef+4~+8p>=jA+l+S$)rlPQ%D8!JQcWnOB11@W9uP*9NtaSyURq) z(_yx364~RLtQLV&B*>D^TOjpelT2O9Vf>fJnqslpY>D>g3KcsZpVyt>5nCi9eE(nL z*@oxQTlA(+b83;a^u5B6a!Fu^mhczQuOf&13hZ%!&<)l_`rEZ}$Q4XsN?SmQB>a#+ zX1?%zhFlr1i-gtWzZj4%f3fY#fG)zyXtrvAoH-dc5>SmBBn$JkQ|s6DnI)q}^!cVm zoguO44x955zg4?pCu>t0cqnpSsB3sV0D~rnB`|IX$XppUkxqgmn%!1*F@8I}mMnfF zXHe+zr1`68CE#eF$O4CqPu|%b>)QI82{m87%Fq1JDv)jE*d}BXiNlS=CCx&2Iv0u| zHTL7+uV7@>dpmzXxda5wZUJnWGgY=wg>g;ZpzbvSibQQ_Q1=}=Tp;91jil` zC7umal=t?u74%_wnSS}^k-XnY%tP@-aTs+(Y}v|6%8v)lxn2@9u+G(W>g4R{gViwi z;6<_?xOft@%z%d5&X8S2Y|A47t8x6goZI;Cr{rb96rbc@xO~P4`~9G4esCzX)dg}T&OL&@e`SL>=S28HERSS1c-z} zSKQQ)R~`~Xn;ng>zIfV4>r;e0$f3)fPgiF}ob%&r$$c6f8v@-hw5RN7xEKL*3eCc@c5Y7hhz;KB?M21ED^FE^~Xj<4=y z>f@`%e+d!2lTEYH&lx@re_i8WZnhMV)7EXZ78E; zlRo1XmMuI)tan-`W3-KA(|u4(XPD^@4(z|Hw+%Pu*;Aydb~e(#H1yQ zS8c^6OV@5~-EX=ORg4cA7IPfOX-`S!LXN+x+M&$t{kjjEgIS0bF?n}vB$l3{RP&c^ z+<)+hstc?{R4x_K>qWIMMA?8OKw}W}A+QCh;7RG*`(e7L+JCZa?Y5M8_lg0Tg)W1? zV9ZZutuk;tMQy<^YUm;YkQ4kHb`X$dK~0|jaLtA&{RRPv7{&wCo^hnlEm^%q*YA#7 zpny5^Hhp2lC$m?XyG`5njQebPk708I zrwGV!Ao-tuK>gN-k9edUNY|bl;9NeW5cr6vBqYQq3?3IxSoRdp5Mf~xr*r4TdX64F z$_wQNbEW(`^Q<^{+*%~XSC{X^{X3&y5!^6NnjS^C2;>HH_QJXJCs`LE+lnLSI5)t? zhMZ*J<0G*fDR8v%DZkXG&Z4{><0XWnE+2`*?Do5x?cunVJ_=)W&`0=4QkGu4Wh+8# z8fzAuM#F&s>_AV1g#z^GQ&9tMJPUKbS%A+>tc^;7cbr>6E~@gPH9n(FayB4J7oJaq zM!|(R0+|_`gT{!?fT8wh^l!tgh4_(c044`QF=QX{&p{~n8&Ps#Gy``Wa*i|(a#4kW zGY-%&L7+)v4FV|yyZO{kWQba|v^T9HZg@dB&sd<40E$IMydwmm3&ydz@Mt1JM_}M1 zW5-kIfRaL!2IyRp%^+r^r;F3@ag%Ge`6t=^DefVtjTmtb?|k)=od7 zfsUvovSaLq3Ah-?h#aSFxIDZ~Kg(OBW)y67Iz9^RQz}Hsr9w!)eXc75bj`SOH1H|? zVX5zwD-#EaWQ8l-^@+dSvVi0vTuYxb4kyUejD|L%$Y(c0!&&YOgqsrK(`=-rk2=}^ z2`ymuU5W`G<@S4fMIXbH<;s_;SgmN)`wG@>mH%cp*fU+t)A=oz>2ZlwH$NfmYNem8 zwcqb-_x8+c55Fg|N;rVC-LluzU3(7r2>u9U0416TfOeWF}!rb4<0%)_OoS{BMG1gY{>vbF+yEa=B$?UhE@vQ(yLH|Ug8?f+e{D- z()Fk*OARN+hm4uc$w$Aqp?#&h2TlHB_5Op0#k?$)D%G?fv5_(jdnshGXyq1>m!8As z5_NT*+*cu?jH(a3+jr#GNXjq=jh>IZ4BT+60vkDH33`Pd!#-Ig;||?0iyS$5gTp2+ zGJF^~X6iD_i$nu+YJO%us&xte5NeBi^fNOF~vT3RuYW_O}KfE#6FUh3(}Kd4!#g@;W4^>jim6DoFBfQ z-(2pKTi?=qc$?OAa1Nc$d9!|;ycyZ=ZoD#tq{qySL9D zb~=TFs~p676;2X0;2WcZ;OjaV{B5~#_(2 zDov=QJDYyfxA-8^)GV~m`_-r^Npqn$_-1}Fi_0Te2KoU&Gh(FtbBv5Jp;_?8fpF;2 zD-h-*C;d2IB;^&(=!L(u?cgBeeV&xt~DW zFc(CnuAoym%RsW{BaK zG$!hdlOC?3FfWGS$``H@8uJx%XTYc7BfaD;D*5!1vOxGBIN_r!nuRh4SD{=PX>}zl z)-F=@;R3Z=op`Fz6`KeY-NUcf1E&bVEMBz**GOr@9lUGQpc;S(g8BpVmi_=hgfpzo z=k~)8d?aVgLK|K&Zy90vv*ri^1>X5$;d-l(@Q5y|Km48o1xTdq9sNZ~ejlpLRqgoe zsvY3cJ0C5OOt)<9R>6yykNhYcICy02v}NKQ*GT=U)zyhuqv?wyB$$bnaLa`@bSikU zXw?=FWc82;5twz5{<>D%A=HBNsl_t2nh%ksMvduTtrg8ND9{0;piQU+_ixv?Q$#{} z1RnmPRhwV!HBF?0{*jeVjm6~TqyM;}y;L*{ov;{vtP)Z(!f+J0Q|(Q#NfiqmaXkMm zhrl3T8M=yh4PsSkb=c7JmFhGX^Xe*iB#lj|?%?60(gYGKkuOHb&>4^96+cSl*QLjgN?3nXtLu~PKiRTlKQ0?HZJA=`YUTa1a))14>F|e| zT|l&HZTR#DAlh{TKLrQj8y%kM_^ILlqH>2&zwQ^6+k-?rC7fqymOf!RvuP9=N+xf! zw?O_n?F--ZM5*#Oq%s8ZT8MNp`G`-2k2t#A-3&eoArF`Xh$L?Dfnz>`OWZBLx%{P^ zd?ZvPWWb~5>$>yLRr9;789)#Y2>0#7o%}Pp5Ij15U?4RvuHcKi?)22PbHgj&4|M3u z5Ok!ykFw_@o@yR^6g1REd;t>y#_0dL0|(s6=aBPP9h9BL$F_0)g-GbBfsuj&`Ghu+ zFW$JD@L-ddYb8!_Rxd0ck;(FMt7Nt1+$iZI4T90mXnAJTGUg-0!5sn$!N<?t4uGhJGYW7D1o?p(Qifsc@dfCV1+Df(c4T^nOg zK7wFk9Hv7r0L{hVk`4;k2ThK94OxFNA6d~L;S&Oo8LScHhp9QEec}cT|%dUI!7b{N({9ho~5VIa;*A6l}1XNn$<#K5mIjHrz zb8+Q>i3M1RGx+0gEc3?^feWsx-3>jx&}CB3VRK&Z{aJ%2hY7L_OvR71f4Rq0r(azw zDu{heo$mO^0v7xt1W2#DFXQMB52(_5a+$nWIOK z$>MwT&GG4cguhz#oi1WU0zJLbif%|p7{XIo6%()ss724IP{L{#3usdpQHO}c%=d9`c-WQS#6}ZE3&1jmT&_s7aT}G{?>__DtjvMy1v21&H zi!mm5)YK(ni;N?C6V;lXV2untlegJhAb;&P!rZ0HS1DJvR31^Ji_AwHDlWZTqYOT> zu0hm>Yh?9@s127mOFr@wti4|}R~JUW6mH#%9q_d{r81HD#{AOY=H=~91P4s?N9Gmx zjKhg#GWdv}8TiN$H~_(6yRdvjN!s#hfg#V(9eZnPj0FdQf?yo|A_zQ4Pe14aQX(&I z``eh&X2-dLT%vEJ8Cu{YjKGOKpZq#qbI}1TWR`p+ zYtFhGPBn+zEDKwt#(i?^hL4T~Zm4RPAd}PS+miJ|u z@u{=eiW-dI0??h1tLvZg^r3vb{wSPiAldMd!D=4|j|4+~aZI$n9M`D^@Z47;0K2td z3=#&Oy5gcsPVon!%;wFTJIg5SKZ)Ihu%f-kZVl1thJOePD5T)u2B zq>L_-w?Bym%>HG>M;;ew@lmN#rCi~{mr@Q;x&M2M7A=~rKgt7%;*VHK#oUsW>J+K^ zNP*gKar?9PQZCyNGL;r6Tf zX5ETf5Y{DG#gBI^dr=EIosYQsceflPHH(BW9q0xwS@{z9NQnk1aJ@g6%j-sVs7+oO zcm4R>)$74~#}~@wNe_$pNKtY16a4>dnT&9cGHZY?{BiGL*YdU7vgOb80r;b2Nt3-bkd|*R#iD;q`oeD4EE#mj(ux4sU8*^bL)Q;T;tpzhvksVI$;%xayppXzzp`IVi zQCxyeta7rx3@%OjV)ei=^W{TY0;Y_EG(VBA#?K9(x!^m71-5e*Z4iiz4Lfbl8g&bW z)eHfvTAX$N8)Kc7@KMGbo%P##-3rudUE;b1?(FyvEdJjtW9MS>5nqU7DW=1JcB30s z`1$7c_&w!}S<~U(yH~8l{mX`rg8$}zz6ImNf-h-lyjhTChjS(EM@M=&qqi2?Xl8W@ z@0!D@M3_ic%yE>Ysv(HxxP=Z4=pV#hSU%DV?}BSBsKJ303*+JQJo(sy1^h<7H@_XB z_%-Ky`!xq^jHapeo0pJNSFchnX_>n1KJw1X-P!9*3fOA!dX0r) zd0eOCqq8-8+@7iwV=h@|Orb9kAA}O3SJK;L80weV!zp&o$VX(_Xl}tBw!p zlVeAZz8bDWxr>G`|IJ&b&M>=>lW$ynVyt$~9c=)k*sgvF@k*eOsQ(09)h?c3*!%Cl z-%d~_r;y~xC1?Sc%4Nhyg58!7x*Ef8kpER=-ujQLc=6&1A7yw8xxI~yRH{O?B2^zy zsxIYVU$NB~(tWVNM{f0VWmQZ2X89)Jm?-*iB0EbG6jz-4jdVmnyfRLBJ}hrs78z-g zmwSSbc<-{;Qt_kjJ&FjSaLbX=OWh}bF!5WkpoJK>(bBfdr-k>)4pL$!zM4-cL;ca5|zR3*O-VToI< zT)&+guUr6!-%6j2+xF@!^|!|nJ3RdFx9lD>ZK;?@ijOjJCMO@!jjf>N%RQ#R2XG_> z5oD?PMy6O5wI%yWNW%qea-42XMVLJJNKgq}5ar27($&%@(LOr!m?31hbN9hM_^8d{=~I?T(kG7L9w-zx-ms$utELONXt=|b_5-xr=3QsC9&6t1R-2KR}p=I7E! zb}Sp=PK$SNHTgV#Lmjtqe&pnY&<5|6*Tl;T^%)$@HNVcXdf7xAKZ_vvY;NYur{Yub zUBd<<9((LDKBRu>mW>w?n(3WS3pzNQAczYZ^d!eeZe`1!;%svuxvAll3&lsI*$j$@ zX`{0cmCX^JIis;E45Wim`&5x7cA$(q@O*v*6xxSZS_MZsj9uy!{}af7J7~b|G$O_i zoqEm2MA~R+z9=9i5>v=Xk?WPQIS5-s;&{J7e%`{hagk)hN2W$Iy+dqJ48(*{jMwPW z$8O*@0~F*kWGtgzgqAK&zL3VeaTi$3M-H;EnH7&?Oc3N;8^7Jv<)BS;LmOk4+2~wm zgzz}gHz>Vp`?@xquw7U_3e)7Oc6r!0#U|Yj40L%g2zY0Fnw!}$S=6Ajv9p!=O{qnHyIwYKxWWKp6L5B>p($`HAtni3r;$ma@>PIUU>3v+(LEd z-W|74yhg5_aFy}q4EN;ZBQYHZ|5U5X4fnkb!7Q3B zcu?sxk{2I+5cp_ss)|L2^t0@<^Aqi&(%k9_M)9Ky!bf*R^}P)W_u<4>x=%%*>i*4K zuwFO`BC(--Kc&B6vSd69yATu9UH8K-l?DYFPg<3Q$1Qws>_Rr_H{xs87-Y_0KUsft zLH?iVS)kS%MJqQeU9M8ny>*5%dX= z#kCfVa%+*ZE%QfG7S}EaH)oXW^9_x=tvvFUw;jHSy+u%R~MxO1iROw^r zhY<`@O9jx_4Fcd12TcJxd$py6og6#M@b`uH!hBZxC~Zx72h)dRpUklCM!r_44enf8fg{xtgfj7wSP47( zb}**=Oa$t3GMfhEh-@)oL?{GH#b_X*UR-tR)R_xzyauKw?lG)q2GEdkU-7eEkFFIui8Ne^TZqP{od&_|Y? zihqg(sxhupu|?CWZn^q|kT&&@qx~KzED_PPVkH$Mq$$eEb8ebpyMrwDRH?&N#KMa2 zIg-<`8P{j>HaiRSELi>d5*2EdEvMY~h3BK-5%H$nNOu$4t3})}hfC?Vh9_?^0!L03 z5Wdh1V(>rZ&q&eX0*PW+Amfg`I0#?Y(jlzm=Skdw116Kl@{o-Bby9$k3+Gn+h)j}! z0|!{dM=dWp=+Udq4-s_>cl;d#`r3w$K^Pryrd79~lDbqjtb1NsP{N%Ir1;JDi8z(hiC7FaPO4}?!E z2FIUN$_yzmms{=x#=|%EKukeN?I|fKjvHVU++gjQNP8`X$yg~KQ8?wIz3SJ9XzSV# z<1kD^rf{%~(3mSkhFi${3d5HSgP>hVhL2Xfb&BEJPz> zbCJ8SO;D&`7ii_&3>&QEb~ios%O<`Wl=uBIe3zd^QeN$cUhuCgSp#Yt3+q7-fb3gI zPse>VXhJNLy4&D8719VD3!9y$5wmzCRBY&LN8)MZOnZAEGdCKw=MlAk6XCxej! zN^s*iJXqzvw@(siij0EfoO~43XQ*U~h2vpt2hwAY-ouyeIws5j@78a=AD}SxG3RiicRD~+;_T)sQ^Nb$_ zm!1R0tK=^7Yck(l2&CC&AwDlLLBnZ?y9fBJ6Ia+wi51(dPIuG1ME&1fU zXb?vSk_j{x8=st#!BdR|20pUlMoUzfHy^o^A3_o!2>uWf`;)}lSb$eAP^G)nP$HAs zXRc7pIW+U?Tt2V}Mexw5iVGac@ z4AzjD(U8Fr{3H$dz$-)}5lBZQhb%SH=%B}tv}vsqaKLV^^PnmUAU5!_?tW45Uj5>!ghB-x% zE&y4ACi>juoI}^iDHqlPuBgj`kAkm{k_3{}XRyhsv!BYfI28nvcR4MGZ>x3w_v_o$cw|U;La5k> zXb9gsOFmLvp+u9u9+0%|`<(~~bkuG>RCVZISLyJ(YMtb6agv8k{1!5t10Qj-Z+~$l zPO%C}4qK>4r_cn=x$)%x;)ZtcM{R^C6YS7Y&o&j=;ixx$?n8wac=cAtc$lfma{qQ+ zThSkIBzW}5TOV`pl@?cjPoze;ByeKJm5`H<{^N#ro=No8;*IJUIQPL+{eh?&c9jku z9c$pKw{6>X7JQ^$oRvhvSjJMcVQ;1Ih-D~rqdFV~eqY@Lb@C|+Yt=7$04>I+dZXMz|KROp6oDDfGnkCdzpbxwwvG@F!sPl<_;g}S8|{@kqU>x zh(dDA>#871+T=I*X#XLdDn*FVlxhcPhA9oN-V?*vgnIvZqa4fb0!*fC-~Pi^W~o+z zAE}oUJTr7o-ezZkp84u_El{IHiAr@8nJJ&6P{Voh5r@qN8Td22CL14K5iPJIRAC<( zd0vdlSNto#!hv*zjofv&x+k>fI-&;mr~_^JdF89SiH(5Vs3+WUy*QoI>rSMP`@@idUq}si`(l(WA+i- z@@Z(MrHySJ5k5$F$U}Rf0oF?wZn7v7T;*7ei@9S&bTgY!m)hpn)e>fb8ms|K`0y@< zFzI0+6oyEmU}4DdtLavwfHYzaA59SJTH<@BY}wy5v6z{%nubh$xi-i&v#u_eYcQZW z(#*9Ag|svy(11R~hB;!iaM{OQGrN64K(01qQdlaW)2Zs9Bj;&Yy}Jf*kdDHPhgX`w zZ8k9$Z46)6Mi++c8{zwCq8TA*>xl18P>D3=4d2<&AeL+=*db1(GcMPaYuF_engvaa z-CVf%v;U%{n}TI1LlfUP=A!($$w`-)?EfSdaD`l6d<2LDjKY?{QBD%dLYE$nzpaOsplEo|yp8BA{Q^UBm9p0I31&z4C_!-e7S=ERW zAF=S{jPav;U;RjQMuqJK%Qjl8qTXHWexJh=jx;%9NlI0Foam7w#||Gp2ELTS_F$dx zd|2J3)*qcVeiZnK`+ehs?}Dt<(@_t4sOwYhCsG?3HF;`&7g%m=ixD)2$vgYI?H4`c{8#wOs z6=*`H;_y!vKi+Oa!)J!y{KPOr28rq$2y#jG6Ht>cC$BH3>x&tI1GNQllsHfz;;9aw z7$BP~iVl~A?Ld%69VxOcio}wHTLm`#>vbM}gfyY69zB&cXJ{tG?8uogV(J5MeTK} zCOiqA9!smwzmA>&1%fPAqM=9nN;0${3py#pLC(y1-!*w*gy<4|uxCyqBuCE40zLEB zZddgBCZ)<krc1knsm4Ktvcu2hP&U+I^!0)(-$4$QRs{0 z;7^7jWXK5$hmq#mAhahz8~WP`Hp!3^&dumL^sZ&PgB|pAFmxS^AHULE7wMXW_Bz#j z`nc?qkfFv!ejATEOnOG|1`(FGP{vTYC; zgaorV5_;D@ZW$DCoT%8~@s5_Uk~uXGik;7EK#6!bq2F+E#+D&JT|JF8u%(|B^wiQ$ z_$Z@6Y=>aaSU5X4C0$gkgO7sE&uxG~=Xj#eO-ORqPiuk8i;r?~{*yyzvH+kgQ?_i8 zD);8E-TIt-l1m~-?)){EL}#(dbDcg_$^dA1oRIZ0SOX(W{&Ect5^V_&9u;Zg)2e9z zB2-!c6nX~>2*N5M^}VBfxv$rW=6L$57z&4<-V|zkb!Wk zhj`R>c-LYR_y~yc(k<9QZP+by{n6*kg+D~2Htg^KsZ?e1zHjvXOk4)VDA1?awH!8soiKC7!eyHncI^+l6p`>q z+$gIpN6wxuB*m$K*Xh04Y)cJw_Kc$Kpcz)~AT>`BnmT8#5dn<_OE*rOxl*p(*y+pW zE%`wOKgU(-^UNtrdvZk&2UTLX_UEnsGt4Gpg*Gq~g^m4exqL-=bQ?DBaU41+tq|&a zBgetxzmdUc`rstCvTkeC)TR2uo+3>oDBCXS&V@lZ5>)s?0YGssSAyaD19UDbP^OBz z$3j)Qdk|$JCDV{I**`A}NU^Kixlq+dqg6;zhTVndBOZ~Pz3v(2y7|a2X1dqJ!OLi= zO@`+meq zRYy+ed-#Y}UeguM+1RI=k(ozJZG4*EZ`e;aQ7rj%jh&Kf`(VHf;kt_j{!}~hK-kBA ztVTE-Y`u;U`Ai*W)IDD;b7R0yQW)Cv2hnpiIoo;I^9nC z>2U)GLl=5E;}%P{6L%MOGP($29n5H!{x)4&9xZ)Dv2^8~m}`3n)0@R(%zh_~i=0@u z?9WYFULqE7wYbduKYWSTuR9Y2B%hzg0_dn*xsqkCFI4@xpJQfSnrq5awI;|~n-{uH z;&r?E?+HFzckUM*KoGofu=D1C&tXMW&7f}gRQ%}R@^#xqH#l`C`KXEKA5Gvn^MrAV zMJV`%PcD4G1K+TDx02c@CMy2CdAIyAZu7v=^TWa%tDhwAc^oZ1(inHBu&pe>DST8z zeeZXW4j+Ej{O@jmX{3BP;26T)+xLmeEnL27z^M7RJwL*^{-WvxIsP2?j9qz&V2w)RO+Z5tyzmqx zi>)4gYrJ9z&_jI*^I~XXRmQt|{SG|)Wc!KWOXMh5_`)x6uV}+wlKs?h_;$r+)wWSs z$oeDGaIg#;M)`GP7bwVJk(7!Y>R_loC%|V!{&Z?YULlWy8!dWH^UPnfjIwpX0&NG* z^kgfFk#DZ;q_jOCb_V@~x1!)tRN*|~qg<|moL5D5M+7>%<*(JM*!4}zl&#>#Px}9Q z7bJdk@qd?t`-hL@?^&&2-GssglHbDZYt9u`l28;Lw`AprlqWyg7hlh$$HW3>w1A5? z%k7M!k_L$desT*We3bqRdj;-CD~~D`t5CN473Y{oqN2bREVH^ops-;3vT7*fy;|6e@C0wQbt6-jf1&##T+>Z+x>SfN(AE{1=y=*6y+F_#FDH9?{z zp?y%8&X)GHdwb@P@!wjS#Lu7dRzg23Zmc9C_H@Ccl!T~E!5e+2>q|Xwk4X)6 z$iWxPe6rm{0P@kaWyI3Ns4d>nSX!FQx4f>jdg{D&m)K@G81qj0Vinlz^WoRE9~+9N z3^R%%wH)1T=$Am|(^;!Tmn;nv&`~M9*(;-&PMf^srzXo>E5#tmP!b^cBE)=2>cc_M z3>jfbYl})Wi5@1!P?lwxR!f{@V6wdSf`AB4rEYU4wxv>c=+sP6KtYd|s`iarIA-cH z!`B{kvvbQ{(-a2OCU<6O_1+KlhXW^<3mMVK)^t^(!?Xu=0c{o;@c+e6= zvINPhd@CSSuD0yLihi{nR<2yBu$u)S7U}ra{>eRuM1jNtu>~+bEV2eoUa0HVq8qQd zZs8+WHOzPVdB$jB1(Kb_0zZZY5-0I^QM@C%;UC@e_f`YPGrWCm98onc`t;U5{OYiBr@+lU)Vn@a zY;?M^0~~%mA_AurX&6x|Au_~tt-76DxKoz@L^Y_7e@a@2?|3bHM}J-G?VFq&sZO0(|%Seg^@YyOzp-qpOhf#?_GQXP@y|LBQyv`}Qova`GPRU#DuyZ7 zpiG%sZR$B&C=s_$b`lF*A{O9ATJNK%f}-56ShYmL)qA>ErS_Da2S?J+E|DQ5Y9toO zX@P`~;-A+ma3@-NRGK4E;Krx&)#;e;=BymoE8nS0-T#-;CUB7cCoB>NaTr02z^5T% za*9n-j}Ve- zb)DX=`a|zoZKO!JfQWQE#pr%jrM)V7|5~X{t>#0mosr)qm(PMDb<3mp*9reK5|v}5 z#!ih?_SY%>#%G<}38&ZWVj$_pu}?zI!CqbGq(M#!IibucN9wU~_ecUG)a**7lL41h zj+`vSbW5hJ5e0g3n(Gv?X?;azuYE$vl&N+1=Q@g_r}|AzO<>zdLaNhX_Vj*(t#Wpn zvOuJEdgDmRdtg&rOnjoX7Dt}dljhmLa~Ys%9O2?z69yA=A+;%S}LygooB&# z8jFf^@unt2cy5byyX2O8PB$hw^3z(tHK`ndqT=ev#TV`Ac3j&EB!Yc9Cl~WiJ8?9u<^Nh@1#k{)spFI zhwh@+yk(|;8WrV>X7<$SaPataWJ*glPH*qTAR+foa}l0u|1*33a_+`SpNI>*-!p&B z*Na?#SE+J0q*CmTS82Gc`6&2`+(iWBM>*#f$SCnA^Y&+wPk%xSGq#T z@0Y3361A^r3-ruar(L0{%}bW6Dn1^EkS=#V@_U_!hsmEz;3ylHCTa6iS-|y~!9jVv zP59`inx>@R>@AS+(OK}u<<=A*l`d1ZXr%_xf|~lt;-d=#EEn7JOa&<{fl-)F$pW>b zzu&xP({@h|+83(EDL}1$!s~sftDhjp?|A-R!bFJ$u3!t)>t3+>3nj`|D_f@2mBdHc z|8OTQ6AR>F0jLtTJlf>^=)_4U3zFw-lN`y?0{7G9CCf*J3l~n}N9PG- z_^4Ew3Pmb4&UbUSgpV#Z*IZEVR0zpx8i=G+U59sOshih-)I5dkdJdb@X5b73))b?Q z3L`|BW0xleUQlyg)^nXGe`X8R?^B@WtHsOLC{wyroLz7Q#E&jD_aM>dGPOXIzLwg~ z$~o8ANoRG+Won-vTkT*;#^hjo{js}C)KgEXfuL@D-n)SEqw^;(d{m-zg~F9?P59`{ z9@nMM7pXb}mKVvOOaF5us-Y(h@6sPaqG4iz3t|C$RO^jm6>66*Q#y$sU20B6qR&rd z0nRyh?zY=*8#Zj1n(&h*O={MxS>80E?i?DT@QpX#=&?l3@`xg!#L4%O*K-?7IGto$ z5OSWB6iyG?l1Z!c6nJjqI^$VTs8ORvEnBv!WK9@9Xj;VOE2Aj|NWjs zJb3V6rRKp1FERV!kb`0bp*nW#IAX+zL4yW~p*V6rF%&YLPG;Y}eaDU+>s4Ir(tLIj zTX{}ypFVw7ty*>L*s(o(_Aq1R%9XP>VAAr^u|UE{mn_|!zhdG?rAn48TCR4!dR>$C zM@e`ku|Q&hE5rg3AGI!0sbQ(I6;pf^6*x`SA6+_rMWV@1VgVe1k3@ey{q$3OG=Khl zkIgzAAMyPfHf-3dSFh#Em(QCwuUofnLx&FCwQE=R?%h3%7+X1xlFpVyfDEL1=%I%` z`Q(!=Tegq`yYSKZ;0&3xl`c4U?%bU_cYgi#*EGNBrkjlSC$V!Lol>=N|q`FTVI9wBaQNHBvH83Q3n1HwYYL^$kWt zTN2FhkxwZWt4dC;<4PA8+Jqj1n~J#*-{HfDsVeeSwQ5zzW0|o)JI;zl#XISprZ>)V z|8z3b#fCNnLZrLyx=R@Dfd?M27KsiSz2qt_4^?w*pWb!4{Pf1@$CLfDwLrp0mn_|! zzhV&|l`2uJY_)tfTcw^4dj%!fT-M&*&r|t;ML*l}dZDynRINSv8lJZW0v}bVU#hes zozXM${BN1?(b@j`C+#m~3-EGnXQiR`dGJw&D2=TQk_@JdK-aEaM~)o1Xwf41V2EbS zm@%C@ca~fyRZp9q5nk9(m*uks}#^2rk5rGDZ}?Ju8Ldv+~{{ zGfT0WF#=As7R(mYW#017_-U5CpHWWIAbSfWe02U8a>+`-M`cQvEMB%s{;JR9tJCr4 z9zv?u#_b5d=ZpZIg| z0(jc>dawgcuC9Gtt0141BKuqjBt>CeM9Xq1ga6_kP3}N(#h^ zHtOB*+2KuJ98v9|!S!*EZSJkL-;GNywa&tC(?-3(&^;ba^)jJ zq{%(@*keHrTG`h-$+`}!jXwC`gKxh1X7Ap;hz2VKC7s1yv7X*O@x&8O*Dob)78yPF z+;b{Igs>6a!YJN*?>)4&Z{NNje)vIrN=v}ytPUMIh*-fcsuBwyjH^Y97RHj27um-5ev4G)=g#|;=1k=$(k7R~6Z@&2^V@k<8 zhv}y$nNDYuATy{ci4F$RQ@=JlVba4yd!?aM95j%)U(&pFqP)AHTX@x;aARj86YUZr zGZ^2TnjWH=#idZ5TF0uN;pRNOrQffSGcMN{_UHjGyl^ zc>C?Qef9pIpJA9PP4m}!>u0_MsX+biC2s9_-94>u zdZ^_M_r6i0Nk>O6rq7)J=I(_Xb}4sfn=1FeUirS)%iP}1+q@J=MH~t>=vuN#he~(1 zcGis#yjJyrSF1koTIKuRa5{l`oqi_Y8+oY;UZi1{vbVRr{+?FE-WUmgwd(z^U3Yiu z5=}Zp!q1y2P{7r-ySD5#ZQ=4w8@KKm{P8!py)dHiExlx#{V0xogk#+RQT-=}eelWR zQB#&a-(_<7I|oFVmg1%#rPDl3%>w?KJpbXSsY}=Xuygi;_0M+vwA`HouBz4b;wy87 z^cX$==(VEdYnLh=0aEy{GKn8$|GS^G{E;lc5#_J)QF*5e7cShob?XZ+yr7E}a*28V8r%5Q-236fhf8mh)n?P+yYIf+xN##FTA+lJ#xdhFThRjzCQO*{ z&O7hSo;_Pq9GQxwtzEm;Y8MVXX%HY|{ZUA46MWIe>6XG%op6TIjAR}=JwN*BBSM0nde=;qJia;&wd~!yw?#KTrT^~TyN@0{df>nT z0||rj$|fIv_#rx@mG(-#p)F%swrp7}bJM0xoWSPIn{)o5Wse>`zWCycHEY(8xqttD zMGs(?t}TxWV(su7Z@J|bhH?r}GN^Im#*t$njET|gsLN*v+8E2(&OSXsD1%cY=;`&V zuf7^EV1No3q#3?8h>7OrTC)usHf-O%ot~&Cef^Q%jUDkZluu)6G^DVMM00^vT@^g@ zV0o8{G8bk?d&ALy@Hunlm_+pn^&Up#ReQW?;^;sWYcnI=96#G3C+%4v;iL1%kV{sA zw3D)B%9Jcwx=@Mh@>g$>uYRAOX$UFh=a*^P?t#}IdVgZsuNMDq#N?9AUU{ro<4)N` za4vvLnNk3W)N1~6`*&(j{vzM_&kMcQ=aw3ezH)8d(=vz%QK4J9R)4tV(;e@8cWlKe zbMnnv@TVE`ubMIMs);iTz1+PCbUL3Xm>>~gZ1~Kxt@F{#w_udgA0=KQOsef8(T zAD6%P)rX@fQoZwwB1OTk?m(dJpc&t9*}d<;;W5*eHhX1s;f6mJAAuk^cGH9J4j46W z)7HJ9?Dam=D>fSlntnPyvgWAUov)0VI(NMs>5 zSG{!deAvW~xs)srd{lhItLM#f=6Ua&e;z(2!VyZkS>wak6($JmBUUnM)F=(SaxB*yT*T8`T#bs`|;f9!x>M zRH;%$w1Ug64Ub*L0Gi+qz8|ItmDaQrxe%aH{XmaylA|Q-1JK|`aMVR)IR89zTmTl7 zu%@b5hOy9=TaHbXP%uWp8lYsYkZ2TV-jE&9Se3k2UwzehL%fNVaLvq_Gx3q$H6Rl% z@$I*5+Xe$+ls1+!k?CBjA{6l>uM{K7L7Tve0ftBll<-#hK7_(t#ERlkz_^@cQlLtJ zjx4Vljp@K*tikwz$m~$nW_{LYpM6HY)kd0`Ce<)R(E?ncCOf}$sggyD70X}c(QE5=I(LU8&pYIoxLBY8L+U*C(tuGn ztl#v{M~?p0f@QzCr{$vs>+_k{2{c_?9kp9(%FVdo|}S`u*0OfA6fLNB=VX*@rMi8g_R2IfQt^sEal3e0R%7hm0?` zWc7dS+4uj(!tJct@Gr0RZg`a>!1KK5g)*`KTD-^Upu$3G;Z}vE<(h z8F2DH{`g}|!FPT1(MM&AaoynnM_MLNrAn0?L?W7T^#yVGw-{mCv}yc&2QgQ_e*LhI z(*+2C0Dsup9C+f~n2%I@(}mMj@WxPrSzLMwaQKCp$h0E?Oy~+z;0wrRbq`44W7~I@ z`V9Dpqs~!;BqBKAjwg>YDpssWTZqS9_fg;@EtO5cQ=%%;>Y$t~JHj0?E@$aC&=y1K z-H9S2UiIR{>#n=bGzFXiR-Av93^JW=Ah>{rUY)Knfnf_8I+wzj1v{{b$el5U6Ujt3 z$m`i>pB0)h91_lWNob=b=2B}S;3^m~iDVi(OX54YCvrrTzBD!?KBbRAi3f?DsSs#r z8GVt=6hV0daTZEKl$ctyk!3>HKoUB!xeyo#WerhsHpgFLL*UCLK>??0PXU|cIuSjb z6#{K|Ef_pQf#hvA7BHc#XPV3@hupL#`E?frOfC^2zRMmlU%W)|g5__?SM9~0=Tk)g zT&Jg0v`1Rs|HZ;T?mO_`e%SJl?|f8AuG*h!3aFi{hjun6io*Dlz}9U@wN>l?_1Llh za`f0=E?@U=uk>h~D<4Hsn|eJY(Y5N^VE)qI>_7P54j%gJEj#{x<@$eJyy_QAR{sJq zy*c1!(WP@+g(T`Ev+m|6pMU$KO6xZMAHw(U|L@GQeC@wsrEgaJYTWc9kGy%`)fZ$H zQfl>0f%;-$y@ZXBk;O;MF0SM$w_-ibbYq<}h+ZTdA|+mO(<4t(Srw zYn^^yy>rb+hfMx*_2DB&7p>gs1;iDXrn{LB1?ALBrpvt4g%U1TE zoB!g%f3`_}T{ge?Nt++l0>Mq?$MWq(fB2{zb>V>Elk<~BVWi0kM#yRt?%{nw1MR(X zZiCM(280DfRiKa8^ZNNmRLR|$iu@YTIhs> z4UT9Mf>!hlcHoM0@39*vkc*BWq<)d0M=iZ-Mlp^eVj={32xka?@D-gx0c{8&K}%vC zx5G;pY{EyPO9VQ?hbJWR;7=^Pa?rqS(2N{o=Y={bP82|F$dDl-GLHDv>4HR|K7&_1 zGG@9!{gQ*Wa3#v1t&X&zB+1MbR#%}miHHFxNX~mR99>w#gHq)RLJ~nA<0a4lT|uJ0 z=3M(GPQUgww&|2`MpBXNh z4Ihagwdy;)@_la~uLu#T-CfI6cfC$_*Qj@3w@65up(sG%g17YaDV5^(cD&VZ#CjP) zsCwNUOmD9*YBzgjRKiC&C-j_-^i+_u;0^bbD06+8GNltf%Jr8$Irx)UAb7}petaY$ z3gAe43lC}K#M%TS#D@62Ja*o7ILHm7t+!6(`SY&Dk^&!zDIg;sc@-HEKaz#T_a=wu z#`OhRTx-FR3_e0ka7HMBpDc>ORR%{P6HKSEaqJU90UJ@m4MHS*es3KQExmdh=t(#X zZ3)L1MbO!+2C)ZjA1iUoVIXa3CD`EzX>q4v$0@{y_C{^&nt>5HY=TFee;5eFSVJ?L z=vd$*%!u7G7>9f+$=knO>915bJ0d>OMNus;R?~6nS#CKLn=54 zmk4y+=5(Jv{`ljt8ZR?cI3D+y>|}2NQ;_h{k3l7uj?7dDsdTZTMGBUym#@Za(X(Q6 zc(7OS5iC%&QD;msW?C^>WY}crgmTp$YFV&>ctNzdMleO2P`B-rfk-w>C=wy&h9yEPVW!q_IQ6zhj(VZ&~MwH#x#n7Jb zGO7LBGpR?uoyXfwXwh>jWZSxP|F=o}D91%|mjD0s%3tlJLKPd8C{xkRpYZS_|KBF@ zqwIh8la@b{1^A*o+jKsXXvbfTeN;P~E-tiJ`_!-x3aq=4=VmdHSD}Hh(nt6S5y%q@ zd?b{>MR!C*hPUiQ8*hK?*s(eJNK4C4EI5*oX1$V<4l$;kZtOHC&}&dEZsx6n5JT!$ zs7eR8M58=URul}0Kq_uzI7`dy`3R>dPsh~{V>j@TBS%6Q!@)=5N7?fc1@Mv6)g=H9 zavFm%y%H-fBkl%Q#j|LeJs%kq;t+Q7LOW;kv4kfnHrD0A}FS#codlzL#WSCyX)(HK3lqa>+Zb=Klo%(<7bDL zyQBXjtv{ar^}0>l_AXkrdFq@sUwpHE-48pr?b>gJ&dxmt*KgXT^xR!7Mi*^NnQqsl z9xRJ-I=(l1-qMYmx9{DybN}{T`?V+Gn-!bi`Dnr2Ek;Y;13?2v&p&kd=z)VrjvhVc zPf>_H`wq1oG*i&W(j5U%zqJ%mv?#pRr=z(jWBr&5BJ)eqH8ua(4e6^(t`VlSRtbC>hnROZX`JU;Cux zk8Xj066t)z`-L!$+d}tYKYn%d9~|KhUcCqc{PD_R1~})#M=&9TZ>&<0a;A8lm_i77 z5&SB;}5@rg=K_mjr zPJl#udQcR46<~5!Y&u|)4IlBn*(xlU!fpb5f_G@kanb_g;3K`jI!%ibTG!V8fMOcCr2{)$c3G(Kl+g%o+TYJ$h=fC)(YuTsBk*uv7EVSNe~-Vd3)MSlzR1&A)4@qlL?V{r-fqa7mjegp`6Q zZg!DIomKOORLJY;4$bB-`^}-l5g(18Q5XS4Y1 z6@z#{240aSVpX(p=et@ofA8Z8OV>uaS!$$0cqF_@$Ks7Uk<;hHDiRLy(f6DGvGd>> zmG6I@SO(EX<%fuRQd-%m{&0)82G;v76bHL|ozTc@}!ssbWn>;^4!R_X4#?M~3{@|e_d-orL5*s${1`dwQS@ivy z4Ld;%0-7{?Rh9eSxvI9cKiy>C;f|H-wu3C9<}Uhv)`IW8Uh;$e-TMxqB$dN!JQ6+X zsLPNq7OmX!{pLMKjvd>z_u$gCTQz>Beylv!a! zNvHH1@%4)Dwiy(aRL>)S{<4kGZ^P!@%9~UEo8<`~oyUJ5(Y=dq1uH*LtW>4asiz;s z|F0(Tqr{*2$t@7P({w%p6d8OJl+=><#gVoEUk;V@Exs-Ukhdn`iet?C59q>(zg^+u$(7oc(#TL+Ij^SpoWHcL41c~9a*&$stN?Jo*Nm~AK@dQ zmovXE=pbq)2hZt*7_Wh&DywfqXP}~kr;8r}1RRkO1HuAv{7C%@RS{&D*-)WPzG9FM zxY(SY*;_zk!VSuzFcV~GG8K(W4Fr11V0`A8XLKFQ%!ZGGJzXajOuvpRAjXelu1 zDdzHGm!_*zH4~Ig;P6{|6ZlBDWYC!FHg5gjjw^}qdY^`<=Z1UVu#QRC#lZuI{zj$l zub2E*HMyv`+_AqrcI+=8*uMFNTK&2Z zrV(1|{{Bs}-G)vm3qZE)_y=Mk(wgu8FS1kR8&$~<#Aw&w+e+kX;*3H{D-gJO`#&g- zSNN8$q3DFJ5tb6-%h&z8PZ8FT@#U|(r&WudjR%arZpg>w2*GH3_Br=2NU;7$iSNPV zDyV#<{hxpC|N`tZ|I_r3Oz*i#g8%6Ung z;3LUwE56&l|KQ;fla_cyY{W-zeLQ2{y8Q=_K%}K>w!Hn(e36=aT8_EzwU3m)R#(Bj zQw(y?t78f^=xMPJs+uwHJN2=#jC8mM-WV&o^lGbKq z(euERc+-TLD@r!$`|GM5sy{qfk?@UM_kyE|GgqpEcmL~SY3TL&&XeAs@GYLgaUXxa zT#)N`)jOBGt)J9B%ys1Gu~pw~SFewHceflPbx?R~@yacG_aCOx!etwi_)#vGO3sTX zmm@MryIFixs8W;SC9OR=S)9TD-U%ON`JPAx}pb41bC&q z+vy+(<46b$l^+aWWB$3NK(hOAgls?#ywiiD9!vyqB&Ug+_Z50s&RJ&G7)-}CMWyRA~g{0#8^n+BcsrOiGnJ@I1rNM>4J5tdE=G^6?;pKM!4P_ja8LGYd_dd+p2xR|Vjrj3*5>Z*xy-2~T8R ziEY9+*kt|Ye>!mRZ@?FQ0!--(B^^Bc*Woyv!AhQ6Btq1>Z-Z}F{7Meq!9$d*^GHtPn~zty8rYFcMU9i$AFeSr+ISFp8bcW%vpWQ(;xiirjEa=(m|;@tC=i8 zlD0Qw{5O{Q6l>J`H#c^)0tg4mvJ*&Z(PK)Pru}|fty8s!-or{iY}o^OG_Ld5(BD+; z_}iQObrLPIk_dn4RNmdK&yVo!sCxf9Vng!c-u`F-CbDMgchx%i(_Xabj+aNt>pOV( zs6yg`R=>HiQ=P}&A3W|GK_$=x11sGDWQTqI}lAC8>Zt|H)t z%hoI@cvPlz{Qq0RN7?`ACoO+G3-D31=Oa$FkOYpvGNI%e?%?{m?Jwg_5Jb&1@uPEF ze?+EprM;P@XQ~&@MFd<8yIr!e#2WKG~sa!Nnu|o79A)ymwC-`MWOyDE! zgI5Wipo;K^N(GJ>nojxZ{CRI7Bsbo<{>v4DG33Apk(a&irZ+WcU@;W`vzhYY?4)InBrxDkAgt@Thl}tp&ySx(sj^5 z7wn@KWgLu-CR9>XFz%g93TP~z1!1h@f|f8)VRq+6gGuSB0U?HLQIeEG8GZ8T^rCla zgl1k1FrG(}?He^X0-nw?<6skeMk7h}o8{P(X2AlcfQ1>{)$1q57bnTDOaINilJ+4| z>C&Z36fah&Sh@V=Z%x%|xS|&#rIP4WIY1&xWXmEOH2S*Q&0o5zc2w3o=A&mi-m!S) zFJXc(4Irxb_;EhcGQ~&#>?7%9ubki`Pg6a?M^P9^{HRsG`U*b0(&JVccW?>Is5{sA z*{4NwAefvt>wv_b#H}m>8vl7=0`ZZ@yf%O9Bp=br;wI~W7A*hurfvV=fk%QqngxCV zFWYzhPeG!sJO6IW_J4Tyqe?eF@dC+BUwC5N^rBjVmuYkV{8-z2B+h{{OOqtmeLA~< zC=Xs6I=-ARP^qTvJs20`Y~As9%Hr)iAb5m&@X=p_rj+Er-@fbb#Fg3(tb5~wuR@+; zw{{XlJA4?a{g=J_{`&_L%UFVhyad;t?r^8P!S}{h@c7ztceD+8eVN{Go_sWO{&)CD zAqA^=EFJPZAWL|lN3q6zdJLOmkzTT7_^b0W0+xM7wk(iB1?xW1u9!B#<<3$wmk^Yr%T)Bk?BB zy_I?=hft#6tG%bu(1=o1#JgF_L}!bV^q%C`WnLuN^O2Buoel*mHZ5A}x>BX1)ko?7 zKl87$cYYEFAhE!YVF6w!A60NfTAi#pfRlHAot84exY?l`fn2Gu#z!e>2eE@7Mc^aP zKT>nRLDVB-Eu%hz@Q@@oIahIgZ@#e%Js}=mG_fFsC+~EXpFQD7zdZkJEMP?3ay1Rq zNrNZk@V6-`-T`m~zp#u-=7L{j8hfw+_g<`u1@tIiP85Ra z;gtnA;7B}$^67j;tWA5h2!xhItTa;tFvxUV&_n~nL2yV7lwl~Cfa&5kn%SqMX4$}k zHZ~jtjvx${p*%dap<1IeM=-=kasq=)Y6#eAV7w9zt^6_yIyoE z4lAYWNrHZZOo$|eWPY(ND)dn>K7n>z28>D1(3oU=1gWezV_2Iih_V4W_Q5`yC0q6u zNcbrI7xs$Z=TVd{RjOF=;)RM=j1Z}Mi&PXTilU&-4# z4F9yW208f%Nl9j_)%;~Z_jud8pK9L>eb8J>CG5Uh@;jMkE5fAK8QQ@xWT)hFz2g7qnsr70!jUw(X3Hhhrkk zmtOAP}c%s843CqKU>< zB#9phWWf>6=ktTPkK@eq}!dZjIy|i{z-j?T&|O>{{LamuKBCC zC{(6K@e-xVls;M6JN&<$@KN@^`$@|m$pSo8jwmPmjC@3afb;N2#RGhV3lNZf)BtuY z*yj~voRD7^^N}NG#Ya$uR$O|1IES3mj=4aYm_;^jbMU>n>$1qGB)2UnIdkSr&sQRl z!q(0p0vHuL>UJPi@7}#3lJzy9ES!Zhl<$@)=bk*75XPwS4zcnHy^5MiqC*YPBd+hw zqy$PZ1Au5tP)7D0JCI2YuMFZ-_QVTt29gN4=y%SXIiZbas{f%m);2p@237O83^cGY z5yrF<3ZxjRjX_7C(ODd%FDM~m^;G-2gpKf#h(>S- zA(A7O`Q*w+$DPJh={(BAjfYy_Z;g`3k%d2FJ}Y+9LoL;vi=>6WR0!-3HTr@nF{}eo zv%eiSp{$yFzpFMtF^7?pO9~PR41M<1pBp{sdJ-TxOzRh4ypd##(zG1^si*} zSyWZ}_IAeO~nz4e=-Aes=B9kncaynmBm*+Z@F*Nb8fwAGSfbMbrg z(QwXLwXWIxQ?hq$*@tCCr^2S zjGV+FF-aGqP9iMnLlbFI;s7J)ol4>?>cVMYV=l$3QHC`;79Wu;suE)t9qhv&h7G4s z!&&58$P@S|7#}hispFwRO7}4Xf34BCh z*^*(rL9wtOPBb*su%&S;;XcN?nU+D?QU{?qc63$jKBuUmL9+4f(ix?C6#>Us! zzAj9Y{5n5IATHF$V7*)im>kT*0*smD*PZ$^dxgJ~Wp@&hij~b@=H`4=p1QVHn|yVZ zq`q<}2?D4E$L(LXHY)3_YTRqR8%i*X)4*ar5?fik>XiICt~flY-TdV~A65-$kXwG; zUkJN&e7Bb92|jX4CLeV;7d{g9(sih?t;mD2636*yS}_T4zrASy67eS{6?|`@q6SYt z_s-agQtu#)k`BUHQ02il9-O!2Kc)YvP}h5S)teq{iKLuDxYKcv*Dgb9e7EucM0}*a z_n^9rqfJV9s-#}Dj;UwCTe`~AQ_R7Wl6LO?Tgosd29%^H9w+rqC5Pkn>&`xYBr{DZ zZ_wePNDPQaa^<61j}C=S*VO5*_JWEBA5L2Q)#C4$t=$Szw(mZmc%7uUC9AfeBx!XJ z=?~R&=cA@4_(*$TC0p;?m7CN57A)VS9vy}n{^{ZdPYnY{LQYmHX)LaUeO9gCAz@FN z-0X!LgrWc%K09JIrqcRHsR z3Q4bWB*^3p+Xx3lj_Z!7a74=>By{ayEFolP5kg=dT4j7h0^uQl4A8}!UgV7FC8zrx zaE2yvKA5xY)6$kC(LF%>aY{0Chjy$1cQW6X=vZ8EgT893cXV!{xoh7%MV5%kZ|pJ=@f7}!I#<*>U#iK5EqNeX0S<{*a8V3W&Ftg9Nwl7sf;L6@#4h_7cHH?Wc6z+ z-FvNy4fVQQA&8WUeOT`^dP)hABY_nQf;=Rsa6{`sj+YTQ!AEVM?Re*+6MUrPwe?4l zuU@xTijS(~!AIM6{$1OF^(@8#DNa!^K^5`yjUS~PMG+YSACBTjzl9`n_T;}+d$`5# ztM|+BE#Zs^jyiZtSO16jjv5it@ESk&v~^7De)zvCJSa@}aH|Jo`dxEk;3QmKJ9<8B z*P+MbM`}>C8&p@qUNn$&Pqm(>GIh70NeRBz{TfXAqQIIB|7z4sDz{KEhwnH4)3mSt zEHMuv#o(DCLC%|HIJwrZ!$&*vkW* z@))2~^cXj`6S@u~(o0Y&XM-@(oJtay^Ax9R8S8wyHoB%v(3X%aH_}cgFqRg&)+|g} z`f$?s(`}V^%M8in=h{BQm=p+%CcG#OPimjsMYSVfW;BKrYQgKEuxe zi_*s!qDa;v6)#q#aN)xFi&eU|eA8>?+SQh8CpK|;*R|vSqXz3})NS*8AHfbq*eW)A zGnHI-B8@N#67>KMp_$-|I&Zx`xUtS-FMSO z7W<^<*C{loJVK*qKYYH+Bu`Dc>B0BlMu7%B)opn2jj@&&4H^IK`c1om&-|r7TzB_C zsFEumsSqx4PJBm6I_LhfN{3%p?HK-kS-HdSs&!WN4k9U}Ag4}6g?nH92yX?xm_n6#JzQL$#f#@$c@+L2_IHU0C&wSF)ZTJZvrBlPtYX3MQsc2WC zMA0He3KlJ!uguNYUjN9o)m}|KK-R7A%axLTU%kJ_yjpOyY5V^|4W4Rx*DKAhsS~A^ zo%F#{b+8o{P*YB|YOcPR$lGJog?l~<%G}oexh}U`xsxglmuvmHD8DWnJ_07M_Lf#{X{QM#}go4bZNT@2Pf{2Amkr6xg*=L`V z8UKImeRfFL`?cd`@uM~Jqw%wqjPQ!6E%!c2bgAJlGkC_TE*@KS!w_Y_ixtTKCyS)y zC|X*TP_Pn;v|jv3eTFPQ!bG;%^TKm4fBda?zfj_P&Q(utz3(MaIRQ};rV&x{DkbZN zyfumBYW!%)$4ULV-PEr;JE>py_**LG$*J=)BUR~sKkD2+6e}>$MRrr+agLRPk23nH&s? zl*qOnn%`bF{xlh(gd{yR<1Fx3dXGcIdEBgp=&O|kCdT){KemW z|HFS4JW>cwWd855BsMYexVUWD2q zek5omwxSldrd7JT?%rk!Ri#tIK^?ie3C^D9EG9xS%v&dZgkB*pN1nTj#Yz?jDai1_ zC;vrd2K3Eql4KRqpD4_@x;%bVF~1HQQlG(#pRT#P_1M{e+4;yra3yx~&$NriAYyX= z^yRVVe}CZVdkNUBH$U3-sOyqA%No`niS?i-XI}WoTkn0b;=7;lkv)#P5#tb@vCKy$ zgufkk<5Mpsp`6EGcyI9EF8t>$r>F5Fv_!ki&{UU)|4}EfB4yV zB=x2I$V-tJdCaVPF)YUsF?2~WaQ#vheB4y;KYH5gB=0}6$|-+8Y<4!TZGTQ-%$bG3 zd-Z7<;z^E|!j@;&#m{xlkGdzu$gRpf&>cL0CJ3Wgm*kZ|%E75gu2!DE6*s5EUu3B% zfM9WxB&+Vwg?4PvJIQrwXefKGnuH1!R%zwrs2z`0b1LUYn+X+are!l$w#F*g!_2);sorS!pt6)u#VAi7R zhhBbLe^t1PI{%Z(2?9M{;i}4kbxeqiV%ienfcACbN5z=Vxg+;KP89|3NTOU=#~X{( zrkj587-5}aR^e)XtHh5gQ=dV8U7sE1dMB(EK+4vss(r(KuUgP_)VcTIBi01n^5E;JhZnzI zeA9D%cU$PKuj3E8QZeoCfBZ=iyc_O)^|XZ#AvnTPJOBNfo9=%NKl*g}w|71E=2;g$ zOv%yb-RpHr_|8|~d~bcw%@4djbnlDR1NS~7H5}B+6A!xV))!8k|G*J5@3wGh_LWZv zSCJHo3Vy`A-;O*7fs&zTQI%y=AAOb>dHSM5@M3LSXMlJb4Z{V8YH&ZZo?f`KyDTmmO| zf7j_90?1UG9Ur^D&E4EWp3K)DwZk1YlT&FR2?CMfk0tf$-K)?%?9W3EER36(1d=k* zhwi*DLWGidg^)M(eEseJDwyKcsG|=&rZRd@-c2*7*M#$qI&T-jrmt5d?@P4`N#y}0 z2$Z~gb?JZm>YM)!<50lign2unUEVHq`l4-@zW4t)D4EUshSaZ%`V2cBewa9mgH8#l z9Cr5ZxQXPqiAPUWX2CKj!JQS~|7SJj2>55^j`)jr8);5m1*P^>IZziOzq7)``4EKx5#<(K3q1a@W2}hFaadVpfGGo@2BgEi7|LXscsmT6fFa8&;u>Ac`{%?Nv%A|g~otbdD)muqE zuF9`FebGY#H`oN$pfsG^wu8>RU1e`n!kQrAm}0Ms_3Or-=k2SK=sx}8TT6=Mw#kcA zE8B9O6Xrdjw8F=qf2*3@o9}*ZAU*o6_spvw%CGzW$DbXUaL7NHCqyN*bn=1+y%7nC`~1uA5+j#< ztc3VSpMUe^*Wcq)dPM%X+4p%RlT^J59xM0Z=6uAD&+x;BDYVnPka&*{Ma+O+kf*oqysc!f7 z`~UUX*M6h;IcrOnDG6rv-hSpD#~-lhx}ob?fp=&mG!+vzA7Pk ziE1ic3-n+^h|G=mzqb7$|L8Yy;XWtcbo;|gu#Y<)SrVykkze=cv9p?YTHxiam<1-H z7M%EzQ`Yiqwa>-EF``8%25zDl!m z1u7f<;M2>Vcgi}Cw?Fs5 z2JnE`iq$$*ZV)oMu>q{go9Kof$nv8>g9cfNChX|NWdF30HUUj<)N-d&R4vV>Xy=(> zHLyRISqBezJ5vAtE&Yeq51Cju;>g0-X&_%ufog(B;zVK@*o2si$ji0&wCr}&K?)RD ze6+@16jSnWABF6!wNdHrgtopm)Ef4IgtdIWZ7*yTV#qE6dp5sr#+89K&icAUfk-zprp#g9PuE1_s*lcAFK72 zA{~F|ng7`HgaZ8+wocDmdwNn>9 zC>BG5ggV40iO3Wyfzu;Yq^)CT-%CuM+r(q8SNhvoET(zq`Q8!cQdqW0DAz<`jb1^{8vDT9Pbh{S@UWl}rA8)kY{siD5&3y(^E z*1Ccpt$G$)`u~l7E6*CV9>%1Xuj$%Upk!xF^4*}eC@X*7L~|nKmK9Vf`1); z0sXq8BOF++KfEdmrboZg>%>3FKPItFX>q+HlT}-~Up)JVQRk{);LSw;zRfxRF)rZ| zq9?x{ksR?ic~wxRU(RAN|2q8ae;Gbq)i}YU+EuKFBm(lU!;=gDWtalp)9t9aO`h7U z5}_iJA@N#s^4F`vLfvF%vcL5VJWe08*5>;e4-`rI=+g>Y?9;2Ue`A9OWoxWim;Jf! z3Vsy#M+I`To9E9P_eKwcu|ZBRF)24=y*&^=1?s?Wx#gC5{3v_3-Td~G$WhyX zEsNyn)Y_zS-RjYV3~tPTnRc=9hP-6_Y!t>Kngv%6dt=%E_u;4iMFBbi9Sd{X3m&bq z5SKwfvj2irrAHEmRs5HgTzN2*6hk>7k47b@Rvk~3w6pW8{3??)m&zw$pj2T|fIK=Q ze4~VdSk-BZwv{Glage~7j*D0cY~g6_j1)TdtNzuMuXa_DT{0jQPInSQ*Up7$M~bl_ zT*JSF7bMhRWjrW3QhZ6!YAyaMpD?MFA)%GdOyrBI&J%xG^)FSs%IAcO@upOAH9bxx zuO%wcQ&CA0&q|eKn{#~Csj>@KZ@PF@YIdT{g(dyXKmO_gGiuCPg(3UZH4biQY>I;3 z)ua$~EFYNdZ z<>}UOZMlXG?*YT7(fDHergZg$+3+3Q3|q|k(dNg4D)(4oUE6>mjYD_owawABJ*#Hj zDjW{C*Ka@53yiGXnRL>=I~{R|Tsr{10`*vR$*-uaryUV*@gVVJ$UDlgg_;@RSw@IJKl4LEVsNW4|ub{7JJtc69e3Pux8HvIZMWTa$|I*U$tCI=uj=QzEd*eEj!q&iBe8F(a#uR3`WLi?9Co$6xrJ zSJsX?@E9YAEp9TM%{#JLctEwfZB8r<-m|WGt0-7kJvr(`eiTR*i8%GtQ(@_M-g)Qw z=by)tZo28Fn{U4PiYu--`=mSDk@>H z+r4Y&&!7Ls8*jYu!VB1eYXjHCC1e!rnmTpr)mLBby)a9bEP3RSM{c?07JY~MtPU1) zsiv)p25k6)sk;p2qmMrN(MKP>{PN2NQFnC8QfqIDL5LWpGbK-dHAry4&&qvIlCBOOwr!0Gn*rhXM3vqB{HeF z<7w`ttL(QUnYxi=h^5zR&cSHNDK@0SSxegA4-KwO&9g&Wi7H|xGFf@2VhH?QQ(sc~ zu#7TbbsSX^R^$k-*GD=N7ZG% z^~ApCHg8%UK;-8X#?B~=IJPiwVqMeV`Udstn&MTkRR)hbmmj$&!mAMVH{X2o+;h)) zq2zx1?f2Ke{?+Rjci(+?oWczqzS{7&^=K5w0i@qAZVMMKtcD-C&?Zl8#*7(=5Bzr3 zRab%KaXjsaj^hi97A<<~t+%L0CB#kk+;dNTx8aQP?p%_}ck>;lN}oIGsH1>YLy7X> zm3!>5hramBjgeuf7r~EklLsDn;FC{2L8E5QoVox0`;#%~wsK!}O5a%sgW+X!=FDLp zw_k9<1^eu?&xQfj(K;6yViVr0Mbk~+jdgGeVm7SpzylBTaKOe-lJxspiByuu$~6(q@x}oM9DtBg!vCSRN^jFZQcTbbQnj8MNt?;< zlvex=JNa4b<=yduBu&So1DSHJb%ZK?Av|n~u%Vu^`K6&!w>#n=b_X`;p-lfMu zTb1_bV%^FErc=(3DwBrIOzWeSw5d@sbT{0dQJ4GP9i9Z>x%fLI4TLG_nB zwW)mCR=QKtXe!z1JK3JL)4EfD_c`aBBVP9N&p(T`LC!Ib{$^te{6pBof8KQF?zzWtVLKsCYO~H?s|S2r zPd@qN8*jW(ccM{$DLmthGmNRe=(sW6Yp=cJi$3(wL(%JOcN{Sa7@twVeSBG-eDX;G zHm7X5#ylTsrop2IKNrEL{1rBG$)}%w`rdo*nR2+Neyz#u7=;+?E*j`HHJu+{s|QTH z_z}qKGpxg%coPz}?5J;lnRPq#8hK=~CPRBG`ZqOT){{v@?S!OWL{e5RDR7t6p!@B} zg;8X06V58kXW*vg0TJHw3ZqUfY&o^I|MtBb`z6)tTAJ4>tuFmB?i79$a0Pff{`lkJ zWK?3of(6h^qyUuzm^kHZcB=^ITpI{5D_O44ExV#l2b~J}HSwd+?}n}k@`OV^V1S4K zI0}KwnnQfbu>oO#P>=|i{Njr*U_VdJA<1%8VM%#+90}oa<(+thom$DdG4{2d?XP`D z@FN)YU*POLyz4xg_e}qDC0kOh2-+UACG4wXz|Ni^$ z7e>Sm$b=7s#NQ`7nJwR*tBGoXGIbAFWGXE&c6p`-r&`n3)i)@RuM zg|X9n?y{pz3pB1v^hy$4$-kaV`ZnKj+&o7uS#Wfc1xK|_LwonBPfK|xA??XU zEBGXCi0}-4^zFCbg35E}&UG6NWJ|ynNG#-K6L}CVO$d^V4XhHRa7l>84z+-~G%au| z#O%O?z$b<2ZQ3O^I!UHF?MOfZ9gB@8!sYx3p`%JJ5M$_f2^p6}>n?;yRbzPZ#TNlQ z`9DGfuwUA)9WsoB8$HQ~1Mwr+5_l#Czd2<~O=YBgP0*9}$i5@cY_Suoaf)n19p7gO z2+GfC({_X{w9d&43-jy*Se3E%*=L`j9v7t^bxa`u9(QM}sHy8u|Ctswi)sXf5w`?t$C`8_WY^&#oDEXl>tZdo>QIZ)|RAYVw|= z^@|+EZ*d3tQQYD|T)4$O5k>_XJunwP3e4|RY$55^>7)D~Pm+P^VzGpG-+udT&)(x% zdKNOlQ82tm%^?31_&uYe@qyF-(Qg$Q&E>~l*8@l2^k)UgVU!^ z$B!81i2>)ZpOSP7+Z;^!kx3f`3S6Fw*-5%ltl^OIBh1B=<|~V^cmq$Av1XPsBjl^; zEYCC59Qg9fFWD)_PZz>+f1UEo!FMED&+;R!N4{Uy$h2MZ_G!>Hy(S#|$d}8JU`DBM z*h$!q$!6&NhRDs6eV3Brv@c~+}M2M~?3NRf5pAbug!1_$x5mpt_40X3Wq z9=pneYs)C0GUP&LnkV5D0#0u3aG<~h4X?lcIxIv?=8|XE*ow!|2t_=arW0UR7Qmx# zXkVkE7}RPPD8*}-CyoF23@&R3eFGREd;n%anZ9-Wpim_R zqSs;yG?V86z0fYroepgDMWPF|$?Yf)7imuV9Lph0WX(WGq63359TAxrHK({mkNDie z5C>gI5~G2c0aTJY=%DTZv@2Gukb>xATyBhvf-dVgluI*erY%fI>ma?+Bxyr2(m@Aw zjTa>toDno4gw+fL{#k2!aJzxvQl~hdPCe4J(Z>#`%8zu!6N8E{UZ+xiWX5txSYBc_wVavqBO$Z+Hu=&; ze3O5IP?TKQ&PNK(Izwp$`JCUtT3dVvwHRAy$nv9zURCT)+MH_%=yl4EFmXphc`6n= zgza#z5E4s}U(36~V{t0PT+U$5G$kbL>A1%Wrf&9uNr~qC;|BJCX>VScMcpL7&KK5n z^(3%QAFoYsjXP#XZkp@N88)X2xVL%m_#}7)v1~dRY;&bK$@^r_`{U?ye?MyG@3u+) z{bAJ1KaDw00$#o%DWBdO+XKbNFMekv)NMJrw%>$aO@sS1v=qZet-?kfBu9R>I}$%~ zAB1c{W%vi0wSltu5nK&jqdblv4uBk}EcYomh0+ZcSt#cV2SPibAjIowzqg+RrgbpX zdN?e!1e|-SObmEdM;a)_L_G0^(g7!TVQ3jdhm+j|u>kQ1cmTK31hxXwM@R_qiTDxT zgdIR)!dT!abWJA%=m#%TlH$p{8!MYk3$IWvWCnlDg@*{6h&>+=%}87=v!quoe8s z02w<>N^lL57aU;^#wxgjH0ir^G84dDa*(fR5X&&53_2IN7R4|??Bs0Q z|6mgy-h!q89#{pp2p$0~R_nlx4oXo&0VEv(t}u)pgaW#gMFRl4jRIXZSPOvyK0#cl z%tx>X{)Chy&S@pY;9eXDmczdQb;kiJ@d64x(#LT?ME7N#veZTF2J#mklDUTs;Y}$& zateV0#W6J%=kNkegI@0JI^{1j7!L%pfvJFK$-{r`G6wIkvffj191Sf(Ku`e9afpsP z1?*`WT%jEDL>@Uu-~;~DP58knbb}9Rv!8{R9S1ql7hUs=T`C%H;Ey_@X`bgRPCz}J z!Xoh_rW!;Y7e^E5aU4uVa~#wcJ<>0ZWh#RWD@n%%?0CtOd`b*@^xY}^B?jGJ=~Bi> zC<;4cmC-aA7#7)Ryv^r)f+N!-G!TiAR>6>T7EyK3NQqv#%C$C3!F)r?*eTYaxpZ|8 zZyTUacV;Mr#w|M%ECbO^MbksjiZ?hgxOp_~uTDk$D9D}JVyp#HW3z9bo5T9TT_SEe z!bL7IZFFaq;67U91PYCsUTc~&4IEak`;kYAN~}khS!kMJyS@vNq^JA>OB~T?w5w5? zi5Ux1orUNy@`90>45^U}Hh;{n)a`Z*#5(aK^4#L7g(f^~(J6B^RmcVg^H_uHF%>Boc`=5Gi@9pO%Os7hIRIK)ZQmK!Zl*mi2>J0vpyo@QK zTC4rj#7e6=qlqdzn2T*l4he$*UrGzKYC5Re=Mb;<*EQ22b^VEX1$dM?Cm=wUD zg<*OGnBiqmy}pQLAP50av-m-e^bu&3VMU$+6vB<#;?=%(NfuKc!!Ck`$)G92eHD7E3i~f2!2GH$th`&q_0Vcku+NjoL=i7FL^j%!V8#s z7J)?IVKuAU!}=QKYNLSsB;#LXP7XZscVxR}gX&3UrHLQS|Z+pm0oBYMDh(;P@|3ckXo zx?jJ4+DKcTUsrzL?~)@);ky1!14s8BHl;SHT$jHwrw8++VhCo|i2W`->!L?qd;7DW ze^G$+m+!v+Y00~v&%FHch8^eqarDe8`4LskJIx<|(3N{0f8$O^T;tkx;8yJd?|u^( zZhP=myB~A?-Y49+&q+5=I_c(pPr2nUM_kjk>-o|Gt28ec>j@qZGxE<{ji%LXb7I1b zhU}{jLtXEtKD}xi>U+1etgOROd`PqY3yw;D7(337;zkUgKr%ukfDKCGiF!Gq0G6OT zs0LPqDlr9*zR?iq*RyE2C;(FMBatJjf=ZA9hdk4^i4?$Zu7w-HCr5xfpxQHMjS>q< ztjB^BxE(A99fF+$#$Ur+{7@w`mc( z6wDGh5QYGc1Kc_eaEb~E<)9ugybd~8Zd<7GFdteLB9W%WOZuLb^pQ3X`6CUF^ASn; zgz!=fdR#)4xq%sR4$N<)V$emnObz_z|kY za()nQ<3=(B7-<$^juJ1CP$5o)-HJAweZ!%2Hs_e|f^H}Ver;k?l1idN_7O3IsMki5 zmmJX+ZF&0_RSHI6xzXOJtwHB%Ak!g=mvqz-WyybIWXWx{RAK|K=Eu`Ji zBco=RFqib(6i(1VbdLv6KbLE(;#>;HI)$up1wZgx`kPSF7fO&doZVkOS(Cz&tMZQ< z#sj8e&W}p&vzx<5^r&y&{tbh-uNx7IkMjJw9?XwWnA&Y;9XtEpm)`vN`yYP(Z25}k zU;pTiN0*2n?RCP9>kvOmQsB-VJLQV&?|b!=FTQ=~>1A8&dC|X*?9ke@nr&y}Tu9L5 zGj3zj+wU)5{?&J1fBQrHyYGpmSlI8j=};3rfim>q*|l!&6)^HjqhidcX3K;A+_r6@ zVQ^iaChJKX8yi}ho2@GCNRhgBew;TXKZ2LsIsq-b0I317U_3y`2EdC2z<%!FFpt=Z zWiJpK3IkE&IO*mis1IwQHuw?n>{&Os2!K_TgsZ_z=}-6(Y8K3hX4n!{@z9$RhS^f^ z;O34W5rzP91mP!0xFh_CX8NHxxnU4Ks2m+Vz@GJHC2(BXVl8em|v!e;b^P7GxX zy6I6e=y&%Vt~$F)a69{2F+GfqwtQJQhch{lGeuhQj*fIKy_P*JG-2d1 zdNdIuBauFn&Gwk)iiB@$?`b9i%!_&Abs? z$*B;?|87JN_->l0dHkrI+wLZLDxpVx`!x*yOWlZL5-^jmKWaDjv2GA?gR4Sn@T1cf zKD6wEFYylSX0H=(8h6l@!zW$RcejOd*s5CNQ_QTZn=oh36K;I!|EZVXU;g!XKM8JSw#CoCyUUT+=KQFePp~S?QM*S72YEyCBe(28VlW;+h!n`Lvy2FZ z!EQt`FcH}@9#cbT2owk{pdge0CIOA#4fq+}NRL;)LxT%bek5?SCVm8RM{XE-uoI^3toTt_t0U6Kb}Q%t&U3lE++V(Ama93WFaB5muRB=PDx`&UAUlaWxI0(~h`_@TC}v zK$58?rWUzj_>nng)^RWPq4hAH0d~TM;73S=jzoQLM1!dz6Mwmpu+a&Aq!kQ>PcTYR z9+{JZaU@+;{q!i8)C47t^DS@7uk#?n*N|;y(cr;@Q-0)#FI3tceTgl46q@a`XZ`q* zMsaqrBx7Ki(9>1Is@A^0O~jOuP6|*Zy|o zIk-vntA_|%a5U<`%jaGF6g@A#@$oUU?rqt5fr5Bdz~f2|9G~#Ax(T!UPF#4yeXmBq zXz>g0UU~bA3$A&3{?$({xc2E|XWhHi-WRLYu%1n9a4MSHS$vjKEYpn;Db_7oH0G?D zktfy+JG^GdzJ&oh*S3xB)ik7ceM^0PgYtB;>C%{ygu1T#Mct762#j&-1Zmto<7Vv$ z*o@am=|Pb^sfNn%BL_ic56RQ@N8~-(PB$N23vdF=pqgM1Nf0s6R4Nub0iQs=$gcxd zaUuzLaI6RZ0JfZ{h+?>$<^XkqTwte%*ot}q_8@DV4a>8CVSDJYo&376mRgvB5>`24 zhrw2GpkP{oMbot#VK66H6J+g46u5I$>bGp`?d;Rz5_%9lWCRO?uKC~bI5lO;6uC^| zGGMmVTUa5hY@NuDG(=$xx_!OyQNEV&oD@o70)axIB|$?$6WNKVu7C(&%&WQO`Q;Fwvp zVWjn6I?l02CJ8Q;|THElWU2C^Fp)ejg&GYLjA^eRB zzZH>-%(RjFU%JDg|JeEO*Y0}cbvqwTMW19mm>$}_eQDUy~FY|`%dEpL+U47{- zFMRy@x8gpR-SYgdM_$`+xAO<=z9?Bel+;F8%RhXIHh=d&?bat=eE;LmzPaY^mvJSz zd4C?evUmakksx#lBV*eilaI-fIH)1VS8Gchym7M{{xWZ;zhCpjOYi^q(=Ttn`-LFa zwg+7~c#jJQ{q2G+_PDU$ZVQ!_Na7BOg|qaxMDwr8SIVrVBWvwxF0d{hh?PYC&P}M0 ze|{+ZT#TJjGv>^iZB8zXI5vqE4c$*wxSC=&^BfZOpVORzyK%))VhV*@E& zNTn0cpg2K-NXYg%QEaw)&Yyfl_Ahv?O@dL`>Bl*x)ZbQW* zgn5ZGr4b?#REfwifWaJS2T2sHp#t|0cp}j2!t6K_V6!2h)5b`s*tmf1lu#wdOeF_0Hu^)7TL}BhpXx{$ zN}aV_2ul*k3vX9+UB!b`8AsFA9LC^uhbJk~qVJJ)XGprh2f_lq>yG2Wj|{Pg04~?} z#J=L@!f?1xDL;z3a9WQsN+oqim&vF62qE%qGHFd_`Z-PNCOtusqSqCBksc&Nn4Mf9 z{$+MWqyE}_GztQIz93fcX(-E&IGiQXo$vrtqdQssj+jeKMd+$oe?(rACz>p^&$rUo znc8e$_<_yVZ5c{k7Mo)UYMc&t+IqgTu{>ZbObK6DKXgjF_#)@^8M^#N-VGWk@}s`> zTkMkaqjiCc8w#9{PnZJ32L9~=1?c8q^VDq*zj6PQOCNlC*?mtgz4f6t7G3|$0jJ&C zvh#ebL=o@9&c0JF9QN`34?q3zYwvz}uM=)UVM5hfx;cK9vfGV+nSbi} z55E8LS4-df;*1L(?!DcdJ-DZ?Iq_8lzG@qgQT#=ni2@!JvS{C=C6iZf7HyfA5{_jZZq zmPGS{)?HUA-*N7$VtN~D2-e0Z*W%Aj;c`P?Tug)zNx}8%qOoTe#+*?Yd0fqKp`!h2 z`tMw59am`Hx~_Rhucm>08e1D0WYRS>H#a7==~lh(wM%10*`LzRNR z(WUojAP2VejNLjHOO3!wzzoC^G_i&V$`wkmKqgYHNX7~XIX1Gwz+iL+%!c7@u7Zu> zH~QU$;a&?d1e-#VLINS_FG)6Nod#9)04f_u>2hM8>RTQHU^4(&V3p&6$CwAx3O0d= zlB1a9rk{2vy8}!@s*o)k#Ar(DGlVwq6465gg@m9!P3w+qB|sgxwa%R-WZ*-Z0|d$; z6iwhy%u!T=BxGI!L9=F*?`xWi08}m#3o|Y}EGbLV3`Rx8JCG(oR6d*WiVnI&XF(c? zTLwj*n+|4&GHob8sa!HX6aq7{0nSr_Xk9neF_3-+gd=NO=Vw!e$HdNznxG*V%ucid z6HJFP#yWu$F;$e66AD!Lg1o`v*nsi;NnRJi!ni6XCo@cY5gDUwm_*Y` z<}l-Rhn*C<(4zoRHnlz|fBLkUnq9zNr)E%v-n49kv>r!9Q=)P)ZnIrE-fkGjrcC1S-WQW81(k8uefTp@)VVOwlC^z1uNnosjXr!RWg-=k;U``6=c z5DV+IT|P^@ewGF&^131sqEV+RKvy&3*qY&gui0{{GISOe)%M@9(06QY^H#NeT6^{C z-CIezK6OnEeVUsRTGS?Qx9`fAy>2jO6u;Y@&X0i4HSr@zNeYnXy_R@Oh>{+IC;^kW z34&lv5Qc)q1O$RG0Zykd6sI6kYxxB=;7k|7kZ_%QI=E#AexpI&5ket%j#`ok1>wL> zbY}Sx4FIj@;b;Oe2E*9e(xPYS0rH_%(H3fo>~dbSqP^OB5yx7c1J6JxEx009P>@8GtB{zna!- z5Er(@6p&eMrF>TF&?eV``c?8HG*)z=B0r)QKZ13+S9Jx0XcH_mQi6kw;TCi$1|5MC z)WZ>AX-tz1OpT#5WGI!f2I<2;hFS7d1Z*6_1421QlQV5{ zw`dce%KEDPeR{Nu1>m{nusJh}0&+OR^zYM+yDRv}!}rW(4p83cE_j3|vew=nwj!q!LC44wSv z!F$&X*saiSheFG!+WG;tb@g?1wY}>KI8l9{UJVWPvgj-?$`)QIrqU&U(w~|Qw$q9H z$UV_BdC1e_--t()03l!r1wd^C4p0)97Q(TCg}`2RfjLAJ$O`a-mdQYvMcFS98PBu< zRL{2|fA?ab(d}M>T$Ef$CFv&|nPb2zhT_S;r{A{7#M1vRRbLzj zbisJhrDvXb27}O@EL2M|2IX)aTq<#kssMpmNf&BMf|+94z%7N*7Z1r@;^}>$J1wR< zU7}y;fb=upX?;Pgpwo5bN1>25i7t>ZZTu4(u7p$YiFiR)En&D6Dkh9jaDomxnA(=^ zFxYV*pXVi&fvG_)Qvo|V?w~Rns1Sr~MD*QX-nPudAo4c-BxBGab`cPihYUMYN2P;q z3WcM{+Zb=i*vUm954|(Sd=Tpi8Gki_F(EI+#2pYrF*T!~HMN@kv^#iZ&}tTjKlMmF zPNN1+i#)?l^v&0StMT0EOUUaT;xB&^yJ3c)2`aSTURD^7r z(wYeGDJNny1@iC(gaw&0rfcmHBW-dW%}nH-bE4_+Bmyg_G;rWRy{1a*GTD4peaG3E z8fk~T$?U62KJ_XmFwb1Vq#{h|OXP?a%MEkfL6c34m2;>vH&V`?%F}6I?|g-s;j1D1 zir|~up&^ybcQ%#>41~F78szzP8|*&b9UAK2KY7ku-+y%NR#OZ4`;WR0Iofu%^fQ@k z-V=1gy{~@x_4l8D`Q6obzC7WOe~8ZX-SvDdM(pO%XWx}d_wDyTUUj{7axqac^-gr@ zmIq%K#`;nI-n(CX{MolZu3n1n(=S%Y`fE<=In11R%=HoimGZV8%0K+>=OUGg+T$O7 z`pw6mfAisI-#qvFM>8*9EdGU^2|SHD;IfNud`|W6)fFc+NvH07^v&Ilx=xlI|K#+i z%RDd#IjY%WQccsa+TKm-a`&ol?p@!k&_Y8)Q)8n=MNQ4k%~5h8rA7Vv^$S|Gaevu5 ziyyfcgD$Wus2_Pm<#%TSpfVX464(Q2VzUqFiCGY^#f7m$SlnloV5xjG8j|8WB(rKm z8gtPo8Gm6>wx#Ad7@O8zXrn=kp%#i0&hS(mv;$cc2?t_>i{CIaLm%t68ce zw50ID33KlEh9fI_o_X~{(Hu46&>7L6ch#?3zCv1>&=1nFs_wyR`b)<#SuQkN>e?R1 z-}ulo%UrH9!{`Gq|Fx|5Dt;t@wc@)ZO&T*ICKxpL>ZeXy^w4$pyz;>(Un4b(UwCi7 zQ*S}dR2P5twGY$il1nOX68SE>^?9`>em`oaLJbF>b;l#mzN1rbyz`mh*Fn?nICl1Z zv#xyN!KdH$qFc5pJg%oXKPnx;&Sdv<3!_e{9kjdkL=E-H8;i;bk@PuR%852gsHo!4 zW+(C^w_xB0no0px`AwNXDif0NH;#8izM|T&#Hp|?S}8X#du<4ZJg_GrQ0kG8goo7_ zN;?2Al%$uJ_r;NHm)q$$fFURV5=&UZ&LmR_<#_f^dHeb+HkuxEZIuSNBo$t3iv(=t zUQOH0YReiB7iPs`KeS~fW8d*|;fl($n(cF@c@9O32C6n->56Pa?rjHwS8OOf82ZaC zbfm;cA1jKL^r#($C6d|xruJkHmfMgOtGM4z>*d{Pr$?cuyovOZ5^W*rAaaBhi!2L` z2}KE&T2vKrv8*;-bI>yiTuitP)%D;)fEe?t_~0UYZN9(3JdpFFinrQL{vdt?OFX3t#q2CGF7`MIzPLiJb)|+5=k@jhSv8#`Fi1XPmh^$xzWK3q?X0%o{{@scEJtL ztoZInff#H^a0fp+ebGbjew6Sdr4>k4$&W~?P`CBIm(ILwF&gs1l8?P-cHmzZC6`B+ zGyF&ZNQ&L-Z-0tI{e9-$Xw-neE;{h^+wOUMsZf_BI&@~#ftR5?Vpw>Ssu8M5AaRHu z0)<9-A*_S`srY@#EzemYr3QtzblE$Sg7o25`<`-(*0G^2_r7?_nYT^9_)+X{^yDk7 zQ9}Llx!PqOm|HvQq+Ww|ZD<`7)#sF1NZ8QogsA&)qU;ZKr}Lx0NELxl+@Mo|@}2TK zc)3jWNLD_3ynMgB>2|J7Pr1>16tDh(r6p32tN>E1078S)QkiroZ8SYnzLUz7>|`Y= z2i+yD$x0GDl0Kw$3!}s=z(^Nnh1Y4nq|x+aMJ4IkwYFG|WLBnRzr6Jlf$Ya}VMnq8 z*?p&spx}j2k@Pdg@gz5@SSU6jnAH(yW?L!QFR`%XZ28BKFF#&>B-NarN{`q{58Bb| z;1L33?QduW;q0~L`)g{YTr!SiF3+#a-efnEeFz8SX>MulGhjmPHpf^0mYgmFW;r`s z=>hym0fdWgdJf~j7u2Rpe4ebDU&#wlBr&EVXWlJu4eyw7>0|Qi{$tE}S$;&=qM>RA zi#Cj7?-OrQ8BajxhWlT&@~HRrbAF{E8Ga;kWQo)H*F81y=<6&UO5#>y&)aIBi_g5^ zkyqdP^z$!Q;6&2@dTlq`t7*qfzI@E&E4==7))kMx^Wm2kMm_fYy9b?h``9U0sM0WQ z>Xm2|T7=w*iz!#`l$aD6_4WtLr(N_Y88mJ19v5u6_eI0@xmYo9X@|)~UFC;rdY8+r zn+GP$RnW5cpuaS=4eFjjqIQ0tJC`4A#G7(gG!2r0b`pxD{fHk)`vJ^=G;LL+NS$H> z+%D6}dJwBogpDlHnKo@2Jl~~_c8cZQPzjtSV@)Ll*c+U-Xvn_wFvD5`zq_IF>tT|9 zxeDEonJFFACaZ8wo4OgQpqS5TBI0_q*uhKUdxZ7)W+}^H@sycw$jaHP@p2qFvH;40 zERPNh<&-H?*k5HbVFyjkFR#)AIX`OWhP!E>k|ERD(%jH*MBT7hf|N6qZsCF7jheaD zq>C@U>3K{<4LZ!_H^UXs_|-NMpZ`Aeto={DMUlF1SNy2@L7yGwVMFV~kBYQQEr?Uj ze^7}z@f~bSdF^EJQQG3_{7C7%y-&PRKAyMM3TdHH_ILUFwRbOm>)Y>sy!Y|95F+Kf zvAo}onDLuoXZP8D&f(|W^~T$uIeYsfZ-{*T>((=VGdwBo?RB>zM?u7}B#a3w6gAT? zOOwQyys6epZ!LyGqY@sMtUSttN59U5U&kmNtPbu>m{&LQ*ggZcZE5T8_hG<*jZkJ` zy?=Fce$@U=AASSX&=YIGMIUgMu6|w(UF@>UE)u{jeNyp2#L7oefPlX3TbrLP@qn@8 zJwp~HtQDicJvp=M=xvDs8~9`NOLCgYgK?-AAy;ipn?iXCCn`9PPqA~OOt4_7s#svJ z$Pt?rA;H(;c-DKmW+++fOQ8UTWLMQo*j&z}vRCE%8{PvY{76o+0*PvY{?kU<)HX5I zRV(e&r;oR;r&;dnebdY@T$2ZcklI>X8e0eT8nkm^q!3bGJh>~8XVt(}sRZ$(i*I^P zc<9A9KHm4_n-PsH62_1I$ClG4pMIMF(>E)`kJg_b;U+>wA~jdu{vvXuGQ-p}Z^w7q z;YW&%3jis?Am|fT{cf9cw%Yq*ks~D|9)4!oZbx6Ya_!Q1uRuCiVCdLc_jx6gY{0t~ zzd7OHtBMh;(%4p%$lK?no3Fa#rRQGzP?ZJ?kzDfTd!OI(;A`mHUk<;zZP)W_^Y~HK z6Dd1qs@T^vd~@)XV0z`&XTePm33XaprFJj)t|h7 zGcusMuB}a8GiMq;p0r^`T{>_Z-I<^%%79Y~JIX*4e^fnhO`B9hMFl0Z;Toq>WFJ#E*g>p+7Gz`S^fSZ^f8a!?)vSi6~7y>kjWiD(2U%KR*(_ zY1w&!Y7ZJ(_Th4ip5(mAnoGG)((dZZn*v^j~}%I13K}PDh*QX8k_sq4ceu!%}Isvp6cfmX(Ll4nQ0c?cmvU= z%U68(>DN-u#vgnok`lZCi4cEL1L2|@pA}v~kBX7;BAN$U}^42F} zD^k(a_m&Z7ZO*!`KayNmzvH~W9&^3230`~TjYVFi^vC42N2{;#S)CtwpOK|cvhu{R zm}F&;^5g1qf3xDpHXqyx`jDO!MFV{8$b0*wXaplMx87^QvG|oLy{Fe z{;exNLbZnPd&xPMKBiur7>&z^>~&G{cA+)%BWr@Bx_N2Q!PD+ghe728Ww#%A>TQuD z$8UdRiMn>8KPywyVju+qg=u5^}d4wntrvLF5-}4fvufF}^ z^<|$Oc-pOEX9 zx7aKIchH@5J)mIu{kP%~n!V0dB`(DiY|1IDsp>CDOsb2pCFR=nLKYs-W&0JaUF*Tr zNT%9ft9&&AU7@p@c5@jX;C$PTJMNhMUifyHC+)m+xT5RmF}+Rlm|#W4oijr!HkTjF zJ+Mw5$oWx^g8`jxa6g6Y+S;0$ntL}7uH9mUw--d=U=d-w$=L&=J&@w0~Pd7<~iKJ?5o z{75Tav_!v{5&i1;DffNOWs650czOPQ*sl3v&Mk~Pr?B-=efp1UZfWb=*4pEON1e-$ z;51+!BT$4&4PG^i6dAT%a>*qstSZ~$~ zExr`~deP6KMT?XikM}WEImE<-oDM(yaP$1AqmIJ1VnDmp{#<$Pf$BYw^P^6u8$D5B zl4a*zNR7?CT1OOy>|YqW+6#BO29o6zY%LzJ`lfm3`BTok?W#Lpdi=%rUwivAEJJL? za-qv_eZe{%94ZN>6ln;4bi|Ci9)0fJr(gcy?=$ZVV6O0i)HIIBh!{u~M~<86sJaJp1lTZ+`N|JD+>!td8IL$dXeRKBTT4{W^;x zGXlTY5=5JG3cq?U}=O-+g!A zefJ%A+;Q>tqINFHPvsuikRHhSQBR~Zoo=(o#VArsOLKigQ*F!EHNy@qj8&^4Ux>6( zq4@aO%30U%Ft2&%1z!ClQLW#^g?%S3w2#Zw?@&5ABonb+&$oQ3ef*3%VHwBIy)<^bg-MXo%MJU;i!R8!40^5+0 zsZ*yu{P4q&+Z%7Z;cY>$-ci*72kH^XI?+{`)`w{PT}L{^*^U-UM30 zkKDL%ggJBOz^5cnIpq}Z#BptB8AjWF`|bDWqmO>`%{SgG!yBwxSLJXrnu)<(bImoM ze)=h@MOEE1?W?J&kk<}tKMJGEV zZ_U5*QzdOFQirw(Ldn@%`u_4mr{CH5m-()$eBtW+DC&FvVbr;Q9HXs_F|p>T(r_0I zD@rOLzh*J@(^AQ7XOsTAD$n_>Qd(=zw#*{PN2`{P4s5_us$go_pr}sG8yEpiImzp+E_Brkv*n-Y;x4Ip09XwoWsU zut_C{QvxTN|Mk~jdlZ0Yb$o_&u&4Ruxd*}nIX~*5bfzoJ_T1RhmXxzgihi&0vH$u&vMxe;o21&HNd5*bO36_<(O4zfE(b{>Vi7-54o)Syb1z?P z-H=P@uRN5i^CRzv9e+^r{-ZyQJ#VE+#dh0kGz?qG>DJInaqRG*mH*b-*-dh+H%h0* zo>RN!p^;e{6p7zHy55NMwO5&;=j1cbz# zwc%L-0`0rRao5`S*gQ7-j-+TLJxiE!A6=4dBD6U>bm&m0tWJVdJ;@h8k^q1>q-vc_ z)!GTosQ|H(fK&*(3KNvHcKPL(FI%<@L)3(Ps;rSA$r5I)?8d79(HZSJ%YMx{f?Y}x z#584OoqY1iUT&D05k5)n)JjF2;epVpDI>nuUVFXp!V7{9_uO-jBtzaliXPxJUxY&rIRtSw2XoU%Q}D97O!cdLQqZ z9k$QKve$|Mnl&(&B0uW0{oLCgdP9DlVi6M#xk|+bVV%l+stXLx8|oSl%=Jp>nyrtj z>o=jHsc&nm;8BmvtcxGX4)P!Y*mbXH#kk4``RbWt9$o;Tlolbz8) zSFwT3VP`0mTg6L`J8PqsPI}@j&Gwzu5qxmTk|ow>$+9z2#KHz=Cr+H0x+}HQ*>vL^ z=CPk=vVG6@D|#Si5qJ3tn9Ro|}wYG?9mS`)vB>$Lupd%hI3C&M@Jm*In zn2B`T=AxWkb5n!0NOjFaY6t9G7=Cz?YbQA>hrXMT2gHCBtW)KCElg)s{OJ07UscE3 z%aX*81drBo)h6VqO?TSQNxs(uckR^Te2~y)BC+ZPa1w8QBpDLG-A>i-1=bj71W@Q+U8%l7J4yWTUzWAa9KXi-+ zr&5>^J>?UX{i4NaRFG)atXY67oz7ZIqD7|!8q}JwmI|n5C(FYIAp_jg>LChU!ncPV zb{GPsBd)TsQ*xtLbf0sOBRa3U?m7ppRk8R;Elq2$EbVtBEMbEXmB9*hO*2cRf!%%g z-2`mnO=K7uqn36m-)YAK<_VV?AhX@#qsJeA+)x@FrRN;STTM%UX^6SuAfC(ZCX#8) z?Ixb#Hj`7Cw7Iy%m&r+1&G+P1NUp$8O39G?^c&Z9`18}e6%ZrpjQH=J_*gLgc# z&%;Jf%dOnOTwp@@ADwyk-FF?K6Rvyx_194k z&&fqV&=4{r8m`4n5CmWn{&ZHfg#iQ*E7SlK)C9DTPhndGo_+S&ciwqN48=y+RSFC-tFk&QDHEr57u5%oTBZkWeb%g;AYC`!7WKb}Ooe(vrN$Pv@ z$tUR{V2793sTGt5MdAcH1uwKHRZrB6PC1aeL)bwZof5QQb)ABx1>jIr$LXPyc?QCT z>QUzusTvGvxJ_>%IUL`}S}0^984*Kin9NKE=N{-R z59ItPB?b9T)&ohohQ3m6l3cq!z3b}wv=rJV6h<6V7&oIBNXm1oHfm|RjRDkaww+xw zKKYlIO4t-4O5@Kh3_G;0Wkf@hstnD(>^+(s`R(dR{0N+e>Q#-CR0coWtd{}9Y)A?; z=!m~4hG*9zN@5nUpU8-K5F8E}${n(~FXKnTKp251;c&Q=GsUrS1PXyVj0Oupnko$qlz+9&KVY>_INzRlJNm<#Zwxn$tA~GaLSdUE^%D?jyBqW4Z2#=EM;hiBxF< zW|kZnP?;o5i}*xy7#TZdWTi%iP6mj$fxGw%=U|I0A*OW!2s9Is1ix8M-nDXF;AHH{ zDFXqGlTUTpVG>Dw5slJu#n$XNzQq<>V7NFM%SG-)Ls%F#Gq_+}yIC>45z z*Qd-q#?%qdDDbS}_wpBH3Oh5wVz{#k^Zncdo#Fw%4}M$x^5pq-S$2@`^8mbLJwo5U zZN)%RWAFNw+J=EO{dV~Cup^QcN!u;R>o#l(IJs)7<*iA=MoC&-d1;8Mm26fX>!zJm zw|~Oinqi03^&O)UOG|T$@3`-JPyf;D2tNYAJg)}GQJbk#r-Jkg7Aye&a2ymsSjSQe zDQcoc(7SyHkqA&tyb0L>=N^0PF)vGk^DW~IenbG?qZ84HNA5_6j52s0qI28DGAu|3 zIDt=uB6x~ZHhlp~EApejiY|8vBZD6act!W)a({_Ip*kWD3g#480Z{c3=5&?~2!g~s zOY_ja}p&t?adGm2ZZVz#EX43gc|wQ zK$vod+ZPAh#m&=+ZC1$n6c}=Z&&%EGTI|&~!jNIvzBtCKM9lQSwS%2`nqibp9$Sf6 z{xSDJr+C1xibc>wZHvjOLE; zBRA7PS^ffVpc)F`X}K^E7?wVxPM}zENef~kvIBmDh@d07Bn*Vk;2@qff{0=|9-&*0 z1LpY~sdR87>XaoZ)@WGDBv;Kr_u|m+?^@$WK>yCFYpNcbqRS~39Qv|kNR2ecnQp4q)lR;uo}uk*fV^_bH0vaWX{GV z6!Ik3@kUAfC@4u-o7E4BFpnO8)o5}`LKna+1{9IF(CI8Rp7JAHk2gYF{G|sWLVv_H zkTS6+5Bfr_9Wk{?&y)U#XEE4SSu^te5)XubIEq(&FT54Yh=>GXM&Z41yQ>U@u$|>^ zD7j5GDT>75F|6f$C)*Gi(^ZfW9hQlQx|YbBHn`4>&JAr)cvOdiBJJ$oIw>g&c zqYZNh@1dt-jhlJ+m%;S3Ag$+*n~PH$)gOlHYdy^#JVXa&v6L$i3tNB9& zj0Sgy;O_43aNyt`+}&M+YYy%f+?}8SLV~+P2$tX;B)A8@CC~d--FoY*`v=^*Ri|M0 z?AhI!>7JhH?q7GyxF+#VZ~iEpk^DN;O35x%xUKQ5Ydn>xJB7rM=p|teYfF(IHn>4i z?6?I6s^o$YU}lOVXrC$vR8}dgShID~hHwE z;ZhZsaCW3V_1I07eup7PqDK{SIZA#v6T`aJ)!5p6zDWzP$uyx&d~yC*>(n+BuxJD zT?PO4l{$cTP1TZZE4F*6V*&9PVLMYV zU7PMJ{>B(NURNu~p0(ic#f$ zi58*fj`PPbh-QX5Z-R-&G`)%sQwLS1gF`#otT9x+7kO5wRNhMrbN(E=ADXqlr?B>i zEcTBc(_O6MhtNJOdr1gaL>4-9qr)z^O2saQMawoU(pv!Y(~hofZb1hdP0c})P zAv;a1tM^8e_ugX%g3vfjxzE4o##aRpF{UMkmbS69eCXjp?A!ZA{u_G|-6Jdcz&2LY zrPhYQHC_XiDnf72B*Y@MJ!St#&YJYyS8xZy`wWCI5+^S;r}gs@b&KtC*@P!cCm{GD z%a06wBs93%&QB!aJtBSYWf*T(WSZb6O*+Ydp6Os3Inpg+SSb)om*ac=G}7;lTbOr; z)fIlg87F%2hIVR@PAX!G<6VZ9gmM;6QGX6q(2iZOpafdZ=ugCPv*rZ(%yr*wwB`3b z4Rkbzek0^8B}73WJa)$Lp)y4L(;>e1A(o?|8DDDo#j$Dn!Wk?#tAo}HyZCeP!XO7^ z!sCr!oQHa2Dpm;FFEn`u-U^*$j;E2^nXtTD>YBPqPvc*CPPV^OU$T&xq&=2@OX9LU z>#jVh(MVY|gvjOYFYnQtI5HBWl}VkEo<3448k2Wr@xOwfVjqmxAraI-iUF&xz;&wq zw%x(m(YEr>_f8!nCnF;#r$6OV{cm~eEC4XS){?pEbPWo1B6FNTJ;%je-v|!M&)nRk z@|0lo2mXgE^RJ911M^l`5&3Y39uC6eFku}fs?3hOt@U0xYiOeu@qD|F{OK)Ut}^X` z7(YUgS{p}%zJWIfHE0yYa6=-J=#Bq5wVja^hZL((FJLdD6-JWVL{F-Kq|++Wy3Sg7 zBYEASlhH3LQIW6gy4j9qP`!Ke?jc(aGbARzHk#aSaF2;kqR;&j){~~rO$L_++&Lpr zhbav|XnRJ=$)XgWCy=?#_`Xrq9RPBKxWTSQkS&c8khXZnDqeFM1%t%4z$3V_bf)-6 zi5ijK3_IS>`2KwjxRwn&)uoGKP2#OI-iB7ZdblJF{cpJRCXZUkh2SvjGE$6W>+Uy9 zNv5maBTD4PZl#%b>huPs3k~Na^V`zmXz~!-t<2qt#%W0bBAco%z7gkhLPo1ebjd^~J)T;>Als*aO7=yEz7e!SpQ&dQR~yXRd4*0pl&rk8WamTe$?fP)LyHw8iPn7n{`?8nc20%58 z(_PjUG?>=_n`Xf2ee%{DTVMi)vjc(800XzCBu=Q+dL$^aYa7VfWov8e=d zj#q$OOPep3uM&I3liVge{ESk8DlV*$bF?*g!#zcU+KFs6{Nt7(B*zzdrI?K*bcsTP zhbA)fMl|*IApblAw~<`hjZc5RlGF^n2QLqcJ=}egwwg!5eeJ6sNiixMY^(uX`!#-8 zXxcIHIsGSMS()^ zv-K3i!ml?*HoMxp@A=pp1 z(doVPK1hsiNfg}Ty9jLZiMr0GKwe+!sk_8N=sOJWN6(w>2ea1 zFT5Z0uLekyM5N68ghdF?jJ>nBw|nqkwNAWQ0}Jh)<~TkXV^j8X__j%Se|24q%Jj37#a-3!aIYKGlZPz^NCC# z_=i?_6J~D^RNu(VsEV2%Cv1rJO$LI~ho*-maA zev=b~B-Nax$RGl#RvS?vYoKPMey8CG z{lpjceptkrvZ0>X$2bq8Lr_Br1Cv!Z=qFq=f2mIOB6)Y>LAgv((7u zdg^k*RGs!jZWP1Xr>L8XrX^jN5`3;VU)8ZpeQL~VfcJTcnXx6kXC;7j&YJjnM7XP- zj3G#G-b_t&&c2JaV*ci5z0UW-_b3T5WxoR+`OMsR=o@kFll`gmL)ChIXfFV$Qde|Y z8M7T_sIxcrB0XS|B*si#E*NX+#QXwj&tegpBF)5MIPG7bnv=Mk*P$vzvm^G+6h|$t zD%WK3Op#cHA@4T~_1zZHY18}-6R(pb?O_8Qbz$U_OM2ofBYudI9U4SS$B_|p-k5q2 zz&c~6IKI&g^du>z@5$dFs_OOj4VS{pD$&$ZX9$cHX&M3$t}Dasn933Z90F`VcrVmv zP!|TxeUZ+F4kM(lq=u1ZWV=0u)iJ=Pj#`nQmktn`Nq6?!X%6pGRp&OmRIvQc@g;ja z$|g1ur!*XzOT3OT62Cihl&CSY&_2dahm#Ys2O_x)bG&=Wl$x@H(I}UJKj>_;QYT=w zerE@5CuJO$Oc;62Ih{<9sg`#QPK`dUc%`GHqv&rbt9KVpex8mi<`HF9HTBzv zz=9-@9W`dqoPb$Ya}GbAYufF5cxpDj7=PH!tVWAbZ2j10V)A!wIH-90T(xvg(R=MN zs&{Hdaxj)SiR1U`3#s=(`|o>lfnfXF3gVoQNWCGgu0)Am7Y2<$3lF1l?N;eq)iGX2 zW7X$HJdFK|4g_t#H>@k4N8)7jw7HMZ`g#DJ9?a1FCsf+QBbA{3&tkc9f>1JfuWv)P z1jYb*Qw$d@7$WS_qjHYbNXCKZuK`2p9xB1>MjJu`0$Zw4w&}R4|0b0mHi9;rla?P1 z{DsxGBGm~}b@Y~yB>r_!q8pWjfM#b)$9DhnQy7O`u(}E3kvystTE_;Kn4P3kDR zJO>gbQc_5Wd`N&4;xY|NQUizr3yFecd5}5`QVgjq#NK@4-gAN&c6@qt`zwgvYWcgU z!}QfnXT|rb`Yx}`3WtX^lkPu(?CDekwoK)zb6(Vf%E~iXDXmZy0?3Ub+7w$52P~qU z#v9Y9!hm0JjVl~~WxETT4}#J{6$I%pX5kNnHJ2+j#)k7{5Dw+OhLhxIywRE$W-Imn zwKnly24$9O;@jaTJh@Mt@6=GDRYMv1X~BbY@M9o@MpBGS-StD#7dw2W`3K54^pZhA2XvsNNTE`a5l6R%L+d7;DrO2nu&&X8A0TKZa&m`j7T5sby&5;dcIqKP{s615;W0v7u zO8Q$=sT>T5iWvcE9o2aKoFY~h7nHN$VaZ!H^2s$gO(nU~0I^~AHOAt|>5d+gmUSPT zZp~B)Qb>;@X1m~L7oF{O|F$pPSbU@g0U_}wf1j0u_T8Vf^sd3RxVZ-RIZSrcxA+Uk z>(~};-P$+Q#7fzp%@!%*^DB}=JE->kGVjS?DwXfI=>2MrOYvm#IpG~@(zuxEn2P6` zuzg4Go1WB9v~|9ko#$FwG&!BLc@2ED!HYi?p!I0lqCMw}V_R5pd#~1-rrY*I_xJxTn+VtK*k@ zW3JNAkDn7n>Z-hVA|j{aZh|js%%BJ^KlF>pF zaxfcw&lq!w=aLw+TEWmjoy+-iGb#oNdsTr_3)dw*eUy-fvYbH#zH!XWP+ew-eZCP< zDf^8Ni%;j%(GZ#6_31GtK_eC3#j<14i08w%qrbF^a#Zq^Q%q2NyhGnS4qKm_`loaz z8LwooFH5UhT#@)nPJ-5DyBip?8Ox(J@S|$^`rOjRE0^!bog(z@YZA*vO8FimCls@P zU2Ka#o3g;0@nX`!SOfLj|L70id}lu<%`$~hhUmcta{!=oPL*7NUP9|Xc%STdQp=|8 z8H-_XFqjwBWaW%;#cpNUwC z5-A|(upo2hH+Kc9pVWa1Ij^xw>bAIf`qC_Je)fF&#iHPz;Jxg~b#So^vODB0D_k#o zx8H0gW*d+i3iuRZ5uF>JqEx5;PSD5N1TfYgjnn zWEgs^jWKBA^1q%M zU@kUOh<2z8XXs+A6Wa++m9b1o9h?)IZAc##+56SFefdtI z^&^f5o8de7mt#C;cLJ97L#6TexG#$aDRQ+kV~y{_+6SWZo1frxzO0WD-`E6Hea@il zxiL_zH}lyBeaRZZ{reQq?U240oX_7rNxZgOls>Z20%Tq?+p_Mh*NOq}!(#C^@h(lS z%^evk!i#O6`^>g-B@@e)!h_D&o)jL)+4Rrf3+c&lP=JBZK#YhdZ5TptDTzXzPYWg3jVqy_6T{fN{1b(vE zN|Bt0axLd*33BIUdt*b$gh_=GMo{Inco@^&#f*6i!dByJ*|(!C!^Zk}xMqfZ`AB0W zCXwXGBi%1>dbz?~EmWqr=wK6&EplO_QTEgY6_>B_jR^KA)9XFrmf@&CwqDq>dK zT}Ea0U211mvXZhHWD3v8EvJV3{sTuC^TtsSqXpiKyIrv8ocDx zNfQkTcu=?Lq0%1h3p~{cyU%>^n7ZxMp}&xxGEK8;B%>>NV+A4zME!Jv`Jrf~E%izr ztpY(wK@SoEG7nS6wc3K;_%t}s>UgT(PjvJSSF}$BWTTfO-GJDVvaCljQ<~>RJ~vk; zP)f;<*wqX5(5JG1;y(D^4qH}!hgd9rfN$6*!7;Zsi_p)R98*;48<(4t#rZsWGHPLAsrpmkMCy}c~p22-Etm0YQlB6z+NWrGUBu;G+p z+gW@H87+!kqA=-PXjugb0Xf*q7+hg9RQLDaA~T@d#P;gM?|c^U&Ox*aS3>Sy_f%8b zeZYw<0_`_}ZtZVOuibib{EPViXt>yZXfw_H8H8v+pGdnX*cfi>E=jiaR|g*hC)S@nlY@)u{i$p9B45HG;DtQq&1U01*^w2ZH=h(!IL>v=A<_6 z*a7rV`PqXYr;Cf)Dq)o+QG2mip0`1CbsY zNZV*@KG~j3=}P4q(MoF=@6UTLg{OParXy2wnn#b;BW&G+ieNLTFZdGtW-V+#h+pZE zi}E%MlDCiS9t(E1eJkMmy?orK*-SA9}9X6;mkY={959w?K```qw&nJ^gfS zsV+;j7v@*9qoRPOnwbKakH{%a$A1iQNhC>-Qd4t5zqHwm>frp#)YX|YQL>z79`?(k z>H|}0Jd)|UUI54J-zuegVyK8!NGDqmc>=b=Qrg+yfw)u;d&Ys!xYoa@_ZOJ0+(obt zlRivSr!$KR5cv6eZ>-T0XLk&+dTy;*58}u)Rzlq6D|nKdZL(QXxMG6Y&bPB?z)NZq zabf)k|7Y4H@B-OIh52BEz)U_lbF zM^Rq=3B^JUJA5+n(( z9_&i{`-NU=R90J+$BBI{*ghq+mMDCrnu=4O)2PSz{F|*gIV1H9x6UB_@M&Y#DUCq7 z-5YHJO9hO!yqY?CCc@}vMNIYCC1oZDGykq!q`-)M4B-fLR8+P0vff@v!>O!(Ro4kx z`e!>llx$O^>oM8!Y_bM^s`v_&%KTZ@M#LqnZ!q{eZYKv%76qYvzJB$(i%W~Yjj%AG zuqt2K=_Xf^$KsPR6(_NmB(YQm4cus94(9OMhIWQaT39reL@g&@RrZ6Y5s}RT5{qbD zjX{%zdJ?lY?j_>6d^A=k>$W~phbI$Wo;wrmb0QhFjnJ>o3bIq=(zl~AAGL@-o=>q^op!TI&7xN%-J)~+A9p4J0iac)3?^t z7Ez4wc{Lg^P%hpv&`bGxrh3Z0(#>8<;-PY{zXds09lGq0fvD<0n+8r&D8~kcpnIR? z?dQkXo6a7S2x!d^VWbu$to9!rw&;O;v){OIymwIic1Arwiyud`?ydH-xcRWyzqy%{XWVwM~B+BGqtn z>fHlYy%srN3gjqx2@mKE5HFH4{wy_aN7LuuZDIsNAoXm9Ng&2@}~q0%)9y5Ak)#8KWhu0egBTO2sBcg9;fT(z4^t&a~6 zcd~QO4Nk(nwiyZBaJ&58M>;60G5_Gwfs%n1Q@%(V)(!L3gN&=Jx60_h;eQ^U@YGP)^G&E2^UTX;f@Y@HV zMn$=991Ch!sT)f6UsOy}?N^9Uz%H|iD;LXUtTv3d@~oG3G2&15@wMqiT$jTOm$%(7dH3RU*l$-T z5ai@4q8Uo=u0oy+d4rz=WDPtQUJ;c?CNB?rIWBv#G(30PqI+LzQ#@r#9yB=Hod=n@y8X&$0NojxU$8Ltbn6^E z4vc>GnCl3V8pOhu+^Rf(SsQjXL%YTjvb{ZB?SA?D=jH5!c)+2eiTS=lPLEFRrALYx zPd-yMnHEe~*gH9kBWi{13tu~Lk@IT$e2=TRzWTv7G}7B~ljjQnCM^q9XZ-Dp(w`)> zUWm~#@%kM+_61O)Vz6f*JBF10@__7}BTZ`q{t3WaC*sfNi2^G|e!J;udYl!lB2393p(KT;v4JBmqxJhx1S@hYVvexR0i0a$=@Z#k{KU14L@yresaMvJ5|Zn zS90J?=Ha8 zxcd9J{_^}z$0$;6^Q%?!TMb;G)Bpfsdwk^~0Q!Kf6^e@MKv>LG_j^{9Y25lgJEmdm zuqPCz*5dW@*>Zo(usjzSZY9*nS+v-RM2n^2nCTlX6c%P^G|omWbA2M>=aOqM4oO0K z-7I33Lf;{}#~YMX*AD73u6vNc@E_g1>-yV0XN@uoGD{Zsjn)h{ zq&4Yu1CehXSi5W*cjLS9&?8DY<2e(Y=E`{Yw1KY1adOu?q-3Ai%+9?oJ>PlxnnE9e_M!FAqv!);>m#t{OjRQ{A1S365$CcUxeSzc;QuD< z8vlXE#}2SXxU_URhjJNhEwfT+OKZW#hLN6NOq~=+JvlsLWGWUyQ8d=zuOPq9AU)3@ z>Fe3t1o7WWee%gOG0YwDrss}CHQ0rPN`_s^oIg>~ANgR$7)D-Gzi0IO7h=wjP}c{V zVb-FnY+!e;huuiByANxI9)=B$e`*t{`m78lFQUd|AF!n0BW=X>mGx<8f@g+Ly$6az zeN2rg>Nl6t{oLxXm_n}S2Go|Z*r15(2g)qKl>>=6N|Ru!<`{E8HQd8+MJTd$-I>=){posS3v$*n`{9-k zdYl$IV$ntlg{Gr055<1=;vwjkgay1RmxeN6hWI``X%Gm7Me@(r%PHnhU!}@g-tI=~ zb^^i@(~{ZK&Ocqe4hu%?qX{i`uEnc_qZ%2 zc$aVwGf6tlXIdMQ$x&^9e?919O8H14R$|Yv(vq>;8VHt?gNFE zXrCq_l9SKi9WeCL1o_{-iPvIJ^l>mqp&`1a=84e*xF6z2wtrLa-5hYWAZ>2s`|T0- z?NWAqcKR9BBDsj!v;mBoEL>I*EaL|qVy8!7^OoQhtm_=fFcu!*fKPva)R9fP(QmRRBI)@uEJ3P|mnHngkGM+&T>kRDIOvp}lHS=eC{ zD+e}cIT}T3jlL7+ST*+qAK&uL;=Qd^Km)w@Be4BCg%@;7dH=M7xL?h|cS|@^$>HV8M-B!O_nHpWrdS8N9bNmmYa6V{fJuR`q zAYHk?Gad^v55!p%vMCB^`tEa;pNppj|MbFZF?cy*PvD!JU^vTr7G%qkL{j>Mv4AJ9 z_eGo?DoPTw%C-#>zDVMlu9*H#xQ^)HXY(FGjzFS<6K88q;kY06L1*kGA(KYkiu5@T z?iWq~34(@Xh1`ZLBhh9ie%CA~jtm(OMd1i(5!b;%Dg)mk6#PP@}Wi^MpHQ<(_`KHNHaUqo#84U|n--L69cEj{cJ5 zrJLEF#5dy`fp;1J)N!IzNXj!~q*;SAo?~2jgPawD7O`@(_FDr}`=!dR27#X7HY$PM&*g0wM^?ne7=_Zo-2+3KYxa8CSTsKspRFQ?pGB z&w9FxBho&)&VZFfS8tn1|9#%{v)D-&N%Rldw)VTA*qevH`;;P_Es>P7zhkh$=be?j z2>?YMC0a%WEvOWr(t8Jp#}Q+rvwS_~)>>^GNk$N!#$0kvExwv;8Ov}_P6qOg7QZbpS| zQ=f^J*g5EKm2ykX7*S{k$!|oSFHS($I7!7(Cn9AF`{Fwz2!YflRoie|z+?f%I3;zQ z@(mR-y%@|5BdWA_z761#m<(%@-Y!h!FfvnNPE*;w+8=-HmGt6u^!qaD+Qv-9L7T5*OyoKiHmM)LHA4v3~`H%cq za=oGgr^3^WwWqB+x5$cLeR?KK51h{YaUL%4VsF!L%R9Mo$)O8KyfclTFZ# z9XeQHWKKzy^TjN0lIdi zOJrv@uu@SN2d^0B)dG-32dEHx`8bu=-ziMT`Ya&^;}+&sN%Y51D!yh(NX>^7sbl3h zY-)ydIa7OjU1{h-u0e|MtEZAnu=)LKmP>!~!}BeBI1{_(#_KI-vd6qjXC>|Msl$BV zFDo&PlpAiEW#}VPgnq*R$k2o{OGd<3<*WxjfY!hW7Fm&}LH=Y@H+-WywKydu(UPdv zREgi#?s{+>`i{VQkWg_Nvp1kG%BLxU{@RVf!w6AHlU#zm=an5qLMU6&j>?=&1kzCNqxTFX^&W2NFY3LJ=NB<~BH9@MFJ>isy z>5X@dg-Idt(-gXRBq%~Owyl_tnE65t(MjUhX4Hq)*b&s0R4>)qjIGORhGd3_%ksnn zu3k3TBWfTQS4%F)<|Hm(2AB(l+OT)#$$u-^N;;UFc%Ub;h z&0&txx%9TKz37B89%1l1T^DM7&BIGG)~QFY&)Z`+zTFk_yAX4-rAU%D;XdZF3RENQ z&+d4YVz-YtVfJB2X2RFtOTy z7NxsdOSe<9anKa`D3Mc!>5hlP#&c8lzHzIh{w({_p*u6DhkuKK zLi#aH6;q&ftJa+;smJj*^)Z+MaRBki=j@Yo_W)_nL|>mrKp1De7*$g*5F%+Z+l?NJ zjg0smyD7}qbKZ&y+AXx1gb8L?u#c1?IZ5hxIpQ}Z7tDKvV8LU_&oKzfVCz0}gFZT- z9?_zCOj9`(&y0d@X2Xis<);$xLTB_+;)wjGWI4-nD*IB=G$j-)G2JFtbI@Z_JZ@uC zy%{O-&+de$G^G`CN+eAnlBtMN@xNzHS+PYg-Ww&T2r8cEnp6H*9x&{ zIvc%X8~DV6=S}Ml6SS`o?0N(NNhv6~$*7i8Grf=C>MOvsns1~byqR&E@TP4}M)|>Q;HA+&ndM7^&QM7ZsQhTb_X#mPed%4+)&)Y#)V?GMLbXr zT?)}9jG$<`{3@daV+oh<7|}qD4eeDVz_8B3PLk?cRsu`1hNzfujQ|$LC3!%E!C~_| zpk@PsFbjGwz|$=;OtpEqQbF}HUuUYgX7R5FiTJPr2WTxzstnC}=kPzPQr*GmV;m7H z7Ep|KmR1I=z`Sh^n03F>YP~}>Ou$3!Bq--kBb7=-DRK7%Okfny-zj@;qXRoHCYKi% z!IdOZp5}MYpge4K=OvRIw~Tb6GLyhzlLF&)NxjxK;?VZB>=8GkyO{>fs8Z;fTrQTv zvA5WRX81AzXV}5MiLt-;Xy#BIPk8*t#wTRKfl_eTrb&oic@;PftM}inxEZLAZOh|m z5`MemOu3gemn0H6WlwOQ*ubGBf9JTRuy_7;tvwH>fkMoe=z%pCNTYjJdFGfZ785WH zq1J$+>`m5@W5RYx#>6s=bT#F~B6GewE;97ZtYJYW8IMeoix@QS^k&t7n4*As%F*`p zWmSlxA|Y^Ma)~a1M+Rv_tplhPN^i-rh;#4OUYTfAy;we(uZSUrR-S&Cmka8_$fk!G6}7hcvL|bOwG0)n5c_#k}S32wQ3R2MqEddQ9!wN~yaZzBTw2 zRh0mAtZ>JkfeU7Bb;)uTgC}g#*w-y`DdJfjZ6MG1c6&8Ws2+tW_MtcvW9GQEbe|GU zUq{fbzRQ^geoZb~{+YZ3T}5XKozy~O>*-v7gsxBT#Ij0TJHz3Y>4vHe=NmA|@6tHy zO%;bECcqi2#*pRCfnhc&iBgET1;c#lL4`r#y@Za}j6QC^#2Y>0PJ;`TNdYxOL>G{R z6j9pm+{Z;Sk8I_R1hqR7*F#CX64N)TREhAGhjV}US2*JbpJ;!H(MmGxgaElWP3LjX zRG9pL#^KJ8`(Dp4B2EgK@@>O7M-#Q|5|G2*2ZDtvpC+Lqas{MjbL!_ttCNH|z||oY zeUDoq*@ARUb*>aW@Tg+_9Zb;&P8b9c8FDd~N*N;@AADYK^b6mn$YSYVlfI0NZbrC$nYM%GT(SQ=L&%n|0dZ%GB+Bj!fp zRwKOlD_K#MzB<5By%Xp+7Kh;Pz)16*^ai32a}Q{V5ZB2ds}p^J*THn45kg<*ra_&H zM&$`N@A%!iXe=E#Bb;%jMwcz0mbe*x=gx!uH}Zl=nmqK?rb16AsE@%ofEqFGL}p$l z`DR)In#FWIdPQE%^XuNy^^aqRSz2$(A5c)KI7}D_BIfzj>%OtjtkP-m+(6*0#26M~ zVtj5=%vrKnjOJY9KLrjL%&VkNL(vlPfPqU&c*FNCb_eB21+XY4(Z?v}3EE9nd@Ex9 zW!zSoh}V`*Hhgpv=u^`jhCq4P#W9y}wdmjP|Fzf2*@cm>7(+DLBw;q*Gd<_>9 zj^x59D&_+o8>>L9@Sl7Qa~xe*boym5l5&I?6*rkP?l>3K*I$Z}qDo{u(4B~8B#l0G z_A!HBBEIxmTMGJh0a4C&sC?8~QHSXHg0iYbiwf_M@}*^VdxNs487d`3L5 z6R}QltsgG}9_0#0^z$7i^-*JtJaZ*b1EwKp~GAtGeYz@Aaw zk<6t+Jru})0c=#$gznH|+KOiV#lmx7EcsV$Sg9Z+F#fV`N$n^xYsdDl`lYhk{MHa% z2#BeQ20!$Z8Utqc8wU-cJe6{;Xh+pz3&NUIi0A%iG=0z3;hUz9p2c{8O_kfB!5`y>Uf#R0eVB)yDtcx3Fx;1@W zhHsGYXUCg*Mxuph(`>0C(;KPBv$y-K(of6P4czBU#Ukga=kG@`gPF$?uMxgQ)Abog zp-^=}07w$4Qx6xVy!91UCnHu91~-W|x007-g2MOESM$2k2Z?O4EyY@_Ep9pT$vaCa zycT9CO?iS8!z}kWd0SL(_pvBIc}Et)mP{fv6t4j^&*3c+XxHu=jVB(%mumvK{=yE}!o$jCdWRV*0$+g94OnTit) z*wdqpRtfk7q?x;I`j|wz1CaO-YLX!~RE?I3S}5(>*5=wI-;*EJWJW|f>gZ&F0wfyj zYk@2&P5N8ef^_z<`Tn&=eb12w)X@^&Jab&b4vWCd0tO-b&AQ7I5AJeeY2p}y(YLpu z+B9lhH0Qz*KT#GZrfd@7ABY}0nLQS761-EvD}k#{_lKdPI{ z8_o!5Y+;z28;r4>FyOR4=Oele5cU~vl*{EBgk?8_vBx`?W}~s?TJ00ZumA%Bp!>*U z^na0n)sGBWPElfx*G-EV49JI5VEY9nR?qnL&zu=mtl`Ha{I?IQHMtnZFV?{u=H#j( zs7j84JYUD*Q0a-*`lbbkMQ)d-HOem#=1rqAueEAc`?&ob+6PD$2FQW}8!m^u zF&;OAnz2NH_I2T&j|jO^X9e4)(?TmN_OxhNs#E=f${>nUn0i6)*GL+-ytE5AYZ?TV z_w-MDK1g=sC`Tw9==DC4M8+7(vc97d^JQ~A-)hPR(d7;FfJ{#St1CiYRUtE;cST=*ss9z7 zM<7zzb~@Sd@^7--7Dq`iQ)++g^zsLYSf;$XDM6`+*@9hhz!cSNI)KmCxIEKTJdyys z#8Ef|rI^Jq%-ErSILNTBa^yUDS-NW(eizGr4x?Hk%^Ag(o}NmxYR+WIr%EG_h4vjf zNe~u)t_UG}0`nCE|@24t#bpm@j@u^3HNr zOy#*$+CPnJr!PdYJt>wk)P2GYUDER72#X#zNZBiKzPoV_{5=~fuIue;@6{VLuHfgV zn!RyyX%1*S_pkPCz8Qpe+ul zkFogXHajD6GEZ={oRsGMUWWzvB#Bjvt^FqbcNV%wp{7hunJ^`=jY^e&veam?SZ_37 z*?CYL3lZsAq8DdV4t=#6Nx(8;CyCi7G@8`C`mzADf=b~>G4p#=^+F61fiob3OVc?6 zRw;Sl)$Ga7HXKR)hsv#53HnzhTjCYyl-Twj{CWr~6hzee4u(*8PjmozZT@__U864u zxB#*Ym`-c*EmOMldeh2ED8u~sPEcXo|LxX~D=cX;>}Xzat%wxEs^5N|OZVR!z{l(N z)2R(`WqwSxvM4r=0fyl9bESTLuKnlVAtDb#DCZRxjHt0Us`r4+Qg`qRkYW`A`U0fX zS*SM}C;b2NPQZsse7AJsIh`-c{`IU6P(ELJU@&sM7WC%8R+`ZNyn9esA^-Pv(MKhz z^s28}uz*}gNmt3%lCPAafW`x`Z@j}xpS1sLrWQR1Twsgys?c&GlM1TmKXA)R?*Dxl z;{o+@;!41C$?2;KAi)bLos*n5HR=C7@&}TV8hNA4v1-soDh7}&s273U(u78v<{dGK zm+^n&?gYH`9l6VO!ha0nftdvn>&r=qPs$H^I0W`MiALstR}S>cMe3(r$_j}`20u8 zkKsL_E39&=n}}~aDT>bRn^Azn@ECBczUF^W%@t_$*jJh2Ci;A$BteS*kHa81|A*mB zsU8r8XRF`U@VTr_FqHyiD2SAM&FTQa4*JR)kMUwD8N~$tbM1i&|KIv+{#6)A;=@Vy z>J_V%`U30+)n&6%1v<$OT@u~;ABBaW8>OIF}kH2s$^U%0ZB8g+LH zJJYHYWBzv*tRg9a$gw8<*Si9N6lrsSS2Zq})FB}%DrzMFz3?B6LlENtfii#EjC^hK zO2Ur?J+Rla`J(-j@g&(bt(Csz>!d zoF#I~gY)0q#|-6ywt7IcIqp3DQgiz3H3x3yDO2NprSuFo(CaaHpZ{TJ0MC6`l95GJ ziSzH`0xVr|qOMbm|LrNhv2W-#7+|x8W3Xnv;DOYuJg{{FIMPY9Ol|+4VT~3st|$?r z45kX;KPS97T?NX>{zVNey$08bwyFPlWeHOu;C1@u_Ju0{1eO5~fdL?g2#$eFP*Z#0 zPuPkdM)-ps?mt~8t!L- z)Jr$7xyOLK9$>)zdpW_a=l(N=x>JbupP=L*1=`8V$*V^H+K9qBBtRPJCP20Wfix-I z55H?(9g+y-0cQXx!~|e$hlN_RgMmNJLNJy8yc|GB<^NAdfd?>9#DOyn-AB*2hhOh! z4?2%Uz#s$CtCbj}(74T~d?)f!cqL)EGB77-%i(`VyiURv-cb985%|$`W}T)LL}_em z>R-Rl+Ec|o-dst-{Tr0=SDAan7%B8m$g@hm35;MS?W@?boivCrZy2bgA6J)A_;0#V znZi2Go9aOPF88jlukC`DGO`%|hjhlU@bK_MGhm|g|JWI18U}lZHhBy_M&=X{So-;M zd>r5ghyAI%f=W#x@8cyPt6ML7Xtq+hE{nI9mzR&v<*zCl=xd6Z*^DZ(QtOVp^ z`tMW=-fZJ{Uz{7P2hjc_4X`S}K}DrMKL=SNo+8ATCuXtlro9d`fcjFVSeL3&V^C5v zTx|T#(}ad2?)BNAdRw%-8fcWgOb9z$R5}ML=d!7sJwxDtTFN`@e?s7YxmE!-tBa`> zDO9201vMWftPtuNOId*-`hVp7e>^w5*&M9=4OHX4WC@h{fEvyMDK z>QJO7Rq65}*oCA@qA%+4_kz{$UOAfr`b4(p_AmS__-OHyjr{yU`n&%4kB~=v)z8hc zs|99DS$0?SKM`%(@3*V4K9=(Rx0?L-cRurt@WBtCzgRcaM6T&6fbu(mvs5$x1dGVO za$&dkg8SRB-?=P0ndXO>oPrh*Dl~zfFGzr z^8%I)*wwA@r?{2+Jzzl++x&i;RP{QrOa|Jx(bql9x8?DCyZ z0olsg(!_qnVXN7f`j7qNJNB!UCYnaih^BN)!g37!jpns)63lR-#7A3 zW;VbD9Xm@;TMABIE4oINQ7DA<*(oNZp8%Ok+UL%}X<=Lp;c z{C~X*WM$!EX+hWtOx_JulG)$=fnYz1VK((7xs+J-iP=9H&^DMh60 z|NHU|)BFYPRB#m@b%Zam?a^RAQ~^$^adGW>*6Ww{ns2{!$QvkVSVX`9^#6X~!E{#s z;q@nbCL4<{!nV&gyil(+JcY@DlqYc>Leioqc6{#e*q`!$eYI&2TvS4VsIb#Z&6xPfGt1*XyJ367 z4kgg0P(M5Zrl9A?D-5sT(GSmhw;xm=rLQwHbhNeU$X*+sr5akaIj(5&SW)m`^7gs$ zv48k4<)h;GcDV!z{NBc7FSzlknO_vY zoc!(<9pA!G^OedyZ6ExW#bcVSqj+}qy4X_6PQ5d~g#H0dh~njvDuHYyld-F45Xd%Ye> zZ8jq{d8vK#MdGNYtiM_@r{KONY^j|&=Z>1q91A+%-~6#kHWI_N&$lgg1JVV-fi8~B zUd+yLS(vB5SUC1G0P1BSsz)x!Q)6_4XXaNV=H;j{i|mMvR0=G&DkHr$(hXI7s0HE1 z@_Ini3Z^5yWgijp1b9TG1w`Rhg)UumAcc{#?#SRgIn?X4acR?4NhU12@M=+1QgQIc zDJOZf0(z>dL;yvRXKx9ZYos&;DNPK})Dnfu7rBlD4Jd33VzpyI@R8G~#Epyw1VTAu z6#~H@jTagy0l1_IlEC`f!w_Txld~~!GienYmLDyJ4ND3MVc_QQ;iEv~AU+T(H-aq* zxcTG45gbUW)Imo)W)H297f6^ZXBZM z;h1tb!XD-uhuPO*E_#@mA5IVsr%Q*E$HS@gVPWC0%yL+CIxN8*79~J&Q;nu{% zjhctsRu4Dv9&Twq+*y6Nv-S<;_XR#X-jeVZZ;5 zJMCgN*lTPQWWQk`;gfaz_;6~x8|or(=p&?hhA3@FR<0y3zjP}Pi7-oZq^$Bx<5nOMzHKuMs=>f4XmJxE@3-{9pMU>EPCI7lQv0l} zxYoB~?`-y=l6B+`wLE%47qPP%Qx&*5Ib5~0dsqlXirQ%gW7g`-%5MejB6nk{Og>=g$E)C# zT{dLM0=9ne2X74Ciw{~xKf5QraGa_t(7|%+7N!6hFOTrZD=PG`#%#q&uMY<62j{%mU`2^k&cStb?b z`4y#=XHbIZMM6w6b5*kx1txydte-`0Wr1q0s;IbFUXBEJs*XC;zHogl>*&|v3Qso& z%ejVm1RZ*G-BnwD8La#5n?$j&=|E{gnSU=%LHs#o{`OO2Yu}J=!2#{CfFaJR&gB>+ zbyd0a1I)liTCla3my@NXhl7K^ukgN8)O)%(IXP1z)(i|xzwRt{`yhh9SLGCx%Oq!H zWoBklw@2bm9;#o{T0f8c+GOSD_v2%;{6hS~X2TM7)kkR*-9p6E9RUFWdYr7Usy`#2 zZdtCqs><^Jo)BtFb$uc!fFLGv&;v`cOTfgWzfWbgs8 zjTdTA*)K1PK^tMe#a_T-%HO=%2QfBu=9I@09dQe=J18#wD&DF@SoRS^72^G4d0B*I=f= zIPkt&wApOhaoUx&x20uvcJ?tdK0!9Oh&~Jki*xjyoa$Y)bbQn^Fn~g#KCXx@aVv~? zhK}n+T73VWX6ya4#&L^*jht1 zs%27DHUmzg3JAOddPT8@CMHf!zNo8P{MX3cLaE-GGr@v->Yf=lHp(8pKe%1s-Y zN0-GtmZa;M+jBd{I*a9R(1Kif;nnp{xw;%4cUos*{N-Q!+BO5Y}B1vEZGh@eM`sDiKrDRL5Jh zT9uXX>iA(Noy$oL6wCZ_pKhNpViC&Ba&eAn(WMB@CkrSBpyIu#A!))abcIbWv9+~wWxH-FK`2X$(~5*!dO`kl zB_^L76&CwIR-%|`+255Ve;{r#qw@%f6m5_*{wwB6UZI`qw(vGm| zY79chn?wd{uU)hviQ<+nmglZq>}F))mVQ`i!q7XTv2}w$QNaqoK3PFi!AeM7n&@Uo zBS9=I^g&3Y;azW1;5QP8S!@Y}@DmDo=4eO>xG6;1hztq19n|}{Xoyspu019zAX52u zw?G+03Ky)Fq_-o3XYkrbDbUbd4RPc9OhiHDi@;oRbI_H;Nu{LiP{8(s+}@&U+XvPqCg=8AefJyUCkAG ztQ%^(?mV|(YKl1A6$vratX#X$XAfkNS+-5e)V%o9*r)} zu0oCF$0N!y^Br?x#aWISLUAAa>q;Z)zH0XSZ%Zu51+0wT(?zdrnpL7^41m(v&W`gJ!|z_OJjEPlkzb^mVlXBW#n~j)_XLX5%P2ayI4pzMD4)WL; z85wcf?S$n_DLTc$VBLFopzm=;rr_Ld^&D$r-(Z$Ks(2QN~4p0S@8SUn1KLHf|v=P>t0?IaQDM`geMMZ#jY*>dr zO>9nK>#BY5vOV`{Zc=dZ#@GdK<6hrKy?t9-R_@p;tJw*W%q&5n+wpADn~H0} zY1S0a7RSaqmzF+#dJEXCO7)txwVyBiXtdDdrQ<1b&5>q7lnX3T#j(p2&pLchI{6Cu z0TtEv)o!Q87wt|uo}1mM7<1F*N4F!JjWmg?)+tZDAh*fr|WkEam@QWnWxE0%-Q1A4=)qatWyH zkKz@@&y8;r_xG?k3PY&6c_N;RKE0{cDcY(s*RpP4TY1hFVJWI{)9Kr3u-{tD+vhV2 zC*#u*Me&L|6S(D^zgYm;T`XBAHC_b1dqU@{s~@x~Pi?mL7Q6oPwE9l08S%tj%#8;R z9I%U6wFLL5DvBYtVBwnX$5Q?_vVa9jR7RXmN7|Jai*%K1{e((OO9TQxXHG*ySqM&}vb-<>hA`0|T=ycOH)VKc|p~ACvo% zTK>MJE$%xrQ^WX+ru#YaW0h*}M;gv` zRkp-2F(siVfld@o~Vw(+K zj?sL__8O4jGr41iuuz-X3c>Q)s&!+t_qNv@u+Afu!hfy`bHskb*JoqR&TnT6J-0pAUC0lpcBg;4yE`e$ z-~K1FE;@ z*VXO~@8rEN^qCn_#_`KBR8}bQqj?}A5LniC+eSZIo9Uwmp1jzx(=Sofvy3r zfq_eG*H&H>=JP9zxQDK+ABy~rAgh_X;Cv|KtfVbQ^9#yG^ zDDd1_nS8mP)Yu8f3mqn>3@nw}L`~+cGY4*FCY#ZM?vPDuez!Usq5ysZu1KaJAcEot zHa*TDrI{vPc_HDU7^1-U1e|;icqC>;Nac!+FeyzV(F(6e9=F01=Fdq(Ex-dflS3-4 zbS@K-t`KZ>rj!DYgrxtR)Y5bdFVs}Q>;{aPh}4Q;>#h{=T+`1K)0!^dZ{me&DVRa| z1qg_4;0OL_HKsXa;!qQZK5-Zwhd6PFn1^G>;V62TPaI}ehdJh9wtYD7IGlkU&P5Mr z<%ji&|8Eva)Xk{oWqkXBt$`X*z$}5X8C6y`SSZ#e%XD+Xr#{-N%)tRlOT#V5e z0#RMXk4&p<(cX5S-I*Nj@;W;*&g8o_;=6^0`k=RCDuGS)H#T1JBNYi27MlCkuvInc ztrSTGDLPTr!Xy**Nra(<}E?(88HvKtY+xh;>z{>V}2 zFez$1J7_h&3bV9q7VNwHa|XNQFkFf0&7T6BRcxXg z5a_k#U~D}Z$rfrBwE7N#S?h`)uJT)5+RSgCA0DcztStAvU}h6JjF(?j;p00s(J=)! zt-P@_xGs;HRKuQf2;xU}VK7@@`2ft|i~-mz06jec6i$2NU$y%Om%2OIIB($D0QJ`C zp&#SmG|Xa(L2%H{R;v%T%8fD|k#9qPOzF-Xl+3^j{xVr9DFdyjiII=H4VCHa)IBmb@fdGGa3K2 zl^^#SsC9Mc**WJIoHMhvg4Ua*IID2C`G)rP0Be!H+iexw{M0(S^2@+7!3cL~)T>w2 zI`hM29^1(Jwzc||RqO9R%jDBIw%peU@+FCE9Bf@M$hD5eRB4|DERU{Fs|Tfh;^Uox zKIR;c`dyXr5A<6fPf|B~2^JZj+&yVi!A2tC!oe|wJtj4x6k1bLlR_e~=3OMwZIIMZ z^9p>gJIP~fX^q&XAg81tuc)%rE6~=*ryc7#n#A5dKG`l#S=pI_Lc*~x5tWaVlJYBC zT7Y$ghGv0x4s0nYMp$!|t6lT(uzcOT+;nwB?5rcMe7%VVSf&=TM!VHoEbyrPA2-qbeYt756gO3pyAU{!1O>m_4|k1{%*Z$|993zr65v&{Y5q7rn>|6v=!q5poF6LXC>f)PuE%t z&S@Hp-lcj;MHR`A7giwDgbuE1$q2ZF$2y&y@R9!>Elf7z?ZEP-%LLPiCEHD1zvQH| z(ZQEY*1EoYzbL_|jPP+v#-IYxPUv_Pn!ieav)OD(1A|$j)13G@V|9J)6Xqeke<3&K zGzNlEJci&;33YU#RG>!?d?-3DfJ&s9fYS)Zyv%(2bOHIsA@aS$s|>-PFF#JnF(=2o zZ%!G~XY5ss4Q`YC>ec%o)%7lKRy>uGw&k}tYuHz@te;VD8(tN$HN5{3du;Y<+@(w3 z{EQT1y?+jvnlLsDI6{w@zg7QEHeMogjOp77{&9mZnGd_=^esDdX!zv4#0rk*CuJ|k zXD`v)ef7F$R?*U*#lnW_5^Li08cf{$I)g%gy>xWTKz<^)iQ1)n@jE12BS6w-c+wz# zsXa^3&_*jI*DjI|+8SrCRIb%a{>ribhwIcsvz;9oH)pbwQ>*$Q;TxCU8eGrQT=RGH zbqm<8TdW&36@6~yWx_0r*7g(o5<$fGG5e?gvE!1F$QVm&Gc8iaa5H1Jh9G^O>clLy zD=S;?oMOCN6bqbTQMXSrW!%bQGi)6Cb`jE6Z(5gI6h^6Srs$ou3emo*2KH1udfBRb}7?dH0(dmytFqYr_1Q{w7Yd7!1ememkNDG_2=q~FGUK@ z-O+35oQUVqEK9IIQy$ndgE|i~Sgv`ENGMhgvb%jX;+mTNNS;Yfd!de#$nA+BH<|Ab ztyLUH!)MM>r+jCCoiAvozCUtmGg{?(gxSz!6kQA#-0iLB-3x(g5jU7m^nOs)u)KZ| za-V0Mp!bov;Loj$rbk8(XDimZcvjv#rLkh9*Qcof0FNuRmU9gKc=)H{XE8TM@9gPX zqGh_OK)iQio1@BN6d7cS*RG<%iFL<5Z*O(0ZP9-VRg=5y@iBW$(g+=G8c7z$@sROb z|6N_LCfghA3S~}XRAi#Jb2Q+ea{PF%XLyqPPMu*#vn<*kTQ)IcycG8O(M9HJffV%J z#Rst*L3dmYN4zEQq&}rRR`NE{jK>@Bzd=cV`er`lymrzT(ru18uVU>lS5yK>?54kc zD0)?Y7nR1^b)M2e%vphb^@DP)OQ>%cOs7Y1xdwrJdOx9^)?e(&MbHEhyqR~@3vcvR z=_S67n4Qb!%{HLEsE^3;FHGks&2D~?yre|Ap=Tb}+1Opk6NyZUO^|UW2PIfl$3}Yi zyWt&89<7z4KhI+f#TR}$NzZZW;`GWD`X;ZUs(?;}7vu|NOjzU9FPwSLbhLPs`z&WB zZfVbHFU{uMMad%dyDZ-H@{2ITPT7M<9FLlWl)h4xU8#fIQ_<&X;O?P2?P#e~m-;sI z6G5+o^w-vp6Pgey)Em~59zSo&HhVsqx=Cfz!@_Gk%H$*O%B4#l;H`yZn-83;Bv0813&|U%2?7He|7$_@*^$=3`bB{-e~a{G%FCeqUto zwD2g4emconW2E#%hY<7TRw&-{ZyX8cZr)Gyc%tU$kZQ_y8sC0)MnvB&51KiNm#TK1 zh~%ig4W6Bm3Ut_@o;^NU`>Dd~Q!NiQ+1@wtxIVXtdon71gTCyw70)X5WnNyWAK$zh zUKE*5NcY0KE1QzUcZcDJR5ouD*Wy4Oit@|XjuhSjllHpqA?j|FQty+D1NhadBR9K9b z=bJ&VVyoHKuGroNS4+I5nlr@dUvmZPK31sMs)GIat|`pPDwj~VPcmcN=Xu#vnPP9^ zftF(E$V)=ixFeO1iml_nSGY+r8O-Fsc78!c5b@Lajkt+c%~DuHmL=KXl!~OnRb_^4 zqMP|rJTYR_u3omy*mpL?zq53G;*K*`l%|) z=aADqSsyF8@_A_8obOd1$>i0Zh4SBFl4zc2SYpdpG^{=?-S2-d67KD*sL4t<_;*8`Egr~CP_gfQjn8HqeUE45C$1xhx0E+X7-(Yk@rZ2 zn^XTP?fL`a+k|4TWxiddPP`vj#3)Jnu%_wjbI7D-hyEyO(o<$b`KV5&w9(rHoR75v zPv2I4slv`wnR4ZH(PiV6sq0Q6QCUb1L2!p!UEFCWS|{h37Jc}+XoaOCv>uG9%w&(4 zbZ>X^(k13*iJlhkW%-nd!n;$aYh;dcJZ`7}=1+UNsH3L}F(zQJOv|j&i4Dl<{&MWI zFkU^rhRvzxab%wJ;A>51qK0n1%)!s|FRN$4Gy7UHkxbUkdeSp=inWThXCZvZ3-97_ z3u5EiAdyb>$2=tZD_+#_H%__rF9qJKe-eG9bh?r4OPoLZ6WY}uJ*q#OTBGTlfJ}Ht zzmKXhG8?b=Gjcx5rsuu?0IP=RJ+>46kA!5(UR}NU@vHum6vhiz{FQ)_uTY|2T36H@ zasAOig~#e@cL<9wGyempDPE-!?+Yo7pG`&QmAWfZt6h8OAk|SXo`jVskm-R!#d~GE zy`zo^AJbzy-qP1y-|apm{Hn+4L?qW9I*E3+N#@iO9B9FO1BJ4H?|?LeE_Uv^v|*T>ug${pDn675m3rDf>fc&e1r z=a%EmsUH(xw(ijSksd>OaGO@|dq2z{ zU3lqU)}#*8QDr0j8+vsWJT?i=M{2bD%g#NcdwEY;K&v>lv__J#D}+IcSEd7Y3hW~9 zfGm;tsG7qNU~%c&ooHRFaW&Cf+oPmJO|pxjQevLcbr+Fb&kLiUJL40hi07avKeVDnVsY=+B*`(e@A>)vczG^opoYmoz;_&C}rf|GQ`-_yf z9E=z=t}9<}tAE2q63S2a?X zG40ZizNImg81|wUrrJ()0iR*9@=0M$z>l}%w^)kO&UAJjrz=Pw9Q-_Vm7;razWUSI zY^ris%_|WKP73i+ULho_IrmkM{k2%WS8Gepe1 zpEP-R^l}tgQLY1vt8{v|g^0PILvPfD05!f+v$EzMz>=8tFh&%)zgo^cE zzBgp!I!6~EqYWq1o3XzK4so&@Bg!%15uH+aewMqL_s5q8(|05?b4rW}1fS^iULLjW zi#bK-Y$lQ{%*UM{r>UTsGGGC#xYu-w!M4>vPh8ug_>upES`D)%Uvj9DR=_5C~ zF_9kxWn?A>#UtW=bX_@;QMo!{H$~pD9N|&Q-VPMkA-kZ){Y8e>kL_yY%LEek=cg}O zso$PC*(Qv)oGvUYdM6@&Lny7A<$3eKbr?^C$eZBMcg!rAA7-D=s|Z0fqGNIxlFZep zyxcZsoNB2Qq*28FC$19;w@=BlEHqtmN^eRgE~;rKvG5A((;wX(XrG{gn0no$;?Bz8R@AE?pTMVWzVlMRAi<(qHqnw?pXi+j((G>%LBYMZQlgJ$&&u&(pNIDOxFbgO6U3 zos&GW?efCeR){f~=iGgy2Hfo@!vzm*%7qc-oZj%Z2?dYav5thFKT~PQ(0-Ogxl*;* zsHKX)yhiQs-#VTU*LYUsdu0XU5NdMzF=dAUv7_KN)G9bDb}9 zWd$E}x&8#t}yONBOTs$Q6LdKYC5#w<05MC6}|+0N8X*RpI*6?Y|4?gEjwhA z1?R3Qt+KVb+vQgaiH5Vm-OjN^j^t@wkql{j&VKCHvS7X09oAfm$mM6*G2xOu;yy&~ zGHDzsl@jmD1NmQOG%qowgE~h@XW~Tc?!7gqwWCyc#hwN8ka-^_W?87p#RPj8Av$-L z$0IJwogUf%=X$rJ^t$cot@f^vd6e6UyU#K_g;n*ceb|pbGzM|<^TtDOb`(92cqUnz z9m^_MbI!z%&|N=Fg`J`^r*;y~@ZE^BOX*~7W=kgX;B+|3hsQ1g@9fR|?{)4u>O5z~ z8VACz+v{ZR>?r1tZ$6QXk(Hub<}HwU<5A@^B^c7ZE!700YL;0{jAuA|&6JM6>}rVB zqB)(}*7?sI$&r3PpVZ3OU&}N`cR;!*BkT*tm$h2RcftluoXGEQShJZ#a=36z*BD0% ztFM|+4Ze8mdm)I>dO@>MW9Pj;wS9F>YuEF5omUUNxBZ{ez56NKGcHAW%j{lk-3DX6 zf?xzwAEnYK054%x9 zTtQHTj?6T_|M_(#XFK_%Vln;eoJ4ujp|ft`cMZ$=&QXFh(m9KAK1MBS2Q1dQw@Bj4 z6?T2PKf!u?!`SpHq~Mr3?X2TT_4mA2l2x5j%Zb{KN2HPuxTT;oYhMjHUa{95QpamR zz8cf-AyP*+S$mU7b%9+a3|r4X=zjCkUYf-wh{?y=Ep%?QCVfbaDnv9^q1|VdZrXw(;_~ z&~erDQ3xA8y}tzWC<9(aYuJe_;;*epjDHNiSu!<8EwU4{G{ntyb0h!enU`$z5J8Q3 z^~^6IDcwHC$BRQsAutI%x3mD|yey*SHqY5e7V@(q&%BMdX9JF@{eTaI`s)#&e{sot z<_xQUwga;dS!h`9^_MbVyxB;@wyZe6sajl{={GGoLGyq|%)Vq&PClTdsWjpuYj=19 zzk%Bi2K3IuQpD&bv-0EpBh5!%a%7JdRk!Cl9V!3WKYCpDlJAXMmf2$u%fY4|!pI}>=JIi~EPq4v&~J7E_H3{J5xX1V*n zV-7OJ?x!L|g*!><~ zc{75RU@5$Ntoeb&;=>kU=bzdiQ6iB(7H-*j zqB_$h`Udr_3v^7pjC|ly=jUba;1^48mSRsElJ<@^kH}SyPQy?)Rl~j6SlA|%*_9RN z9R`bxN0~Vy1MgF)pWYC?BG~~ob|sGo`P$2-N@Z}f+Q|MGNtk%~{n3v~HPlshFaqys zvqa`S=7*{b#ka)`BZtOlixxlpAnMQcR1P@D%c4<7vi|P;)&~~5EX|Y8Y!ZpL(4aFA zy7NV>W{T;jqRG-FUPd_-F`*k02l?-(Fcp)m92>jrRkjHUT96u2t!z<31gBl-UTetq zQ!1^)Cl=qn#Wq~(a^XW*RH58`i*jY&;4oPW16V+y(yMm)_SY~z=dEz}7_D$vRjL1a z+h8`ws~b%|J_Ypij^Z0zkF$uF9%MRBZyZUpcobK0%hD;z;G%y^&AQ))A?LV{Ph+B9 zWiDZM{P?!?^UEw3=ov0nls;?b+5Sn}qRf{O-ETS+UV*AYeGujUn+lw`i%+Vv4lLNN31HFQrN8aJVa`b4Jq7b z=$`aY2u@SbJzM@%G~WvbDR1y^Avl3=tOnBW9qxI>QQL1lsd55P(Wo z4MCzn+yk5gGMM}VODNXPIO2Vy97qiP6^%g4dn!DT7$S+qAzaJ*F?cYs2v(*&;=O=8 zkQlZbGJ8DlImm&;&_7z<5A_3yVIo)y;#%I1hy#hGe#^H9qz95hM6pq{C*GcGA4m*? z{?^5Qyc|dj-ED1;<2`6OkXZ6}!+RsZfuvCJeZ<3>8V5-S5<`ADEim}(!R~>?us?LM zALa)VLv~?lPjP#IeIW6#05$^s6BAI$-)_GLfd|J31om4O`-9nmOu!&m1jBI*+XK%7 ziJ>qoyzN^L7uE+71F*ACiyO@k<`^pe+c%+m1IvN!LVn>WU_Egh-X2H{10Dgm&&57i zA4m+5`oryU!|uU6i~SaFFK0QhU8v;mcJ~Le1BoHf-^BYV$$`Ys-SKG8AbVrffyBEb z`ktk+%xtw{Vd>M79@TH;r?KGATboW zpOyevv6np^NDPDg(ehrBaUd~7><{tw(!~Rbf#)**;hO(o5a@1edxqXi!47O0D)HMO z`-#+n#E?Ir1+tfO9!Lxm`wam5InIH^&|i5Mpy$18^*~~n$R9Ygm((3d3=#Vs)%)rB z!Nj{(!>JDPPc6fKArW@kqzEK0Sc?MFCM6elD{FUPwt_VjkdOcqsofc%qO-FLFhRTM zW#PH|Sn;qFxb}K)6UC6*wV!b>}Bs| zDP-qriDhV40I;XKwKdq)-qF_G-U;mK;^OE5_O^DnxAC)gIrWR1U(mg;1gt;(M@oP| zAb=J?FcAr1AQ6K=C51)*D*wL6{*(N;eEU!N_xG_XIo{gVd%1*3L{m0!O5j~MmK#89dK>camC z5be4!7Ki{ti%W z#@^P;-5d+^!giicj=$vwo;HokTKCQSpFk5%VyGxY7zz>IlMx3!~-CD_B&+|%w43HOtqJqdSbr~f86L0}MJ5de?GC53_f1gNJ9 zLnT2_Nl{_RzdG=*8Sp46@ffT%3h0!MK+{B;3DeU&8+co`9eP zrjt-9m@tqCibBP(68=qyO8u$Ty#(d&(g>-40jb?92U*e8$;HYV$P~=oZCxx}JU#vp zaz7E<7xF*AAu$mVU_1fDlEUT)5u-=ZnXJ5Sk0DmCB;Q3oTQ4vv~3idD3{SVP+7Z?Asi0}(3|IR~QZ0vn( z!H)J8Hs%)Y_LjfR_bWBtm+wEp8314aWQ75)3KU>OMI``e1!{)>k^=oIk^J`-1XAYR zr1N(a;;tNIK__c>OD}i7-E4R7{U37fC&@TDMS*Pm-%e;D5J_NU1Ykx4>z|^MP^=v# zu{pz^fQsv4-*pZSMbX_7-k+w#T{%!p7fU;PoRGWkoUkzocDHu4HutdpBQSR-I{V!# zVsZaJkQf*yv6hvR#5%AjWH&HHA>x0{;c;E;clqB*{9nNbh=si{`#a~|P5#t$^_9;l z{;Qn(WA1NX+FkSdJs;C|_p-+Eq68=i_oX8CpR$0mIS>)<_PAv-6>ASmcY9Y)7k6^e zy-6Zi-v!7yEdl5Q)Q5u;;6YLD9-hi}=I%h~g1}nldmn(s5wL+hkcMN|vqZ5;Bv9vt ziHMVn0rOrl;9F53Ul0W*9AYBC=Rf}cSxd)tvadibYiC8SI z+=<*5-z1^+dW{H8_`(fx_AX^)Uvxi1?9=B&0n^l8+jvCca<4KXoq9V^n}nd82Wvm#Az z>GW(k;VmDs-It%gN?Wj)Yjs$wPn-Nc)ALfJOme;TL_bLVOW_xpCxe<(rez7%57PTp zYb4AExmVZ6JiG)Uv~-)+z~X(H$*UfpwU%`5x9_^%FgdQu3%t@y=giWLDbGrWuf1iu zbODbGq&9%hm9C^VK**JTm-~SN=@pf75~aomw45O{117bEG~9jc+;RkE;Z1X)G{&Cw z1673e;Mz;Wm!B~$ysv4TdthDT zw-ex;LdV<*Sl;~?cX2eg^#Eai4+OYHX?LAPNDPQCAs7S(%piaT3y265$ST3=z&eP% zrJ}Q~qcz~)U_}p0>@u+wFoJ`zJz+lxL4j%}SlQh5oVC5JohL{ffE4gWPiv>k*gLM^ zu9AxafC^Uhw%v6xkQh+20&AQ5;yyuOKq|1y3g9Ky*bEOhM*WGKe~v0Rzrrr_V(aAl zheo6%fYQ}J`q|e2Ti=UneQS@OU2n?cF>=4>)YSOEX@Wq!B;>=#qp_!)33{*PxP1t* zKhi}|OUBi7hO5Hht~UQ!CK^in=Z<#=SBmUY1bbWOUnb=B-q*I+E}N2JC0VNUtKuA9 zHR-O*a~@omfh|8yw(YwR+8VfH($aY3;Vtc-SNbbMPsQIAKkwY|pjDW+NhUGYo@0I} z$6e?}z9Qekr=hvQ`@*G3keTmkS!+5P`H1QWS&{RGj|g;Tu9o?+z0fQPJ5@0w{c)2w z36xq;6lk=uHLH8B>|0^>T>4U>aN5x4ZpOAG0@rnWW~1i!J!guNOM8xdYu`e?PjkBI zMBhBg$Xi|eC^@oK5o2Xz?l&t_pH4CPrg1zt)}DggIl9Ens4?ZK0&!X9PBd_dYV zn*p#pdZVUMq1JXwiRZ*fD97tpW%d*7^_1JesL`k$TEwZekICf8k=*+Etdq8rudYHo zKDCE$%3c<%szELFk4SuQiP(%Ek+>7Yj$+-ogcKNQsE)tMi7(%R(h{m_eu<|Ya^2XA z+lvi(=83t(h`NR9m!yZ89{ATukJ-3h+&(7W(wd@KU8Oq!2ZDuaZ8+1zwdGG>l63DIl7p2pVgp76yw* znioo1%odMmc$F9^F7T*4rMVdKkXt2`W>ZOv$>J`JpV9<*!U>fk8dEMl@&sO$mo&$e ze8bN%b8C|p)6j>XWBkY)ei6>VbvNQ1-A68!bQ&_HS_)czl?)nhE=Q$WQd*(#OQbP0 zHeBi9B4o6u!Y`19(auG%BXZA+>kVpCXePWjiBIj2$yOE3+)&`R}jM(2^U(Z zc3mlezqVK@;6!az_=X`on0zsj#*BP1f(Ak1rU!2i-_VEahHqSf$A@o3(F8M(xhMsk ztTl_+h@s&mbyI@NQ!G}}ERZeoa}6<$v2zVEjR|oLF^t74m2=h3D3$ZozEdjau5DH- z=c$cRDhJgrE6MQJa)xhI(6o~;#?t6gEJ|~w(T%BdrO}MJaowg^d`J^dz6htGrdYf~ z(-1Csx;BSKE!_7!yhiCb-PjWvF0ROMQu4(Rnso{{1kF0Rn*!WFyu=7z7G81@E*)NC z0`Cvs$fPMIcZ;FfjwrbbPYEx%0A~v?F@?{Bmt2NBgqIk?--Vax!3DxgjN#4UCHip9 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%0DLuGtu-xSaYlH5QwL*2ot;lD=Q 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 C%UIz6 literal 0 HcmV?d00001 From ab3cf5e126faf679189061a62d28ac2ce854804a Mon Sep 17 00:00:00 2001 From: CamStan Date: Mon, 20 Nov 2023 13:14:03 -0800 Subject: [PATCH 44/46] Docs fix: add tutorial download image The tutorial download image for the slides did not come through in the original PR. Trying again. --- docs/images/UnifyFS-tutorial-May2022.png | Bin 0 -> 218142 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/UnifyFS-tutorial-May2022.png b/docs/images/UnifyFS-tutorial-May2022.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..44b5abc651019a038201ebd127c5d1fcbe01fb5a 100644 GIT binary patch literal 218142 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%0A74>g10!nTf)RJ4$ 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

3)Xz!krdQaB)wto?>(oFeu)n; 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 literal 0 HcmV?d00001 From 738e687e6766359b49214f4db21a2a843e4bc237 Mon Sep 17 00:00:00 2001 From: CamStan Date: Mon, 18 Dec 2023 14:08:32 -0800 Subject: [PATCH 45/46] Update Gitlab CI deps and jobs Update Gitlab CI environments, dependencies, and jobs to reflect what UnifyFS now uses, as well as what is now available on the testing systems. --- .gitlab-ci.yml | 7 +- .gitlab/catalyst.yml | 175 ------------------ .gitlab/lassen.yml | 73 ++++++++ .gitlab/quartz.yml | 136 +++++++------- .spack-env/unifyfs-lsf-gcc11_2_1/spack.yaml | 15 ++ .spack-env/unifyfs-lsf-gcc4_9_3/spack.yaml | 4 +- .spack-env/unifyfs-lsf-gcc8_3_1/spack.yaml | 4 +- .spack-env/unifyfs-slurm-gcc10_2_1/spack.yaml | 15 -- .spack-env/unifyfs-slurm-gcc10_3_1/spack.yaml | 14 ++ .spack-env/unifyfs-slurm-gcc12_1_1/spack.yaml | 14 ++ .spack-env/unifyfs-slurm-gcc4_9_3/spack.yaml | 15 -- 11 files changed, 192 insertions(+), 280 deletions(-) delete mode 100644 .gitlab/catalyst.yml create mode 100644 .spack-env/unifyfs-lsf-gcc11_2_1/spack.yaml delete mode 100644 .spack-env/unifyfs-slurm-gcc10_2_1/spack.yaml create mode 100644 .spack-env/unifyfs-slurm-gcc10_3_1/spack.yaml create mode 100644 .spack-env/unifyfs-slurm-gcc12_1_1/spack.yaml delete mode 100644 .spack-env/unifyfs-slurm-gcc4_9_3/spack.yaml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a768638ed..b6c358e08 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -156,7 +156,9 @@ before_script: # Running with lsf tag here, but this may be too vague as the job may attempt to # use a runner on a system the service user doesn't have permission to access. # If so, move this job to a specific system. -full_clean: +# TODO: this fails when the rm tries to run on the path this job is running +# from. Rewrite to exclude current runner. +.full_clean: stage: clean extends: .base-template variables: @@ -166,12 +168,11 @@ full_clean: tags: - shell before_script: [] - script: rm -rf ${HOME}/.jacamar-ci/* + script: rm -rf ${WORKSPACE}/.jacamar-ci/* needs: [] # System specific jobs include: - local: .gitlab/ascent.yml - - local: .gitlab/catalyst.yml - local: .gitlab/lassen.yml - local: .gitlab/quartz.yml diff --git a/.gitlab/catalyst.yml b/.gitlab/catalyst.yml deleted file mode 100644 index 8ac467b6f..000000000 --- a/.gitlab/catalyst.yml +++ /dev/null @@ -1,175 +0,0 @@ -# Catalyst Templates - -# The RUN_CATALYST variable can be toggled in the Gitlab interface to -# toggle whether jobs should be run on this system. -.catalyst-template: - extends: .base-template - rules: - - if: '$RUN_CATALYST != "ON"' - when: never - - if: '$CI_PIPELINE_SOURCE == "schedule"' - when: never - - when: on_success - -.catalyst-scheduled-template: - extends: .base-template - rules: - - if: '$RUN_CATALYST != "ON"' - when: never - - if: '$CI_PIPELINE_SOURCE == "schedule"' - -.catalyst-shell-template: - extends: .catalyst-template - tags: - - catalyst - - shell - -.catalyst-batch-template: - extends: .catalyst-template - tags: - - catalyst - - batch - -.catalyst-scheduled-shell-template: - extends: .catalyst-scheduled-template - tags: - - catalyst - - shell - -.catalyst-scheduled-batch-template: - extends: .catalyst-scheduled-template - tags: - - catalyst - - batch - -##### All Catalyst Jobs ##### - -### gcc@4.9.3 ### -.catalyst-gcc-4_9_3-template: - variables: - COMPILER: gcc/4.9.3 - CC_COMMAND: "which gcc" - FC_COMMAND: "which gfortran" - SPACK_ENV_NAME: "unifyfs-slurm-gcc4_9_3" - -catalyst-gcc-4_9_3-install-deps: - extends: [.catalyst-shell-template, .catalyst-gcc-4_9_3-template, .install-deps-template] - -catalyst-gcc-4_9_3-build: - extends: [.catalyst-shell-template, .catalyst-gcc-4_9_3-template, .build-template] - needs: ["catalyst-gcc-4_9_3-install-deps"] - -catalyst-gcc-4_9_3-unit-test: - extends: [.slurm-single-node-template, .catalyst-batch-template, .catalyst-gcc-4_9_3-template, .unit-test-template] - needs: ["catalyst-gcc-4_9_3-build"] - -# Integration tests - -catalyst-gcc-4_9_3-integ-test-writeread-posix: - variables: - CI_TEST_OPTIONS: ":: -s writeread -t posix" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-4_9_3-template, .integ-test-template] - needs: ["catalyst-gcc-4_9_3-build"] - -catalyst-gcc-4_9_3-integ-test-writeread-mpiio: - variables: - CI_TEST_OPTIONS: ":: -s writeread -t mpiio" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-4_9_3-template, .integ-test-template] - needs: ["catalyst-gcc-4_9_3-build"] - -catalyst-gcc-4_9_3-integ-test-read-posix: - variables: - CI_TEST_OPTIONS: ":: -s read -t posix" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-4_9_3-template, .integ-test-template] - needs: ["catalyst-gcc-4_9_3-build"] - -catalyst-gcc-4_9_3-integ-test-read-mpiio: - variables: - CI_TEST_OPTIONS: ":: -s read -t mpiio" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-4_9_3-template, .integ-test-template] - needs: ["catalyst-gcc-4_9_3-build"] - -catalyst-gcc-4_9_3-integ-test-pc-all: - variables: - CI_TEST_OPTIONS: ":: -s pc -t all" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-4_9_3-template, .integ-test-template] - needs: ["catalyst-gcc-4_9_3-build"] - -catalyst-gcc-4_9_3-integ-test-stage: - variables: - CI_TEST_OPTIONS: ":: -s stage" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-4_9_3-template, .integ-test-template] - needs: ["catalyst-gcc-4_9_3-build"] - - -### gcc@10.2.1 ### -.catalyst-gcc-10_2_1-template: - variables: - COMPILER: gcc/10.2.1 - CC_COMMAND: "which gcc" - FC_COMMAND: "which gfortran" - SPACK_ENV_NAME: "unifyfs-slurm-gcc10_2_1" - -catalyst-gcc-10_2_1-install-deps: - extends: [.catalyst-shell-template, .catalyst-gcc-10_2_1-template, .install-deps-template] - -catalyst-gcc-10_2_1-build: - extends: [.catalyst-shell-template, .catalyst-gcc-10_2_1-template, .build-template] - needs: ["catalyst-gcc-10_2_1-install-deps"] - -catalyst-gcc-10_2_1-unit-test: - extends: [.slurm-single-node-template, .catalyst-batch-template, .catalyst-gcc-10_2_1-template, .unit-test-template] - needs: ["catalyst-gcc-10_2_1-build"] - -# Integration tests - -catalyst-gcc-10_2_1-integ-test-writeread-posix: - variables: - CI_TEST_OPTIONS: ":: -s writeread -t posix" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-10_2_1-template, .integ-test-template] - needs: ["catalyst-gcc-10_2_1-build"] - -catalyst-gcc-10_2_1-integ-test-writeread-mpiio: - variables: - CI_TEST_OPTIONS: ":: -s writeread -t mpiio" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-10_2_1-template, .integ-test-template] - needs: ["catalyst-gcc-10_2_1-build"] - -catalyst-gcc-10_2_1-integ-test-read-posix: - variables: - CI_TEST_OPTIONS: ":: -s read -t posix" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-10_2_1-template, .integ-test-template] - needs: ["catalyst-gcc-10_2_1-build"] - -catalyst-gcc-10_2_1-integ-test-read-mpiio: - variables: - CI_TEST_OPTIONS: ":: -s read -t mpiio" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-10_2_1-template, .integ-test-template] - needs: ["catalyst-gcc-10_2_1-build"] - -catalyst-gcc-10_2_1-integ-test-pc-all: - variables: - CI_TEST_OPTIONS: ":: -s pc -t all" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-10_2_1-template, .integ-test-template] - needs: ["catalyst-gcc-10_2_1-build"] - -catalyst-gcc-10_2_1-integ-test-stage: - variables: - CI_TEST_OPTIONS: ":: -s stage" - extends: [.slurm-multi-node-template, .catalyst-batch-template, .catalyst-gcc-10_2_1-template, .integ-test-template] - needs: ["catalyst-gcc-10_2_1-build"] - -# Larger Scheduled Stage Job(s) - -catalyst-gcc-10_2_1-scheduled-install-deps: - extends: [.catalyst-scheduled-shell-template, .catalyst-gcc-10_2_1-template, .install-deps-template] - -catalyst-gcc-10_2_1-scheduled-build: - extends: [.catalyst-scheduled-shell-template, .catalyst-gcc-10_2_1-template, .build-template] - needs: ["catalyst-gcc-10_2_1-scheduled-install-deps"] - -catalyst-gcc-10_2_1-integ-test-scheduled-stage: - variables: - CI_TEST_OPTIONS: ":: -s stage" - extends: [.slurm-multi-node-template, .catalyst-scheduled-batch-template, .catalyst-gcc-10_2_1-template, .integ-test-template] - needs: ["catalyst-gcc-10_2_1-scheduled-build"] diff --git a/.gitlab/lassen.yml b/.gitlab/lassen.yml index ea88e384e..791469b9a 100644 --- a/.gitlab/lassen.yml +++ b/.gitlab/lassen.yml @@ -173,3 +173,76 @@ lassen-gcc-8_3_1-integ-test-scheduled-stage: CI_TEST_OPTIONS: ":: -s stage" extends: [.lsf-multi-node-template, .lassen-scheduled-batch-template, .lassen-gcc-8_3_1-template, .integ-test-template] needs: ["lassen-gcc-8_3_1-scheduled-build"] + + +### gcc@11.2.1 ### +.lassen-gcc-11_2_1-template: + variables: + COMPILER: gcc/11.2.1 + CC_COMMAND: "which gcc" + FC_COMMAND: "which gfortran" + SPACK_ENV_NAME: "unifyfs-lsf-gcc11_2_1" + +lassen-gcc-11_2_1-install-deps: + extends: [.lassen-shell-template, .lassen-gcc-11_2_1-template, .install-deps-template] + +lassen-gcc-11_2_1-build: + extends: [.lassen-shell-template, .lassen-gcc-11_2_1-template, .build-template] + needs: ["lassen-gcc-11_2_1-install-deps"] + +lassen-gcc-11_2_1-unit-test: + extends: [.lsf-single-node-template, .lassen-batch-template, .lassen-gcc-11_2_1-template, .unit-test-template] + needs: ["lassen-gcc-11_2_1-build"] + +# Integration tests + +lassen-gcc-11_2_1-integ-test-writeread-posix: + variables: + CI_TEST_OPTIONS: ":: -s writeread -t posix" + extends: [.lsf-multi-node-template, .lassen-batch-template, .lassen-gcc-11_2_1-template, .integ-test-template] + needs: ["lassen-gcc-11_2_1-build"] + +lassen-gcc-11_2_1-integ-test-writeread-mpiio: + variables: + CI_TEST_OPTIONS: ":: -s writeread -t mpiio" + extends: [.lsf-multi-node-template, .lassen-batch-template, .lassen-gcc-11_2_1-template, .integ-test-template] + needs: ["lassen-gcc-11_2_1-build"] + +lassen-gcc-11_2_1-integ-test-read-posix: + variables: + CI_TEST_OPTIONS: ":: -s read -t posix" + extends: [.lsf-multi-node-template, .lassen-batch-template, .lassen-gcc-11_2_1-template, .integ-test-template] + needs: ["lassen-gcc-11_2_1-build"] + +lassen-gcc-11_2_1-integ-test-read-mpiio: + variables: + CI_TEST_OPTIONS: ":: -s read -t mpiio" + extends: [.lsf-multi-node-template, .lassen-batch-template, .lassen-gcc-11_2_1-template, .integ-test-template] + needs: ["lassen-gcc-11_2_1-build"] + +lassen-gcc-11_2_1-integ-test-pc-all: + variables: + CI_TEST_OPTIONS: ":: -s pc -t all" + extends: [.lsf-multi-node-template, .lassen-batch-template, .lassen-gcc-11_2_1-template, .integ-test-template] + needs: ["lassen-gcc-11_2_1-build"] + +lassen-gcc-11_2_1-integ-test-stage: + variables: + CI_TEST_OPTIONS: ":: -s stage" + extends: [.lsf-multi-node-template, .lassen-batch-template, .lassen-gcc-11_2_1-template, .integ-test-template] + needs: ["lassen-gcc-11_2_1-build"] + +# Larger Scheduled Stage Job(s) + +lassen-gcc-11_2_1-scheduled-install-deps: + extends: [.lassen-scheduled-shell-template, .lassen-gcc-11_2_1-template, .install-deps-template] + +lassen-gcc-11_2_1-scheduled-build: + extends: [.lassen-scheduled-shell-template, .lassen-gcc-11_2_1-template, .build-template] + needs: ["lassen-gcc-11_2_1-scheduled-install-deps"] + +lassen-gcc-11_2_1-integ-test-scheduled-stage: + variables: + CI_TEST_OPTIONS: ":: -s stage" + extends: [.lsf-multi-node-template, .lassen-scheduled-batch-template, .lassen-gcc-11_2_1-template, .integ-test-template] + needs: ["lassen-gcc-11_2_1-scheduled-build"] diff --git a/.gitlab/quartz.yml b/.gitlab/quartz.yml index 68af7a780..de2bdef02 100644 --- a/.gitlab/quartz.yml +++ b/.gitlab/quartz.yml @@ -44,132 +44,132 @@ ##### All Quartz Jobs ##### -### gcc@4.9.3 ### -.quartz-gcc-4_9_3-template: +### gcc@10.3.1 ### +.quartz-gcc-10_3_1-template: variables: - COMPILER: gcc/4.9.3 + COMPILER: gcc/10.3.1 CC_COMMAND: "which gcc" FC_COMMAND: "which gfortran" - SPACK_ENV_NAME: "unifyfs-slurm-gcc4_9_3" + SPACK_ENV_NAME: "unifyfs-slurm-gcc10_3_1" -quartz-gcc-4_9_3-install-deps: - extends: [.quartz-shell-template, .quartz-gcc-4_9_3-template, .install-deps-template] +quartz-gcc-10_3_1-install-deps: + extends: [.quartz-shell-template, .quartz-gcc-10_3_1-template, .install-deps-template] -quartz-gcc-4_9_3-build: - extends: [.quartz-shell-template, .quartz-gcc-4_9_3-template, .build-template] - needs: ["quartz-gcc-4_9_3-install-deps"] +quartz-gcc-10_3_1-build: + extends: [.quartz-shell-template, .quartz-gcc-10_3_1-template, .build-template] + needs: ["quartz-gcc-10_3_1-install-deps"] -quartz-gcc-4_9_3-unit-test: - extends: [.slurm-single-node-template, .quartz-batch-template, .quartz-gcc-4_9_3-template, .unit-test-template] - needs: ["quartz-gcc-4_9_3-build"] +quartz-gcc-10_3_1-unit-test: + extends: [.slurm-single-node-template, .quartz-batch-template, .quartz-gcc-10_3_1-template, .unit-test-template] + needs: ["quartz-gcc-10_3_1-build"] # Integration tests -quartz-gcc-4_9_3-integ-test-writeread-posix: +quartz-gcc-10_3_1-integ-test-writeread-posix: variables: CI_TEST_OPTIONS: ":: -s writeread -t posix" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-4_9_3-template, .integ-test-template] - needs: ["quartz-gcc-4_9_3-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_3_1-template, .integ-test-template] + needs: ["quartz-gcc-10_3_1-build"] -quartz-gcc-4_9_3-integ-test-writeread-mpiio: +quartz-gcc-10_3_1-integ-test-writeread-mpiio: variables: CI_TEST_OPTIONS: ":: -s writeread -t mpiio" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-4_9_3-template, .integ-test-template] - needs: ["quartz-gcc-4_9_3-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_3_1-template, .integ-test-template] + needs: ["quartz-gcc-10_3_1-build"] -quartz-gcc-4_9_3-integ-test-read-posix: +quartz-gcc-10_3_1-integ-test-read-posix: variables: CI_TEST_OPTIONS: ":: -s read -t posix" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-4_9_3-template, .integ-test-template] - needs: ["quartz-gcc-4_9_3-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_3_1-template, .integ-test-template] + needs: ["quartz-gcc-10_3_1-build"] -quartz-gcc-4_9_3-integ-test-read-mpiio: +quartz-gcc-10_3_1-integ-test-read-mpiio: variables: CI_TEST_OPTIONS: ":: -s read -t mpiio" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-4_9_3-template, .integ-test-template] - needs: ["quartz-gcc-4_9_3-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_3_1-template, .integ-test-template] + needs: ["quartz-gcc-10_3_1-build"] -quartz-gcc-4_9_3-integ-test-pc-all: +quartz-gcc-10_3_1-integ-test-pc-all: variables: CI_TEST_OPTIONS: ":: -s pc -t all" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-4_9_3-template, .integ-test-template] - needs: ["quartz-gcc-4_9_3-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_3_1-template, .integ-test-template] + needs: ["quartz-gcc-10_3_1-build"] -quartz-gcc-4_9_3-integ-test-stage: +quartz-gcc-10_3_1-integ-test-stage: variables: CI_TEST_OPTIONS: ":: -s stage" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-4_9_3-template, .integ-test-template] - needs: ["quartz-gcc-4_9_3-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_3_1-template, .integ-test-template] + needs: ["quartz-gcc-10_3_1-build"] -### gcc@10.2.1 ### -.quartz-gcc-10_2_1-template: +### gcc@12.1.1 ### +.quartz-gcc-12_1_1-template: variables: - COMPILER: gcc/10.2.1 + COMPILER: gcc/12.1.1 CC_COMMAND: "which gcc" FC_COMMAND: "which gfortran" - SPACK_ENV_NAME: "unifyfs-slurm-gcc10_2_1" + SPACK_ENV_NAME: "unifyfs-slurm-gcc12_1_1" -quartz-gcc-10_2_1-install-deps: - extends: [.quartz-shell-template, .quartz-gcc-10_2_1-template, .install-deps-template] +quartz-gcc-12_1_1-install-deps: + extends: [.quartz-shell-template, .quartz-gcc-12_1_1-template, .install-deps-template] -quartz-gcc-10_2_1-build: - extends: [.quartz-shell-template, .quartz-gcc-10_2_1-template, .build-template] - needs: ["quartz-gcc-10_2_1-install-deps"] +quartz-gcc-12_1_1-build: + extends: [.quartz-shell-template, .quartz-gcc-12_1_1-template, .build-template] + needs: ["quartz-gcc-12_1_1-install-deps"] -quartz-gcc-10_2_1-unit-test: - extends: [.slurm-single-node-template, .quartz-batch-template, .quartz-gcc-10_2_1-template, .unit-test-template] - needs: ["quartz-gcc-10_2_1-build"] +quartz-gcc-12_1_1-unit-test: + extends: [.slurm-single-node-template, .quartz-batch-template, .quartz-gcc-12_1_1-template, .unit-test-template] + needs: ["quartz-gcc-12_1_1-build"] # Integration tests -quartz-gcc-10_2_1-integ-test-writeread-posix: +quartz-gcc-12_1_1-integ-test-writeread-posix: variables: CI_TEST_OPTIONS: ":: -s writeread -t posix" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_2_1-template, .integ-test-template] - needs: ["quartz-gcc-10_2_1-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-12_1_1-template, .integ-test-template] + needs: ["quartz-gcc-12_1_1-build"] -quartz-gcc-10_2_1-integ-test-writeread-mpiio: +quartz-gcc-12_1_1-integ-test-writeread-mpiio: variables: CI_TEST_OPTIONS: ":: -s writeread -t mpiio" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_2_1-template, .integ-test-template] - needs: ["quartz-gcc-10_2_1-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-12_1_1-template, .integ-test-template] + needs: ["quartz-gcc-12_1_1-build"] -quartz-gcc-10_2_1-integ-test-read-posix: +quartz-gcc-12_1_1-integ-test-read-posix: variables: CI_TEST_OPTIONS: ":: -s read -t posix" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_2_1-template, .integ-test-template] - needs: ["quartz-gcc-10_2_1-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-12_1_1-template, .integ-test-template] + needs: ["quartz-gcc-12_1_1-build"] -quartz-gcc-10_2_1-integ-test-read-mpiio: +quartz-gcc-12_1_1-integ-test-read-mpiio: variables: CI_TEST_OPTIONS: ":: -s read -t mpiio" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_2_1-template, .integ-test-template] - needs: ["quartz-gcc-10_2_1-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-12_1_1-template, .integ-test-template] + needs: ["quartz-gcc-12_1_1-build"] -quartz-gcc-10_2_1-integ-test-pc-all: +quartz-gcc-12_1_1-integ-test-pc-all: variables: CI_TEST_OPTIONS: ":: -s pc -t all" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_2_1-template, .integ-test-template] - needs: ["quartz-gcc-10_2_1-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-12_1_1-template, .integ-test-template] + needs: ["quartz-gcc-12_1_1-build"] -quartz-gcc-10_2_1-integ-test-stage: +quartz-gcc-12_1_1-integ-test-stage: variables: CI_TEST_OPTIONS: ":: -s stage" - extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-10_2_1-template, .integ-test-template] - needs: ["quartz-gcc-10_2_1-build"] + extends: [.slurm-multi-node-template, .quartz-batch-template, .quartz-gcc-12_1_1-template, .integ-test-template] + needs: ["quartz-gcc-12_1_1-build"] # Larger Scheduled Stage Job(s) -quartz-gcc-10_2_1-scheduled-install-deps: - extends: [.quartz-scheduled-shell-template, .quartz-gcc-10_2_1-template, .install-deps-template] +quartz-gcc-12_1_1-scheduled-install-deps: + extends: [.quartz-scheduled-shell-template, .quartz-gcc-12_1_1-template, .install-deps-template] -quartz-gcc-10_2_1-scheduled-build: - extends: [.quartz-scheduled-shell-template, .quartz-gcc-10_2_1-template, .build-template] - needs: ["quartz-gcc-10_2_1-scheduled-install-deps"] +quartz-gcc-12_1_1-scheduled-build: + extends: [.quartz-scheduled-shell-template, .quartz-gcc-12_1_1-template, .build-template] + needs: ["quartz-gcc-12_1_1-scheduled-install-deps"] -quartz-gcc-10_2_1-integ-test-scheduled-stage: +quartz-gcc-12_1_1-integ-test-scheduled-stage: variables: CI_TEST_OPTIONS: ":: -s stage" - extends: [.slurm-multi-node-template, .quartz-scheduled-batch-template, .quartz-gcc-10_2_1-template, .integ-test-template] - needs: ["quartz-gcc-10_2_1-scheduled-build"] + extends: [.slurm-multi-node-template, .quartz-scheduled-batch-template, .quartz-gcc-12_1_1-template, .integ-test-template] + needs: ["quartz-gcc-12_1_1-scheduled-build"] diff --git a/.spack-env/unifyfs-lsf-gcc11_2_1/spack.yaml b/.spack-env/unifyfs-lsf-gcc11_2_1/spack.yaml new file mode 100644 index 000000000..7a35fb182 --- /dev/null +++ b/.spack-env/unifyfs-lsf-gcc11_2_1/spack.yaml @@ -0,0 +1,15 @@ +spack: + packages: + all: + compiler: [gcc@11.2.1] + providers: + mpi: [spectrum-mpi] + target: [ppc64le] + specs: + - automake@1.15.1 + - gotcha@1.0.5 + - mochi-margo@0.13.1 ^mercury~boostsys ^libfabric fabrics=rxm,sockets,tcp + - spath~mpi + view: true + concretizer: + unify: true diff --git a/.spack-env/unifyfs-lsf-gcc4_9_3/spack.yaml b/.spack-env/unifyfs-lsf-gcc4_9_3/spack.yaml index 0e039407d..4b74e3f8b 100644 --- a/.spack-env/unifyfs-lsf-gcc4_9_3/spack.yaml +++ b/.spack-env/unifyfs-lsf-gcc4_9_3/spack.yaml @@ -7,8 +7,8 @@ spack: target: [ppc64le] specs: - automake@1.15.1 - - gotcha@develop - - mochi-margo@0.9.6 cflags="-std=gnu99" ^libfabric fabrics=rxm,sockets,tcp + - gotcha@1.0.5 cflags="-std-gnu99" + - mochi-margo@0.13.1 cflags="-std=gnu99" ^mercury~boostsys ^libfabric fabrics=rxm,sockets,tcp - spath~mpi view: true concretizer: diff --git a/.spack-env/unifyfs-lsf-gcc8_3_1/spack.yaml b/.spack-env/unifyfs-lsf-gcc8_3_1/spack.yaml index b95ff4556..d7c0dadb2 100644 --- a/.spack-env/unifyfs-lsf-gcc8_3_1/spack.yaml +++ b/.spack-env/unifyfs-lsf-gcc8_3_1/spack.yaml @@ -7,8 +7,8 @@ spack: target: [ppc64le] specs: - automake@1.15.1 - - gotcha@develop - - mochi-margo@0.9.6 ^libfabric fabrics=rxm,sockets,tcp + - gotcha@1.0.5 + - mochi-margo@0.13.1 ^mercury~boostsys ^libfabric fabrics=rxm,sockets,tcp - spath~mpi view: true concretizer: diff --git a/.spack-env/unifyfs-slurm-gcc10_2_1/spack.yaml b/.spack-env/unifyfs-slurm-gcc10_2_1/spack.yaml deleted file mode 100644 index 71f027c02..000000000 --- a/.spack-env/unifyfs-slurm-gcc10_2_1/spack.yaml +++ /dev/null @@ -1,15 +0,0 @@ -spack: - packages: - all: - compiler: [gcc@10.2.1] - providers: - mpi: [mvapich2] - target: [x86_64] - specs: - - automake@1.15.1 - - gotcha@develop - - mochi-margo@0.9.6 ^libfabric fabrics=rxm,sockets,tcp - - spath~mpi - view: true - concretizer: - unify: true diff --git a/.spack-env/unifyfs-slurm-gcc10_3_1/spack.yaml b/.spack-env/unifyfs-slurm-gcc10_3_1/spack.yaml new file mode 100644 index 000000000..a5a5b273d --- /dev/null +++ b/.spack-env/unifyfs-slurm-gcc10_3_1/spack.yaml @@ -0,0 +1,14 @@ +spack: + packages: + all: + compiler: [gcc@10.3.1] + providers: + mpi: [mvapich2] + target: [x86_64_v3] + specs: + - gotcha@1.0.5 + - mochi-margo@0.13.1 ^mercury~boostsys ^libfabric fabrics=rxm,sockets,tcp + - spath~mpi + view: true + concretizer: + unify: true diff --git a/.spack-env/unifyfs-slurm-gcc12_1_1/spack.yaml b/.spack-env/unifyfs-slurm-gcc12_1_1/spack.yaml new file mode 100644 index 000000000..528a282de --- /dev/null +++ b/.spack-env/unifyfs-slurm-gcc12_1_1/spack.yaml @@ -0,0 +1,14 @@ +spack: + packages: + all: + compiler: [gcc@12.1.1] + providers: + mpi: [mvapich2] + target: [x86_64_v3] + specs: + - gotcha@1.0.5 + - mochi-margo@0.13.1 ^mercury~boostsys ^libfabric fabrics=rxm,sockets,tcp + - spath~mpi + view: true + concretizer: + unify: true diff --git a/.spack-env/unifyfs-slurm-gcc4_9_3/spack.yaml b/.spack-env/unifyfs-slurm-gcc4_9_3/spack.yaml deleted file mode 100644 index 242658840..000000000 --- a/.spack-env/unifyfs-slurm-gcc4_9_3/spack.yaml +++ /dev/null @@ -1,15 +0,0 @@ -spack: - packages: - all: - compiler: [gcc@4.9.3] - providers: - mpi: [mvapich2] - target: [x86_64] - specs: - - automake@1.15.1 - - gotcha@develop - - mochi-margo@0.9.6 cflags="-std=gnu99" ^libfabric fabrics=rxm,sockets,tcp - - spath~mpi - view: true - concretizer: - unify: true From de2c08eeaae838206692a685c5b70dfb684b7d6c Mon Sep 17 00:00:00 2001 From: CamStan Date: Tue, 19 Dec 2023 15:05:04 -0800 Subject: [PATCH 46/46] Docs: Update for v2.0 release Update conf.py versions. Pin a new reproducible build by updating versions of doc dependencies --- docs/conf.py | 4 ++-- docs/requirements.txt | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index ed1a1f33b..c104bcdf0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -54,9 +54,9 @@ # built documents. # # The short X.Y version. -version = u'1.1' +version = u'2.0' # The full version, including alpha/beta/rc tags. -release = u'1.1' +release = u'2.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/requirements.txt b/docs/requirements.txt index 1fd208021..db315dd29 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -6,17 +6,17 @@ # alabaster==0.7.13 # via sphinx -babel==2.13.1 +babel==2.14.0 # via sphinx -certifi==2023.7.22 +certifi==2023.11.17 # via requests -charset-normalizer==3.3.1 +charset-normalizer==3.3.2 # via requests -docutils==0.18.1 +docutils==0.20.1 # via # sphinx # sphinx-rtd-theme -idna==3.4 +idna==3.6 # via requests imagesize==1.4.1 # via sphinx @@ -26,7 +26,7 @@ markupsafe==2.1.3 # via jinja2 packaging==23.2 # via sphinx -pygments==2.16.1 +pygments==2.17.2 # via sphinx requests==2.31.0 # via sphinx @@ -42,7 +42,7 @@ sphinx==7.2.6 # sphinxcontrib-jquery # sphinxcontrib-qthelp # sphinxcontrib-serializinghtml -sphinx-rtd-theme==1.3.0 +sphinx-rtd-theme==2.0.0 # via -r docs/requirements.in sphinxcontrib-applehelp==1.0.7 # via sphinx @@ -58,7 +58,7 @@ sphinxcontrib-qthelp==1.0.6 # via sphinx sphinxcontrib-serializinghtml==1.1.9 # via sphinx -urllib3==2.0.7 +urllib3==2.1.0 # via requests # The following packages are considered to be unsafe in a requirements file:

5uhti*#@U!OBr6mWA+Z!qVA*S#*^LIvu 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%0A(p~;2e|hh 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%0Av! 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