##// END OF EJS Templates
revlog: improve the robustness of the splitting process...
revlog: improve the robustness of the splitting process The previous "in-place" splitting, preserving the splitting on transaction failure had a couple of issue in case of transaction rollback: - a race windows that could still lead to a crash and data loss - it corrupted the `fncache`. So instead, we use a new approach that we summarized as "we do a backup of the inline revlog pre-split, and we restore this in case of failure". To make readers live easier, we don't overwrite the inline index file until transaction finalization. (once the transaction get into its finalization phase, it is not expected to rollback, unless some crash happens). To do so, we write the index of the split index in a temporary file that we use until transaction finalization. We also keep a backup of the initial inline file to be able to rollback the split if needed. As a result, transaction rollback cancel the split and no longer corrupt fncache. We also no longer have a small inconsistency windows where the transaction could be unrecoverable.

File last commit:

r50538:e1c586b9 default
r51242:87f0155d stable
Show More
exceptions.py
92 lines | 1.9 KiB | text/x-python | PythonLexer
Matt Harbison
attr: vendor 22.1.0...
r50538 # SPDX-License-Identifier: MIT
Siddharth Agarwal
thirdparty: vendor attrs...
r34398
Matt Harbison
attr: vendor 22.1.0...
r50538 class FrozenError(AttributeError):
Siddharth Agarwal
thirdparty: vendor attrs...
r34398 """
Matt Harbison
attr: vendor 22.1.0...
r50538 A frozen/immutable instance or attribute have been attempted to be
modified.
Siddharth Agarwal
thirdparty: vendor attrs...
r34398
It mirrors the behavior of ``namedtuples`` by using the same error message
Matt Harbison
attr: vendor 22.1.0...
r50538 and subclassing `AttributeError`.
.. versionadded:: 20.1.0
"""
msg = "can't set attribute"
args = [msg]
class FrozenInstanceError(FrozenError):
"""
A frozen instance has been attempted to be modified.
Siddharth Agarwal
thirdparty: vendor attrs...
r34398
.. versionadded:: 16.1.0
"""
Matt Harbison
attr: vendor 22.1.0...
r50538
class FrozenAttributeError(FrozenError):
"""
A frozen attribute has been attempted to be modified.
.. versionadded:: 20.1.0
"""
Siddharth Agarwal
thirdparty: vendor attrs...
r34398
class AttrsAttributeNotFoundError(ValueError):
"""
An ``attrs`` function couldn't find an attribute that the user asked for.
.. versionadded:: 16.2.0
"""
class NotAnAttrsClassError(ValueError):
"""
A non-``attrs`` class has been passed into an ``attrs`` function.
.. versionadded:: 16.2.0
"""
class DefaultAlreadySetError(RuntimeError):
"""
A default has been set using ``attr.ib()`` and is attempted to be reset
using the decorator.
.. versionadded:: 17.1.0
"""
Matt Harbison
attr: vendor 22.1.0...
r50538
class UnannotatedAttributeError(RuntimeError):
"""
A class with ``auto_attribs=True`` has an ``attr.ib()`` without a type
annotation.
.. versionadded:: 17.3.0
"""
class PythonTooOldError(RuntimeError):
"""
It was attempted to use an ``attrs`` feature that requires a newer Python
version.
.. versionadded:: 18.2.0
"""
class NotCallableError(TypeError):
"""
A ``attr.ib()`` requiring a callable has been set with a value
that is not callable.
.. versionadded:: 19.2.0
"""
def __init__(self, msg, value):
super(TypeError, self).__init__(msg, value)
self.msg = msg
self.value = value
def __str__(self):
return str(self.msg)