def _getParsedRow(self, filename, lineno, line): groups = line.split() # NOT line.split(' ') due to MPP-15675 if len(groups) not in [1, 2]: msg = "line %d of file %s: expected 1 or 2 groups but found %d" % (lineno, filename, len(groups)) raise ExceptionNoStackTraceNeeded(msg) parts = groups[0].split('|') if len(parts) != 3: msg = "line %d of file %s: expected 3 parts on failed segment group, obtained %d" % ( lineno, filename, len(parts)) raise ExceptionNoStackTraceNeeded(msg) address, port, datadir = parts check_values(lineno, address=address, port=port, datadir=datadir) row = { 'failedAddress': address, 'failedPort': port, 'failedDataDirectory': datadir, 'lineno': lineno } if len(groups) == 2: parts2 = groups[1].split('|') if len(parts2) != 3: msg = "line %d of file %s: expected 3 parts on new segment group, obtained %d" % ( lineno, filename, len(parts2)) raise ExceptionNoStackTraceNeeded(msg) address2, port2, datadir2 = parts2 check_values(lineno, address=address2, port=port2, datadir=datadir2) row.update({ 'newAddress': address2, 'newPort': port2, 'newDataDirectory': datadir2 }) return row
def _parseConfigFile(config_file): """ Parse the config file :param config_file: :return: List of dictionaries with each dictionary containing the failed and failover information?? """ rows = [] with open(config_file) as f: for lineno, line in line_reader(f): groups = line.split() # NOT line.split(' ') due to MPP-15675 if len(groups) not in [1, 2]: msg = "line %d of file %s: expected 1 or 2 groups but found %d" % ( lineno, config_file, len(groups)) raise ExceptionNoStackTraceNeeded(msg) parts = groups[0].split('|') if len(parts) != 3: msg = "line %d of file %s: expected 3 parts on failed segment group, obtained %d" % ( lineno, config_file, len(parts)) raise ExceptionNoStackTraceNeeded(msg) address, port, datadir = parts check_values(lineno, address=address, port=port, datadir=datadir) datadir = normalizeAndValidateInputPath( datadir, f.name, lineno) row = { 'failedAddress': address, 'failedPort': port, 'failedDataDirectory': datadir, 'lineno': lineno } if len(groups) == 2: parts2 = groups[1].split('|') if len(parts2) != 3: msg = "line %d of file %s: expected 3 parts on new segment group, obtained %d" % ( lineno, config_file, len(parts2)) raise ExceptionNoStackTraceNeeded(msg) address2, port2, datadir2 = parts2 check_values(lineno, address=address2, port=port2, datadir=datadir2) datadir2 = normalizeAndValidateInputPath( datadir2, f.name, lineno) row.update({ 'newAddress': address2, 'newPort': port2, 'newDataDirectory': datadir2 }) rows.append(row) RecoveryTripletsUserConfigFile._validate(rows) return rows
def _getParsedRow(self, filename, lineno, line): parts = line.split('|') if len(parts) != 4: msg = "line %d of file %s: expected 4 parts, obtained %d" % (lineno, filename, len(parts)) raise ExceptionNoStackTraceNeeded(msg) content, address, port, datadir = parts check_values(lineno, address=address, port=port, datadir=datadir, content=content) return { 'address': address, 'port': port, 'dataDirectory': datadir, 'contentId': content, 'lineno': lineno }
def test_check_values_negative(self): with self.assertRaises(ExceptionNoStackTraceNeeded): check_values(1, address='') with self.assertRaises(ExceptionNoStackTraceNeeded): check_values(1, port='not_a_port') with self.assertRaises(ExceptionNoStackTraceNeeded): check_values(1, datadir='') with self.assertRaises(ExceptionNoStackTraceNeeded): check_values(1, content='not_a_content_id') with self.assertRaises(ExceptionNoStackTraceNeeded): check_values(1, hostname='') with self.assertRaises(ExceptionNoStackTraceNeeded): check_values(1, dbid='not_a_dbid') with self.assertRaises(ExceptionNoStackTraceNeeded): check_values(1, role='x')