{"push_id":1253816533,"size":25,"distinct_size":25,"ref":"refs/heads/alessandro/fix-scope-stop-osx","head":"0e551bb829920d2f8a0a73ccac4849228c2f04bc","before":"df1768f47e927dad7f8924f149a9460f7e18128e","commits":[{"sha":"93891a23bd9052171a76ddd6be859a86670feee3","author":{"name":"Matthias Radestock","email":"0569b49db6bef60d2335518b33797c3ed4d1afc4@gmail.com"},"message":"fix MemcacheClient.FetchReports miss & leak on corrupt report\n\nProblem: Decoding a corrupt report grows the 'missing' list. Since we\nare waiting for 'len(keys)-len(missing)' decoder go-routines, this\nresults in waiting for fewer go-routines than we should. The surplus\ngo-routines leak and we ignore their reports. And since the keys of the\nignored reports are not included in 'missing', we won't attempt to fetch\nthem from S3 either. Oops.\n\nFix: calculate the number of go-routines once, at the beginning.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/93891a23bd9052171a76ddd6be859a86670feee3"},{"sha":"55d817fa2f59ea7a2b89a005ca930ec7ee336ce7","author":{"name":"Matthias Radestock","email":"0569b49db6bef60d2335518b33797c3ed4d1afc4@gmail.com"},"message":"allow more accurate reporting of memcache hit ratio\n\nA lot of time could pass between recording the request count and hit\ncount pertaining to a particular report fetching batch, which skewed\ncalculations cache hit ratios.\n\nFix that by defering the request count recording to the end, which is\nwhen we record the hit count.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/55d817fa2f59ea7a2b89a005ca930ec7ee336ce7"},{"sha":"450131c37762cbae37736c7e9b4790408ee3a2f7","author":{"name":"Matthias Radestock","email":"0569b49db6bef60d2335518b33797c3ed4d1afc4@gmail.com"},"message":"fix report store query chaining\n\nWe fell victim to variable shadowing here. Each store would be fed the\noriginal list of report keys, instead of only the ones that weren't\nfound in the previous store. So if a single report was missing from the\nin-process cache, we would then fetch all reports from memcache. And if\nthat in turn was missing a single report we would fetch all reports from\nS3.\n\nWe chain report stores for a reason - to reduce latency and, in case of\nthe in-process cache, eliminate decoding costs. So this bug has a huge\nimpact on query service performance.\n\nTo make matters worse, we return *all* the reports - now possibly in\ntriplicate. Fortunately, the SmartMerger filters these out, so at least\nwe were not incurring extra merge costs.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/450131c37762cbae37736c7e9b4790408ee3a2f7"},{"sha":"a9cf8bee3cd8c8b59adcb73c8f4e02d39bb08e1a","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Allow testing only a subset of directories\n\nThis can be done by calling TESTDIRS=\"./report ./probe\" make tests","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/a9cf8bee3cd8c8b59adcb73c8f4e02d39bb08e1a"},{"sha":"da8fa3a0215bd72cc4acaee65a904222680982f3","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Make dumper a bit more verbose\n\nSo it displays differences behind interface that would otherwise go\nunnoticed (like string vs []byte).","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/da8fa3a0215bd72cc4acaee65a904222680982f3"},{"sha":"2b3820c0b5a08e35ddfb139fc11a98b1cb7c8c5b","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Ban the possibility of changing plugin's ID\n\nChanging plugin's ID only complicates control handling in plugins so\nlet's ban it.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/2b3820c0b5a08e35ddfb139fc11a98b1cb7c8c5b"},{"sha":"25b8d8e75aaa8db0b6ffae183deb1f1cf336ec73","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Use consistent plugin ID in the http-requests plugin\n\nThe socket has the \"http_requests.sock\" filename, so ID should be\n\"http_requests\", not \"http-requests\".","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/25b8d8e75aaa8db0b6ffae183deb1f1cf336ec73"},{"sha":"5cbd95f69333a4ae2d654ecdb97e64b9a8adf4bc","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Restrict the set of allowed characters in plugin IDs\n\nWe will want to put plugin id in a control id, which is sent to an app\nand then to GUI. When we get a control request from GUI, we will want\nto extract the plugin ID from the control name. To do it unambiguously\nwe need some separator made of chars that are not allowed in a plugin\nname. This is to avoid the situation when there are two plugins:\n\"Plugin\" and \"PluginFoo\". \"Plugin\" exposes a control named\n\"FooControl\" and \"PluginFoo\" exposes a control named \"Control\". Faking\nthe control names which will be sent to the app would result in two\n\"PluginFooControl\".\n\nOne possible option for plugin ID and control name separator would be\n\"/\", but that won't work, since the request sent from GUI to the app\nto <probe>/<node>/<control> would actually be\n<probe>/<node>/<plugin>/<control> and as such wouldn't match the URL\ntemplate in RegisterControlRoutes().","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/5cbd95f69333a4ae2d654ecdb97e64b9a8adf4bc"},{"sha":"bc28a9aca7bc6e70107f10a6927e4ae27490b707","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Remove impossible case of an empty plugin ID\n\nPlugin ID must be non-empty when the plugin is created and the\nfollowup reports cannot change it.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/bc28a9aca7bc6e70107f10a6927e4ae27490b707"},{"sha":"3a6c150992b03cd44e9d83b33bafc724f5360b0b","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Test the case when a plugin reports more than one plugin","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/3a6c150992b03cd44e9d83b33bafc724f5360b0b"},{"sha":"f3905554c0efd2da7fde5380c629a715cbd2777c","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Make control handlers registry an object and extend its functionality\n\nIt is not a singleton anymore. Instead it is an object with a registry\nbackend. The default registry backend is provided, which is equivalent\nto what used to be before. Custom backend can be provided for testing\npurposes.\n\nThe registry also supports batch operations to remove and add handlers\nas an atomic step.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/f3905554c0efd2da7fde5380c629a715cbd2777c"},{"sha":"5127d91d18d25f8c285294309e5c20ea3b14309b","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Forward control requests to plugins\n\nThanks to that, plugins can react to requests from controls they\nexposed.\n\nTo make it work, plugins registry modifies each plugin's report by\nprepending the plugin ID to the control name the plugin has exposed\nbefore sending it to the app. Then the registry installs the control\nrequest handler for this faked control name, which forwards the\nrequest to the correct plugin.\n\nThis adds a new API endpoint to plugins next to \"/report\" - a\n\"/control\" entry. The body of the request is the JSON-encoded\nxfer.Request instance.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/5127d91d18d25f8c285294309e5c20ea3b14309b"},{"sha":"d3d93aba8d884a6cc6cbe47ca00fb39d1a025236","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Run docker with sudo if necessary in iowait makefile\n\nThe solution is taken from the toplevel Makefile.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/d3d93aba8d884a6cc6cbe47ca00fb39d1a025236"},{"sha":"ffe3ea215fa0c57c674bc18863e875d63c66846c","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Make the iowait example plugin a controller too\n\nIt exposes a button that allows switching between showing an iowait\nstatistics and an idle statistics. When the button is pressed it\nshould be replaced with other button. The button is shown in the host\nnode.\n\nThis is a rather nasty case as it shows several problems:\n\n- Button control races\n  - The way the NodeControl currently works creates races between\n    plugins adding buttons to the same node. This is because\n    NodeControls are not really merged, but rather one of the two are\n    chosen based on a NodeControls' timestamps, so the older one is\n    thrown away entirely. In the end GUI can switch randomly between\n    showing controls from one plugin or from another.\n\n- Showing outdated statistics\n  - When pressing the button to switch to show the other statistics,\n    the old ones are still shown for several seconds.\n\n- Slowness of the updates in GUI\n  - Pressing the button yields no immediate reaction. Changes happen\n    after several seconds. Probably related to the previous point.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/ffe3ea215fa0c57c674bc18863e875d63c66846c"},{"sha":"1791ab86e05d4048b4063ab463f759554149ca13","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Marshal structs in the iowait example plugin\n\nThis is better than writing JSON strings by hand, which is\nerror-prone.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/1791ab86e05d4048b4063ab463f759554149ca13"},{"sha":"31718522b47994c13386b8dd5922d7dbdca22e69","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Marshal structs in the plugins registry tests\n\nThis is better than writing JSON strings by hand, which is\nerror-prone.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/31718522b47994c13386b8dd5922d7dbdca22e69"},{"sha":"00995f1d0701c0e022a6eebedb61504c565fafd9","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Add shortcut reports for plugins.\n\nPlugins are queried for reports two times in a second. That's often\nenough to get the shortcut reports. The reports are sent together with\nthe response.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/00995f1d0701c0e022a6eebedb61504c565fafd9"},{"sha":"645d3af095f0ed24a550a30c46198e2a01653b02","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Extend the node control rewriting test\n\nJust to make sure that all the node controls are rewritten, even those\nthat don't have a counterpart in topology controls.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/645d3af095f0ed24a550a30c46198e2a01653b02"},{"sha":"ab8c4e7365d38473468127d3c63e2530c367a7d0","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Make LatestMap \"generic\"\n\nThis commit makes the LatestMap type a sort of a base class, that\nshould not be used directly. This also adds a generator for LatestMap\n\"concrete\" types with a specific data type in the LatestEntry.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/ab8c4e7365d38473468127d3c63e2530c367a7d0"},{"sha":"f2b3095a8857c54557fa2e899300289a9888b668","author":{"name":"Krzesimir Nowak","email":"ff2347f159e56dc6c93d151158275c4cdf0b51a4@kinvolk.io"},"message":"Add a concrete version of LatestMap for node controls\n\nThis LatestMap will hold a struct that has more information about the\nstate of the node control.","distinct":true,"url":"https://api.github.com/repos/kinvolk/scope/commits/f2b3095a8857c54557fa2e899300289a9888b668"}]}
{"actor":{"display_login":"alepuccetti"}}