{"action":"created","comment":{"url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/comments/180568548","pull_request_review_id":111012068,"id":180568548,"diff_hunk":"@@ -18,29 +29,217 @@ static UCS_CLASS_INIT_FUNC(uct_cuda_ipc_ep_t, uct_iface_t *tl_iface,\n     uct_cuda_ipc_iface_t *iface = ucs_derived_of(tl_iface, uct_cuda_ipc_iface_t);\n \n     UCS_CLASS_CALL_SUPER_INIT(uct_base_ep_t, &iface->super);\n+    sglib_hashed_uct_cuda_ipc_rem_seg_t_init(self->rem_segments_hash);\n \n     return UCS_OK;\n }\n \n static UCS_CLASS_CLEANUP_FUNC(uct_cuda_ipc_ep_t)\n {\n+    struct sglib_hashed_uct_cuda_ipc_rem_seg_t_iterator iter;\n+    uct_cuda_ipc_rem_seg_t *remote_seg;\n+    ucs_status_t status;\n+\n+    for (remote_seg = sglib_hashed_uct_cuda_ipc_rem_seg_t_it_init(&iter, self->rem_segments_hash);\n+         remote_seg != NULL;\n+         remote_seg = sglib_hashed_uct_cuda_ipc_rem_seg_t_it_next(&iter)) {\n+            sglib_hashed_uct_cuda_ipc_rem_seg_t_delete(self->rem_segments_hash,\n+                                                       remote_seg);\n+            status = UCT_CUDADRV_FUNC(cuIpcCloseMemHandle(remote_seg->d_bptr));\n+            if (UCS_OK != status) {\n+                ucs_fatal(\"cuIpcCloseMemHandle failed. d_ptr :%p\",\n+                          (void *) remote_seg->d_bptr);\n+            }\n+            ucs_free(remote_seg);\n+    }\n }\n \n UCS_CLASS_DEFINE(uct_cuda_ipc_ep_t, uct_base_ep_t)\n UCS_CLASS_DEFINE_NEW_FUNC(uct_cuda_ipc_ep_t, uct_ep_t, uct_iface_t*,\n                           const uct_device_addr_t *, const uct_iface_addr_t *);\n UCS_CLASS_DEFINE_DELETE_FUNC(uct_cuda_ipc_ep_t, uct_ep_t);\n \n-ucs_status_t uct_cuda_ipc_ep_get_zcopy(uct_ep_h tl_ep, const uct_iov_t *iov, size_t iovcnt,\n-                                       uint64_t remote_addr, uct_rkey_t rkey,\n-                                       uct_completion_t *comp)\n+#define uct_cuda_ipc_trace_data(_remote_addr, _rkey, _fmt, ...)     \\\n+    ucs_trace_data(_fmt \" to %\"PRIx64\"(%+ld)\", ## __VA_ARGS__, (_remote_addr), \\\n+                   (_rkey))\n+\n+#define UCT_CUDA_IPC_ZERO_LENGTH_POST(len)                      \\\n+    do {                                                        \\\n+        if (0 == len) {                                         \\\n+            ucs_trace_data(\"Zero length request: skip it\");     \\\n+            return UCS_OK;                                      \\\n+        }                                                       \\\n+    } while(0);\n+\n+void *uct_cuda_ipc_ep_attach_rem_seg(uct_cuda_ipc_ep_t *ep,\n+                                     uct_cuda_ipc_iface_t *iface,\n+                                     uct_cuda_ipc_key_t *rkey)\n {\n-    return UCS_OK;\n+    uct_cuda_ipc_rem_seg_t *rem_seg, search;\n+    ucs_status_t status;\n+\n+    /* Are all other members of *search* zeroed out? or ignored?*/\n+    search.ph = rkey->ph;\n+    rem_seg = sglib_hashed_uct_cuda_ipc_rem_seg_t_find_member(ep->rem_segments_hash, &search);\n+    if (rem_seg == NULL) {\n+        rem_seg = ucs_malloc(sizeof(*rem_seg), \"rem_seg\");\n+        if (rem_seg == NULL) {\n+            ucs_fatal(\"Failed to allocated memory for a remote segment. %m\");\n+        }\n+        rem_seg->ph      = rkey->ph;\n+        rem_seg->dev_num = rkey->dev_num;\n+        /* Attach memory to own GPU address space */\n+        status = UCT_CUDADRV_FUNC(cuIpcOpenMemHandle((CUdeviceptr *) &rem_seg->d_bptr,\n+                                                     rkey->ph,\n+                                                     CU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS));\n+        if (UCS_OK != status) {\n+            ucs_fatal(\"cuIpcOpenMemHandle failed\");\n+        }\n+        rem_seg->b_len = rkey->b_rem_len;\n+        /* put the base address into the ep's hash table */\n+        sglib_hashed_uct_cuda_ipc_rem_seg_t_add(ep->rem_segments_hash,\n+                                                rem_seg);\n+    }\n+    return (void *) rem_seg->d_bptr;\n }\n \n-ucs_status_t uct_cuda_ipc_ep_put_zcopy(uct_ep_h tl_ep, const uct_iov_t *iov, size_t iovcnt,\n-                                       uint64_t remote_addr, uct_rkey_t rkey,\n-                                       uct_completion_t *comp)\n+#define UCT_CUDA_IPC_GET_MAPPED_ADDR(key, cu_device, remote_addr,       \\\n+                                     mapped_rem_addr, iov)              \\\n+    do {                                                                \\\n+        void *mapped_rem_base_addr = NULL;                              \\\n+        int  offset                = 0;                                 \\\n+        CUresult cu_err;                                                \\\n+        CUresult cu_ret;                                                \\\n+        CUcontext local_ptr_ctx;                                        \\\n+        CUcontext remote_ptr_ctx;                                       \\\n+        CUpointer_attribute  attribute;                                 \\\n+                                                                        \\\n+        if (key->dev_num == (int) cu_device) {                          \\\n+            attribute = CU_POINTER_ATTRIBUTE_CONTEXT;                   \\\n+            cu_ret    = cuPointerGetAttribute((void *) &remote_ptr_ctx, attribute, \\\n+                                              (CUdeviceptr) remote_addr); \\\n+            if (CUDA_ERROR_INVALID_VALUE != cu_ret) {                   \\\n+                /* another process's contex using the same device */    \\\n+                cu_err = cu_ret;                                        \\\n+            } else if (cu_ret != CUDA_SUCCESS) {                        \\\n+                cuGetErrorString(cu_ret, &cu_err_str);                  \\\n+                ucs_error(\"cuPointerGetAttribute failed ret:%s\", cu_err_str); \\\n+                return UCS_ERR_IO_ERROR;                                \\\n+            }                                                           \\\n+            /* assumes iov is uniformly on device or not */             \\\n+            cu_ret = cuPointerGetAttribute((void *) &local_ptr_ctx, attribute, \\\n+                                           (CUdeviceptr) iov[0].buffer); \\\n+            if (cu_ret != CUDA_SUCCESS) {                               \\\n+                cuGetErrorString(cu_ret, &cu_err_str);                  \\\n+                ucs_error(\"cuPointerGetAttribute failed ret:%s\", cu_err_str); \\\n+                return UCS_ERR_IO_ERROR;                                \\\n+            }                                                           \\\n+        }                                                               \\\n+        if ((CUDA_SUCCESS == cu_err) && (key->dev_num == (int) cu_device) && \\\n+            (local_ptr_ctx == remote_ptr_ctx)) {                        \\\n+            mapped_rem_addr = (void *) remote_addr;                     \\\n+        }                                                               \\\n+        else {                                                          \\\n+            /* Is uintptr_t equivalent to uint64_t?  */                 \\\n+            mapped_rem_base_addr = uct_cuda_ipc_ep_attach_rem_seg(ep, iface, \\\n+                                                                  key); \\\n+            offset = (uintptr_t) remote_addr - (uintptr_t) key->d_rem_bptr; \\\n+            if (offset > key->b_rem_len) {                              \\\n+                ucs_fatal(\"Access memory outside memory range attempt\\n\"); \\\n+            }                                                           \\\n+            mapped_rem_addr = (void *) ((uintptr_t) mapped_rem_base_addr + offset); \\\n+        }                                                               \\\n+    } while(0);\n+\n+static UCS_F_ALWAYS_INLINE ucs_status_t\n+uct_cuda_ipc_post_cuda_async_copy(uct_ep_h tl_ep, void *dst, void *src,\n+                                  size_t length, uct_cuda_ipc_iface_t *iface,\n+                                  uct_cuda_ipc_key_t *key, uct_completion_t *comp)\n {\n-    return UCS_OK;\n+    ucs_status_t status = UCS_OK;\n+    uct_cuda_ipc_event_desc_t *cuda_ipc_event;\n+    CUstream stream;\n+    ucs_queue_head_t *outstanding_queue;\n+\n+    if (!length) return UCS_OK;\n+    if (0 == iface->streams_initialized) {\n+        status = uct_cuda_ipc_iface_init_streams(iface);\n+        if (UCS_OK != status) return status;\n+    }\n+    stream = iface->stream_d2d[key->dev_num];\n+    outstanding_queue = &iface->outstanding_d2d_event_q;\n+    cuda_ipc_event = ucs_mpool_get(&iface->event_desc);\n+    if (ucs_unlikely(cuda_ipc_event == NULL)) {\n+        ucs_error(\"Failed to allocate cuda_ipc event object\");\n+        return UCS_ERR_NO_MEMORY;\n+    }\n+    status = UCT_CUDADRV_FUNC(cuMemcpyDtoDAsync((CUdeviceptr) dst,\n+                                                (CUdeviceptr) src,\n+                                                length, stream));\n+    if (UCS_OK != status) {\n+        ucs_error(\"cuMemcpyDtoD Failed\");\n+        return UCS_ERR_IO_ERROR;\n+    }\n+    status = UCT_CUDADRV_FUNC(cuEventRecord(cuda_ipc_event->event, stream));\n+    if (UCS_OK != status) {\n+        ucs_error(\"cuEventRecord Failed\");\n+        return UCS_ERR_IO_ERROR;\n+    }\n+    ucs_queue_push(outstanding_queue, &cuda_ipc_event->queue);\n+    cuda_ipc_event->comp = comp;\n+    ucs_info(\"cuMemcpyDtoDAsync issued :%p dst:%p, src:%p  len:%ld\",\n+             cuda_ipc_event, dst, src, length);\n+    return UCS_INPROGRESS;\n+}\n+\n+ucs_status_t uct_cuda_ipc_ep_get_zcopy(uct_ep_h tl_ep, const uct_iov_t *iov,\n+                                       size_t iovcnt, uint64_t remote_addr,\n+                                       uct_rkey_t rkey, uct_completion_t *comp)\n+{\n+    uct_cuda_ipc_iface_t *iface = ucs_derived_of(tl_ep->iface, uct_cuda_ipc_iface_t);\n+    uct_cuda_ipc_key_t   *key   = (uct_cuda_ipc_key_t *) rkey;\n+    uct_cuda_ipc_ep_t    *ep    = ucs_derived_of(tl_ep, uct_cuda_ipc_ep_t);\n+    ucs_status_t         status = UCS_OK;\n+    void                 *mapped_rem_addr = NULL;","path":"src/uct/cuda/cuda_ipc/cuda_ipc_ep.c","position":210,"original_position":210,"commit_id":"9359bdd281a6305d5a8071c1dabed34a308e89df","original_commit_id":"9359bdd281a6305d5a8071c1dabed34a308e89df","user":{"login":"bureddy","id":4983664,"avatar_url":"https://avatars3.githubusercontent.com/u/4983664?v=4","gravatar_id":"","url":"https://api.github.com/users/bureddy","html_url":"https://github.com/bureddy","followers_url":"https://api.github.com/users/bureddy/followers","following_url":"https://api.github.com/users/bureddy/following{/other_user}","gists_url":"https://api.github.com/users/bureddy/gists{/gist_id}","starred_url":"https://api.github.com/users/bureddy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bureddy/subscriptions","organizations_url":"https://api.github.com/users/bureddy/orgs","repos_url":"https://api.github.com/users/bureddy/repos","events_url":"https://api.github.com/users/bureddy/events{/privacy}","received_events_url":"https://api.github.com/users/bureddy/received_events","type":"User","site_admin":false},"body":"vairbale name  are still aligned here","created_at":"2018-04-10T21:09:24Z","updated_at":"2018-04-10T21:09:24Z","html_url":"https://github.com/Akshay-Venkatesh/ucx/pull/10#discussion_r180568548","pull_request_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/10","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/comments/180568548"},"html":{"href":"https://github.com/Akshay-Venkatesh/ucx/pull/10#discussion_r180568548"},"pull_request":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/10"}}},"pull_request":{"url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/10","id":180433981,"html_url":"https://github.com/Akshay-Venkatesh/ucx/pull/10","diff_url":"https://github.com/Akshay-Venkatesh/ucx/pull/10.diff","patch_url":"https://github.com/Akshay-Venkatesh/ucx/pull/10.patch","issue_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues/10","number":10,"state":"open","locked":false,"title":"adding cuda-ipc uct changes on top master cuda-ipc skeleton","user":{"login":"Akshay-Venkatesh","id":3201794,"avatar_url":"https://avatars3.githubusercontent.com/u/3201794?v=4","gravatar_id":"","url":"https://api.github.com/users/Akshay-Venkatesh","html_url":"https://github.com/Akshay-Venkatesh","followers_url":"https://api.github.com/users/Akshay-Venkatesh/followers","following_url":"https://api.github.com/users/Akshay-Venkatesh/following{/other_user}","gists_url":"https://api.github.com/users/Akshay-Venkatesh/gists{/gist_id}","starred_url":"https://api.github.com/users/Akshay-Venkatesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Akshay-Venkatesh/subscriptions","organizations_url":"https://api.github.com/users/Akshay-Venkatesh/orgs","repos_url":"https://api.github.com/users/Akshay-Venkatesh/repos","events_url":"https://api.github.com/users/Akshay-Venkatesh/events{/privacy}","received_events_url":"https://api.github.com/users/Akshay-Venkatesh/received_events","type":"User","site_admin":false},"body":"@bureddy\r\n\r\nDeva,\r\n\r\nI've added changes as requested on rebased master. The changes still have ~800 insertions. Any thoughts on how I can reduce this?","created_at":"2018-04-09T21:34:51Z","updated_at":"2018-04-10T21:09:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"36eb939615fbe4b42f755f64dc83c401ca7f28de","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/10/commits","review_comments_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/10/comments","review_comment_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues/10/comments","statuses_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/statuses/9359bdd281a6305d5a8071c1dabed34a308e89df","head":{"label":"Akshay-Venkatesh:cuda-ipc-merge-with-skeleton","ref":"cuda-ipc-merge-with-skeleton","sha":"9359bdd281a6305d5a8071c1dabed34a308e89df","user":{"login":"Akshay-Venkatesh","id":3201794,"avatar_url":"https://avatars3.githubusercontent.com/u/3201794?v=4","gravatar_id":"","url":"https://api.github.com/users/Akshay-Venkatesh","html_url":"https://github.com/Akshay-Venkatesh","followers_url":"https://api.github.com/users/Akshay-Venkatesh/followers","following_url":"https://api.github.com/users/Akshay-Venkatesh/following{/other_user}","gists_url":"https://api.github.com/users/Akshay-Venkatesh/gists{/gist_id}","starred_url":"https://api.github.com/users/Akshay-Venkatesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Akshay-Venkatesh/subscriptions","organizations_url":"https://api.github.com/users/Akshay-Venkatesh/orgs","repos_url":"https://api.github.com/users/Akshay-Venkatesh/repos","events_url":"https://api.github.com/users/Akshay-Venkatesh/events{/privacy}","received_events_url":"https://api.github.com/users/Akshay-Venkatesh/received_events","type":"User","site_admin":false},"repo":{"id":104597397,"name":"ucx","full_name":"Akshay-Venkatesh/ucx","owner":{"login":"Akshay-Venkatesh","id":3201794,"avatar_url":"https://avatars3.githubusercontent.com/u/3201794?v=4","gravatar_id":"","url":"https://api.github.com/users/Akshay-Venkatesh","html_url":"https://github.com/Akshay-Venkatesh","followers_url":"https://api.github.com/users/Akshay-Venkatesh/followers","following_url":"https://api.github.com/users/Akshay-Venkatesh/following{/other_user}","gists_url":"https://api.github.com/users/Akshay-Venkatesh/gists{/gist_id}","starred_url":"https://api.github.com/users/Akshay-Venkatesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Akshay-Venkatesh/subscriptions","organizations_url":"https://api.github.com/users/Akshay-Venkatesh/orgs","repos_url":"https://api.github.com/users/Akshay-Venkatesh/repos","events_url":"https://api.github.com/users/Akshay-Venkatesh/events{/privacy}","received_events_url":"https://api.github.com/users/Akshay-Venkatesh/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Akshay-Venkatesh/ucx","description":"Unified Communication X  (mailing list - https://elist.ornl.gov/mailman/listinfo/ucx-group): ","fork":true,"url":"https://api.github.com/repos/Akshay-Venkatesh/ucx","forks_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/forks","keys_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/teams","hooks_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/hooks","issue_events_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues/events{/number}","events_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/events","assignees_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/assignees{/user}","branches_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/branches{/branch}","tags_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/tags","blobs_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/refs{/sha}","trees_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/statuses/{sha}","languages_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/languages","stargazers_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/stargazers","contributors_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/contributors","subscribers_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/subscribers","subscription_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/subscription","commits_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/commits{/sha}","git_commits_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/commits{/sha}","comments_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/comments{/number}","issue_comment_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues/comments{/number}","contents_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/contents/{+path}","compare_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/merges","archive_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/downloads","issues_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues{/number}","pulls_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls{/number}","milestones_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/milestones{/number}","notifications_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/labels{/name}","releases_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/releases{/id}","deployments_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/deployments","created_at":"2017-09-23T20:34:53Z","updated_at":"2018-04-09T17:00:40Z","pushed_at":"2018-04-10T19:14:39Z","git_url":"git://github.com/Akshay-Venkatesh/ucx.git","ssh_url":"git@github.com:Akshay-Venkatesh/ucx.git","clone_url":"https://github.com/Akshay-Venkatesh/ucx.git","svn_url":"https://github.com/Akshay-Venkatesh/ucx","homepage":"http://www.openucx.org","size":12356,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"base":{"label":"Akshay-Venkatesh:master","ref":"master","sha":"ec8795b9ea89bdaca767ff62ebde49612da87d36","user":{"login":"Akshay-Venkatesh","id":3201794,"avatar_url":"https://avatars3.githubusercontent.com/u/3201794?v=4","gravatar_id":"","url":"https://api.github.com/users/Akshay-Venkatesh","html_url":"https://github.com/Akshay-Venkatesh","followers_url":"https://api.github.com/users/Akshay-Venkatesh/followers","following_url":"https://api.github.com/users/Akshay-Venkatesh/following{/other_user}","gists_url":"https://api.github.com/users/Akshay-Venkatesh/gists{/gist_id}","starred_url":"https://api.github.com/users/Akshay-Venkatesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Akshay-Venkatesh/subscriptions","organizations_url":"https://api.github.com/users/Akshay-Venkatesh/orgs","repos_url":"https://api.github.com/users/Akshay-Venkatesh/repos","events_url":"https://api.github.com/users/Akshay-Venkatesh/events{/privacy}","received_events_url":"https://api.github.com/users/Akshay-Venkatesh/received_events","type":"User","site_admin":false},"repo":{"id":104597397,"name":"ucx","full_name":"Akshay-Venkatesh/ucx","owner":{"login":"Akshay-Venkatesh","id":3201794,"avatar_url":"https://avatars3.githubusercontent.com/u/3201794?v=4","gravatar_id":"","url":"https://api.github.com/users/Akshay-Venkatesh","html_url":"https://github.com/Akshay-Venkatesh","followers_url":"https://api.github.com/users/Akshay-Venkatesh/followers","following_url":"https://api.github.com/users/Akshay-Venkatesh/following{/other_user}","gists_url":"https://api.github.com/users/Akshay-Venkatesh/gists{/gist_id}","starred_url":"https://api.github.com/users/Akshay-Venkatesh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Akshay-Venkatesh/subscriptions","organizations_url":"https://api.github.com/users/Akshay-Venkatesh/orgs","repos_url":"https://api.github.com/users/Akshay-Venkatesh/repos","events_url":"https://api.github.com/users/Akshay-Venkatesh/events{/privacy}","received_events_url":"https://api.github.com/users/Akshay-Venkatesh/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Akshay-Venkatesh/ucx","description":"Unified Communication X  (mailing list - https://elist.ornl.gov/mailman/listinfo/ucx-group): ","fork":true,"url":"https://api.github.com/repos/Akshay-Venkatesh/ucx","forks_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/forks","keys_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/teams","hooks_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/hooks","issue_events_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues/events{/number}","events_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/events","assignees_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/assignees{/user}","branches_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/branches{/branch}","tags_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/tags","blobs_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/refs{/sha}","trees_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/statuses/{sha}","languages_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/languages","stargazers_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/stargazers","contributors_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/contributors","subscribers_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/subscribers","subscription_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/subscription","commits_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/commits{/sha}","git_commits_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/git/commits{/sha}","comments_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/comments{/number}","issue_comment_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues/comments{/number}","contents_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/contents/{+path}","compare_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/merges","archive_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/downloads","issues_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues{/number}","pulls_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls{/number}","milestones_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/milestones{/number}","notifications_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/labels{/name}","releases_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/releases{/id}","deployments_url":"https://api.github.com/repos/Akshay-Venkatesh/ucx/deployments","created_at":"2017-09-23T20:34:53Z","updated_at":"2018-04-09T17:00:40Z","pushed_at":"2018-04-10T19:14:39Z","git_url":"git://github.com/Akshay-Venkatesh/ucx.git","ssh_url":"git@github.com:Akshay-Venkatesh/ucx.git","clone_url":"https://github.com/Akshay-Venkatesh/ucx.git","svn_url":"https://github.com/Akshay-Venkatesh/ucx","homepage":"http://www.openucx.org","size":12356,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/10"},"html":{"href":"https://github.com/Akshay-Venkatesh/ucx/pull/10"},"issue":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues/10"},"comments":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/10/comments"},"review_comment":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/pulls/10/commits"},"statuses":{"href":"https://api.github.com/repos/Akshay-Venkatesh/ucx/statuses/9359bdd281a6305d5a8071c1dabed34a308e89df"}},"author_association":"OWNER"}}
{"actor":{"display_login":"bureddy"}}