Transaction file checking

Currently this article is under development as some issues has been identified. Please do not follow the steps below as long as this information has been removed.

Important:

The following applies only for UCS lower then 4.3.3 - errata427
In later releases the behavior has vastly changed. You’ll find a related article here

Situation

Problems with replication may be caused by a corrupt transaction file
The transaction file is found in

/var/lib/univention-ldap/notify/transaction

The following mutations of the transaction file cause replication issues:

  • interruption of the consecutive numbering
  • lines start with 0
  • lines start with or contain unusual characters
  • lines not having exact numbers of three arguments

A corrupt transaction file causes the notifier to “wait at” the corrupt line. Therefore replication stops at the operation listed in that line and no further changes are replicated.

How can these mutations be found

The following Python script finds the first mutation in the file. Please note that the file may be affected by multiple error types, that’s why the script should be run again after fixing an issue:

#!/usr/bin/env python
with open('/var/lib/univention-ldap/notify/transaction', 'r') as transaction:
  lc = 1
  for line in transaction:
    (head, tail) = line.strip().split(' ', 1)
    try:
      cur_lc = int(head)
    except ValueError:
      print 'ERROR at line %d: "%s"' % (lc, line)
      break
    if len(tail.rsplit(' ', 1)) != 2:
      print 'ERROR missing third column at line %d: "%s"' % (lc, line)
      break
    if cur_lc != lc:
      print 'ERROR at line %d: "%s"' % (lc, line)
      break
    lc += 1
Mastodon