Recreated the tscServer.c:312 crash
This commit is contained in:
parent
dc2b3437bd
commit
884e7fe635
|
@ -283,20 +283,20 @@ class LinearQueue():
|
||||||
return 0
|
return 0
|
||||||
return self.pop()
|
return self.pop()
|
||||||
|
|
||||||
def use(self, i):
|
def allocate(self, i):
|
||||||
with self.lock:
|
with self.lock:
|
||||||
if ( i in self.inUse ):
|
if ( i in self.inUse ):
|
||||||
raise RuntimeError("Cannot re-use same index in queue: {}".format(i))
|
raise RuntimeError("Cannot re-use same index in queue: {}".format(i))
|
||||||
self.inUse.add(i)
|
self.inUse.add(i)
|
||||||
|
|
||||||
def unUse(self, i):
|
def release(self, i):
|
||||||
with self.lock:
|
with self.lock:
|
||||||
self.inUse.remove(i) # KeyError possible
|
self.inUse.remove(i) # KeyError possible
|
||||||
|
|
||||||
def size(self):
|
def size(self):
|
||||||
return self.lastIndex + 1 - self.firstIndex
|
return self.lastIndex + 1 - self.firstIndex
|
||||||
|
|
||||||
def allocate(self):
|
def pickAndAllocate(self):
|
||||||
with self.lock:
|
with self.lock:
|
||||||
cnt = 0 # counting the interations
|
cnt = 0 # counting the interations
|
||||||
while True:
|
while True:
|
||||||
|
@ -305,7 +305,7 @@ class LinearQueue():
|
||||||
raise RuntimeError("Failed to allocate LinearQueue element")
|
raise RuntimeError("Failed to allocate LinearQueue element")
|
||||||
ret = Dice.throwRange(self.firstIndex, self.lastIndex+1)
|
ret = Dice.throwRange(self.firstIndex, self.lastIndex+1)
|
||||||
if ( not ret in self.inUse ):
|
if ( not ret in self.inUse ):
|
||||||
return self.use(ret)
|
return self.allocate(ret)
|
||||||
|
|
||||||
|
|
||||||
# State of the database as we believe it to be
|
# State of the database as we believe it to be
|
||||||
|
@ -317,8 +317,12 @@ class DbState():
|
||||||
self.openDbServerConnection()
|
self.openDbServerConnection()
|
||||||
self.lock = threading.RLock()
|
self.lock = threading.RLock()
|
||||||
|
|
||||||
def pickTable(self): # pick any table, and "use" it
|
def pickAndAllocateTable(self): # pick any table, and "use" it
|
||||||
return self.tableNumQueue.allocate()
|
return self.tableNumQueue.pickAndAllocate()
|
||||||
|
|
||||||
|
def releaseTable(self, i): # return the table back, so others can use it
|
||||||
|
self.tableNumQueue.release(i)
|
||||||
|
|
||||||
|
|
||||||
def getNextTick(self):
|
def getNextTick(self):
|
||||||
with self.lock: # prevent duplicate tick
|
with self.lock: # prevent duplicate tick
|
||||||
|
@ -330,9 +334,6 @@ class DbState():
|
||||||
self.int += 1
|
self.int += 1
|
||||||
return self.int
|
return self.int
|
||||||
|
|
||||||
def unuseTable(self, i): # return the table back, so others can use it
|
|
||||||
self.tableNumQueue.unUse(i)
|
|
||||||
|
|
||||||
def openDbServerConnection(self):
|
def openDbServerConnection(self):
|
||||||
cfgPath = "../../build/test/cfg" # was: tdDnodes.getSimCfgPath()
|
cfgPath = "../../build/test/cfg" # was: tdDnodes.getSimCfgPath()
|
||||||
conn = taos.connect(host="127.0.0.1", config=cfgPath) # TODO: make configurable
|
conn = taos.connect(host="127.0.0.1", config=cfgPath) # TODO: make configurable
|
||||||
|
@ -380,9 +381,10 @@ class DropTableTask(Task):
|
||||||
class AddDataTask(Task):
|
class AddDataTask(Task):
|
||||||
def execute(self):
|
def execute(self):
|
||||||
logger.info(" Adding some data...")
|
logger.info(" Adding some data...")
|
||||||
# ds = self.dbState
|
ds = self.dbState
|
||||||
# tIndex = self.dbState.pickTable()
|
tIndex = ds.pickTable()
|
||||||
# tdSql.execute("insert into table_{} values ('{}', {});".format(tIndex, ds.getNextTick(), ds.getNextInt()))
|
tdSql.execute("insert into table_{} values ('{}', {});".format(tIndex, ds.getNextTick(), ds.getNextInt()))
|
||||||
|
ds.r
|
||||||
|
|
||||||
# Deterministic random number generator
|
# Deterministic random number generator
|
||||||
class Dice():
|
class Dice():
|
||||||
|
@ -423,8 +425,8 @@ class WorkDispatcher():
|
||||||
# self.totalNumMethods = 2
|
# self.totalNumMethods = 2
|
||||||
self.tasks = [
|
self.tasks = [
|
||||||
CreateTableTask(dbState),
|
CreateTableTask(dbState),
|
||||||
DropTableTask(dbState),
|
# DropTableTask(dbState),
|
||||||
# AddDataTask(dbState),
|
AddDataTask(dbState),
|
||||||
]
|
]
|
||||||
|
|
||||||
def throwDice(self):
|
def throwDice(self):
|
||||||
|
@ -443,7 +445,7 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
Dice.seed(0) # initial seeding of dice
|
Dice.seed(0) # initial seeding of dice
|
||||||
dbState = DbState()
|
dbState = DbState()
|
||||||
threadPool = SteppingThreadPool(dbState, 3, 5, 0)
|
threadPool = SteppingThreadPool(dbState, 1, 5, 0)
|
||||||
threadPool.run()
|
threadPool.run()
|
||||||
logger.info("Finished running thread pool")
|
logger.info("Finished running thread pool")
|
||||||
dbState.closeDbServerConnection()
|
dbState.closeDbServerConnection()
|
||||||
|
|
Loading…
Reference in New Issue