MySQL for the Internet of Things

(Steven Felgate) #1
ChapTEr 8 ■ DEmonsTraTion of high availabiliTy TEChniquEs

self.cur_server_id = id
conn = mysql.connect(**master)
cur = conn.cursor()
cur.execute(LOCK_TABLE)
query = SET_SERVER.format(id, host, port)
cur.execute(query)
print(">", query)
cur.execute(UNLOCK_TABLE)
cur.close()
conn.close()

Get the current server id from the database


def _get_current_server_id(self):


if first time, skip


if self.cur_server_id == -1: return
conn = mysql.connect(**master)
cur = conn.cursor()
cur.execute(GET_CURRENT_SERVER)
self.cur_server_id = cur.fetchall()[0][0]
cur.close()
conn.close()


Get the next server in the list based on server id.


def get_next_server(self):
self.servers = []
self._get_server_list() # update the server list
if not self.servers:
raise RuntimeError("You must have slaves connected to use this code.")
self._get_current_server_id() # get current server in the database
for server in self.servers:
if server["id"] > self.cur_server_id:


store the current server_id


self._set_server(server["id"], server["host"], server["port"])
return server


if we get here, we've looped through all rows so choose first one


server = self.servers[0]
self._set_server(server["id"], server["host"], server["port"])


return the current server information


return server


instantiate the class - only need this once.


read_server_selector = select_read_server();


demonstrate how to retrieve the next server and round robin selection


for i in range(0,10):
print(i, "next read server =", read_server_selector.get_next_server())
sys.stdout.flush()
time.sleep(1)

Free download pdf