{"action":"created","issue":{"url":"https://api.github.com/repos/elastic/apm-server/issues/730","repository_url":"https://api.github.com/repos/elastic/apm-server","labels_url":"https://api.github.com/repos/elastic/apm-server/issues/730/labels{/name}","comments_url":"https://api.github.com/repos/elastic/apm-server/issues/730/comments","events_url":"https://api.github.com/repos/elastic/apm-server/issues/730/events","html_url":"https://github.com/elastic/apm-server/pull/730","id":305894179,"number":730,"title":"Use manual decoding for performance improvements.","user":{"login":"simitt","id":5555349,"avatar_url":"https://avatars0.githubusercontent.com/u/5555349?v=4","gravatar_id":"","url":"https://api.github.com/users/simitt","html_url":"https://github.com/simitt","followers_url":"https://api.github.com/users/simitt/followers","following_url":"https://api.github.com/users/simitt/following{/other_user}","gists_url":"https://api.github.com/users/simitt/gists{/gist_id}","starred_url":"https://api.github.com/users/simitt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simitt/subscriptions","organizations_url":"https://api.github.com/users/simitt/orgs","repos_url":"https://api.github.com/users/simitt/repos","events_url":"https://api.github.com/users/simitt/events{/privacy}","received_events_url":"https://api.github.com/users/simitt/received_events","type":"User","site_admin":false},"labels":[{"id":661399717,"url":"https://api.github.com/repos/elastic/apm-server/labels/review","name":"review","color":"bfd4f2","default":false},{"id":773174485,"url":"https://api.github.com/repos/elastic/apm-server/labels/v6.3","name":"v6.3","color":"5fccd8","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":11,"created_at":"2018-03-16T11:30:00Z","updated_at":"2018-03-20T15:39:08Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/elastic/apm-server/pulls/730","html_url":"https://github.com/elastic/apm-server/pull/730","diff_url":"https://github.com/elastic/apm-server/pull/730.diff","patch_url":"https://github.com/elastic/apm-server/pull/730.patch"},"body":"Use hardcoded decodig for `transactions` and `errors` to improve overall performance. \r\n\r\nThis implementation is based on @jalvz POC for manual decoding performance increase.\r\n\r\n@elastic/apm-server I haven't add more tests yet, but the existing ones which are pretty exhaustive are all passing.\r\nEarly feedback on how I structured the decoding is highly appreciated. \r\n\r\n\r\n\r\n\r\nPerformance Results for using the same settings for all 4 branches (`apm-server -N`):\r\n\r\n(update: changed numbers to final measurements)\r\n\r\nmaster:  90 rps\r\nchange-decoding: 230 rps\r\nenhance-decoding: 350 rps\r\njalvz-original manual decoding: 361 rps \r\n\r\nFixes https://github.com/elastic/apm-server/issues/733"},"comment":{"url":"https://api.github.com/repos/elastic/apm-server/issues/comments/374644619","html_url":"https://github.com/elastic/apm-server/pull/730#issuecomment-374644619","issue_url":"https://api.github.com/repos/elastic/apm-server/issues/730","id":374644619,"user":{"login":"roncohen","id":744,"avatar_url":"https://avatars0.githubusercontent.com/u/744?v=4","gravatar_id":"","url":"https://api.github.com/users/roncohen","html_url":"https://github.com/roncohen","followers_url":"https://api.github.com/users/roncohen/followers","following_url":"https://api.github.com/users/roncohen/following{/other_user}","gists_url":"https://api.github.com/users/roncohen/gists{/gist_id}","starred_url":"https://api.github.com/users/roncohen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roncohen/subscriptions","organizations_url":"https://api.github.com/users/roncohen/orgs","repos_url":"https://api.github.com/users/roncohen/repos","events_url":"https://api.github.com/users/roncohen/events{/privacy}","received_events_url":"https://api.github.com/users/roncohen/received_events","type":"User","site_admin":false},"created_at":"2018-03-20T15:39:08Z","updated_at":"2018-03-20T15:39:08Z","author_association":"CONTRIBUTOR","body":"There are just two callers, but you could argue that due to the nature of these functions, the scenarios they are used in means the data always come from an `interface{}`. That's what I tried to say here: \r\n\r\n> you can argue that we must do the type check somewhere because the data happens to come from a JSON that was decoded to a generic type. So if we need to type check somewhere, one could argue that its better in the individual functions to make the call site clearer.\r\n"}}
{"actor":{"display_login":"roncohen"}}