{"action":"created","comment":{"url":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/comments/79085830","id":79085830,"diff_hunk":"@@ -7,101 +9,191 @@ namespace MySql.Data.MySqlClient\n {\n \tinternal sealed class ConnectionPool\n \t{\n+\n \t\tpublic async Task<MySqlSession> TryGetSessionAsync(CancellationToken cancellationToken)\n \t\t{\n+\t\t\tcancellationToken.ThrowIfCancellationRequested();\n+\n+\t\t\t// if the drain lock is held, connection draining is in progress\n+\t\t\tawait m_drain_lock.WaitAsync(cancellationToken).ConfigureAwait(false);\n+\t\t\tm_drain_lock.Release();\n+\n+\t\t\t// wait for an open slot\n+\t\t\tawait m_session_semaphore.WaitAsync(cancellationToken).ConfigureAwait(false);\n \t\t\ttry\n \t\t\t{\n-\t\t\t\tawait m_semaphore.WaitAsync(cancellationToken).ConfigureAwait(false);\n+\t\t\t\tMySqlSession session;\n+\t\t\t\t// check for a pooled session\n+\t\t\t\tif (m_sessions.TryDequeue(out session))\n+\t\t\t\t{\n+\t\t\t\t\tif (!await session.TryPingAsync(cancellationToken).ConfigureAwait(false))\n+\t\t\t\t\t{\n+\t\t\t\t\t\t// session is not valid\n+\t\t\t\t\t\tUtility.Dispose(ref session);\n+\t\t\t\t\t}\n+\t\t\t\t\telse\n+\t\t\t\t\t{\n+\t\t\t\t\t\t// session is valid, reset if supported\n+\t\t\t\t\t\tif (m_connectionStringBuilder.ConnectionReset)\n+\t\t\t\t\t\t{\n+\t\t\t\t\t\t\tawait session.ResetConnectionAsync(m_connectionStringBuilder, cancellationToken).ConfigureAwait(false);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t// pooled session is ready to be used; return it\n+\t\t\t\t\t\treturn session;\n+\t\t\t\t\t}\n+\t\t\t\t}\n \n-\t\t\t\tif (m_sessions.Count > 0)\n-\t\t\t\t\treturn m_sessions.Dequeue();\n+\t\t\t\tsession = new MySqlSession(this);\n+\t\t\t\tawait session.ConnectAsync(m_connectionStringBuilder, cancellationToken);\n+\t\t\t\treturn session;\n \t\t\t}\n-\t\t\tfinally\n+\t\t\tcatch\n \t\t\t{\n-\t\t\t\tm_semaphore.Release();\n+\t\t\t\tm_session_semaphore.Release();\n+\t\t\t\tthrow;\n \t\t\t}\n-\t\t\treturn null;\n \t\t}\n \n-\t\tpublic bool Return(MySqlSession session)\n+\t\tpublic void Return(MySqlSession session)\n \t\t{\n \t\t\ttry\n \t\t\t{\n-\t\t\t\tm_semaphore.Wait();\n-\n-\t\t\t\t// TODO: Dispose oldest connections in the pool first?\n-\t\t\t\tif (m_sessions.Count >= m_maximumSize)\n-\t\t\t\t\treturn false;\n \t\t\t\tm_sessions.Enqueue(session);\n-\t\t\t\treturn true;\n \t\t\t}\n \t\t\tfinally\n \t\t\t{\n-\t\t\t\tm_semaphore.Release();\n+\t\t\t\tm_session_semaphore.Release();\n \t\t\t}\n \t\t}\n \n \t\tpublic async Task ClearAsync(CancellationToken cancellationToken)\n \t\t{\n+\t\t\tcancellationToken.ThrowIfCancellationRequested();\n \t\t\ttry\n \t\t\t{\n-\t\t\t\tawait m_semaphore.WaitAsync(cancellationToken).ConfigureAwait(false);\n+\t\t\t\t// don't let any new connections out of the pool\n+\t\t\t\tawait m_drain_lock.WaitAsync(cancellationToken).ConfigureAwait(false);\n \n-\t\t\t\twhile (m_sessions.Count > 0)\n+\t\t\t\t// acquire all of the session slots\n+\t\t\t\tfor (var i = 0; i < m_maximumSize; i++)\n \t\t\t\t{\n-\t\t\t\t\tcancellationToken.ThrowIfCancellationRequested();\n+\t\t\t\t\tawait m_session_semaphore.WaitAsync(cancellationToken).ConfigureAwait(false);\n \n-\t\t\t\t\tvar session = m_sessions.Dequeue();\n-\t\t\t\t\tawait session.DisposeAsync(cancellationToken).ConfigureAwait(false);\n+\t\t\t\t\t// clear all of the existing sessions\n+\t\t\t\t\tvar tasks = new List<Task>();\n+\t\t\t\t\tMySqlSession session;\n+\t\t\t\t\twhile (m_sessions.TryDequeue(out session))\n+\t\t\t\t\t{\n+\t\t\t\t\t\ttasks.Add(session.DisposeAsync(cancellationToken));\n+\t\t\t\t\t}\n+\t\t\t\t\tif (tasks.Count > 0)\n+\t\t\t\t\t{\n+\t\t\t\t\t\tawait Task.WhenAll(tasks).ConfigureAwait(false);\n+\t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t\tfinally\n \t\t\t{\n-\t\t\t\tm_semaphore.Release();\n+\t\t\t\t// release all of the session slots\n+\t\t\t\tm_session_semaphore.Release(m_maximumSize);\n+\n+\t\t\t\t// re-open the minimum sessions\n+\t\t\t\tawait OpenMinimumSessions();","path":"src/MySqlConnector/MySqlClient/ConnectionPool.cs","position":121,"original_position":121,"commit_id":"3a69df9ff102edb22bc24bc6f2e76e0d78c77553","original_commit_id":"3a69df9ff102edb22bc24bc6f2e76e0d78c77553","user":{"login":"caleblloyd","id":2414837,"avatar_url":"https://avatars.githubusercontent.com/u/2414837?v=3","gravatar_id":"","url":"https://api.github.com/users/caleblloyd","html_url":"https://github.com/caleblloyd","followers_url":"https://api.github.com/users/caleblloyd/followers","following_url":"https://api.github.com/users/caleblloyd/following{/other_user}","gists_url":"https://api.github.com/users/caleblloyd/gists{/gist_id}","starred_url":"https://api.github.com/users/caleblloyd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caleblloyd/subscriptions","organizations_url":"https://api.github.com/users/caleblloyd/orgs","repos_url":"https://api.github.com/users/caleblloyd/repos","events_url":"https://api.github.com/users/caleblloyd/events{/privacy}","received_events_url":"https://api.github.com/users/caleblloyd/received_events","type":"User","site_admin":false},"body":"Good point, this should be taken out","created_at":"2016-09-15T23:49:47Z","updated_at":"2016-09-15T23:49:47Z","html_url":"https://github.com/bgrainger/MySqlConnector/pull/56#discussion_r79085830","pull_request_url":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/56","_links":{"self":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/comments/79085830"},"html":{"href":"https://github.com/bgrainger/MySqlConnector/pull/56#discussion_r79085830"},"pull_request":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/56"}}},"pull_request":{"url":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/56","id":85498055,"html_url":"https://github.com/bgrainger/MySqlConnector/pull/56","diff_url":"https://github.com/bgrainger/MySqlConnector/pull/56.diff","patch_url":"https://github.com/bgrainger/MySqlConnector/pull/56.patch","issue_url":"https://api.github.com/repos/bgrainger/MySqlConnector/issues/56","number":56,"state":"open","locked":false,"title":"Fix Connection Pool - Need Help with SideBySide.New","user":{"login":"caleblloyd","id":2414837,"avatar_url":"https://avatars.githubusercontent.com/u/2414837?v=3","gravatar_id":"","url":"https://api.github.com/users/caleblloyd","html_url":"https://github.com/caleblloyd","followers_url":"https://api.github.com/users/caleblloyd/followers","following_url":"https://api.github.com/users/caleblloyd/following{/other_user}","gists_url":"https://api.github.com/users/caleblloyd/gists{/gist_id}","starred_url":"https://api.github.com/users/caleblloyd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caleblloyd/subscriptions","organizations_url":"https://api.github.com/users/caleblloyd/orgs","repos_url":"https://api.github.com/users/caleblloyd/repos","events_url":"https://api.github.com/users/caleblloyd/events{/privacy}","received_events_url":"https://api.github.com/users/caleblloyd/received_events","type":"User","site_admin":false},"body":"I've taken a stab at fixing the connection pool.  I tested this implementation with MySqlConnector.Performance, but it seems to hang the SideBySide.New tests.  SideBySide.New does not print which test is currently running, so I'm not sure how to debug.\r\n\r\n@bgrainger can you take a look at the SideBySide.New tests and see if you can tell why they are hanging?  If you can add logging to it to print the method it's in, I can resolve the bug.  I tried briefly but I'm not very familiar with XUnit.\r\n\r\nAsync targets are running stable at 1500 Requests Per Second in the Performance Tests.  Very nice!!!  I'm running on an Intel Core i5-6260U, load test, web app, and database all running on the same machine.  Should do better on a dedicated app server.\r\n\r\n\tRate = 1500 RPS\r\n\tDuration = 10s\r\n\tTargets = targets-async.txt\r\n\r\n\tRequests      [total, rate]            15000, 1500.10\r\n\tDuration      [total, attack, wait]    10.000748548s, 9.999322811s, 1.425737ms\r\n\tLatencies     [mean, 50, 95, 99, max]  23.299198ms, 2.395148ms, 168.782969ms, 271.810346ms, 395.213902ms\r\n\tBytes In      [total, mean]            173108268, 11540.55\r\n\tBytes Out     [total, mean]            5561250, 370.75\r\n\tSuccess       [ratio]                  100.00%\r\n\tStatus Codes  [code:count]             200:15000  \r\n\r\n","created_at":"2016-09-15T23:28:17Z","updated_at":"2016-09-15T23:49:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"11a5ec1e61e8198d1a936d4d7e9e1647afc676bc","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/56/commits","review_comments_url":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/56/comments","review_comment_url":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/comments{/number}","comments_url":"https://api.github.com/repos/bgrainger/MySqlConnector/issues/56/comments","statuses_url":"https://api.github.com/repos/bgrainger/MySqlConnector/statuses/3a69df9ff102edb22bc24bc6f2e76e0d78c77553","head":{"label":"caleblloyd:f_connection_pool","ref":"f_connection_pool","sha":"3a69df9ff102edb22bc24bc6f2e76e0d78c77553","user":{"login":"caleblloyd","id":2414837,"avatar_url":"https://avatars.githubusercontent.com/u/2414837?v=3","gravatar_id":"","url":"https://api.github.com/users/caleblloyd","html_url":"https://github.com/caleblloyd","followers_url":"https://api.github.com/users/caleblloyd/followers","following_url":"https://api.github.com/users/caleblloyd/following{/other_user}","gists_url":"https://api.github.com/users/caleblloyd/gists{/gist_id}","starred_url":"https://api.github.com/users/caleblloyd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caleblloyd/subscriptions","organizations_url":"https://api.github.com/users/caleblloyd/orgs","repos_url":"https://api.github.com/users/caleblloyd/repos","events_url":"https://api.github.com/users/caleblloyd/events{/privacy}","received_events_url":"https://api.github.com/users/caleblloyd/received_events","type":"User","site_admin":false},"repo":{"id":67824910,"name":"MySqlConnector","full_name":"caleblloyd/MySqlConnector","owner":{"login":"caleblloyd","id":2414837,"avatar_url":"https://avatars.githubusercontent.com/u/2414837?v=3","gravatar_id":"","url":"https://api.github.com/users/caleblloyd","html_url":"https://github.com/caleblloyd","followers_url":"https://api.github.com/users/caleblloyd/followers","following_url":"https://api.github.com/users/caleblloyd/following{/other_user}","gists_url":"https://api.github.com/users/caleblloyd/gists{/gist_id}","starred_url":"https://api.github.com/users/caleblloyd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caleblloyd/subscriptions","organizations_url":"https://api.github.com/users/caleblloyd/orgs","repos_url":"https://api.github.com/users/caleblloyd/repos","events_url":"https://api.github.com/users/caleblloyd/events{/privacy}","received_events_url":"https://api.github.com/users/caleblloyd/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/caleblloyd/MySqlConnector","description":"Async MySql.Data replacement for .NET Core","fork":true,"url":"https://api.github.com/repos/caleblloyd/MySqlConnector","forks_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/forks","keys_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/keys{/key_id}","collaborators_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/teams","hooks_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/hooks","issue_events_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/issues/events{/number}","events_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/events","assignees_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/assignees{/user}","branches_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/branches{/branch}","tags_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/tags","blobs_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/git/refs{/sha}","trees_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/git/trees{/sha}","statuses_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/statuses/{sha}","languages_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/languages","stargazers_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/stargazers","contributors_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/contributors","subscribers_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/subscribers","subscription_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/subscription","commits_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/commits{/sha}","git_commits_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/git/commits{/sha}","comments_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/comments{/number}","issue_comment_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/issues/comments{/number}","contents_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/contents/{+path}","compare_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/compare/{base}...{head}","merges_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/merges","archive_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/downloads","issues_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/issues{/number}","pulls_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/pulls{/number}","milestones_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/milestones{/number}","notifications_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/labels{/name}","releases_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/releases{/id}","deployments_url":"https://api.github.com/repos/caleblloyd/MySqlConnector/deployments","created_at":"2016-09-09T19:03:06Z","updated_at":"2016-09-09T19:03:07Z","pushed_at":"2016-09-15T22:59:57Z","git_url":"git://github.com/caleblloyd/MySqlConnector.git","ssh_url":"git@github.com:caleblloyd/MySqlConnector.git","clone_url":"https://github.com/caleblloyd/MySqlConnector.git","svn_url":"https://github.com/caleblloyd/MySqlConnector","homepage":null,"size":265,"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":"bgrainger:master","ref":"master","sha":"a0ca58a4b4a3b5dbbf4323f2ded03c2844b8e096","user":{"login":"bgrainger","id":188129,"avatar_url":"https://avatars.githubusercontent.com/u/188129?v=3","gravatar_id":"","url":"https://api.github.com/users/bgrainger","html_url":"https://github.com/bgrainger","followers_url":"https://api.github.com/users/bgrainger/followers","following_url":"https://api.github.com/users/bgrainger/following{/other_user}","gists_url":"https://api.github.com/users/bgrainger/gists{/gist_id}","starred_url":"https://api.github.com/users/bgrainger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bgrainger/subscriptions","organizations_url":"https://api.github.com/users/bgrainger/orgs","repos_url":"https://api.github.com/users/bgrainger/repos","events_url":"https://api.github.com/users/bgrainger/events{/privacy}","received_events_url":"https://api.github.com/users/bgrainger/received_events","type":"User","site_admin":false},"repo":{"id":55185530,"name":"MySqlConnector","full_name":"bgrainger/MySqlConnector","owner":{"login":"bgrainger","id":188129,"avatar_url":"https://avatars.githubusercontent.com/u/188129?v=3","gravatar_id":"","url":"https://api.github.com/users/bgrainger","html_url":"https://github.com/bgrainger","followers_url":"https://api.github.com/users/bgrainger/followers","following_url":"https://api.github.com/users/bgrainger/following{/other_user}","gists_url":"https://api.github.com/users/bgrainger/gists{/gist_id}","starred_url":"https://api.github.com/users/bgrainger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bgrainger/subscriptions","organizations_url":"https://api.github.com/users/bgrainger/orgs","repos_url":"https://api.github.com/users/bgrainger/repos","events_url":"https://api.github.com/users/bgrainger/events{/privacy}","received_events_url":"https://api.github.com/users/bgrainger/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bgrainger/MySqlConnector","description":"Async MySql.Data replacement for .NET Core","fork":false,"url":"https://api.github.com/repos/bgrainger/MySqlConnector","forks_url":"https://api.github.com/repos/bgrainger/MySqlConnector/forks","keys_url":"https://api.github.com/repos/bgrainger/MySqlConnector/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bgrainger/MySqlConnector/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bgrainger/MySqlConnector/teams","hooks_url":"https://api.github.com/repos/bgrainger/MySqlConnector/hooks","issue_events_url":"https://api.github.com/repos/bgrainger/MySqlConnector/issues/events{/number}","events_url":"https://api.github.com/repos/bgrainger/MySqlConnector/events","assignees_url":"https://api.github.com/repos/bgrainger/MySqlConnector/assignees{/user}","branches_url":"https://api.github.com/repos/bgrainger/MySqlConnector/branches{/branch}","tags_url":"https://api.github.com/repos/bgrainger/MySqlConnector/tags","blobs_url":"https://api.github.com/repos/bgrainger/MySqlConnector/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bgrainger/MySqlConnector/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bgrainger/MySqlConnector/git/refs{/sha}","trees_url":"https://api.github.com/repos/bgrainger/MySqlConnector/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bgrainger/MySqlConnector/statuses/{sha}","languages_url":"https://api.github.com/repos/bgrainger/MySqlConnector/languages","stargazers_url":"https://api.github.com/repos/bgrainger/MySqlConnector/stargazers","contributors_url":"https://api.github.com/repos/bgrainger/MySqlConnector/contributors","subscribers_url":"https://api.github.com/repos/bgrainger/MySqlConnector/subscribers","subscription_url":"https://api.github.com/repos/bgrainger/MySqlConnector/subscription","commits_url":"https://api.github.com/repos/bgrainger/MySqlConnector/commits{/sha}","git_commits_url":"https://api.github.com/repos/bgrainger/MySqlConnector/git/commits{/sha}","comments_url":"https://api.github.com/repos/bgrainger/MySqlConnector/comments{/number}","issue_comment_url":"https://api.github.com/repos/bgrainger/MySqlConnector/issues/comments{/number}","contents_url":"https://api.github.com/repos/bgrainger/MySqlConnector/contents/{+path}","compare_url":"https://api.github.com/repos/bgrainger/MySqlConnector/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bgrainger/MySqlConnector/merges","archive_url":"https://api.github.com/repos/bgrainger/MySqlConnector/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bgrainger/MySqlConnector/downloads","issues_url":"https://api.github.com/repos/bgrainger/MySqlConnector/issues{/number}","pulls_url":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls{/number}","milestones_url":"https://api.github.com/repos/bgrainger/MySqlConnector/milestones{/number}","notifications_url":"https://api.github.com/repos/bgrainger/MySqlConnector/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bgrainger/MySqlConnector/labels{/name}","releases_url":"https://api.github.com/repos/bgrainger/MySqlConnector/releases{/id}","deployments_url":"https://api.github.com/repos/bgrainger/MySqlConnector/deployments","created_at":"2016-03-31T21:54:37Z","updated_at":"2016-09-15T07:06:48Z","pushed_at":"2016-09-15T23:28:17Z","git_url":"git://github.com/bgrainger/MySqlConnector.git","ssh_url":"git@github.com:bgrainger/MySqlConnector.git","clone_url":"https://github.com/bgrainger/MySqlConnector.git","svn_url":"https://github.com/bgrainger/MySqlConnector","homepage":null,"size":332,"stargazers_count":89,"watchers_count":89,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":16,"mirror_url":null,"open_issues_count":17,"forks":16,"open_issues":17,"watchers":89,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/56"},"html":{"href":"https://github.com/bgrainger/MySqlConnector/pull/56"},"issue":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/issues/56"},"comments":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/issues/56/comments"},"review_comments":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/56/comments"},"review_comment":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/pulls/56/commits"},"statuses":{"href":"https://api.github.com/repos/bgrainger/MySqlConnector/statuses/3a69df9ff102edb22bc24bc6f2e76e0d78c77553"}}}}
{"actor":{"display_login":"caleblloyd"}}