)]}'
{"nova/tests/unit/virt/hyperv/test_ioutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"867cae649576e35ab245baa6afbdc1c68249087e","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_get_write_buffer_data(self):"},{"line_number":112,"context_line":"        fake_data \u003d \u0027fake data\u0027"},{"line_number":113,"context_line":"        fake_buffer \u003d (ctypes.c_ubyte * len(fake_data))()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        self._ioutils.write_buffer_data(fake_buffer, fake_data)"},{"line_number":116,"context_line":"        buff_data \u003d self._ioutils.get_buffer_data(fake_buffer, len(fake_data))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_3646acc0","line":113,"updated":"2015-07-28 11:52:23.000000000","message":"I see, this line works the same as ioutils.get_buffer, for which I had concerns about.","commit_id":"5572b2eb7c1b47a209cd02ec221669751d57c11a"}],"nova/virt/hyperv/ioutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0dc602a2a22c62a3507eab50a651e0a394000323","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        self._wait_io_completion(overlapped_structure.hEvent)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def get_buffer(self, buff_size):"},{"line_number":279,"context_line":"        return (ctypes.c_ubyte * buff_size)()"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def get_buffer_data(self, buff, num_bytes):"},{"line_number":282,"context_line":"        data \u003d \"\".join([struct.pack(\u0027B\u0027, b)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_b0ce442b","line":279,"updated":"2015-07-22 12:38:54.000000000","message":"wondering how this is callable.. unit test pls?","commit_id":"ba8bcf9e6ff78fb5cdb125fe4ec68db938222ff5"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"3fd2136a923034110228c80446f29692d58beb53","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        self._wait_io_completion(overlapped_structure.hEvent)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def get_buffer(self, buff_size):"},{"line_number":279,"context_line":"        return (ctypes.c_ubyte * buff_size)()"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def get_buffer_data(self, buff, num_bytes):"},{"line_number":282,"context_line":"        data \u003d \"\".join([struct.pack(\u0027B\u0027, b)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_193883ee","line":279,"in_reply_to":"3a50d1a3_b0ce442b","updated":"2015-07-22 13:02:46.000000000","message":"ctypes.c_ubyte * buff_suze will return a class that will be instantiated, representing a byte array.","commit_id":"ba8bcf9e6ff78fb5cdb125fe4ec68db938222ff5"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"0dc602a2a22c62a3507eab50a651e0a394000323","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def write_buffer_data(self, buff, data):"},{"line_number":287,"context_line":"        for i, c in enumerate(data):"},{"line_number":288,"context_line":"            buff[i] \u003d struct.unpack(\u0027B\u0027, c)[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_101938d7","line":288,"updated":"2015-07-22 12:38:54.000000000","message":"how can you assure that the buff is long long enough to put all that data in?\n\nalso, unit test could be useful.","commit_id":"ba8bcf9e6ff78fb5cdb125fe4ec68db938222ff5"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"3fd2136a923034110228c80446f29692d58beb53","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def write_buffer_data(self, buff, data):"},{"line_number":287,"context_line":"        for i, c in enumerate(data):"},{"line_number":288,"context_line":"            buff[i] \u003d struct.unpack(\u0027B\u0027, c)[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_79042749","line":288,"in_reply_to":"3a50d1a3_101938d7","updated":"2015-07-22 13:02:46.000000000","message":"The TCP socket proxy accepts at most the number of bytes of the buffer, which is defined as a constant. Also, this is tested by \"test_get_write_buffer_data\".","commit_id":"ba8bcf9e6ff78fb5cdb125fe4ec68db938222ff5"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"867cae649576e35ab245baa6afbdc1c68249087e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"FILE_SHARE_WRITE \u003d 2"},{"line_number":67,"context_line":"GENERIC_READ \u003d 0x80000000"},{"line_number":68,"context_line":"GENERIC_WRITE \u003d 0x40000000"},{"line_number":69,"context_line":"OPEN_EXISTING \u003d 3"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"FORMAT_MESSAGE_FROM_SYSTEM \u003d 0x00001000"},{"line_number":72,"context_line":"FORMAT_MESSAGE_ALLOCATE_BUFFER \u003d 0x00000100"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_76c5148c","line":69,"updated":"2015-07-28 11:52:23.000000000","message":"L65-L69 constants aren\u0027t used.","commit_id":"5572b2eb7c1b47a209cd02ec221669751d57c11a"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"caceacdce1144a22855891f34366d0e859ecb515","unresolved":false,"context_lines":[{"line_number":66,"context_line":"FILE_SHARE_WRITE \u003d 2"},{"line_number":67,"context_line":"GENERIC_READ \u003d 0x80000000"},{"line_number":68,"context_line":"GENERIC_WRITE \u003d 0x40000000"},{"line_number":69,"context_line":"OPEN_EXISTING \u003d 3"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"FORMAT_MESSAGE_FROM_SYSTEM \u003d 0x00001000"},{"line_number":72,"context_line":"FORMAT_MESSAGE_ALLOCATE_BUFFER \u003d 0x00000100"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_c56afeb2","line":69,"in_reply_to":"3a50d1a3_76c5148c","updated":"2015-07-29 08:18:58.000000000","message":"Those are actually used in the NamedPipe class in one of the following patches from the chain.\n\nAs those constants are tightly coupled with the IOUtils methods, used for low level IO operations, it made more sense to me to place them here rather than the constants module. This way, all the related constants are kept in one place.\n\nAnyway, if it\u0027s required, I may move them to the constants module.","commit_id":"5572b2eb7c1b47a209cd02ec221669751d57c11a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"867cae649576e35ab245baa6afbdc1c68249087e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"WAIT_FAILED \u003d 0xFFFFFFFF"},{"line_number":77,"context_line":"WAIT_FINISHED \u003d 0"},{"line_number":78,"context_line":"ERROR_PIPE_BUSY \u003d 231"},{"line_number":79,"context_line":"ERROR_PIPE_NOT_CONNECTED \u003d 233"},{"line_number":80,"context_line":"ERROR_NOT_FOUND \u003d 1168"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"WAIT_PIPE_DEFAULT_TIMEOUT \u003d 5  # seconds"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_1664d0b6","line":79,"updated":"2015-07-28 11:52:23.000000000","message":"L77-L79 aren\u0027t used.","commit_id":"5572b2eb7c1b47a209cd02ec221669751d57c11a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"867cae649576e35ab245baa6afbdc1c68249087e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"ERROR_NOT_FOUND \u003d 1168"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"WAIT_PIPE_DEFAULT_TIMEOUT \u003d 5  # seconds"},{"line_number":83,"context_line":"WAIT_IO_COMPLETION_TIMEOUT \u003d 2 * units.k"},{"line_number":84,"context_line":"WAIT_INFINITE_TIMEOUT \u003d 0xFFFFFFFF"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"IO_QUEUE_TIMEOUT \u003d 2"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_f62cc44b","line":83,"updated":"2015-07-28 11:52:23.000000000","message":"isn\u0027t used.","commit_id":"5572b2eb7c1b47a209cd02ec221669751d57c11a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"867cae649576e35ab245baa6afbdc1c68249087e","unresolved":false,"context_lines":[{"line_number":83,"context_line":"WAIT_IO_COMPLETION_TIMEOUT \u003d 2 * units.k"},{"line_number":84,"context_line":"WAIT_INFINITE_TIMEOUT \u003d 0xFFFFFFFF"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"IO_QUEUE_TIMEOUT \u003d 2"},{"line_number":87,"context_line":"IO_QUEUE_BURST_TIMEOUT \u003d 0.05"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_36178cef","line":86,"updated":"2015-07-28 11:52:23.000000000","message":"ditto.","commit_id":"5572b2eb7c1b47a209cd02ec221669751d57c11a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"867cae649576e35ab245baa6afbdc1c68249087e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"WAIT_INFINITE_TIMEOUT \u003d 0xFFFFFFFF"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"IO_QUEUE_TIMEOUT \u003d 2"},{"line_number":87,"context_line":"IO_QUEUE_BURST_TIMEOUT \u003d 0.05"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class IOThread(native_threading.Thread):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_561498e7","line":87,"updated":"2015-07-28 11:52:23.000000000","message":"ditto","commit_id":"5572b2eb7c1b47a209cd02ec221669751d57c11a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"867cae649576e35ab245baa6afbdc1c68249087e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"IO_QUEUE_TIMEOUT \u003d 2"},{"line_number":87,"context_line":"IO_QUEUE_BURST_TIMEOUT \u003d 0.05"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class IOThread(native_threading.Thread):"},{"line_number":91,"context_line":"    def __init__(self, src, dest, max_bytes):"},{"line_number":92,"context_line":"        super(IOThread, self).__init__()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_967a2023","line":89,"updated":"2015-07-28 11:52:23.000000000","message":"also, if any of the constants above will be used by other modules, then those constants belong in constants.py","commit_id":"5572b2eb7c1b47a209cd02ec221669751d57c11a"}]}
