sh = make_shell(options)
seen = make_serialized_set(options)
my_uid = os.getuid() # to see if we have root
+ warnings_logname = "/tmp/wizard-migrate-warnings.log"
+ errors_logname = "/tmp/wizard-migrate-errors.log"
if options.log_dir:
# must not be on AFS
try:
options.log_dir = os.path.join(options.log_dir, str(int(time.time())))
os.mkdir(options.log_dir) # if fails, be fatal
os.chmod(options.log_dir, 0o777)
+ warnings_logname = os.path.join(options.log_dir, "warnings.log")
+ errors_logname = os.path.join(options.log_dir, "errors.log")
+ warnings_log = open(warnings_logname, "a")
+ errors_log = open(errors_logname, "a")
# loop stuff
errors = {}
i = 0
log_file = os.path.join(options.log_dir, shorten(i, d.location))
child_args.append("--log-file=" + log_file)
# actual meat
- def make_on_pair(d):
+ def make_on_pair(d, i):
def on_success(stdout, stderr):
+ if stderr:
+ warnings_log.write("%s\n" % d.location)
+ logging.warning("Warnings [%04d] %s:\n%s" % (d.location, i, stderr))
seen.add(d.location)
def on_error(e):
if e.name == "wizard.command.migrate.AlreadyMigratedError" or \
name = e.name
if name not in errors: errors[name] = []
errors[name].append(d)
- logging.error("%s in %s" % (name, d.location))
+ logging.error("%s in [%04d] %s" % (name, i, d.location))
+ errors_log.write("%s\n" % d.location)
return (on_success, on_error)
- on_success, on_error = make_on_pair(d)
+ on_success, on_error = make_on_pair(d, i)
sh.wait() # wait for a parallel processing slot to be available
sh.call("wizard", "migrate", d.location, *child_args,
on_success=on_success, on_error=on_error)
def calculate_base_args(options):
base_args = command.makeBaseArgs(options, dry_run="--dry-run", srv_path="--srv-path", force="--force")
- base_args += '--quiet'
return base_args
def shorten(i, dir):