#!/usr/bin/python

import shutil
import sys
import syslog
import os
import os.path

import isi.fs.job as job
import isi.app.lib.upgrade_api as ru

JOBENG_IFSVAR_DIR = "/ifs/.ifsvar/modules/jobengine/"

JAWS_UPGRADE_FILE = JOBENG_IFSVAR_DIR + "pre_jaws_upgrade"
JAWS_UPGRADE_PHASE2_FILE = JOBENG_IFSVAR_DIR + "jaws_upgrade_phase2"

def global_upgrade():

    # Lock a file so nodes don't stomp on each other.
    lockfd = os.open(JAWS_UPGRADE_FILE,
            os.O_RDONLY | os.O_CREAT | os.O_EXLOCK, 0640)
    os.chmod(JAWS_UPGRADE_FILE, 0640)
    try:

        if os.path.exists(JAWS_UPGRADE_PHASE2_FILE):
            return

        # Mark all the new jobs added in Jaws as enabled.
        job.JobConfig().set_state(job.JobType.SHADOWSTOREPROTECT_JOB, True)
        job.JobConfig().set_state(job.JobType.CHANGELIST_CREATE_JOB, True)
        job.JobConfig().set_state(job.JobType.WORM_QUEUE_JOB, True)
        job.JobConfig().set_state(job.JobType.CLOUDPOOL_LIN_JOB, True)
        job.JobConfig().set_state(job.JobType.CLOUDPOOL_TREEWALK_JOB, True)

        # Mark non-critical jobs started by a group change as enabled, now that
        # the upgrade is complete.
        job.JobConfig().set_state(job.JobType.FILESCAN_JOB, True) # MultiScan
        job.JobConfig().set_state(job.JobType.REBALANCE_JOB, True)
        job.JobConfig().set_state(job.JobType.LIN_REBALANCE_JOB, True)
        job.JobConfig().set_state(job.JobType.COLLECT_JOB, True)

        # Indicate the global upgrade has completed.
        fd = os.open(JAWS_UPGRADE_PHASE2_FILE, os.O_CREAT | os.O_RDONLY, 0640)
        os.close(fd)
        os.chmod(JAWS_UPGRADE_PHASE2_FILE, 0640)
        syslog.syslog(syslog.LOG_NOTICE,
                "Completed isi_job_d phase2 config upgrade.")
    finally:
        os.close(lockfd)

if __name__ == '__main__':
    try:
        global_upgrade() 
    except Exception, e:
        syslog.syslog(syslog.LOG_WARNING, "%s failed: %s" % (sys.argv[0], str(e)))
        sys.exit(1)
