{"action":"created","issue":{"url":"https://api.github.com/repos/vt-middleware/ldaptive/issues/115","repository_url":"https://api.github.com/repos/vt-middleware/ldaptive","labels_url":"https://api.github.com/repos/vt-middleware/ldaptive/issues/115/labels{/name}","comments_url":"https://api.github.com/repos/vt-middleware/ldaptive/issues/115/comments","events_url":"https://api.github.com/repos/vt-middleware/ldaptive/issues/115/events","html_url":"https://github.com/vt-middleware/ldaptive/pull/115","id":178962338,"number":115,"title":"Provide a timeout to enforce on connection validate.","user":{"login":"dfish3r","id":1051499,"avatar_url":"https://avatars.githubusercontent.com/u/1051499?v=3","gravatar_id":"","url":"https://api.github.com/users/dfish3r","html_url":"https://github.com/dfish3r","followers_url":"https://api.github.com/users/dfish3r/followers","following_url":"https://api.github.com/users/dfish3r/following{/other_user}","gists_url":"https://api.github.com/users/dfish3r/gists{/gist_id}","starred_url":"https://api.github.com/users/dfish3r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dfish3r/subscriptions","organizations_url":"https://api.github.com/users/dfish3r/orgs","repos_url":"https://api.github.com/users/dfish3r/repos","events_url":"https://api.github.com/users/dfish3r/events{/privacy}","received_events_url":"https://api.github.com/users/dfish3r/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"serac","id":111432,"avatar_url":"https://avatars.githubusercontent.com/u/111432?v=3","gravatar_id":"","url":"https://api.github.com/users/serac","html_url":"https://github.com/serac","followers_url":"https://api.github.com/users/serac/followers","following_url":"https://api.github.com/users/serac/following{/other_user}","gists_url":"https://api.github.com/users/serac/gists{/gist_id}","starred_url":"https://api.github.com/users/serac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/serac/subscriptions","organizations_url":"https://api.github.com/users/serac/orgs","repos_url":"https://api.github.com/users/serac/repos","events_url":"https://api.github.com/users/serac/events{/privacy}","received_events_url":"https://api.github.com/users/serac/received_events","type":"User","site_admin":false},"assignees":[{"login":"serac","id":111432,"avatar_url":"https://avatars.githubusercontent.com/u/111432?v=3","gravatar_id":"","url":"https://api.github.com/users/serac","html_url":"https://github.com/serac","followers_url":"https://api.github.com/users/serac/followers","following_url":"https://api.github.com/users/serac/following{/other_user}","gists_url":"https://api.github.com/users/serac/gists{/gist_id}","starred_url":"https://api.github.com/users/serac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/serac/subscriptions","organizations_url":"https://api.github.com/users/serac/orgs","repos_url":"https://api.github.com/users/serac/repos","events_url":"https://api.github.com/users/serac/events{/privacy}","received_events_url":"https://api.github.com/users/serac/received_events","type":"User","site_admin":false}],"milestone":null,"comments":1,"created_at":"2016-09-23T20:05:00Z","updated_at":"2016-09-23T20:13:00Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/vt-middleware/ldaptive/pulls/115","html_url":"https://github.com/vt-middleware/ldaptive/pull/115","diff_url":"https://github.com/vt-middleware/ldaptive/pull/115.diff","patch_url":"https://github.com/vt-middleware/ldaptive/pull/115.patch"},"body":"Add validateTimeout property to PoolConfig.\r\nUse validateTimeout property in AbstractConnectionPool by spawning a thread and waiting for validate completion.\r\nSee #81."},"comment":{"url":"https://api.github.com/repos/vt-middleware/ldaptive/issues/comments/249291006","html_url":"https://github.com/vt-middleware/ldaptive/pull/115#issuecomment-249291006","issue_url":"https://api.github.com/repos/vt-middleware/ldaptive/issues/115","id":249291006,"user":{"login":"dfish3r","id":1051499,"avatar_url":"https://avatars.githubusercontent.com/u/1051499?v=3","gravatar_id":"","url":"https://api.github.com/users/dfish3r","html_url":"https://github.com/dfish3r","followers_url":"https://api.github.com/users/dfish3r/followers","following_url":"https://api.github.com/users/dfish3r/following{/other_user}","gists_url":"https://api.github.com/users/dfish3r/gists{/gist_id}","starred_url":"https://api.github.com/users/dfish3r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dfish3r/subscriptions","organizations_url":"https://api.github.com/users/dfish3r/orgs","repos_url":"https://api.github.com/users/dfish3r/repos","events_url":"https://api.github.com/users/dfish3r/events{/privacy}","received_events_url":"https://api.github.com/users/dfish3r/received_events","type":"User","site_admin":false},"created_at":"2016-09-23T20:13:00Z","updated_at":"2016-09-23T20:13:00Z","body":"It's worth mentioning other potential implementations, since I have a few concerns about this one.\r\nHere I've applied a timeout to *each* connection validation.\r\nIt may make more sense to apply a timeout to the entire validate process.\r\nThat seems to make the impact more obvious to a user, in this case if your entire pool is hanging, then you'll have to wait for each connection.\r\nSo the total wait time is a function of validateTimeout and pool size at the time of validation.\r\nOn the other hand it's easier to decide how long you should wait on a single connection.\r\n\r\nLastly, you could push this solution into the Validator implementation.\r\nThat was my first thought, but our implementation doesn't currently have an executor instance and since the pool obviously does, I went the easier route.\r\nI also didn't want users having to wire up an executor (which has to be closed) for this edge case.\r\n"}}
{"actor":{"display_login":"dfish3r"}}