)]}'
{"glance/api/middleware/cache.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9756607597a2177cda4fb933c04dfef48cf15421","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # cut out those requests and anything with a query"},{"line_number":71,"context_line":"        # parameter..."},{"line_number":72,"context_line":"        # See LP Bug #879136"},{"line_number":73,"context_line":"        if \u0027?\u0027 in image_id or image_id \u003d\u003d \u0027detail\u0027:"},{"line_number":74,"context_line":"            return None"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if self.cache.is_cached(image_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F664%3D","line":73,"updated":"2011-10-24 20:04:06.000000000","message":"Can we make the regex smarter so we can still use the cache in these situations?","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f14339c4a4181b8a7f528b993d98f13688ec0d79","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # cut out those requests and anything with a query"},{"line_number":71,"context_line":"        # parameter..."},{"line_number":72,"context_line":"        # See LP Bug #879136"},{"line_number":73,"context_line":"        if \u0027?\u0027 in image_id or image_id \u003d\u003d \u0027detail\u0027:"},{"line_number":74,"context_line":"            return None"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if self.cache.is_cached(image_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F66M%3D","line":73,"in_reply_to":"AAAACX%2F%2F664%3D","updated":"2011-10-25 19:35:22.000000000","message":"Possible to do that in a later patch? I tried messing around with a regex that would do it, but didn\u0027t get very far...","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"426bae8218e32f2b9aef625cecdeebde273e4a7e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # cut out those requests and anything with a query"},{"line_number":71,"context_line":"        # parameter..."},{"line_number":72,"context_line":"        # See LP Bug #879136"},{"line_number":73,"context_line":"        if \u0027?\u0027 in image_id or image_id \u003d\u003d \u0027detail\u0027:"},{"line_number":74,"context_line":"            return None"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if self.cache.is_cached(image_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6qw%3D","line":73,"in_reply_to":"AAAACX%2F%2F66M%3D","updated":"2011-10-25 21:13:01.000000000","message":"Definitely. No harm done.","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"}],"glance/image_cache/__init__.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9756607597a2177cda4fb933c04dfef48cf15421","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        return tee_iter(image_id)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def cache_image_iter(self, image_id, image_iter):"},{"line_number":203,"context_line":"        \"\"\""},{"line_number":204,"context_line":"        Cache an image with supplied iterator."},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F66s%3D","line":202,"updated":"2011-10-24 20:04:06.000000000","message":"It isn\u0027t obvious what will happen if we begin caching an image (using this function) as a user requests it and the connection closes unexpectedly. Will that block any other client connections from re-caching the image?","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"426bae8218e32f2b9aef625cecdeebde273e4a7e","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        return tee_iter(image_id)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def cache_image_iter(self, image_id, image_iter):"},{"line_number":203,"context_line":"        \"\"\""},{"line_number":204,"context_line":"        Cache an image with supplied iterator."},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6qs%3D","line":202,"in_reply_to":"AAAACX%2F%2F66I%3D","updated":"2011-10-25 21:13:01.000000000","message":"Ok, should have thought that through a bit farther. Thanks!","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f14339c4a4181b8a7f528b993d98f13688ec0d79","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        return tee_iter(image_id)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def cache_image_iter(self, image_id, image_iter):"},{"line_number":203,"context_line":"        \"\"\""},{"line_number":204,"context_line":"        Cache an image with supplied iterator."},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F66I%3D","line":202,"in_reply_to":"AAAACX%2F%2F66s%3D","updated":"2011-10-25 19:35:22.000000000","message":"The driver\u0027s open_for_write() actually handles the situation where a client connection closes. The method will has a commit() handler that renames the cache file from its \"in progress\" directory path ($cachedir/incomplete/$imageid) to its active directory path ($cachedir/$imageid). Images that don\u0027t complete will stay in the \u0027incomplete\u0027 directory. Images that aren\u0027t written properly hit a rollback() method and get pushed into an \u0027invalid\u0027 directory...","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9756607597a2177cda4fb933c04dfef48cf15421","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            cache_file.flush()"},{"line_number":220,"context_line":"        return True"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def cache_image_file(self, image_id, image_file):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Cache an image file."},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F66o%3D","line":222,"updated":"2011-10-24 20:04:06.000000000","message":"Can this function be accomplished using cache_image_iter? There seems to be some duplication we can avoid here.","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f14339c4a4181b8a7f528b993d98f13688ec0d79","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            cache_file.flush()"},{"line_number":220,"context_line":"        return True"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def cache_image_file(self, image_id, image_file):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Cache an image file."},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6wk%3D","line":222,"in_reply_to":"AAAACX%2F%2F66o%3D","updated":"2011-10-25 19:35:22.000000000","message":"Done","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"426bae8218e32f2b9aef625cecdeebde273e4a7e","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            cache_file.flush()"},{"line_number":220,"context_line":"        return True"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def cache_image_file(self, image_id, image_file):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Cache an image file."},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6qo%3D","line":222,"in_reply_to":"AAAACX%2F%2F6wk%3D","updated":"2011-10-25 21:13:01.000000000","message":"Awesome. Exactly what I had in mind.","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"}],"glance/image_cache/drivers/base.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9756607597a2177cda4fb933c04dfef48cf15421","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        raise NotImplementedError"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def is_cacheable(self, image_id):"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        Returns True if the image with the supplied ID can have its"},{"line_number":64,"context_line":"        image file cached, False otherwise."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F66k%3D","line":61,"updated":"2011-10-24 20:04:06.000000000","message":"It seems like this function belongs at the caller\u0027s level, not here.","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f14339c4a4181b8a7f528b993d98f13688ec0d79","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        raise NotImplementedError"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def is_cacheable(self, image_id):"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        Returns True if the image with the supplied ID can have its"},{"line_number":64,"context_line":"        image file cached, False otherwise."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6uw%3D","line":61,"in_reply_to":"AAAACX%2F%2F66k%3D","updated":"2011-10-25 19:35:22.000000000","message":"Done","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9756607597a2177cda4fb933c04dfef48cf15421","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        raise NotImplementedError"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def clear(self):"},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        Removes all cached image files and any attributes about the images"},{"line_number":83,"context_line":"        and returns the number of cached image files that were deleted."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F66g%3D","line":80,"updated":"2011-10-24 20:04:06.000000000","message":"Can we use clear_all and clear rather than clear and purge? The former seems more succinct.","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f14339c4a4181b8a7f528b993d98f13688ec0d79","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        raise NotImplementedError"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def clear(self):"},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        Removes all cached image files and any attributes about the images"},{"line_number":83,"context_line":"        and returns the number of cached image files that were deleted."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6us%3D","line":80,"in_reply_to":"AAAACX%2F%2F66g%3D","updated":"2011-10-25 19:35:22.000000000","message":"Changed clear -\u003e delete_all and purge -\u003e delete","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"426bae8218e32f2b9aef625cecdeebde273e4a7e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        raise NotImplementedError"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def clear(self):"},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        Removes all cached image files and any attributes about the images"},{"line_number":83,"context_line":"        and returns the number of cached image files that were deleted."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6qg%3D","line":80,"in_reply_to":"AAAACX%2F%2F6us%3D","updated":"2011-10-25 21:13:01.000000000","message":"Even better!","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"}],"glance/image_cache/drivers/sqlite.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9756607597a2177cda4fb933c04dfef48cf15421","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            conn \u003d sqlite3.connect(self.db_path, check_same_thread\u003dFalse,"},{"line_number":114,"context_line":"                                   factory\u003dSqliteConnection)"},{"line_number":115,"context_line":"            conn.executescript(\"\"\""},{"line_number":116,"context_line":"                CREATE TABLE IF NOT EXISTS cached_images ("},{"line_number":117,"context_line":"                    image_id TEXT PRIMARY KEY,"},{"line_number":118,"context_line":"                    last_access REAL DEFAULT 0.0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F66c%3D","line":115,"updated":"2011-10-24 20:04:06.000000000","message":"How would you plan on updating this if we ever need to change this schema?","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f14339c4a4181b8a7f528b993d98f13688ec0d79","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            conn \u003d sqlite3.connect(self.db_path, check_same_thread\u003dFalse,"},{"line_number":114,"context_line":"                                   factory\u003dSqliteConnection)"},{"line_number":115,"context_line":"            conn.executescript(\"\"\""},{"line_number":116,"context_line":"                CREATE TABLE IF NOT EXISTS cached_images ("},{"line_number":117,"context_line":"                    image_id TEXT PRIMARY KEY,"},{"line_number":118,"context_line":"                    last_access REAL DEFAULT 0.0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6uo%3D","line":115,"in_reply_to":"AAAACX%2F%2F66c%3D","updated":"2011-10-25 19:35:22.000000000","message":"Damn you, Waldon. :)\n\nI figured we could add migration when we have a migration to do..","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"426bae8218e32f2b9aef625cecdeebde273e4a7e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            conn \u003d sqlite3.connect(self.db_path, check_same_thread\u003dFalse,"},{"line_number":114,"context_line":"                                   factory\u003dSqliteConnection)"},{"line_number":115,"context_line":"            conn.executescript(\"\"\""},{"line_number":116,"context_line":"                CREATE TABLE IF NOT EXISTS cached_images ("},{"line_number":117,"context_line":"                    image_id TEXT PRIMARY KEY,"},{"line_number":118,"context_line":"                    last_access REAL DEFAULT 0.0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6qc%3D","line":115,"in_reply_to":"AAAACX%2F%2F6uo%3D","updated":"2011-10-25 21:13:01.000000000","message":"We can handle it when the time comes.","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"}],"glance/image_cache/drivers/xattr.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"9756607597a2177cda4fb933c04dfef48cf15421","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            entry \u003d {}"},{"line_number":328,"context_line":"            entry[\u0027id\u0027] \u003d image_id"},{"line_number":329,"context_line":"            entry[\u0027path\u0027] \u003d path"},{"line_number":330,"context_line":"            entry[\u0027name\u0027] \u003d self.driver.get_attr(image_id, \u0027active\u0027,"},{"line_number":331,"context_line":"                                                      \u0027image_name\u0027,"},{"line_number":332,"context_line":"                                                      default\u003d\u0027UNKNOWN\u0027)"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F66Y%3D","line":330,"updated":"2011-10-24 20:04:06.000000000","message":"Can we go ahead and remove the dependence on image_name?","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f14339c4a4181b8a7f528b993d98f13688ec0d79","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            entry \u003d {}"},{"line_number":328,"context_line":"            entry[\u0027id\u0027] \u003d image_id"},{"line_number":329,"context_line":"            entry[\u0027path\u0027] \u003d path"},{"line_number":330,"context_line":"            entry[\u0027name\u0027] \u003d self.driver.get_attr(image_id, \u0027active\u0027,"},{"line_number":331,"context_line":"                                                      \u0027image_name\u0027,"},{"line_number":332,"context_line":"                                                      default\u003d\u0027UNKNOWN\u0027)"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6uk%3D","line":330,"in_reply_to":"AAAACX%2F%2F66Y%3D","updated":"2011-10-25 19:35:22.000000000","message":"Next patch. All this stuff is used in the cache management middleware, which I\u0027m overhauling in the next patch...","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"426bae8218e32f2b9aef625cecdeebde273e4a7e","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            entry \u003d {}"},{"line_number":328,"context_line":"            entry[\u0027id\u0027] \u003d image_id"},{"line_number":329,"context_line":"            entry[\u0027path\u0027] \u003d path"},{"line_number":330,"context_line":"            entry[\u0027name\u0027] \u003d self.driver.get_attr(image_id, \u0027active\u0027,"},{"line_number":331,"context_line":"                                                      \u0027image_name\u0027,"},{"line_number":332,"context_line":"                                                      default\u003d\u0027UNKNOWN\u0027)"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F6qY%3D","line":330,"in_reply_to":"AAAACX%2F%2F6uk%3D","updated":"2011-10-25 21:13:01.000000000","message":"ten-four","commit_id":"b5868b86503b521a10afe40d8afae1e9e0a368d4"}]}
