Exemple #1
0
    def test_20_createDbFail(self):
        """ Test for creating database """

        # instantiate CSS with some initial data
        initData = """\
/\t\\N
/css_meta\t\\N
/css_meta/version\t{version}
/DBS\t\\N
/DBS/DB1\tPENDING_CREATE:12345
"""

        wCss = _makeWcss(initData)
        executor = TestExecutor(None)
        watcher = watcherLib.Watcher(wCss, executor)
        watcher.run(True)
        self.assertEqual(executor.lastCall, "CREATE DATABASE DB1")
        self.assertEqual(executor.lastOptions, "12345")
        self.assertEqual(wCss.getDbs()['DB1'], "FAILED:CREATE DATABASE DB1")
Exemple #2
0
    def test_31_dropDbSkip(self):
        """ Test for dropping database """

        # instantiate CSS with some initial data
        initData = """\
/\t\\N
/css_meta\t\\N
/css_meta/version\t{version}
/DBS\t\\N
/DBS/DB1\tPENDING_DROP:12345
"""

        wCss = _makeWcss(initData)
        executor = TestExecutor(False)
        watcher = watcherLib.Watcher(wCss, executor)
        watcher.run(True)
        self.assertEqual(executor.lastCall, "DROP DATABASE DB1")
        self.assertEqual(executor.lastOptions, "12345")
        self.assertEqual(wCss.getDbs()['DB1'], "PENDING_DROP:12345")
Exemple #3
0
    def test_13_dropTable(self):
        """ Test for dropping table """

        # instantiate CSS with some initial data
        initData = """\
/\t\\N
/css_meta\t\\N
/css_meta/version\t{version}
/DBS\t\\N
/DBS/DB1\tREADY
/DBS/DB1/TABLES\t\\N
/DBS/DB1/TABLES/TABLE1\tPENDING_DROP:12345
"""

        wCss = _makeWcss(initData)
        executor = TestExecutor()
        watcher = watcherLib.Watcher(wCss, executor)
        watcher.run(True)
        self.assertEqual(executor.lastCall, "DROP TABLE DB1.TABLE1")
        self.assertEqual(executor.lastOptions, "12345")
        self.assertNotIn(('DB1', 'TABLE1'), wCss.getTables())
Exemple #4
0
    def test_32_createTableSkip(self):
        """ Test for creating table """

        # instantiate CSS with some initial data
        initData = """\
/\t\\N
/css_meta\t\\N
/css_meta/version\t{version}
/DBS\t\\N
/DBS/DB1\tREADY
/DBS/DB1/TABLES\t\\N
/DBS/DB1/TABLES/TABLE1\tPENDING_CREATE:12345
"""

        wCss = _makeWcss(initData)
        executor = TestExecutor(False)
        watcher = watcherLib.Watcher(wCss, executor)
        watcher.run(True)
        self.assertEqual(executor.lastCall, "CREATE TABLE DB1.TABLE1")
        self.assertEqual(executor.lastOptions, "12345")
        self.assertEqual(wCss.getTables()[('DB1', 'TABLE1')],
                         "PENDING_CREATE:12345")
Exemple #5
0
def main():

    descr = 'Synchronize database contents with CSS.'
    parser = ArgumentParser(description=descr)
    parser.add_argument('-v',
                        '--verbose',
                        dest='verbose',
                        action='count',
                        default=0,
                        help='More verbose output, can use several times.')
    parser.add_argument(
        '-c',
        '--config',
        dest='configFile',
        default='./watcher.cfg',
        metavar='PATH',
        help='Read configuration from provided file, def: %(default)s.')
    args = parser.parse_args()

    # configure logging
    levels = {0: lsst.log.WARN, 1: lsst.log.INFO, 2: lsst.log.DEBUG}
    level = levels.get(args.verbose, lsst.log.DEBUG)
    lsst.log.setLevel('', level)

    # redirect Python logging to LSST logger
    pylgr = logging.getLogger()
    pylgr.setLevel(logging.DEBUG)
    pylgr.addHandler(lsst.log.LogHandler())
    logging.captureWarnings(True)

    # parameters
    interval = 3.0  # scan interval in seconds
    wmgrSecret = None
    extraCzar = None

    # parse config file
    defaults = dict(interval=str(interval))
    cfg = configparser.SafeConfigParser(defaults)
    cfg.readfp(open(args.configFile))

    # get few parameters
    if cfg.has_section('watcher'):
        interval = cfg.getfloat('watcher', 'interval')
    wmgrSecret = cfg.get('wmgr', 'secret')
    if cfg.has_option('czar_wmgr', 'host'):
        host = cfg.get('czar_wmgr', 'host')
        port = 5012
        if cfg.has_option('czar_wmgr', 'port'):
            port = cfg.getint('czar_wmgr', 'port')
        extraCzar = (host, port)

    # instantiate CSS
    cssConfig = dict(cfg.items('css'))
    wcss = watcherLib.WatcherCss(cssConfig, wmgrSecret, extraCzar)

    # instantiate executor
    qmetaConfig = dict(cfg.items('qmeta'))
    executor = watcherLib.QservExecutor(wcss, qmetaConfig)

    # start watcher, this will not return
    watcher = watcherLib.Watcher(wcss, executor, interval)
    watcher.run()