{"action":"created","comment":{"url":"https://api.github.com/repos/open-mpi/ompi/pulls/comments/185287110","pull_request_review_id":116644784,"id":185287110,"diff_hunk":"@@ -0,0 +1,188 @@\n+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */\n+/*\n+ * Copyright (c) 2014-2018 Los Alamos National Security, LLC. All rights\n+ *                         reserved.\n+ * $COPYRIGHT$\n+ *\n+ * Additional copyrights may follow\n+ *\n+ * $HEADER$\n+ */\n+\n+#include \"btl_uct_rdma.h\"\n+\n+void mca_btl_uct_uct_completion (uct_completion_t *uct_comp, ucs_status_t status)\n+{\n+    mca_btl_uct_uct_completion_t *comp = (mca_btl_uct_uct_completion_t *) uct_comp;\n+    /* we may be calling the callback before remote completion. this is in violation of the\n+     * btl interface specification but should not hurt in non-ob1 use cases. if this ever\n+     * becomes a problem we can look at possible solutions. */\n+    comp->cbfunc (comp->btl, comp->endpoint, comp->local_address, comp->local_handle,\n+                  comp->cbcontext, comp->cbdata, UCS_OK == status ? OPAL_SUCCESS : OPAL_ERROR);\n+    mca_btl_uct_uct_completion_release (comp);\n+}\n+\n+mca_btl_uct_uct_completion_t *mca_btl_uct_uct_completion_alloc (mca_btl_base_module_t *btl, mca_btl_base_endpoint_t *endpoint,\n+                                                                void *local_address, mca_btl_base_registration_handle_t *local_handle,\n+                                                                mca_btl_base_rdma_completion_fn_t cbfunc,\n+                                                                void *cbcontext, void *cbdata)\n+{\n+    mca_btl_uct_uct_completion_t *comp = malloc (sizeof (*comp));\n+\n+    comp->uct_comp.func = mca_btl_uct_uct_completion;\n+    comp->uct_comp.count = 1;\n+    comp->btl = btl;\n+    comp->endpoint = endpoint;\n+    comp->local_address = local_address;\n+    comp->local_handle = local_handle;\n+    comp->cbfunc = cbfunc;\n+    comp->cbcontext = cbcontext;\n+    comp->cbdata = cbdata;\n+\n+    return comp;\n+}\n+\n+void mca_btl_uct_uct_completion_release (mca_btl_uct_uct_completion_t *comp)\n+{\n+    free (comp);\n+}\n+\n+int mca_btl_uct_get (mca_btl_base_module_t *btl, mca_btl_base_endpoint_t *endpoint, void *local_address,\n+                      uint64_t remote_address, mca_btl_base_registration_handle_t *local_handle,\n+                      mca_btl_base_registration_handle_t *remote_handle, size_t size, int flags,\n+                      int order, mca_btl_base_rdma_completion_fn_t cbfunc, void *cbcontext, void *cbdata)\n+{\n+    uct_iov_t iov = {.buffer = local_address, .length = size, .stride = 0, .count = 1,\n+                     .memh = MCA_BTL_UCT_REG_REMOTE_TO_LOCAL(local_handle)->uct_memh};\n+    mca_btl_uct_module_t *uct_module = (mca_btl_uct_module_t *) btl;\n+    mca_btl_uct_device_context_t *context = mca_btl_uct_module_get_context (uct_module);\n+    mca_btl_uct_uct_completion_t *comp = NULL;\n+    ucs_status_t ucs_status;\n+    uct_rkey_bundle_t rkey;\n+    uct_ep_h ep_handle;\n+    int rc;\n+\n+    if (cbfunc) {\n+        comp = mca_btl_uct_uct_completion_alloc (btl, endpoint, local_address, local_handle, cbfunc, cbcontext, cbdata);\n+        if (OPAL_UNLIKELY(NULL == comp)) {\n+            return OPAL_ERR_OUT_OF_RESOURCE;\n+        }\n+    }\n+\n+    rc = mca_btl_uct_get_rkey (uct_module, context, endpoint, remote_handle, &rkey, &ep_handle);\n+    if (OPAL_UNLIKELY(OPAL_SUCCESS != rc)) {\n+        mca_btl_uct_uct_completion_release (comp);\n+        return rc;\n+    }\n+\n+    mca_btl_uct_context_lock (context);\n+\n+    ucs_status = uct_ep_get_zcopy (ep_handle, &iov, 1, remote_address, rkey.rkey, &comp->uct_comp);\n+\n+    /* go ahead and progress the worker while we have the lock */\n+    (void) uct_worker_progress (context->uct_worker);\n+\n+    mca_btl_uct_context_unlock (context);\n+\n+    if (UCS_OK == ucs_status && cbfunc) {\n+        /* if UCS_OK is returned the callback will never fire so we have to make the callback\n+         * ourselves */\n+        cbfunc (btl, endpoint, local_address, local_handle, cbcontext, cbdata, OPAL_SUCCESS);\n+        free (comp);\n+    } else if (UCS_INPROGRESS == ucs_status) {\n+        ucs_status = UCS_OK;\n+    }\n+\n+    uct_rkey_release (&rkey);\n+\n+    return OPAL_LIKELY(UCS_OK == ucs_status) ? OPAL_SUCCESS : OPAL_ERR_RESOURCE_BUSY;\n+}\n+\n+int mca_btl_uct_put (mca_btl_base_module_t *btl, mca_btl_base_endpoint_t *endpoint, void *local_address,\n+                      uint64_t remote_address, mca_btl_base_registration_handle_t *local_handle,\n+                      mca_btl_base_registration_handle_t *remote_handle, size_t size, int flags,\n+                      int order, mca_btl_base_rdma_completion_fn_t cbfunc, void *cbcontext, void *cbdata)\n+{\n+    mca_btl_uct_module_t *uct_module = (mca_btl_uct_module_t *) btl;\n+    mca_btl_uct_device_context_t *context = mca_btl_uct_module_get_context (uct_module);\n+    mca_btl_uct_uct_completion_t *comp = NULL;\n+    ucs_status_t ucs_status;\n+    uct_rkey_bundle_t rkey;\n+    uct_ep_h ep_handle;\n+    int rc;\n+\n+    if (size >  uct_module->super.btl_put_local_registration_threshold && cbfunc) {\n+        comp = mca_btl_uct_uct_completion_alloc (btl, endpoint, local_address, local_handle, cbfunc, cbcontext, cbdata);\n+        if (OPAL_UNLIKELY(NULL == comp)) {\n+            return OPAL_ERR_OUT_OF_RESOURCE;\n+        }\n+    }\n+\n+    rc = mca_btl_uct_get_rkey (uct_module, context, endpoint, remote_handle, &rkey, &ep_handle);\n+    if (OPAL_UNLIKELY(OPAL_SUCCESS != rc)) {\n+        mca_btl_uct_uct_completion_release (comp);\n+        return rc;\n+    }\n+\n+    mca_btl_uct_context_lock (context);\n+\n+    if (size > uct_module->super.btl_put_local_registration_threshold) {\n+        uct_iov_t iov = {.buffer = local_address, .length = size, .stride = 0, .count = 1,\n+                         .memh = MCA_BTL_UCT_REG_REMOTE_TO_LOCAL(local_handle)->uct_memh};\n+\n+        ucs_status = uct_ep_put_zcopy (ep_handle, &iov, 1, remote_address, rkey.rkey, &comp->uct_comp);\n+    } else {\n+        ucs_status = uct_ep_put_short (ep_handle, local_address, size, remote_address, rkey.rkey);\n+    }\n+\n+    /* go ahead and progress the worker while we have the lock */\n+    (void) uct_worker_progress (context->uct_worker);\n+\n+    mca_btl_uct_context_unlock (context);\n+\n+    if (UCS_OK == ucs_status && cbfunc) {\n+        /* if UCS_OK is returned the callback will never fire so we have to make the callback\n+         * ourselves. this callback is possibly being made before the data is visible to the\n+         * remote process. */\n+        cbfunc (btl, endpoint, local_address, local_handle, cbcontext, cbdata, OPAL_SUCCESS);\n+        free (comp);\n+    } else if (UCS_INPROGRESS == ucs_status) {\n+        ucs_status = UCS_OK;\n+    }\n+\n+    uct_rkey_release (&rkey);\n+\n+    return OPAL_LIKELY(UCS_OK == ucs_status) ? OPAL_SUCCESS : OPAL_ERR_RESOURCE_BUSY;\n+}\n+\n+int mca_btl_uct_flush (mca_btl_base_module_t *btl, mca_btl_base_endpoint_t *endpoint)\n+{\n+    mca_btl_uct_module_t *uct_module = (mca_btl_uct_module_t *) btl;\n+    ucs_status_t ucs_status;\n+\n+    /* flush all device contexts */\n+    for (int i = 0 ; i < uct_module->uct_worker_count ; ++i) {\n+        mca_btl_uct_device_context_t *context = uct_module->contexts + i;\n+\n+        if (NULL == context->uct_worker) {\n+            continue;\n+        }\n+\n+        mca_btl_uct_context_lock (context);","path":"opal/mca/btl/uct/btl_uct_rdma.c","position":171,"original_position":171,"commit_id":"6a46872a27e38545b4e2780d7daf363947fdacff","original_commit_id":"6a46872a27e38545b4e2780d7daf363947fdacff","user":{"login":"hjelmn","id":1226817,"avatar_url":"https://avatars1.githubusercontent.com/u/1226817?v=4","gravatar_id":"","url":"https://api.github.com/users/hjelmn","html_url":"https://github.com/hjelmn","followers_url":"https://api.github.com/users/hjelmn/followers","following_url":"https://api.github.com/users/hjelmn/following{/other_user}","gists_url":"https://api.github.com/users/hjelmn/gists{/gist_id}","starred_url":"https://api.github.com/users/hjelmn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hjelmn/subscriptions","organizations_url":"https://api.github.com/users/hjelmn/orgs","repos_url":"https://api.github.com/users/hjelmn/repos","events_url":"https://api.github.com/users/hjelmn/events{/privacy}","received_events_url":"https://api.github.com/users/hjelmn/received_events","type":"User","site_admin":false},"body":"Good point. I will make that change.","created_at":"2018-05-01T17:55:45Z","updated_at":"2018-05-01T17:55:46Z","html_url":"https://github.com/open-mpi/ompi/pull/4919#discussion_r185287110","pull_request_url":"https://api.github.com/repos/open-mpi/ompi/pulls/4919","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/open-mpi/ompi/pulls/comments/185287110"},"html":{"href":"https://github.com/open-mpi/ompi/pull/4919#discussion_r185287110"},"pull_request":{"href":"https://api.github.com/repos/open-mpi/ompi/pulls/4919"}},"in_reply_to_id":178486245},"pull_request":{"url":"https://api.github.com/repos/open-mpi/ompi/pulls/4919","id":175347606,"html_url":"https://github.com/open-mpi/ompi/pull/4919","diff_url":"https://github.com/open-mpi/ompi/pull/4919.diff","patch_url":"https://github.com/open-mpi/ompi/pull/4919.patch","issue_url":"https://api.github.com/repos/open-mpi/ompi/issues/4919","number":4919,"state":"open","locked":false,"title":"btl: add an rdma only btl for using uct","user":{"login":"hjelmn","id":1226817,"avatar_url":"https://avatars1.githubusercontent.com/u/1226817?v=4","gravatar_id":"","url":"https://api.github.com/users/hjelmn","html_url":"https://github.com/hjelmn","followers_url":"https://api.github.com/users/hjelmn/followers","following_url":"https://api.github.com/users/hjelmn/following{/other_user}","gists_url":"https://api.github.com/users/hjelmn/gists{/gist_id}","starred_url":"https://api.github.com/users/hjelmn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hjelmn/subscriptions","organizations_url":"https://api.github.com/users/hjelmn/orgs","repos_url":"https://api.github.com/users/hjelmn/repos","events_url":"https://api.github.com/users/hjelmn/events{/privacy}","received_events_url":"https://api.github.com/users/hjelmn/received_events","type":"User","site_admin":false},"body":"This commit adds a new btl for one-sided communication only. This btl\r\nuses the uct layer in openucx. This btl makes use of multiple uct\r\ncontexts and device pinning to provide good performance when using\r\nthreads and osc/rdma. This btl can not be used with pml/ob1 at this\r\ntime. This btl has been tested extensively with osc/rdma and passes\r\nall MTT tests on aries hardware.\r\n\r\nFor now this new component disables itself but can be enabled by\r\nsetting the btl_ucx_transports MCA variable with a comma-delimited\r\nlist of supported memory domains/transport layers. For example:\r\n--mca btl_ucx_transports ugni-ugni_rdma.\r\n\r\nSigned-off-by: Nathan Hjelm <hjelmn@lanl.gov>","created_at":"2018-03-15T18:54:22Z","updated_at":"2018-05-01T17:55:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9f59d9772ca939b28fb38f68a70efd83733c11d6","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":659687073,"url":"https://api.github.com/repos/open-mpi/ompi/labels/Target:%20master","name":"Target: master","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/open-mpi/ompi/pulls/4919/commits","review_comments_url":"https://api.github.com/repos/open-mpi/ompi/pulls/4919/comments","review_comment_url":"https://api.github.com/repos/open-mpi/ompi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/open-mpi/ompi/issues/4919/comments","statuses_url":"https://api.github.com/repos/open-mpi/ompi/statuses/6a46872a27e38545b4e2780d7daf363947fdacff","head":{"label":"hjelmn:btl_uct","ref":"btl_uct","sha":"6a46872a27e38545b4e2780d7daf363947fdacff","user":{"login":"hjelmn","id":1226817,"avatar_url":"https://avatars1.githubusercontent.com/u/1226817?v=4","gravatar_id":"","url":"https://api.github.com/users/hjelmn","html_url":"https://github.com/hjelmn","followers_url":"https://api.github.com/users/hjelmn/followers","following_url":"https://api.github.com/users/hjelmn/following{/other_user}","gists_url":"https://api.github.com/users/hjelmn/gists{/gist_id}","starred_url":"https://api.github.com/users/hjelmn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hjelmn/subscriptions","organizations_url":"https://api.github.com/users/hjelmn/orgs","repos_url":"https://api.github.com/users/hjelmn/repos","events_url":"https://api.github.com/users/hjelmn/events{/privacy}","received_events_url":"https://api.github.com/users/hjelmn/received_events","type":"User","site_admin":false},"repo":{"id":24726896,"name":"ompi","full_name":"hjelmn/ompi","owner":{"login":"hjelmn","id":1226817,"avatar_url":"https://avatars1.githubusercontent.com/u/1226817?v=4","gravatar_id":"","url":"https://api.github.com/users/hjelmn","html_url":"https://github.com/hjelmn","followers_url":"https://api.github.com/users/hjelmn/followers","following_url":"https://api.github.com/users/hjelmn/following{/other_user}","gists_url":"https://api.github.com/users/hjelmn/gists{/gist_id}","starred_url":"https://api.github.com/users/hjelmn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hjelmn/subscriptions","organizations_url":"https://api.github.com/users/hjelmn/orgs","repos_url":"https://api.github.com/users/hjelmn/repos","events_url":"https://api.github.com/users/hjelmn/events{/privacy}","received_events_url":"https://api.github.com/users/hjelmn/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/hjelmn/ompi","description":"Open MPI main development repository","fork":true,"url":"https://api.github.com/repos/hjelmn/ompi","forks_url":"https://api.github.com/repos/hjelmn/ompi/forks","keys_url":"https://api.github.com/repos/hjelmn/ompi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hjelmn/ompi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hjelmn/ompi/teams","hooks_url":"https://api.github.com/repos/hjelmn/ompi/hooks","issue_events_url":"https://api.github.com/repos/hjelmn/ompi/issues/events{/number}","events_url":"https://api.github.com/repos/hjelmn/ompi/events","assignees_url":"https://api.github.com/repos/hjelmn/ompi/assignees{/user}","branches_url":"https://api.github.com/repos/hjelmn/ompi/branches{/branch}","tags_url":"https://api.github.com/repos/hjelmn/ompi/tags","blobs_url":"https://api.github.com/repos/hjelmn/ompi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hjelmn/ompi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hjelmn/ompi/git/refs{/sha}","trees_url":"https://api.github.com/repos/hjelmn/ompi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hjelmn/ompi/statuses/{sha}","languages_url":"https://api.github.com/repos/hjelmn/ompi/languages","stargazers_url":"https://api.github.com/repos/hjelmn/ompi/stargazers","contributors_url":"https://api.github.com/repos/hjelmn/ompi/contributors","subscribers_url":"https://api.github.com/repos/hjelmn/ompi/subscribers","subscription_url":"https://api.github.com/repos/hjelmn/ompi/subscription","commits_url":"https://api.github.com/repos/hjelmn/ompi/commits{/sha}","git_commits_url":"https://api.github.com/repos/hjelmn/ompi/git/commits{/sha}","comments_url":"https://api.github.com/repos/hjelmn/ompi/comments{/number}","issue_comment_url":"https://api.github.com/repos/hjelmn/ompi/issues/comments{/number}","contents_url":"https://api.github.com/repos/hjelmn/ompi/contents/{+path}","compare_url":"https://api.github.com/repos/hjelmn/ompi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hjelmn/ompi/merges","archive_url":"https://api.github.com/repos/hjelmn/ompi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hjelmn/ompi/downloads","issues_url":"https://api.github.com/repos/hjelmn/ompi/issues{/number}","pulls_url":"https://api.github.com/repos/hjelmn/ompi/pulls{/number}","milestones_url":"https://api.github.com/repos/hjelmn/ompi/milestones{/number}","notifications_url":"https://api.github.com/repos/hjelmn/ompi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hjelmn/ompi/labels{/name}","releases_url":"https://api.github.com/repos/hjelmn/ompi/releases{/id}","deployments_url":"https://api.github.com/repos/hjelmn/ompi/deployments","created_at":"2014-10-02T16:27:20Z","updated_at":"2016-06-06T04:15:34Z","pushed_at":"2018-04-26T18:47:27Z","git_url":"git://github.com/hjelmn/ompi.git","ssh_url":"git@github.com:hjelmn/ompi.git","clone_url":"https://github.com/hjelmn/ompi.git","svn_url":"https://github.com/hjelmn/ompi","homepage":null,"size":110539,"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":1,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"open-mpi:master","ref":"master","sha":"5f58e7b9610458df539465dee7e5a6ae4a3211e8","user":{"login":"open-mpi","id":2165682,"avatar_url":"https://avatars1.githubusercontent.com/u/2165682?v=4","gravatar_id":"","url":"https://api.github.com/users/open-mpi","html_url":"https://github.com/open-mpi","followers_url":"https://api.github.com/users/open-mpi/followers","following_url":"https://api.github.com/users/open-mpi/following{/other_user}","gists_url":"https://api.github.com/users/open-mpi/gists{/gist_id}","starred_url":"https://api.github.com/users/open-mpi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/open-mpi/subscriptions","organizations_url":"https://api.github.com/users/open-mpi/orgs","repos_url":"https://api.github.com/users/open-mpi/repos","events_url":"https://api.github.com/users/open-mpi/events{/privacy}","received_events_url":"https://api.github.com/users/open-mpi/received_events","type":"Organization","site_admin":false},"repo":{"id":24107001,"name":"ompi","full_name":"open-mpi/ompi","owner":{"login":"open-mpi","id":2165682,"avatar_url":"https://avatars1.githubusercontent.com/u/2165682?v=4","gravatar_id":"","url":"https://api.github.com/users/open-mpi","html_url":"https://github.com/open-mpi","followers_url":"https://api.github.com/users/open-mpi/followers","following_url":"https://api.github.com/users/open-mpi/following{/other_user}","gists_url":"https://api.github.com/users/open-mpi/gists{/gist_id}","starred_url":"https://api.github.com/users/open-mpi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/open-mpi/subscriptions","organizations_url":"https://api.github.com/users/open-mpi/orgs","repos_url":"https://api.github.com/users/open-mpi/repos","events_url":"https://api.github.com/users/open-mpi/events{/privacy}","received_events_url":"https://api.github.com/users/open-mpi/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/open-mpi/ompi","description":"Open MPI main development repository","fork":false,"url":"https://api.github.com/repos/open-mpi/ompi","forks_url":"https://api.github.com/repos/open-mpi/ompi/forks","keys_url":"https://api.github.com/repos/open-mpi/ompi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/open-mpi/ompi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/open-mpi/ompi/teams","hooks_url":"https://api.github.com/repos/open-mpi/ompi/hooks","issue_events_url":"https://api.github.com/repos/open-mpi/ompi/issues/events{/number}","events_url":"https://api.github.com/repos/open-mpi/ompi/events","assignees_url":"https://api.github.com/repos/open-mpi/ompi/assignees{/user}","branches_url":"https://api.github.com/repos/open-mpi/ompi/branches{/branch}","tags_url":"https://api.github.com/repos/open-mpi/ompi/tags","blobs_url":"https://api.github.com/repos/open-mpi/ompi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/open-mpi/ompi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/open-mpi/ompi/git/refs{/sha}","trees_url":"https://api.github.com/repos/open-mpi/ompi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/open-mpi/ompi/statuses/{sha}","languages_url":"https://api.github.com/repos/open-mpi/ompi/languages","stargazers_url":"https://api.github.com/repos/open-mpi/ompi/stargazers","contributors_url":"https://api.github.com/repos/open-mpi/ompi/contributors","subscribers_url":"https://api.github.com/repos/open-mpi/ompi/subscribers","subscription_url":"https://api.github.com/repos/open-mpi/ompi/subscription","commits_url":"https://api.github.com/repos/open-mpi/ompi/commits{/sha}","git_commits_url":"https://api.github.com/repos/open-mpi/ompi/git/commits{/sha}","comments_url":"https://api.github.com/repos/open-mpi/ompi/comments{/number}","issue_comment_url":"https://api.github.com/repos/open-mpi/ompi/issues/comments{/number}","contents_url":"https://api.github.com/repos/open-mpi/ompi/contents/{+path}","compare_url":"https://api.github.com/repos/open-mpi/ompi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/open-mpi/ompi/merges","archive_url":"https://api.github.com/repos/open-mpi/ompi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/open-mpi/ompi/downloads","issues_url":"https://api.github.com/repos/open-mpi/ompi/issues{/number}","pulls_url":"https://api.github.com/repos/open-mpi/ompi/pulls{/number}","milestones_url":"https://api.github.com/repos/open-mpi/ompi/milestones{/number}","notifications_url":"https://api.github.com/repos/open-mpi/ompi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/open-mpi/ompi/labels{/name}","releases_url":"https://api.github.com/repos/open-mpi/ompi/releases{/id}","deployments_url":"https://api.github.com/repos/open-mpi/ompi/deployments","created_at":"2014-09-16T16:08:30Z","updated_at":"2018-05-01T17:37:25Z","pushed_at":"2018-05-01T17:37:15Z","git_url":"git://github.com/open-mpi/ompi.git","ssh_url":"git@github.com:open-mpi/ompi.git","clone_url":"https://github.com/open-mpi/ompi.git","svn_url":"https://github.com/open-mpi/ompi","homepage":null,"size":114889,"stargazers_count":521,"watchers_count":521,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":320,"mirror_url":null,"archived":false,"open_issues_count":371,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":320,"open_issues":371,"watchers":521,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/open-mpi/ompi/pulls/4919"},"html":{"href":"https://github.com/open-mpi/ompi/pull/4919"},"issue":{"href":"https://api.github.com/repos/open-mpi/ompi/issues/4919"},"comments":{"href":"https://api.github.com/repos/open-mpi/ompi/issues/4919/comments"},"review_comments":{"href":"https://api.github.com/repos/open-mpi/ompi/pulls/4919/comments"},"review_comment":{"href":"https://api.github.com/repos/open-mpi/ompi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/open-mpi/ompi/pulls/4919/commits"},"statuses":{"href":"https://api.github.com/repos/open-mpi/ompi/statuses/6a46872a27e38545b4e2780d7daf363947fdacff"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"hjelmn"}}