{"action":"created","comment":{"url":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/comments/64592510","id":64592510,"diff_hunk":"@@ -96,143 +184,88 @@ static inline void __gnix_vc_set_ht_key(void *gnix_addr,\n  * vc_ptr is non-null.\n  */\n static int __gnix_vc_get_vc_by_fi_addr(struct gnix_fid_ep *ep, fi_addr_t dest_addr,\n-\t\t\t    struct gnix_vc **vc_ptr)\n+\t\t\t\t       struct gnix_vc **vc_ptr)\n {\n \tstruct gnix_fid_av *av;\n-\tenum fi_av_type av_type;\n \tint ret = FI_SUCCESS;\n \tstruct gnix_av_addr_entry *av_entry;\n-\tgnix_ht_key_t key;\n \tstruct gnix_vc *vc = NULL, *vc_tmp = NULL;\n \n \tGNIX_TRACE(FI_LOG_EP_CTRL, \"\\n\");\n \n-        GNIX_DEBUG(FI_LOG_EP_CTRL,\n-                   \"ep->vc_table = %p, ep->vc_table->vector = %p\\n\",\n-                   ep->vc_table, ep->vc_table->vector);\n+\tGNIX_DEBUG(FI_LOG_EP_CTRL,\n+\t\t   \"ep->vc_table = %p, ep->vc_table->vector = %p\\n\",\n+\t\t   ep->vc_table, ep->vc_table->vector);\n \n \tav = ep->av;\n \tif (unlikely(av == NULL)) {\n \t\tGNIX_WARN(FI_LOG_EP_CTRL, \"av field NULL for ep %p\\n\", ep);\n \t\treturn -FI_EINVAL;\n \t}\n \n-\tav_type = av->type;\n-\n-\t/*\n-\t * if AV for this ep is type FI_AV_TABLE\n-\t * do quick lookup, don't bother with taking lock\n-\t * as we're only reading.\n-\t */\n-\n-\tif (likely(av_type == FI_AV_TABLE)) {\n-\t\tret = _gnix_vec_at(ep->vc_table, (void **)&vc, dest_addr);\n-\t\tif ((ret == FI_SUCCESS) && vc) {\n-\t\t\t*vc_ptr = vc;\n-\t\t\treturn FI_SUCCESS;\n-\t\t}\n-\t}\n+\tCOND_ACQUIRE(ep->requires_lock, &ep->vc_lock);\n \n-\t/*\n-\t * use the slow path, have to take the lock\n-\t */\n+\t/* Use FI address to lookup in EP VC table. */\n+\tvc = _gnix_ep_vc_lookup(ep, dest_addr);\n \n-\t/* Lookup the av_entry to find dest_addr's corresponding gnix_addr */\n-\tret = _gnix_av_lookup(av, dest_addr, &av_entry);\n-\tif (ret != FI_SUCCESS) {\n-\t\tGNIX_WARN(FI_LOG_EP_DATA,\n-\t\t\t  \"_gnix_av_lookup for addr 0x%llx returned %s \\n\",\n-\t\t\t  dest_addr, fi_strerror(-ret));\n-\t\tgoto err;\n+\tif (vc == NULL) {\n+\t\t/* We can receive a connection request from a remote peer\n+\t\t * before the target EP has bound to an AV or before the remote\n+\t\t * peer has had it's address inserted into the target EP's AV.\n+\t\t * Those requests will result in a connection as usual, but the\n+\t\t * VC will not be mapped into an EP's AV until the EP attempts\n+\t\t * to send to the remote peer.  Check the 'unmapped VC' list to\n+\t\t * see if such a VC exists and map it into the AV here. */\n+\t\t vc = __gnix_vc_lookup_unmapped(ep, dest_addr);\n \t}\n \n-\t__gnix_vc_set_ht_key(&av_entry->gnix_addr, &key);\n-\n-\tfastlock_acquire(&ep->vc_lock);\n-\n-\tvc = (struct gnix_vc *)_gnix_ht_lookup(ep->vc_ht, key);\n-\n \tif (vc == NULL) {\n-\t\tret = _gnix_vc_alloc(ep,\n-\t\t\t\t     av_entry,\n-\t\t\t\t     &vc_tmp);\n+\t\t/* Look up full AV entry for the destination address. */\n+\t\tret = _gnix_av_lookup(av, dest_addr, &av_entry);\n+\t\tif (ret != FI_SUCCESS) {\n+\t\t\tGNIX_WARN(FI_LOG_EP_DATA,\n+\t\t\t\t  \"_gnix_av_lookup for addr 0x%llx returned %s \\n\",\n+\t\t\t\t  dest_addr, fi_strerror(-ret));\n+\t\t\tgoto err_w_lock;\n+\t\t}\n+\n+\t\t/* Initiate a connection to the endpoint. */\n+\t\tret = _gnix_vc_alloc(ep, av_entry, &vc_tmp);\n \t\tif (ret != FI_SUCCESS) {\n \t\t\tGNIX_WARN(FI_LOG_EP_DATA,\n \t\t\t\t  \"_gnix_vc_alloc returned %s\\n\",\n \t\t\t\t  fi_strerror(-ret));\n \t\t\tgoto err_w_lock;\n \t\t}\n \n-\t\tret = _gnix_ht_insert(ep->vc_ht, key,\n-\t\t\t\t      vc_tmp);\n-\t\tif (likely(ret == FI_SUCCESS)) {\n-\t\t\tvc = vc_tmp;\n-\t\t\tvc->modes |= GNIX_VC_MODE_IN_HT;\n-\t\t\t/*\n-\t\t\t * if FI_AV_TABLE is being used, also insert\n-\t\t\t * in to vector lookup table\n-\t\t\t */\n-\t\t\tif (av_type == FI_AV_TABLE) {\n-\t\t\t\tret = _gnix_vec_insert_at(ep->vc_table, (void *)vc_tmp,\n-\t\t\t\t\t\t\t  dest_addr);\n-\t\t\t\tif (ret != FI_SUCCESS) {\n-\t\t\t\t\tGNIX_WARN(FI_LOG_EP_DATA,\n-\t\t\t\t\t\t  \"_gnix_vec_insert_at returned %s\\n\",\n-\t\t\t\t\t\t  fi_strerror(-ret));\n-\t\t\t\t} else {\n-\t\t\t\t\tvc_tmp->modes |= GNIX_VC_MODE_IN_TABLE;\n-\t\t\t\t}\n-\t\t\t}\n-\t\t\tfastlock_release(&ep->vc_lock);\n-\t\t\tret = _gnix_vc_connect(vc);\n-\t\t\tif (ret != FI_SUCCESS) {\n-\t\t\t\tGNIX_WARN(FI_LOG_EP_DATA,\n-\t\t\t\t\t  \"_gnix_vc_connect returned %s\\n\",\n-\t\t\t\t\t  fi_strerror(-ret));\n-\t\t\t\tgoto err;\n-\t\t\t}\n-\t\t} else if (ret == -FI_ENOSPC) {\n-\t\t\t_gnix_vc_destroy(vc_tmp);\n-\t\t\tvc = _gnix_ht_lookup(ep->vc_ht, key);\n-\t\t\tfastlock_release(&ep->vc_lock);\n-\t\t\tassert(vc != NULL);\n-\t\t\tassert(vc->modes & GNIX_VC_MODE_IN_HT);\n-\t\t\tret = FI_SUCCESS;\n-\t\t} else {\n+\t\t/* Store new VC in EP connection table. */\n+\t\tret = _gnix_ep_vc_store(ep, vc_tmp, dest_addr);\n+\t\tif (unlikely(ret != FI_SUCCESS)) {\n \t\t\tGNIX_WARN(FI_LOG_EP_DATA,\n-\t\t\t\t  \"_gnix_ht_insert returned %s\\n\",\n+\t\t\t\t  \"_gnix_ep_vc_store returned %s\\n\",\n \t\t\t\t  fi_strerror(-ret));\n \t\t\tgoto err_w_lock;\n \t\t}\n-\t} else  {\n \n-\t\t/*\n-\t\t * check here if the vc should be in the table accelerated\n-\t\t * lookup but hasn't yet been inserted\n-\t\t */\n+\t\tvc = vc_tmp;\n+\t\tvc->modes |= GNIX_VC_MODE_IN_HT;\n \n-\t\tif ((av_type == FI_AV_TABLE) &&\n-\t\t\t!(vc->modes & GNIX_VC_MODE_IN_TABLE)) {\n-\t\t\tret = _gnix_vec_insert_at(ep->vc_table, (void *)vc,\n-\t\t\t\t\t\t  dest_addr);\n-\t\t\tif (ret != FI_SUCCESS) {\n-\t\t\t\tGNIX_WARN(FI_LOG_EP_DATA,\n-\t\t\t\t\t  \"_gnix_vec_insert_at returned %s\\n\",\n-\t\t\t\t\t  fi_strerror(-ret));\n-\t\t\t} else {\n-\t\t\t\tvc->modes |= GNIX_VC_MODE_IN_TABLE;\n-\t\t\t}\n+\t\tret = _gnix_vc_connect(vc);\n+\t\tif (ret != FI_SUCCESS) {\n+\t\t\tGNIX_WARN(FI_LOG_EP_DATA,\n+\t\t\t\t  \"_gnix_vc_connect returned %s\\n\",\n+\t\t\t\t  fi_strerror(-ret));\n+\t\t\tgoto err_w_lock;\n \t\t}\n-\n-\t\tfastlock_release(&ep->vc_lock);\n \t}\n \n+\tCOND_RELEASE(ep->requires_lock, &ep->vc_lock);\n+\n \t*vc_ptr = vc;\n \treturn ret;\n \n err_w_lock:\n-\tfastlock_release(&ep->vc_lock);\n-err:\n+\tCOND_RELEASE(ep->requires_lock, &ep->vc_lock);\n \tif (vc != NULL)","path":"prov/gni/src/gnix_vc.c","position":278,"original_position":278,"commit_id":"c1f6b756bb585c45a630d604ca83d765eae5e700","original_commit_id":"c1f6b756bb585c45a630d604ca83d765eae5e700","user":{"login":"e-harvey","id":7410674,"avatar_url":"https://avatars.githubusercontent.com/u/7410674?v=3","gravatar_id":"","url":"https://api.github.com/users/e-harvey","html_url":"https://github.com/e-harvey","followers_url":"https://api.github.com/users/e-harvey/followers","following_url":"https://api.github.com/users/e-harvey/following{/other_user}","gists_url":"https://api.github.com/users/e-harvey/gists{/gist_id}","starred_url":"https://api.github.com/users/e-harvey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/e-harvey/subscriptions","organizations_url":"https://api.github.com/users/e-harvey/orgs","repos_url":"https://api.github.com/users/e-harvey/repos","events_url":"https://api.github.com/users/e-harvey/events{/privacy}","received_events_url":"https://api.github.com/users/e-harvey/received_events","type":"User","site_admin":false},"body":"Do we need to check to see if this vc has been stored in the connection table and move it back to the unmapped vc cache?  Maybe just move the vc from the vector/hashtable into the unmapped vc cache on line 258, if we fail to connect?","created_at":"2016-05-25T15:17:28Z","updated_at":"2016-05-25T15:17:28Z","html_url":"https://github.com/ofi-cray/libfabric-cray/pull/824#discussion_r64592510","pull_request_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/824","_links":{"self":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/comments/64592510"},"html":{"href":"https://github.com/ofi-cray/libfabric-cray/pull/824#discussion_r64592510"},"pull_request":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/824"}}},"pull_request":{"url":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/824","id":71123671,"html_url":"https://github.com/ofi-cray/libfabric-cray/pull/824","diff_url":"https://github.com/ofi-cray/libfabric-cray/pull/824.diff","patch_url":"https://github.com/ofi-cray/libfabric-cray/pull/824.patch","issue_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/824","number":824,"state":"open","locked":false,"title":"VC look up preformance optimization","user":{"login":"ztiffany","id":10633253,"avatar_url":"https://avatars.githubusercontent.com/u/10633253?v=3","gravatar_id":"","url":"https://api.github.com/users/ztiffany","html_url":"https://github.com/ztiffany","followers_url":"https://api.github.com/users/ztiffany/followers","following_url":"https://api.github.com/users/ztiffany/following{/other_user}","gists_url":"https://api.github.com/users/ztiffany/gists{/gist_id}","starred_url":"https://api.github.com/users/ztiffany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ztiffany/subscriptions","organizations_url":"https://api.github.com/users/ztiffany/orgs","repos_url":"https://api.github.com/users/ztiffany/repos","events_url":"https://api.github.com/users/ztiffany/events{/privacy}","received_events_url":"https://api.github.com/users/ztiffany/received_events","type":"User","site_admin":false},"body":"Improve VC lookup performance. \r\n\r\n@hppritcha @sungeunchoi @e-harvey \r\n\r\nUpdated vc_lookup criterion test results without performance changes:\r\n\r\ntiger$ cat test.out.novcperf\r\ntype: MAP\tnpeers:       2 naddrs:       2 ns: 118.400000\r\ntype: MAP\tnpeers:      32 naddrs:       2 ns: 121.600000\r\ntype: MAP\tnpeers:      32 naddrs:      32 ns: 107.400000\r\ntype: MAP\tnpeers:     512 naddrs:       2 ns: 116.600000\r\ntype: MAP\tnpeers:     512 naddrs:      32 ns: 138.700000\r\ntype: MAP\tnpeers:     512 naddrs:     512 ns: 158.100000\r\ntype: MAP\tnpeers:    8192 naddrs:       2 ns: 108.300000\r\ntype: MAP\tnpeers:    8192 naddrs:      32 ns: 127.300000\r\ntype: MAP\tnpeers:    8192 naddrs:     512 ns: 215.400000\r\ntype: MAP\tnpeers:    8192 naddrs:    8192 ns: 194.500000\r\ntype: MAP\tnpeers:  131072 naddrs:       2 ns: 106.800000\r\ntype: MAP\tnpeers:  131072 naddrs:      32 ns: 221.900000\r\ntype: MAP\tnpeers:  131072 naddrs:     512 ns: 416.400000\r\ntype: MAP\tnpeers:  131072 naddrs:    8192 ns: 543.200000\r\ntype: MAP\tnpeers:  131072 naddrs:  131072 ns: 255.500000\r\ntype: TABLE\tnpeers:       2 naddrs:       2 ns: 20.100000\r\ntype: TABLE\tnpeers:      32 naddrs:       2 ns: 21.900000\r\ntype: TABLE\tnpeers:      32 naddrs:      32 ns: 21.300000\r\ntype: TABLE\tnpeers:     512 naddrs:       2 ns: 19.500000\r\ntype: TABLE\tnpeers:     512 naddrs:      32 ns: 19.600000\r\ntype: TABLE\tnpeers:     512 naddrs:     512 ns: 19.600000\r\ntype: TABLE\tnpeers:    8192 naddrs:       2 ns: 19.400000\r\ntype: TABLE\tnpeers:    8192 naddrs:      32 ns: 20.200000\r\ntype: TABLE\tnpeers:    8192 naddrs:     512 ns: 20.000000\r\ntype: TABLE\tnpeers:    8192 naddrs:    8192 ns: 20.200000\r\ntype: TABLE\tnpeers:  131072 naddrs:       2 ns: 44.600000\r\ntype: TABLE\tnpeers:  131072 naddrs:      32 ns: 104.300000\r\ntype: TABLE\tnpeers:  131072 naddrs:     512 ns: 262.400000\r\ntype: TABLE\tnpeers:  131072 naddrs:    8192 ns: 292.700000\r\ntype: TABLE\tnpeers:  131072 naddrs:  131072 ns: 20.500000\r\n\r\nWith performance changes:\r\n\r\ntiger$ cat test.out.vcperf\r\ntype: MAP\tnpeers:       2 naddrs:       2 ns: 47.800000\r\ntype: MAP\tnpeers:      32 naddrs:       2 ns: 41.100000\r\ntype: MAP\tnpeers:      32 naddrs:      32 ns: 42.100000\r\ntype: MAP\tnpeers:     512 naddrs:       2 ns: 37.800000\r\ntype: MAP\tnpeers:     512 naddrs:      32 ns: 46.000000\r\ntype: MAP\tnpeers:     512 naddrs:     512 ns: 69.100000\r\ntype: MAP\tnpeers:    8192 naddrs:       2 ns: 34.100000\r\ntype: MAP\tnpeers:    8192 naddrs:      32 ns: 44.300000\r\ntype: MAP\tnpeers:    8192 naddrs:     512 ns: 77.700000\r\ntype: MAP\tnpeers:    8192 naddrs:    8192 ns: 84.200000\r\ntype: MAP\tnpeers:  131072 naddrs:       2 ns: 36.400000\r\ntype: MAP\tnpeers:  131072 naddrs:      32 ns: 66.200000\r\ntype: MAP\tnpeers:  131072 naddrs:     512 ns: 175.500000\r\ntype: MAP\tnpeers:  131072 naddrs:    8192 ns: 236.700000\r\ntype: MAP\tnpeers:  131072 naddrs:  131072 ns: 103.600000\r\ntype: TABLE\tnpeers:       2 naddrs:       2 ns: 25.800000\r\ntype: TABLE\tnpeers:      32 naddrs:       2 ns: 26.900000\r\ntype: TABLE\tnpeers:      32 naddrs:      32 ns: 26.900000\r\ntype: TABLE\tnpeers:     512 naddrs:       2 ns: 25.000000\r\ntype: TABLE\tnpeers:     512 naddrs:      32 ns: 25.000000\r\ntype: TABLE\tnpeers:     512 naddrs:     512 ns: 25.300000\r\ntype: TABLE\tnpeers:    8192 naddrs:       2 ns: 25.100000\r\ntype: TABLE\tnpeers:    8192 naddrs:      32 ns: 27.200000\r\ntype: TABLE\tnpeers:    8192 naddrs:     512 ns: 25.700000\r\ntype: TABLE\tnpeers:    8192 naddrs:    8192 ns: 27.200000\r\ntype: TABLE\tnpeers:  131072 naddrs:       2 ns: 25.000000\r\ntype: TABLE\tnpeers:  131072 naddrs:      32 ns: 30.500000\r\ntype: TABLE\tnpeers:  131072 naddrs:     512 ns: 38.300000\r\ntype: TABLE\tnpeers:  131072 naddrs:    8192 ns: 45.600000\r\ntype: TABLE\tnpeers:  131072 naddrs:  131072 ns: 26.200000\r\n[====] Synthesis: Tested: 1 | Passing: 1 | Failing: 0 | Crashing: 0 \r\n","created_at":"2016-05-23T21:28:13Z","updated_at":"2016-05-25T15:17:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4c8efd95b510b86924bcb5b7a38c7adac848491f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/824/commits","review_comments_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/824/comments","review_comment_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/824/comments","statuses_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/statuses/c1f6b756bb585c45a630d604ca83d765eae5e700","head":{"label":"ztiffany:vc-perf-test","ref":"vc-perf-test","sha":"c1f6b756bb585c45a630d604ca83d765eae5e700","user":{"login":"ztiffany","id":10633253,"avatar_url":"https://avatars.githubusercontent.com/u/10633253?v=3","gravatar_id":"","url":"https://api.github.com/users/ztiffany","html_url":"https://github.com/ztiffany","followers_url":"https://api.github.com/users/ztiffany/followers","following_url":"https://api.github.com/users/ztiffany/following{/other_user}","gists_url":"https://api.github.com/users/ztiffany/gists{/gist_id}","starred_url":"https://api.github.com/users/ztiffany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ztiffany/subscriptions","organizations_url":"https://api.github.com/users/ztiffany/orgs","repos_url":"https://api.github.com/users/ztiffany/repos","events_url":"https://api.github.com/users/ztiffany/events{/privacy}","received_events_url":"https://api.github.com/users/ztiffany/received_events","type":"User","site_admin":false},"repo":{"id":32935123,"name":"libfabric-cray","full_name":"ztiffany/libfabric-cray","owner":{"login":"ztiffany","id":10633253,"avatar_url":"https://avatars.githubusercontent.com/u/10633253?v=3","gravatar_id":"","url":"https://api.github.com/users/ztiffany","html_url":"https://github.com/ztiffany","followers_url":"https://api.github.com/users/ztiffany/followers","following_url":"https://api.github.com/users/ztiffany/following{/other_user}","gists_url":"https://api.github.com/users/ztiffany/gists{/gist_id}","starred_url":"https://api.github.com/users/ztiffany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ztiffany/subscriptions","organizations_url":"https://api.github.com/users/ztiffany/orgs","repos_url":"https://api.github.com/users/ztiffany/repos","events_url":"https://api.github.com/users/ztiffany/events{/privacy}","received_events_url":"https://api.github.com/users/ztiffany/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ztiffany/libfabric-cray","description":"Open Fabric Interfaces","fork":true,"url":"https://api.github.com/repos/ztiffany/libfabric-cray","forks_url":"https://api.github.com/repos/ztiffany/libfabric-cray/forks","keys_url":"https://api.github.com/repos/ztiffany/libfabric-cray/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ztiffany/libfabric-cray/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ztiffany/libfabric-cray/teams","hooks_url":"https://api.github.com/repos/ztiffany/libfabric-cray/hooks","issue_events_url":"https://api.github.com/repos/ztiffany/libfabric-cray/issues/events{/number}","events_url":"https://api.github.com/repos/ztiffany/libfabric-cray/events","assignees_url":"https://api.github.com/repos/ztiffany/libfabric-cray/assignees{/user}","branches_url":"https://api.github.com/repos/ztiffany/libfabric-cray/branches{/branch}","tags_url":"https://api.github.com/repos/ztiffany/libfabric-cray/tags","blobs_url":"https://api.github.com/repos/ztiffany/libfabric-cray/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ztiffany/libfabric-cray/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ztiffany/libfabric-cray/git/refs{/sha}","trees_url":"https://api.github.com/repos/ztiffany/libfabric-cray/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ztiffany/libfabric-cray/statuses/{sha}","languages_url":"https://api.github.com/repos/ztiffany/libfabric-cray/languages","stargazers_url":"https://api.github.com/repos/ztiffany/libfabric-cray/stargazers","contributors_url":"https://api.github.com/repos/ztiffany/libfabric-cray/contributors","subscribers_url":"https://api.github.com/repos/ztiffany/libfabric-cray/subscribers","subscription_url":"https://api.github.com/repos/ztiffany/libfabric-cray/subscription","commits_url":"https://api.github.com/repos/ztiffany/libfabric-cray/commits{/sha}","git_commits_url":"https://api.github.com/repos/ztiffany/libfabric-cray/git/commits{/sha}","comments_url":"https://api.github.com/repos/ztiffany/libfabric-cray/comments{/number}","issue_comment_url":"https://api.github.com/repos/ztiffany/libfabric-cray/issues/comments{/number}","contents_url":"https://api.github.com/repos/ztiffany/libfabric-cray/contents/{+path}","compare_url":"https://api.github.com/repos/ztiffany/libfabric-cray/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ztiffany/libfabric-cray/merges","archive_url":"https://api.github.com/repos/ztiffany/libfabric-cray/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ztiffany/libfabric-cray/downloads","issues_url":"https://api.github.com/repos/ztiffany/libfabric-cray/issues{/number}","pulls_url":"https://api.github.com/repos/ztiffany/libfabric-cray/pulls{/number}","milestones_url":"https://api.github.com/repos/ztiffany/libfabric-cray/milestones{/number}","notifications_url":"https://api.github.com/repos/ztiffany/libfabric-cray/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ztiffany/libfabric-cray/labels{/name}","releases_url":"https://api.github.com/repos/ztiffany/libfabric-cray/releases{/id}","deployments_url":"https://api.github.com/repos/ztiffany/libfabric-cray/deployments","created_at":"2015-03-26T15:19:55Z","updated_at":"2015-03-26T15:19:56Z","pushed_at":"2016-05-23T21:48:56Z","git_url":"git://github.com/ztiffany/libfabric-cray.git","ssh_url":"git@github.com:ztiffany/libfabric-cray.git","clone_url":"https://github.com/ztiffany/libfabric-cray.git","svn_url":"https://github.com/ztiffany/libfabric-cray","homepage":"http://ofiwg.github.io/libfabric/","size":13317,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ofi-cray:master","ref":"master","sha":"3bc1c3444d9e6e3ff90b28921fa7c38cde14e63c","user":{"login":"ofi-cray","id":10637979,"avatar_url":"https://avatars.githubusercontent.com/u/10637979?v=3","gravatar_id":"","url":"https://api.github.com/users/ofi-cray","html_url":"https://github.com/ofi-cray","followers_url":"https://api.github.com/users/ofi-cray/followers","following_url":"https://api.github.com/users/ofi-cray/following{/other_user}","gists_url":"https://api.github.com/users/ofi-cray/gists{/gist_id}","starred_url":"https://api.github.com/users/ofi-cray/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ofi-cray/subscriptions","organizations_url":"https://api.github.com/users/ofi-cray/orgs","repos_url":"https://api.github.com/users/ofi-cray/repos","events_url":"https://api.github.com/users/ofi-cray/events{/privacy}","received_events_url":"https://api.github.com/users/ofi-cray/received_events","type":"Organization","site_admin":false},"repo":{"id":29607348,"name":"libfabric-cray","full_name":"ofi-cray/libfabric-cray","owner":{"login":"ofi-cray","id":10637979,"avatar_url":"https://avatars.githubusercontent.com/u/10637979?v=3","gravatar_id":"","url":"https://api.github.com/users/ofi-cray","html_url":"https://github.com/ofi-cray","followers_url":"https://api.github.com/users/ofi-cray/followers","following_url":"https://api.github.com/users/ofi-cray/following{/other_user}","gists_url":"https://api.github.com/users/ofi-cray/gists{/gist_id}","starred_url":"https://api.github.com/users/ofi-cray/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ofi-cray/subscriptions","organizations_url":"https://api.github.com/users/ofi-cray/orgs","repos_url":"https://api.github.com/users/ofi-cray/repos","events_url":"https://api.github.com/users/ofi-cray/events{/privacy}","received_events_url":"https://api.github.com/users/ofi-cray/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ofi-cray/libfabric-cray","description":"Open Fabric Interfaces","fork":true,"url":"https://api.github.com/repos/ofi-cray/libfabric-cray","forks_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/forks","keys_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/teams","hooks_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/hooks","issue_events_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/events{/number}","events_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/events","assignees_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/assignees{/user}","branches_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/branches{/branch}","tags_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/tags","blobs_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/git/refs{/sha}","trees_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/statuses/{sha}","languages_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/languages","stargazers_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/stargazers","contributors_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/contributors","subscribers_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/subscribers","subscription_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/subscription","commits_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/commits{/sha}","git_commits_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/git/commits{/sha}","comments_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/comments{/number}","issue_comment_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/comments{/number}","contents_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/contents/{+path}","compare_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/merges","archive_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/downloads","issues_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues{/number}","pulls_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls{/number}","milestones_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/milestones{/number}","notifications_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/labels{/name}","releases_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/releases{/id}","deployments_url":"https://api.github.com/repos/ofi-cray/libfabric-cray/deployments","created_at":"2015-01-21T19:30:52Z","updated_at":"2016-01-13T18:57:54Z","pushed_at":"2016-05-25T07:27:48Z","git_url":"git://github.com/ofi-cray/libfabric-cray.git","ssh_url":"git@github.com:ofi-cray/libfabric-cray.git","clone_url":"https://github.com/ofi-cray/libfabric-cray.git","svn_url":"https://github.com/ofi-cray/libfabric-cray","homepage":"http://ofiwg.github.io/libfabric/","size":16097,"stargazers_count":5,"watchers_count":5,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":7,"mirror_url":null,"open_issues_count":61,"forks":7,"open_issues":61,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/824"},"html":{"href":"https://github.com/ofi-cray/libfabric-cray/pull/824"},"issue":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/824"},"comments":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/issues/824/comments"},"review_comments":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/824/comments"},"review_comment":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/pulls/824/commits"},"statuses":{"href":"https://api.github.com/repos/ofi-cray/libfabric-cray/statuses/c1f6b756bb585c45a630d604ca83d765eae5e700"}}}}
{"actor":{"display_login":"e-harvey"}}