|
142 |
self.size = size = len(data) |
142 |
self.size = size = len(data) |
143 |
|
143 |
|
144 |
count, reminder = divmod(size - sizeof(IndexHeader), sizeof(IndexEntry)) |
144 |
count, reminder = divmod(size - sizeof(IndexHeader), sizeof(IndexEntry)) |
145 |
self.log.info("Index of size %d contains %d entries", size, count) |
145 |
self.log.info("Index of size %d, last entry: %d", size, count - 1) |
146 |
self.count = count - 1 if count else 0 # transaction 0 is never used |
146 |
self.count = count - 1 if count else 0 # transaction 0 is never used |
147 |
assert reminder == 0, reminder |
147 |
assert reminder == 0, reminder |
148 |
|
148 |
|
Lines 302-307
class Translog(object):
|
Link Here
|
---|
|
302 |
|
302 |
|
303 |
self.translog.seek(0, SEEK_SET) |
303 |
self.translog.seek(0, SEEK_SET) |
304 |
|
304 |
|
|
|
305 |
self.log.info("Translog of size %d contains %d entries", size, self.last - self.first) |
306 |
|
305 |
return self |
307 |
return self |
306 |
|
308 |
|
307 |
def __exit__(self, exc_type, exc_value, traceback): |
309 |
def __exit__(self, exc_type, exc_value, traceback): |
Lines 1197-1206
def prune_file(opt):
|
Link Here
|
---|
|
1197 |
|
1199 |
|
1198 |
log.info('Purging/keeping %d..%d..%d', translog.first, opt.trans, translog.last) |
1200 |
log.info('Purging/keeping %d..%d..%d', translog.first, opt.trans, translog.last) |
1199 |
if opt.trans <= translog.first: |
1201 |
if opt.trans <= translog.first: |
1200 |
log.fatal('Already purged.') |
1202 |
log.info('Already purged, nothing to do.') |
1201 |
raise Abort() |
1203 |
raise Abort() |
1202 |
if opt.trans >= translog.last: |
1204 |
if opt.trans >= translog.last: |
1203 |
log.fatal('Nothing to purge.') |
1205 |
log.info('Nothing to purge.') |
1204 |
raise Abort() |
1206 |
raise Abort() |
1205 |
assert translog.first < opt.trans < translog.last |
1207 |
assert translog.first < opt.trans < translog.last |
1206 |
|
1208 |
|
Lines 1330-1336
def parse_args(args=None):
|
Link Here
|
---|
|
1330 |
parser_check.set_defaults(func=check) |
1332 |
parser_check.set_defaults(func=check) |
1331 |
|
1333 |
|
1332 |
parser_prune = subparsers.add_parser("prune", help="Prune transaction files") |
1334 |
parser_prune = subparsers.add_parser("prune", help="Prune transaction files") |
1333 |
parser_prune.add_argument("trans", metavar="tid", type=int, help="Oldest transaction number to keep") |
1335 |
parser_prune.add_argument("trans", metavar="tid", type=int, help="Oldest transaction number to keep (negative numbers: the number of transactions to keep)") |
1334 |
parser_prune.add_argument("--role", "-r", metavar="ROLE", help="Server role [%(default)s]", default=ucr['server/role']) |
1336 |
parser_prune.add_argument("--role", "-r", metavar="ROLE", help="Server role [%(default)s]", default=ucr['server/role']) |
1335 |
parser_prune.set_defaults(func=prune, fix=True) |
1337 |
parser_prune.set_defaults(func=prune, fix=True) |
1336 |
|
1338 |
|