)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1875364bb28c6c29acac67d558ce38b406cee899","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sahid Orentino Ferdjaoui \u003csahid.ferdjaoui@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-06 05:20:47 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: introduce GuestBlock to wrap around Block API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit introduces an object BlockDevice to wrap around"},{"line_number":10,"context_line":"the libvirt Block API."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"ba3cc151_9992c8f5","line":7,"updated":"2015-07-06 14:05:21.000000000","message":"s/GuestBlock/BlockDevice/","commit_id":"695127524361d083af64525a71626865f132ef39"}],"nova/virt/libvirt/guest.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"71602c0fbd5c032b3ee94909bbc1ecd583d581e3","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        return self._domain.XMLDesc(flags\u003dflags)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def get_guest_block(self, disk):"},{"line_number":239,"context_line":"        return GuestBlock(self, disk)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class GuestBlock(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_cc7a1724","line":239,"updated":"2015-06-18 16:06:10.000000000","message":"Recommend renaming this to get_block_device().","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5cfc6150a96ab7d77962f28830f109bcfae0aa3b","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        return self._domain.XMLDesc(flags\u003dflags)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def get_guest_block(self, disk):"},{"line_number":239,"context_line":"        return GuestBlock(self, disk)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class GuestBlock(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_c0591a5d","line":239,"in_reply_to":"fa32b979_cc7a1724","updated":"2015-06-22 11:42:54.000000000","message":"Done","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return GuestBlock(self, disk)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class GuestBlock(object):"},{"line_number":243,"context_line":"    \"\"\"Wrapper around block device API\"\"\""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    REBASE_DEFAULT_BANDWIDTH \u003d 0  # in MiB/s - 0 unlimited"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_e1d13224","line":242,"updated":"2015-06-18 11:41:21.000000000","message":"Can we call this just BlockDevice, please? It\u0027s already namespaced by the guest module...","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5cfc6150a96ab7d77962f28830f109bcfae0aa3b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return GuestBlock(self, disk)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class GuestBlock(object):"},{"line_number":243,"context_line":"    \"\"\"Wrapper around block device API\"\"\""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    REBASE_DEFAULT_BANDWIDTH \u003d 0  # in MiB/s - 0 unlimited"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_e03a1ee7","line":242,"in_reply_to":"fa32b979_e1d13224","updated":"2015-06-22 11:42:54.000000000","message":"Done","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        self._guest \u003d guest"},{"line_number":250,"context_line":"        self._disk \u003d disk"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def job_abort(self, async\u003dFalse, pivot\u003dFalse):"},{"line_number":253,"context_line":"        \"\"\"Request to cancel any job currently running on the block."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        :param async: Request only, do not wait for completion"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_41001e66","line":252,"updated":"2015-06-18 11:41:21.000000000","message":"Most (other than the DB API module methods) methods in Nova\u0027s classes use the form:\n\n {action}_{object}\n\nSo the above should really be:\n\n abort_job()","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5cfc6150a96ab7d77962f28830f109bcfae0aa3b","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        self._guest \u003d guest"},{"line_number":250,"context_line":"        self._disk \u003d disk"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def job_abort(self, async\u003dFalse, pivot\u003dFalse):"},{"line_number":253,"context_line":"        \"\"\"Request to cancel any job currently running on the block."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        :param async: Request only, do not wait for completion"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_c0203ab3","line":252,"in_reply_to":"fa32b979_41001e66","updated":"2015-06-22 11:42:54.000000000","message":"Done","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        flags |\u003d pivot and libvirt.VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT or 0"},{"line_number":261,"context_line":"        self._guest._domain.blockJobAbort(self._disk, flags\u003dflags)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def job_info(self):"},{"line_number":264,"context_line":"        \"\"\"Returns information about job currently running"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        :returns: GuestBlockJobInfo or None"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_2134fa47","line":263,"updated":"2015-06-18 11:41:21.000000000","message":"and this should be:\n\n get_job_info()","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    def job_info(self):"},{"line_number":264,"context_line":"        \"\"\"Returns information about job currently running"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        :returns: GuestBlockJobInfo or None"},{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        status \u003d self._guest._domain.blockJobInfo(self._disk, flags\u003d0)"},{"line_number":269,"context_line":"        if status !\u003d -1:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_415c9e7c","line":266,"updated":"2015-06-18 11:41:21.000000000","message":"If this method returns None, how do we differentiate between a job that doesn\u0027t exist and a failure in the blockJobInfo() call?","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5cfc6150a96ab7d77962f28830f109bcfae0aa3b","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    def job_info(self):"},{"line_number":264,"context_line":"        \"\"\"Returns information about job currently running"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        :returns: GuestBlockJobInfo or None"},{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        status \u003d self._guest._domain.blockJobInfo(self._disk, flags\u003d0)"},{"line_number":269,"context_line":"        if status !\u003d -1:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_63905896","line":266,"in_reply_to":"fa32b979_415c9e7c","updated":"2015-06-22 11:42:54.000000000","message":"I do not believe we have to differentiate such thing in our layer. blockJobInfo will return -1 if job doesn\u0027t not exist or raise a libvirtError","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        flags |\u003d copy and libvirt.VIR_DOMAIN_BLOCK_REBASE_COPY or 0"},{"line_number":288,"context_line":"        flags |\u003d relative and libvirt.VIR_DOMAIN_BLOCK_REBASE_RELATIVE or 0"},{"line_number":289,"context_line":"        return self._guest._domain.blockRebase("},{"line_number":290,"context_line":"            self._disk, base, self.REBASE_DEFAULT_BANDWIDTH, flags\u003dflags)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def commit(self, base, top, relative\u003dFalse):"},{"line_number":293,"context_line":"        \"\"\"Commit on block device"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_e1b37296","line":290,"updated":"2015-06-18 11:41:21.000000000","message":"What does this return? An integer? If so, I would recommend changing this to raise some exception on a return of a non-successful integer code, and return None if everything was successful.","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5cfc6150a96ab7d77962f28830f109bcfae0aa3b","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        flags |\u003d copy and libvirt.VIR_DOMAIN_BLOCK_REBASE_COPY or 0"},{"line_number":288,"context_line":"        flags |\u003d relative and libvirt.VIR_DOMAIN_BLOCK_REBASE_RELATIVE or 0"},{"line_number":289,"context_line":"        return self._guest._domain.blockRebase("},{"line_number":290,"context_line":"            self._disk, base, self.REBASE_DEFAULT_BANDWIDTH, flags\u003dflags)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def commit(self, base, top, relative\u003dFalse):"},{"line_number":293,"context_line":"        \"\"\"Commit on block device"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_438bd41e","line":290,"in_reply_to":"fa32b979_e1b37296","updated":"2015-06-22 11:42:54.000000000","message":"Potentially any methods we call from a virDomain can raise a libvirtError and we do not handle this at this layer (which is something we should to i guest yes) In order to keep coherence with all of the code already implemented in Host and Guest I would like to continue in the same way, then working on new serie to implement custom exceptions for each method should be something we have to follow yes.\n\nseems reasonable ?","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        flags \u003d relative and libvirt.VIR_DOMAIN_BLOCK_COMMIT_RELATIVE or 0"},{"line_number":301,"context_line":"        return self._guest._domain.blockCommit("},{"line_number":302,"context_line":"            self._disk, base, top, self.COMMIT_DEFAULT_BANDWIDTH, flags\u003dflags)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def resize(self, size_kb):"},{"line_number":305,"context_line":"        \"\"\"Resizes block device to Kib size.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_6166822b","line":302,"updated":"2015-06-18 11:41:21.000000000","message":"ditto comment about return code as rebase()","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def resize(self, size_kb):"},{"line_number":305,"context_line":"        \"\"\"Resizes block device to Kib size.\"\"\""},{"line_number":306,"context_line":"        self._guest._domain.blockResize(self._disk, size_kb)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"class GuestVCPUInfo(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_216cfa06","line":306,"updated":"2015-06-18 11:41:21.000000000","message":"ditto comment about return code as rebase()","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        self.time \u003d time"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"class GuestBlockJobInfo(object):"},{"line_number":326,"context_line":"    def __init__(self, job, bandwidth, cur, end):"},{"line_number":327,"context_line":"        \"\"\"Structure for information about running job."},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_21987a69","line":325,"updated":"2015-06-18 11:41:21.000000000","message":"ditto about renaming this just BlockDeviceJobInfo.\n\nAnd yes, I think the same for the GuestVCPUInfo class above :)","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fb587f0fe09dd955e20c348f2709f15bc1fc3be0","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        \"\"\"Structure for information about running job."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        :param job: The running job (0 placeholder, 1 pull,"},{"line_number":330,"context_line":"                      2 copy, 3 commit, 4 active commit)"},{"line_number":331,"context_line":"        :param bandwidth: Used in MiB/s"},{"line_number":332,"context_line":"        :param cur: Indicates the position between 0 and \u0027end\u0027"},{"line_number":333,"context_line":"        :param end: Indicates the position for this operation"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_213abae7","line":330,"updated":"2015-06-18 11:41:21.000000000","message":"Are these constants somewhere in the python-libvirt library?","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"5cfc6150a96ab7d77962f28830f109bcfae0aa3b","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        \"\"\"Structure for information about running job."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        :param job: The running job (0 placeholder, 1 pull,"},{"line_number":330,"context_line":"                      2 copy, 3 commit, 4 active commit)"},{"line_number":331,"context_line":"        :param bandwidth: Used in MiB/s"},{"line_number":332,"context_line":"        :param cur: Indicates the position between 0 and \u0027end\u0027"},{"line_number":333,"context_line":"        :param end: Indicates the position for this operation"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_634e18c3","line":330,"in_reply_to":"fa32b979_213abae7","updated":"2015-06-22 11:42:54.000000000","message":"Yes libvirt.VIR_DOMAIN_BLOCK_JOB_TYPE_* - not sure of what should i do ?","commit_id":"b74e8138b0c8086c332199bb20d94ea0ed69e45f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"22958363780016410c719f1078186cd306304332","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    REBASE_DEFAULT_BANDWIDTH \u003d 0  # in MiB/s - 0 unlimited"},{"line_number":258,"context_line":"    COMMIT_DEFAULT_BANDWIDTH \u003d 0  # in MiB/s - 0 unlimited"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def __init__(self, guest, disk):"},{"line_number":261,"context_line":"        self._guest \u003d guest"},{"line_number":262,"context_line":"        self._disk \u003d disk"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_fba076a7","line":260,"updated":"2015-07-07 12:08:34.000000000","message":"a docstring would be helpful here to indicate that the guest is a class","commit_id":"f21da5da1920aff5b88abc55c88b90ca64bdf6d4"}]}
