{"push_id":3032802158,"size":43,"distinct_size":43,"ref":"refs/heads/http","head":"9ba202ef90e5f5a04b9b15c033e20225d536f9f4","before":"3859917506d033dd8bf6c826c4c1147d160b5dc2","commits":[{"sha":"a34d7d017c9e98cba2c173e5d0d02144639c595b","author":{"name":"Daniel Erez","email":"2f9e6efa5394039257912622b475da08d58ee4c7@redhat.com"},"message":"proxy: add transfer_id to ticket\n\nAdded 'transfer_id' to ticket and updated auth_ticket.in/out\n\nChange-Id: I1f810f637b5fccf7d3df1bdb84b29e90e44e564a\nSigned-off-by: Daniel Erez <derez@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/a34d7d017c9e98cba2c173e5d0d02144639c595b"},{"sha":"356d224f1124deb3d63125b1f3b3e583839bcbd9","author":{"name":"Daniel Erez","email":"2f9e6efa5394039257912622b475da08d58ee4c7@redhat.com"},"message":"version: Bump to 1.4.5\n\nChange-Id: Id3dcd3f16083279179029afbb69ef9d5f930377f\nSigned-off-by: Daniel Erez <derez@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/356d224f1124deb3d63125b1f3b3e583839bcbd9"},{"sha":"b3607830f93932235368a826ca4deef33591d8ba","author":{"name":"Asaf Rachmani","email":"cf92fa3c4cb4b8f0f0e8907fa43b1321425f3c89@redhat.com"},"message":"setup: plugins: Change ImageProxyAddress in engine's DB\n\nChange ImageProxyAddress in engine's DB when using ovirt-engine-rename\n\nChange-Id: Idd84812ff74b330b6d0bf0bf9030d60a27ae3d49\nBug-Url: https://bugzilla.redhat.com/1519194\nSigned-off-by: Asaf Rachmani <arachman@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/b3607830f93932235368a826ca4deef33591d8ba"},{"sha":"a8d99454bd5e9088dc75a61094a2a97fcc5a1245","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"version: Bump to 1.5.0\n\nWe should bump master version when we start to work on a release, not\nwhen we end the work. This make it easier to detect if we run code from\nmaster or stable branch.\n\nFor next release I want to get rid of the WSGI server, which is a pretty\nbig rewrite, so it is time to bump the minor version. If we need to fix\nbugs in current stable version we can release 1.4.x from that branch.\n\nChange-Id: I4e519523e8e736eff944b1c51fc099c866386af3\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/a8d99454bd5e9088dc75a61094a2a97fcc5a1245"},{"sha":"136a312d6533cdbeaf54f3fd2913a4fd7e4e34a5","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"util: Add Clock.run() context manager\n\nTo have per connection statistics, we need to move the clock to the\nconnection. This means that a clock must stop even if the timed\noperation raised.\n\nInstead of littering the code with:\n\n    clock.start(\"op\")\n    try:\n        something_that_may_raise()\n    finally:\n        clock.stop(\"op\")\n\nWe can do now:\n\n    with clock.run(\"op\"):\n        something_that_may_raise()\n\nChange-Id: Id98f359558cedf1c80578f77f0f3e77dfeb67fa3\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/136a312d6533cdbeaf54f3fd2913a4fd7e4e34a5"},{"sha":"4bdf189bb70f99d66c866981fa78cca27ea4b642","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"directio: Enable per-connection clock\n\nTo have per-connection clock, we must use the new Clock.run() context\nmanager, otherwise a failure of one request will leave a running clock,\nwhich will cause future Clock.start() call to fail.\n\nBut in directio module we use None clock by default, and the code is\nusing:\n\n   if self._clock:\n       self._clock.start(\"name\")\n   stuff to measure...\n   if self._clock:\n       self._clock.stop(\"name\")\n\nAdd a NullClock that can be used as default value, this code can be\nmodified to:\n\n   with self._clock.run(\"name\"):\n       stuff to measure...\n\nChange-Id: I802d56d54f0a8904dcfa6f7555ffcfc562352fe3\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/4bdf189bb70f99d66c866981fa78cca27ea4b642"},{"sha":"6c67499b81eb5c335b5e64e5fb1541608cedba9d","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"util: Add clock benchmark\n\nAdd benchmark to understand how much we pay for timing requests, and for\npreventing performance regressions in this area.\n\nChange-Id: I2dc152b677b2b9aa60d0c381a0122a5de79dc1f6\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/6c67499b81eb5c335b5e64e5fb1541608cedba9d"},{"sha":"49adf2cacdf05cc21b447c73d8b28526fdfb731b","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"util: Count also the number of runs for every timer\n\nutil.Clock() keeps now the number of runs for every timer. Once we have\nclock per connection, this will report the number of read and write\nrequests for the entire image.\n\nHere is an example clock (from the clock benchmark) - without this change:\n\n    [connection=0.468424, request=0.384151, read=0.074610, write=0.074435]\n\nWith this change:\n\n    [connection=0.340290/1, request=0.271159/50000, read=0.049629/50000,\n    write=0.050324/50000]\n\nToday we have to calculate the total number of requests by grepping the\nlogs for WRITE/ZERO lines per ticket. With this change, we can switch\nthe WRITE and ZERO logs to debug level and fix the issue of huge logs\nand loosing logs by rotation.\n\nNote: to keep the format cleaner, we don't mark now unstopped timers\nwith \"*\".\n\nChange-Id: I150af9e4d7b1e4e613b01e8769c91a39ec8ebfa8\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/49adf2cacdf05cc21b447c73d8b28526fdfb731b"},{"sha":"f3f48ad1328d1368f71c80ccab1df24fcf725ef6","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Start new http server\n\nThis module will replace the wsgi module, providing simpler lower level\nHTTP server interface, based on standard library http.server module.\n\nGoals:\n\n- Have same flow for PUT and GET, allowing the application to easily\n  handle request life cycle and errors. With WSGI, the application must\n  return an iterator in GET, and loose all control during iteration.\n\n- Control connection life cycle in the application level. A connection\n  may need to cache per-connection resources. This is hard to do with\n  WSGI since we don't have access to the connection object.\n\n- Better performance. WSGI adds extra overhead by adding unneeded\n  abstraction. To handle sparseness we need to handle many small\n  requests efficiently.\n\n- Reduce number of objects created per request. Previously we registered\n  a handler class and created new instance or every request, holding the\n  request, config, and clock. Now we register a handler object, and pass\n  the request as argument to the handler methods. The config object is\n  not passed to the Router since it is not needed there.\n\n- Per connection statistics. Previously we created a clock per request,\n  measuring how time was spent during a single request. What we really\n  want is stats per upload. Moving the clock to the connection make\n  this easy, as can be seen in the demo.\n\nSee test/httpdemo.py and test/http_test.py for example usage.\n\nChange-Id: I74536dd29716a89042b47fe3a1f56989b56ea477\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/f3f48ad1328d1368f71c80ccab1df24fcf725ef6"},{"sha":"f4737accf0ab995fd21bafad73bdc52362a9fe28","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"tox: Fix bench targets\n\nTurns out that tox conditional settings do not cope well with wrapped\ncommand lines. tox -e bench fails now with:\n\n    ERROR: InvocationError for command could not find executable 'cov=ovirt_imageio_daemon'\n\nUsing single line per command is ugly but solves this issue.\n\nChange-Id: Ia7a184320fae7d32b52c61a74f062e31c1256de4\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/f4737accf0ab995fd21bafad73bdc52362a9fe28"},{"sha":"f82bb146ca697b7206a9ffb49bddc9a04200cce5","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"client: Add progress support\n\nclient.upload() accepts now \"progress\" function argument for updating\ncurrent progress. The function is called after every write or zero with\nthe number of transferred bytes.\n\nTo allow progress for zero requests, we split now zero requests to 1g\nchunks, so we get a progress update at least every few seconds with very\nslow storage, and about 40 updates per second with fast storage.\n\nNew ui module added with a simple ProgressBar class that can be used\nwith the client. The upload example use it to show upload progress.\n\nHere is an example run, uploading empty 100g image:\n\n$ truncate -s 100g empty.img\n$ ./upload --insecure -u /var/tmp/empty.img https://localhost:54322/images/test\n[ 100.00% ] 100.00 GiB, 2.34 seconds, 43815.49 MiB/s\n\nAnd uploading real fedora 28 image with 19g of data:\n\n$ ./upload --insecure -u fedora-28-19g.img https://localhost:54322/images/test\n[ 100.00% ] 100.00 GiB, 72.81 seconds, 1406.45 MiB/s\n\nSame image using HTTPS instead of unix socket:\n\n$ ./upload --insecure fedora-28-19g.img https://localhost:54322/images/test\n[ 100.00% ] 100.00 GiB, 88.95 seconds, 1151.27 MiB/s\n\nChange-Id: I851cf12d9f1419e9330e69a58d4effc839eab8ad\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/f82bb146ca697b7206a9ffb49bddc9a04200cce5"},{"sha":"872620da6f224b3dac8d95277a440855b1c8ce65","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"tests: Fix flaky tests\n\nCommit 8dcb7235177f (daemon: Extend ticket on every request) added some\nflaky tests assuming that one client completed reading response data the\nserver thread has closed the operation and extended the ticket. This\nusually works but once in 10 tests it fails in the CI because the server\nthread did not run yet.\n\nAdd 100 milliseconds sleep after reading the response, to make sure the\nserver thread run and close the operation.\n\nChange-Id: I53e1ed9600e2f5686d8031c83ecafe8a1ed29b88\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/872620da6f224b3dac8d95277a440855b1c8ce65"},{"sha":"d66b376c7ece215038ecfe7f1331067255942cd0","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Use shorter maximum request line\n\nBaseHTTPServer supports request-line of 65536 characters. This size is\nan arbitrary value that a server choose to support. For Python builtin\nserver it makes sense to use large value, since some application may\nlike to support very long request URI.\n\nIn imageio we never need large URI, so there is no reason to support\nsuch a large value. Shorten to 4096 characters, and replace the magic\nnumber with a class constant.\n\nChange-Id: I69caac2e5df0f86373279e4c276bd75393842f00\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/d66b376c7ece215038ecfe7f1331067255942cd0"},{"sha":"83648e797dd4a4f0bb52e7fa44be5c388ae31fb4","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Add query string support\n\nhttp.Request splits now the query string from the path, and provide a\nnew \"query\" property, with the parsed query string dict.\n\nExample usage:\n\n    flush = req.query.get(\"flush\") == \"y\"\n\nUnlike webob.Request.params, multiple key=value pairs are dropped, and\nthe last value wins. We don't care about having access to all values.\n\nUnlike webob.Request.params, http.Request.query does not try to\nmagically merge query string and POST payload. We don't care submitting\nhtml forms.\n\nChange-Id: If85c7ee4a2e4ba8cb6d437aa1b1725c1f388dc43\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/83648e797dd4a4f0bb52e7fa44be5c388ae31fb4"},{"sha":"3da48573d1142da6ea4081f0de2b7cc9f6b0b3df","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Add _UNKNOWN sentinel for lazy initialization\n\nSome request properties are expected to be missing, so None is not a\ngood value for uninitialized property. Add _UNKNOWN constant to mark\nuninitialized variables.\n\nChange-Id: I187dc4848f94dd9f978535905ca0fec8ca413a69\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/3da48573d1142da6ea4081f0de2b7cc9f6b0b3df"},{"sha":"969d59c56155c68031c0a18bb83a5036f8f012f8","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Add Request.content_length property\n\nParsing request Content-Length is the most common task, need for any\nrequest with a content using \"identity\" transfer encoding. Robust\napplication also needs to validate the content length is valid before\nusing it.\n\nAdd Request.content_length property, parsing Content-Length header value\nonce, and then returning the parsed value.\n\nUnlike webob.Request.content_length this property will fail a request\nwith \"400 Bad Request\" if invalid value was specified. This save the\nerror handling boilerplate in the request handlers.\n\nChange-Id: I124f84a41c6af84f2dfbfc6719aeba8365684b8d\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/969d59c56155c68031c0a18bb83a5036f8f012f8"},{"sha":"b644343ef81fe81be21a576df6dd7567f880aef8","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Close connection on error if payload was not fully read\n\nhttp.Request keeps now the number of unread bytes in the request body.\nWhen handling failures, we close the connection if the request was not\nfully read.\n\nChange-Id: I04c014eb0fa85aa1f833ba2d0dac3fc33834a19b\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/b644343ef81fe81be21a576df6dd7567f880aef8"},{"sha":"fcbf7be9e5fd0dab7f1de8726f359bf9f7ae3d6e","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Limit Request.read()\n\nTrying to read more than Content-Length bytes from request body can\nblock forever. To avoid this and the repeated boilerplate code trying to\nread exactly Request.content_length bytes, Request.read() is limiting\nnow the number of bytes to the specified Content-Length.\n\nThis will need to improve later when we add chucked transfer encoding\nsupport.\n\nChange-Id: I46f901d3bf307328983aefb35920f20c11f2743c\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/fcbf7be9e5fd0dab7f1de8726f359bf9f7ae3d6e"},{"sha":"9262317a588c91f8c7adaf169954590a5e951685","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Use integer content-length header\n\nhttp.Connection.send_header() supports integer values, converting them\nto string before writing, so we don't need to write:\n\n    resp.headers[\"content-length\"] = str(len(body))\n\nChange-Id: I494ad200c4163442eea9490b6965764e568491c5\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/9262317a588c91f8c7adaf169954590a5e951685"},{"sha":"9e765529507fa333388d3f451be1d107744949be","author":{"name":"Nir Soffer","email":"60258c486a9660a474d408e6013543d2add80a76@redhat.com"},"message":"http: Add WSGI demo server for performance tests\n\nThis demo makes it easy to compare the new http module with the old wsgi\nmodule. It can be removed when we delete the wsgi module.\n\nChange-Id: Ibb471be4404904da4a07bd65006a687d376252ea\nSigned-off-by: Nir Soffer <nsoffer@redhat.com>","distinct":true,"url":"https://api.github.com/repos/nirs/ovirt-imageio/commits/9e765529507fa333388d3f451be1d107744949be"}]}
{"actor":{"display_login":"nirs"}}