# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # """ Module: qlslibs.err Contains error classes. """ # --- Parent classes class QlsError(Exception): """Base error class for QLS errors and exceptions""" def __init__(self): Exception.__init__(self) def __str__(self): return '' class QlsRecordError(QlsError): """Base error class for individual records""" def __init__(self, file_header, record): QlsError.__init__(self) self.file_header = file_header self.record = record def get_expected_fro(self): return self.file_header.first_record_offset def get_file_number(self): return self.file_header.file_num def get_queue_name(self): return self.file_header.queue_name def get_record_id(self): return self.record.record_id def get_record_offset(self): return self.record.file_offset def __str__(self): return 'queue="%s" file_id=0x%x record_offset=0x%x record_id=0x%x' % \ (self.file_header.queue_name, self.file_header.file_num, self.record.file_offset, self.record.record_id) # --- Error classes class AlreadyLockedError(QlsRecordError): """Transactional record to be locked is already locked""" def __init__(self, file_header, record): QlsRecordError.__init__(self, file_header, record) def __str__(self): return 'Transactional operation already locked in TransactionMap: ' + QlsRecordError.__str__(self) class DataSizeError(QlsError): """Error class for Data size mismatch""" def __init__(self, expected_size, actual_size, data_str): QlsError.__init__(self) self.expected_size = expected_size self.actual_size = actual_size self.xid_str = data_str def __str__(self): return 'Inconsistent data size: expected:%d; actual:%d; data="%s"' % \ (self.expected_size, self.actual_size, self.data_str) class DuplicateRecordIdError(QlsRecordError): """Duplicate Record Id in Enqueue Map""" def __init__(self, file_header, record): QlsRecordError.__init__(self, file_header, record) def __str__(self): return 'Duplicate Record Id in enqueue map: ' + QlsRecordError.__str__(self) class EnqueueCountUnderflowError(QlsRecordError): """Attempted to decrement enqueue count past 0""" def __init__(self, file_header, record): QlsRecordError.__init__(self, file_header, record) def __str__(self): return 'Enqueue record count underflow: ' + QlsRecordError.__str__(self) class ExternalDataError(QlsRecordError): """Data present in Enqueue record when external data flag is set""" def __init__(self, file_header, record): QlsRecordError.__init__(self, file_header, record) def __str__(self): return 'Data present in external data record: ' + QlsRecordError.__str__(self) class FirstRecordOffsetMismatchError(QlsRecordError): """First Record Offset (FRO) does not match file header""" def __init__(self, file_header, record): QlsRecordError.__init__(self, file_header, record) def __str__(self): return 'First record offset mismatch: ' + QlsRecordError.__str__(self) + ' expected_offset=0x%x' % \ self.file_header.first_record_offset class InsufficientSpaceOnDiskError(QlsError): """Insufficient space on disk""" def __init__(self, directory, space_avail, space_requried): QlsError.__init__(self) self.directory = directory self.space_avail = space_avail self.space_required = space_requried def __str__(self): return 'Insufficient space on disk: directory=%s; avail_space=%d required_space=%d' % \ (self.directory, self.space_avail, self.space_required) class InvalidClassError(QlsError): """Invalid class name or type""" def __init__(self, class_name): QlsError.__init__(self) self.class_name = class_name def __str__(self): return 'Invalid class name "%s"' % self.class_name class InvalidEfpDirectoryNameError(QlsError): """Invalid EFP directory name - should be NNNNk, where NNNN is a number (of any length)""" def __init__(self, directory_name): QlsError.__init__(self) self.directory_name = directory_name def __str__(self): return 'Invalid EFP directory name "%s"' % self.directory_name #class InvalidFileSizeString(QlsError): # """Invalid file size string""" # def __init__(self, file_size_string): # QlsError.__init__(self) # self.file_size_string = file_size_string # def __str__(self): # return 'Invalid file size string "%s"' % self.file_size_string class InvalidPartitionDirectoryNameError(QlsError): """Invalid EFP partition name - should be pNNN, where NNN is a 3-digit partition number""" def __init__(self, directory_name): QlsError.__init__(self) self.directory_name = directory_name def __str__(self): return 'Invalid partition directory name "%s"' % self.directory_name class InvalidQlsDirectoryNameError(QlsError): """Invalid QLS directory name""" def __init__(self, directory_name): QlsError.__init__(self) self.directory_name = directory_name def __str__(self): return 'Invalid QLS directory name "%s"' % self.directory_name class InvalidRecordTypeError(QlsRecordError): """Error class for any operation using an invalid record type""" def __init__(self, file_header, record, error_msg): QlsRecordError.__init__(self, file_header, record) self.error_msg = error_msg def __str__(self): return 'Invalid record type: ' + QlsRecordError.__str__(self) + ':' + self.error_msg class InvalidRecordVersionError(QlsRecordError): """Invalid record version""" def __init__(self, file_header, record, expected_version): QlsRecordError.__init__(self, file_header, record) self.expected_version = expected_version def __str__(self): return 'Invalid record version: queue="%s" ' + QlsRecordError.__str__(self) + \ ' ver_found=0x%x ver_expected=0x%x' % (self.record_header.version, self.expected_version) class NoMoreFilesInJournalError(QlsError): """Raised when trying to obtain the next file in the journal and there are no more files""" def __init__(self, queue_name): QlsError.__init__(self) self.queue_name = queue_name def __str__(self): return 'No more journal files in queue "%s"' % self.queue_name class NonTransactionalRecordError(QlsRecordError): """Transactional operation on non-transactional record""" def __init__(self, file_header, record, operation): QlsRecordError.__init__(self, file_header, record) self.operation = operation def __str__(self): return 'Transactional operation on non-transactional record: ' + QlsRecordError.__str__() + \ ' operation=%s' % self.operation class PartitionDoesNotExistError(QlsError): """Partition name does not exist on disk""" def __init__(self, partition_directory): QlsError.__init__(self) self.partition_directory = partition_directory def __str__(self): return 'Partition %s does not exist' % self.partition_directory class PoolDirectoryAlreadyExistsError(QlsError): """Pool directory already exists""" def __init__(self, pool_directory): QlsError.__init__(self) self.pool_directory = pool_directory def __str__(self): return 'Pool directory %s already exists' % self.pool_directory class PoolDirectoryDoesNotExistError(QlsError): """Pool directory does not exist""" def __init__(self, pool_directory): QlsError.__init__(self) self.pool_directory = pool_directory def __str__(self): return 'Pool directory %s does not exist' % self.pool_directory class RecordIdNotFoundError(QlsRecordError): """Record Id not found in enqueue map""" def __init__(self, file_header, record): QlsRecordError.__init__(self, file_header, record) def __str__(self): return 'Record Id not found in enqueue map: ' + QlsRecordError.__str__() class RecordNotLockedError(QlsRecordError): """Record in enqueue map is not locked""" def __init__(self, file_header, record): QlsRecordError.__init__(self, file_header, record) def __str__(self): return 'Record in enqueue map is not locked: ' + QlsRecordError.__str__() class UnexpectedEndOfFileError(QlsError): """The bytes read from a file is less than that expected""" def __init__(self, size_read, size_expected, file_offset, file_name): QlsError.__init__(self) self.size_read = size_read self.size_expected = size_expected self.file_offset = file_offset self.file_name = file_name def __str__(self): return 'Tried to read %d at offset %d in file "%s"; only read %d' % \ (self.size_read, self.file_offset, self.file_name, self.size_expected) class WritePermissionError(QlsError): """No write permission""" def __init__(self, directory): QlsError.__init__(self) self.directory = directory def __str__(self): return 'No write permission in directory %s' % self.directory class XidSizeError(QlsError): """Error class for Xid size mismatch""" def __init__(self, expected_size, actual_size, xid_str): QlsError.__init__(self) self.expected_size = expected_size self.actual_size = actual_size self.xid_str = xid_str def __str__(self): return 'Inconsistent xid size: expected:%d; actual:%d; xid="%s"' % \ (self.expected_size, self.actual_size, self.xid_str) # ============================================================================= if __name__ == "__main__": print "This is a library, and cannot be executed."