60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
|
# -*- coding: utf-8
|
||
|
#
|
||
|
# manage journaldb.json which is a table of vmid's as indexes update on vmcreate and
|
||
|
# values of region_id and slave_id. should support deletion of unused id's and be
|
||
|
# properly updated on vm migrations
|
||
|
|
||
|
#site
|
||
|
import json
|
||
|
|
||
|
#local
|
||
|
import ioconfig
|
||
|
import utils
|
||
|
|
||
|
def createjnode(vmid, regionid, slaveid):
|
||
|
""" create new record into the journal. invoked on vm creation """
|
||
|
journaldb = readjournal()
|
||
|
if str(vmid) in journaldb:
|
||
|
ioconfig.logger.warning('journal> overwriting id[{}] !'.format(vmid))
|
||
|
else:
|
||
|
jnode = { str(vmid):{} }
|
||
|
journaldb.update(jnode)
|
||
|
|
||
|
ioconfig.logger.info ('journal> r[{}] s[{}] -> id[{}]'.format(regionid, slaveid, vmid))
|
||
|
jdata = { 'vmid':str(vmid), 'slaveid':str(slaveid), 'regionid':str(regionid) }
|
||
|
journaldb[str(vmid)] = jdata
|
||
|
writedb(journaldb)
|
||
|
|
||
|
|
||
|
def getjnode(vmid):
|
||
|
""" query the database for records with requested vmid. invoked on user commands """
|
||
|
journaldb = readjournal()
|
||
|
try:
|
||
|
regionid = journaldb[str(vmid)]['regionid']
|
||
|
slaveid = journaldb[str(vmid)]['slaveid']
|
||
|
ioconfig.logger.info('journal> read: id[{}] -> r[{}] s[{}]'.format(vmid, regionid, slaveid))
|
||
|
except:
|
||
|
ioconfig.logger.error('journal> invalid id[{}] !'.format(vmid))
|
||
|
else:
|
||
|
return regionid, slaveid
|
||
|
|
||
|
|
||
|
def readjournal():
|
||
|
""" read journal """
|
||
|
try:
|
||
|
with open('journal.json') as dbr:
|
||
|
journaldb = json.load(dbr)
|
||
|
dbr.close()
|
||
|
except:
|
||
|
journaldb = {}
|
||
|
ioconfig.logger.warning('journal> initializing...')
|
||
|
return journaldb
|
||
|
|
||
|
|
||
|
def writedb(journaldb):
|
||
|
""" write journal """
|
||
|
with open('journal.json', 'w') as dbw:
|
||
|
json.dump(journaldb, dbw)
|
||
|
dbw.close()
|
||
|
|