)]}'
{"trove/common/cfg.py":[{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"883c49170bb208f9eb0972343efd28e2f9b16625","unresolved":false,"context_lines":[{"line_number":969,"context_line":"               \"volumes if volume support is enabled.\"),"},{"line_number":970,"context_line":"    cfg.StrOpt(\u0027wal_archive_location\u0027, default\u003d\u0027/mnt/wal_archive\u0027,"},{"line_number":971,"context_line":"               help\u003d\"Filesystem path storing WAL archive files when\""},{"line_number":972,"context_line":"                    \"WAL-shipping based backups or replication\""},{"line_number":973,"context_line":"                    \"is enabled\"),"},{"line_number":974,"context_line":"    cfg.BoolOpt(\u0027root_on_create\u0027, default\u003dFalse,"},{"line_number":975,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_28bdac01","line":972,"range":{"start_line":972,"start_character":62,"end_line":972,"end_character":63},"updated":"2016-01-15 18:22:55.000000000","message":"I think we need to add a space at the end of each line.","commit_id":"1b68ef6719e9dc2b39cbaf75892f9b0b73e86071"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"dce1127ad91d2b175a4f47e5bfb88618b02eabdf","unresolved":false,"context_lines":[{"line_number":969,"context_line":"               \"volumes if volume support is enabled.\"),"},{"line_number":970,"context_line":"    cfg.StrOpt(\u0027wal_archive_location\u0027, default\u003d\u0027/mnt/wal_archive\u0027,"},{"line_number":971,"context_line":"               help\u003d\"Filesystem path storing WAL archive files when\""},{"line_number":972,"context_line":"                    \"WAL-shipping based backups or replication\""},{"line_number":973,"context_line":"                    \"is enabled\"),"},{"line_number":974,"context_line":"    cfg.BoolOpt(\u0027root_on_create\u0027, default\u003dFalse,"},{"line_number":975,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_9297223a","line":972,"range":{"start_line":972,"start_character":62,"end_line":972,"end_character":63},"in_reply_to":"da6ed579_28bdac01","updated":"2016-01-15 21:08:33.000000000","message":"Done","commit_id":"1b68ef6719e9dc2b39cbaf75892f9b0b73e86071"}],"trove/guestagent/common/operating_system.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"1cffefb19696c8d988c741e8085f5031e453277b","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    def ADD_GRP_RW(cls):"},{"line_number":206,"context_line":"        return cls(add\u003d[stat.S_IRGRP | stat.S_IWGRP])  # +0060"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @classmethod"},{"line_number":209,"context_line":"    def OCTAL_MODE(cls, octal):"},{"line_number":210,"context_line":"        p \u003d re.compile(\u0027^[0-4][0-7]{3}$\u0027)"},{"line_number":211,"context_line":"        if not p.match(octal):"},{"line_number":212,"context_line":"            raise ValueError(\"Invalid octal mode\")"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        modes \u003d 0"},{"line_number":215,"context_line":"        for i in range(len(octal)):"},{"line_number":216,"context_line":"            o \u003d int(octal[i])"},{"line_number":217,"context_line":"            modes |\u003d o \u003c\u003c (3 - i) * 3"},{"line_number":218,"context_line":"        return cls(reset\u003d[modes])"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def __init__(self, reset\u003dNone, add\u003dNone, remove\u003dNone):"},{"line_number":221,"context_line":"        self._reset \u003d list(reset) if reset is not None else []"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_ad3d4890","line":218,"range":{"start_line":208,"start_character":4,"end_line":218,"end_character":33},"updated":"2015-12-21 16:59:31.000000000","message":"I am not entirely convinced we should be introducing octal modes to the caller\u0027s code. I believe, one of the goals of the operating_system module is to try to keep the interface as platform-independent as possible.\nThe flags defined in the \u0027stat\u0027 module should work on all platforms including, say, Windows. I am not sure this will be the case with pure octal modes.","commit_id":"d593273a64130ede69661998adcae14d01a51b23"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"328cfaaf6bf7a67de6138d68cbe57249d89d954b","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    def ADD_GRP_RW(cls):"},{"line_number":206,"context_line":"        return cls(add\u003d[stat.S_IRGRP | stat.S_IWGRP])  # +0060"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @classmethod"},{"line_number":209,"context_line":"    def OCTAL_MODE(cls, octal):"},{"line_number":210,"context_line":"        p \u003d re.compile(\u0027^[0-4][0-7]{3}$\u0027)"},{"line_number":211,"context_line":"        if not p.match(octal):"},{"line_number":212,"context_line":"            raise ValueError(\"Invalid octal mode\")"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        modes \u003d 0"},{"line_number":215,"context_line":"        for i in range(len(octal)):"},{"line_number":216,"context_line":"            o \u003d int(octal[i])"},{"line_number":217,"context_line":"            modes |\u003d o \u003c\u003c (3 - i) * 3"},{"line_number":218,"context_line":"        return cls(reset\u003d[modes])"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def __init__(self, reset\u003dNone, add\u003dNone, remove\u003dNone):"},{"line_number":221,"context_line":"        self._reset \u003d list(reset) if reset is not None else []"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_dc99607a","line":218,"range":{"start_line":208,"start_character":4,"end_line":218,"end_character":33},"in_reply_to":"3a7e1126_ad3d4890","updated":"2015-12-21 19:00:23.000000000","message":"Thank you for your feedback.\n\nIf you look at the actual constant values in stat, they map exactly to the unix ones, eg:\n\n    S_IRWXU \u003d 00700\n\nSo Python internally is doing the same conversion on other platforms and this will work just fine on Windows (and the test cases provided will tell us if it ever breaks in the unlikely event that these constants change)\n\nTo your point, is making a perfectly os-independent module a laudable goal? Yes. Is it worthwhile if we don\u0027t use any of those other OS\u0027s, and the code to make it work is excessively complex, unreadable, and requires me to dig through this module every time just to figure out how to do a simple thing like set a mode on a file?","commit_id":"d593273a64130ede69661998adcae14d01a51b23"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"bdd199db6a93dffb04a8e9b4de447485a35e3e5b","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        return cls(add\u003d[stat.S_IRGRP | stat.S_IWGRP])  # +0060"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @classmethod"},{"line_number":209,"context_line":"    def OCTAL_MODE(cls, octal):"},{"line_number":210,"context_line":"        p \u003d re.compile(\u0027^[0-4][0-7]{3}$\u0027)"},{"line_number":211,"context_line":"        if not p.match(octal):"},{"line_number":212,"context_line":"            raise ValueError(\"Invalid octal mode\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_0b5bb688","line":209,"updated":"2016-01-19 20:17:48.000000000","message":"I agree with Petr on this one.  We had previously agreed to use the defined flags, and have been moving to do so in a consistent manner.  If we feel the existing mechanism is too onerous, we should change the overall scheme and migrate all usage to the new mechanism.  Regardless, octal isn\u0027t even the preferred mechanism in the shell any more, so I don\u0027t think that we should be using it here.","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"7557e59ac07a6a779d92ed959a0c2cd0fe1b5b36","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        return cls(add\u003d[stat.S_IRGRP | stat.S_IWGRP])  # +0060"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @classmethod"},{"line_number":209,"context_line":"    def OCTAL_MODE(cls, octal):"},{"line_number":210,"context_line":"        p \u003d re.compile(\u0027^[0-4][0-7]{3}$\u0027)"},{"line_number":211,"context_line":"        if not p.match(octal):"},{"line_number":212,"context_line":"            raise ValueError(\"Invalid octal mode\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_fc5866fc","line":209,"in_reply_to":"ba63e191_0b5bb688","updated":"2016-01-19 20:49:36.000000000","message":"\"Octal isn\u0027t the preferred mechanism in the shell any more\" \nIs this something you can support with any evidence, e.g. a reputable source citing some best practices? The linux man page certainly doesn\u0027t indicate octal modes are deprecated or recommended against. \n\nIf I want to be sure a file has a particular set of permissions, I don\u0027t see how else I\u0027m supposed to do it in a more simple and concise way than \"chmod \u003coctal\u003e file\".","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"}],"trove/guestagent/datastore/experimental/postgresql/service/config.py":[{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"883c49170bb208f9eb0972343efd28e2f9b16625","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        \"\"\"Apply necessary changes to config to enable WAL-based backups"},{"line_number":183,"context_line":"           if we are using the PgBaseBackup strategy"},{"line_number":184,"context_line":"        \"\"\""},{"line_number":185,"context_line":"        LOG.info(\"Checking if we need to apply changes to WAL config\")"},{"line_number":186,"context_line":"        if not CONF.postgresql.backup_strategy \u003d\u003d \u0027PgBaseBackup\u0027:"},{"line_number":187,"context_line":"            return"},{"line_number":188,"context_line":"        if self.configuration_manager.has_system_override(BACKUP_CFG_OVERRIDE):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_286b6c86","line":185,"range":{"start_line":185,"start_character":68,"end_line":185,"end_character":70},"updated":"2016-01-15 18:22:55.000000000","message":"LOG.info messages need to be marked for translation.","commit_id":"1b68ef6719e9dc2b39cbaf75892f9b0b73e86071"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"dce1127ad91d2b175a4f47e5bfb88618b02eabdf","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        \"\"\"Apply necessary changes to config to enable WAL-based backups"},{"line_number":183,"context_line":"           if we are using the PgBaseBackup strategy"},{"line_number":184,"context_line":"        \"\"\""},{"line_number":185,"context_line":"        LOG.info(\"Checking if we need to apply changes to WAL config\")"},{"line_number":186,"context_line":"        if not CONF.postgresql.backup_strategy \u003d\u003d \u0027PgBaseBackup\u0027:"},{"line_number":187,"context_line":"            return"},{"line_number":188,"context_line":"        if self.configuration_manager.has_system_override(BACKUP_CFG_OVERRIDE):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_92e5e2dd","line":185,"range":{"start_line":185,"start_character":68,"end_line":185,"end_character":70},"in_reply_to":"da6ed579_286b6c86","updated":"2016-01-15 21:08:33.000000000","message":"Done","commit_id":"1b68ef6719e9dc2b39cbaf75892f9b0b73e86071"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d89b8095cbb7381d5ceb2681f5ed04cb2d164ebd","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        LOG.info(\"Applying changes to WAL config for use by base backups\")"},{"line_number":202,"context_line":"        arch_cmd \u003d \"\u0027test ! -f {wal_arch}/%f \u0026\u0026 cp %p {wal_arch}/%f\u0027\".format("},{"line_number":203,"context_line":"            wal_arch\u003dCONF.postgresql.wal_archive_location"},{"line_number":204,"context_line":"        )"},{"line_number":205,"context_line":"        opts \u003d {"},{"line_number":206,"context_line":"            \u0027wal_level\u0027: \u0027hot_standby\u0027,"},{"line_number":207,"context_line":"            \u0027archive_mode \u0027: \u0027on\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"7aa08908_7036ef51","line":204,"range":{"start_line":202,"start_character":0,"end_line":204,"end_character":9},"updated":"2016-06-14 18:46:34.000000000","message":"Inserting \u0027random\u0027 code here to be executed is a potential security issue.  I think we should validate that the directory pointed to by wal_archive_location actually exists.  That way any \u0027extra\u0027 code at the end of the dir won\u0027t accidentally get executed.  (for example, if wal_archive_location \u003d \u0027/path/to/wal/files/%f \u0026\u0026 echo malicious_code_here \u0026\u0026 echo \u0027).  I know this value can only be changed by an operator, but it doesn\u0027t hurt to put an extra check in place.  I\u0027ll push up a change shortly.","commit_id":"372c63ab0804626955c3483989383f817b662ff9"}],"trove/guestagent/datastore/experimental/postgresql/service/install.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d89b8095cbb7381d5ceb2681f5ed04cb2d164ebd","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.guestagent.datastore.experimental.postgresql.service.process import("},{"line_number":21,"context_line":"    PgSqlProcess)"},{"line_number":22,"context_line":"from trove.guestagent import pkg"},{"line_number":23,"context_line":"from trove.guestagent.strategies.backup.experimental.postgresql_impl \\"},{"line_number":24,"context_line":"    import PgBaseBackupUtil"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7aa08908_b02217b7","line":23,"range":{"start_line":23,"start_character":69,"end_line":23,"end_character":70},"updated":"2016-06-14 18:46:34.000000000","message":"should use parenthesis to be consistent (plus it seems to be the preferred OpenStack way :) )","commit_id":"372c63ab0804626955c3483989383f817b662ff9"}],"trove/guestagent/strategies/backup/experimental/postgresql_impl.py":[{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"883c49170bb208f9eb0972343efd28e2f9b16625","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        LOG.info(\"Incr instantiated with args/kwargs %s %s \" %"},{"line_number":226,"context_line":"                 (str(args), str(kwargs)))"},{"line_number":227,"context_line":"        if not kwargs.get(\u0027parent_location\u0027):"},{"line_number":228,"context_line":"            raise AttributeError(\u0027Parent missing!\u0027)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        super(PgBaseBackupIncremental, self).__init__(*args, **kwargs)"},{"line_number":231,"context_line":"        self.parent_location \u003d kwargs.get(\u0027parent_location\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_289e0c63","line":228,"updated":"2016-01-15 18:22:55.000000000","message":"Dont these messages need to be marked for translation as well? Also, is it ok if parent_checksum is missing?","commit_id":"1b68ef6719e9dc2b39cbaf75892f9b0b73e86071"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"dce1127ad91d2b175a4f47e5bfb88618b02eabdf","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        LOG.info(\"Incr instantiated with args/kwargs %s %s \" %"},{"line_number":226,"context_line":"                 (str(args), str(kwargs)))"},{"line_number":227,"context_line":"        if not kwargs.get(\u0027parent_location\u0027):"},{"line_number":228,"context_line":"            raise AttributeError(\u0027Parent missing!\u0027)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        super(PgBaseBackupIncremental, self).__init__(*args, **kwargs)"},{"line_number":231,"context_line":"        self.parent_location \u003d kwargs.get(\u0027parent_location\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_32e1969b","line":228,"in_reply_to":"da6ed579_289e0c63","updated":"2016-01-15 21:08:33.000000000","message":"I think I should probably do a cleanup of some of the debug messages that are not really necessary, no need to create a translation for something like this","commit_id":"1b68ef6719e9dc2b39cbaf75892f9b0b73e86071"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"bdd199db6a93dffb04a8e9b4de447485a35e3e5b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        Look for the most recent .backup file that basebackup creates"},{"line_number":63,"context_line":"        :return: a string like 000000010000000000000006.00000168.backup"},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        walre \u003d re.compile(\"[0-9A-F]{24}.*.backup\")"},{"line_number":66,"context_line":"        b \u003d [f for f in os.listdir(WAL_ARCHIVE_DIR)"},{"line_number":67,"context_line":"             if walre.search(f)]"},{"line_number":68,"context_line":"        b \u003d sorted(b, reverse\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_26134f0f","line":65,"updated":"2016-01-19 20:17:48.000000000","message":"I think this should be defined at the module level so it doesn\u0027t have to be recompiled each time.","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"29924f352f261aa2f0b17b90e72bbf5a181c2324","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        Look for the most recent .backup file that basebackup creates"},{"line_number":63,"context_line":"        :return: a string like 000000010000000000000006.00000168.backup"},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        walre \u003d re.compile(\"[0-9A-F]{24}.*.backup\")"},{"line_number":66,"context_line":"        b \u003d [f for f in os.listdir(WAL_ARCHIVE_DIR)"},{"line_number":67,"context_line":"             if walre.search(f)]"},{"line_number":68,"context_line":"        b \u003d sorted(b, reverse\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_d3e0e1fc","line":65,"in_reply_to":"ba63e191_26134f0f","updated":"2016-01-20 02:48:44.000000000","message":"Is this (and below) just looking for files based on the name pattern? If so, there already is a function that does it: operating_system.list_files_in_directory(root_dir, recursive\u003dFalse, pattern\u003dNone, include_dirs\u003dFalse, as_root\u003dFalse)","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"bdd199db6a93dffb04a8e9b4de447485a35e3e5b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        last_wal \u003d self.most_recent_backup_wal(pos\u003dpos)"},{"line_number":81,"context_line":"        d \u003d os.listdir(WAL_ARCHIVE_DIR)"},{"line_number":82,"context_line":"        walre \u003d re.compile(\"^[0-9A-F]{24}$\")"},{"line_number":83,"context_line":"        wal \u003d [f for f in d"},{"line_number":84,"context_line":"               if walre.search(f)"},{"line_number":85,"context_line":"               and f \u003e\u003d last_wal]"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_26b82fe5","line":82,"updated":"2016-01-19 20:17:48.000000000","message":"ditto","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"bdd199db6a93dffb04a8e9b4de447485a35e3e5b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        start_re \u003d re.compile(\"START WAL LOCATION: (.*) \\(file (.*)\\)\")"},{"line_number":133,"context_line":"        stop_re \u003d re.compile(\"STOP WAL LOCATION: (.*) \\(file (.*)\\)\")"},{"line_number":134,"context_line":"        checkpt_re \u003d re.compile(\"CHECKPOINT LOCATION: (.*)\")"},{"line_number":135,"context_line":"        label_re \u003d re.compile(\"LABEL: (.*)\")"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        with open(f, \u0027r\u0027) as base_metadata:"},{"line_number":138,"context_line":"            lines \u003d \"\\n\".join(base_metadata.readlines())"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_86779b39","line":135,"updated":"2016-01-19 20:17:48.000000000","message":"ditto again","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"bdd199db6a93dffb04a8e9b4de447485a35e3e5b","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        return meta"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def check_process(self):"},{"line_number":161,"context_line":"        \"\"\"If any of the below variables were not set by either metadata()"},{"line_number":162,"context_line":"           or direct retrieval from the pgsql backup commands, then something"},{"line_number":163,"context_line":"           has gone wrong"},{"line_number":164,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_a6c09f2b","line":161,"updated":"2016-01-19 20:17:48.000000000","message":"These comments are mostly intended for tooltips, and I don\u0027t think this comment would be meaningful in that context.","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"7557e59ac07a6a779d92ed959a0c2cd0fe1b5b36","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        return meta"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def check_process(self):"},{"line_number":161,"context_line":"        \"\"\"If any of the below variables were not set by either metadata()"},{"line_number":162,"context_line":"           or direct retrieval from the pgsql backup commands, then something"},{"line_number":163,"context_line":"           has gone wrong"},{"line_number":164,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_dcc6c248","line":161,"in_reply_to":"ba63e191_a6c09f2b","updated":"2016-01-19 20:49:36.000000000","message":"Good point, this should be made into a regular comment","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"bdd199db6a93dffb04a8e9b4de447485a35e3e5b","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        self.command \u003d self._cmd()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def _cmd(self):"},{"line_number":245,"context_line":"        # TODO(atomic77) Store the list of files in a var but this should"},{"line_number":246,"context_line":"        # be written to a file to ensure we don\u0027t get into cmd line"},{"line_number":247,"context_line":"        # overflow issues when this file list gets bigger"},{"line_number":248,"context_line":"        wal_file_list \u003d self.log_files_since_last_backup(pos\u003d1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_c66ef32e","line":245,"updated":"2016-01-19 20:17:48.000000000","message":"Can you put a bug in for this and include a link, please.","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"7557e59ac07a6a779d92ed959a0c2cd0fe1b5b36","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        self.command \u003d self._cmd()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def _cmd(self):"},{"line_number":245,"context_line":"        # TODO(atomic77) Store the list of files in a var but this should"},{"line_number":246,"context_line":"        # be written to a file to ensure we don\u0027t get into cmd line"},{"line_number":247,"context_line":"        # overflow issues when this file list gets bigger"},{"line_number":248,"context_line":"        wal_file_list \u003d self.log_files_since_last_backup(pos\u003d1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_1ce1bafe","line":245,"in_reply_to":"ba63e191_c66ef32e","updated":"2016-01-19 20:49:36.000000000","message":"Done","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d89b8095cbb7381d5ceb2681f5ed04cb2d164ebd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from trove.guestagent.common import operating_system"},{"line_number":27,"context_line":"from trove.guestagent.common.operating_system import FileMode"},{"line_number":28,"context_line":"from trove.guestagent.datastore.experimental.postgresql import pgutil"},{"line_number":29,"context_line":"from trove.guestagent.datastore.experimental.postgresql.service.config \\"},{"line_number":30,"context_line":"    import PgSqlConfig"},{"line_number":31,"context_line":"from trove.guestagent.datastore.experimental.postgresql.service.process \\"},{"line_number":32,"context_line":"    import PgSqlProcess"}],"source_content_type":"text/x-python","patch_set":20,"id":"7aa08908_1af06966","line":29,"range":{"start_line":29,"start_character":71,"end_line":29,"end_character":72},"updated":"2016-06-14 18:46:34.000000000","message":"Use \u0027(\u0027 instead of \u0027\\\u0027","commit_id":"372c63ab0804626955c3483989383f817b662ff9"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d89b8095cbb7381d5ceb2681f5ed04cb2d164ebd","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            match \u003d checkpt_re.search(lines)"},{"line_number":150,"context_line":"            if match:"},{"line_number":151,"context_line":"                self.checkpoint_location \\"},{"line_number":152,"context_line":"                    \u003d meta[\u0027checkpoint-location\u0027] \u003d match.group(1)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"            match \u003d label_re.search(lines)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7aa08908_7ad88def","line":151,"range":{"start_line":151,"start_character":41,"end_line":151,"end_character":42},"updated":"2016-06-14 18:46:34.000000000","message":"ditto","commit_id":"372c63ab0804626955c3483989383f817b662ff9"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0d1483168342d650a44b4be6998de7c6cdd6c489","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":"WAL_ARCHIVE_DIR \u003d CONF.postgresql.wal_archive_location"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class PgDump(base.BackupRunner):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_b55b1b21","line":39,"updated":"2016-06-14 19:26:21.000000000","message":"ditto","commit_id":"30019675bd0ec4f8c63cc49d7e6182bca40b107a"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4d19b80eec0d81a1bc0a59652271db05d50b73e0","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":"WAL_ARCHIVE_DIR \u003d CONF.postgresql.wal_archive_location"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class PgDump(base.BackupRunner):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_95041f4a","line":39,"in_reply_to":"7aa08908_b55b1b21","updated":"2016-06-14 19:40:08.000000000","message":"ditto ;)","commit_id":"30019675bd0ec4f8c63cc49d7e6182bca40b107a"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0d1483168342d650a44b4be6998de7c6cdd6c489","unresolved":false,"context_lines":[{"line_number":223,"context_line":"     \"\"\""},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":226,"context_line":"        if not kwargs.get(\u0027parent_location\u0027) or \\"},{"line_number":227,"context_line":"                not kwargs.get(\u0027parent_checksum\u0027):"},{"line_number":228,"context_line":"            raise AttributeError(_(\u0027Parent missing!\u0027))"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_f5780391","line":226,"updated":"2016-06-14 19:26:21.000000000","message":":P","commit_id":"30019675bd0ec4f8c63cc49d7e6182bca40b107a"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4d19b80eec0d81a1bc0a59652271db05d50b73e0","unresolved":false,"context_lines":[{"line_number":223,"context_line":"     \"\"\""},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":226,"context_line":"        if not kwargs.get(\u0027parent_location\u0027) or \\"},{"line_number":227,"context_line":"                not kwargs.get(\u0027parent_checksum\u0027):"},{"line_number":228,"context_line":"            raise AttributeError(_(\u0027Parent missing!\u0027))"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_356e0b00","line":226,"in_reply_to":"7aa08908_f5780391","updated":"2016-06-14 19:40:08.000000000","message":"Done","commit_id":"30019675bd0ec4f8c63cc49d7e6182bca40b107a"}],"trove/guestagent/strategies/restore/experimental/postgresql_impl.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0d1483168342d650a44b4be6998de7c6cdd6c489","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"WAL_ARCHIVE_DIR \u003d CONF.postgresql.wal_archive_location"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class PgDump(base.RestoreRunner):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_fa059279","line":36,"updated":"2016-06-14 19:26:21.000000000","message":"This will get evaluated at the import time, possibly before the config is parsed. The value would then always be the default from \u0027cfg.py\u0027.","commit_id":"30019675bd0ec4f8c63cc49d7e6182bca40b107a"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4d19b80eec0d81a1bc0a59652271db05d50b73e0","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"WAL_ARCHIVE_DIR \u003d CONF.postgresql.wal_archive_location"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class PgDump(base.RestoreRunner):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_558117c2","line":36,"in_reply_to":"7aa08908_fa059279","updated":"2016-06-14 19:40:08.000000000","message":"I tested with a different value in the cfg file, and it picked it up like it was expected to...","commit_id":"30019675bd0ec4f8c63cc49d7e6182bca40b107a"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0d1483168342d650a44b4be6998de7c6cdd6c489","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        recovery_conf +\u003d \"recovery_target_timeline \u003d \u0027%s\u0027 \\n\" % 1"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        if restore:"},{"line_number":136,"context_line":"            recovery_conf +\u003d \"restore_command \u003d \u0027\" + \\"},{"line_number":137,"context_line":"                             self.pgsql_restore_cmd + \"\u0027\\n\""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        recovery_file \u003d os.path.join(self.pgsql_data_dir, \u0027recovery.conf\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_da16d6a5","line":136,"updated":"2016-06-14 19:26:21.000000000","message":":P","commit_id":"30019675bd0ec4f8c63cc49d7e6182bca40b107a"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4d19b80eec0d81a1bc0a59652271db05d50b73e0","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        recovery_conf +\u003d \"recovery_target_timeline \u003d \u0027%s\u0027 \\n\" % 1"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        if restore:"},{"line_number":136,"context_line":"            recovery_conf +\u003d \"restore_command \u003d \u0027\" + \\"},{"line_number":137,"context_line":"                             self.pgsql_restore_cmd + \"\u0027\\n\""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        recovery_file \u003d os.path.join(self.pgsql_data_dir, \u0027recovery.conf\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_10015d05","line":136,"in_reply_to":"7aa08908_da16d6a5","updated":"2016-06-14 19:40:08.000000000","message":"Done","commit_id":"30019675bd0ec4f8c63cc49d7e6182bca40b107a"}],"trove/tests/scenario/runners/backup_runners.py":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"bdd199db6a93dffb04a8e9b4de447485a35e3e5b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from trove.tests.util.users import Requirements"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class AbstractBackupRunner(TestRunner):"},{"line_number":30,"context_line":"    def _verify_backup(self, backup_id):"},{"line_number":31,"context_line":"        def _result_is_active():"},{"line_number":32,"context_line":"            backup \u003d self.auth_client.backups.get(backup_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_212499ad","line":29,"updated":"2016-01-19 20:17:48.000000000","message":"Seems like this is really just a mixin. Could we call it BackupRunnerMixin, if only to avoid the precedent of calling mixins \"Abstract\".","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"7557e59ac07a6a779d92ed959a0c2cd0fe1b5b36","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from trove.tests.util.users import Requirements"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class AbstractBackupRunner(TestRunner):"},{"line_number":30,"context_line":"    def _verify_backup(self, backup_id):"},{"line_number":31,"context_line":"        def _result_is_active():"},{"line_number":32,"context_line":"            backup \u003d self.auth_client.backups.get(backup_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_dc9fa24e","line":29,"in_reply_to":"ba63e191_212499ad","updated":"2016-01-19 20:49:36.000000000","message":"Old habits :)","commit_id":"6e646bec1404b3e2afc75606ba7f644ea948e901"}]}
