Skip to content

Commit 6391a4d

Browse files
committed
improvement dispatch logic
1 parent d49934c commit 6391a4d

1 file changed

Lines changed: 74 additions & 68 deletions

File tree

src/varnishapi.py

Lines changed: 74 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,83 +1615,89 @@ def __Setup10(self):
16151615

16161616
return(1)
16171617

1618-
def __cbMain(self, cb, priv=None):
1618+
1619+
def __Dispatch10(self, cb, priv=None):
16191620
self._cb = cb
16201621
self._priv = priv
1621-
if not self.vslq:
1622-
# Reconnect VSM
1623-
time.sleep(0.1)
1624-
if self.lva.VSM_Open(self.vsm):
1625-
self.lva.VSM_ResetError(self.vsm)
1626-
return(1)
1627-
c = self.lva.VSL_CursorVSM(
1628-
self.vsl, self.vsm,
1629-
self.defi.VSL_COPT_TAIL | self.defi.VSL_COPT_BATCH)
1630-
if not c:
1631-
self.lva.VSM_ResetError(self.vsm)
1622+
while True:
1623+
if not self.vslq:
1624+
# Reconnect VSM
1625+
time.sleep(0.1)
1626+
if self.lva.VSM_Open(self.vsm):
1627+
self.lva.VSM_ResetError(self.vsm)
1628+
return(1)
1629+
c = self.lva.VSL_CursorVSM(
1630+
self.vsl, self.vsm,
1631+
self.defi.VSL_COPT_TAIL | self.defi.VSL_COPT_BATCH)
1632+
if not c:
1633+
self.lva.VSM_ResetError(self.vsm)
1634+
self.lva.VSM_Close(self.vsm)
1635+
return(1)
1636+
self.vslq = self.lva.VSLQ_New(
1637+
self.vsl, c, self.__g_arg, self.__q_arg)
1638+
self.error = 'Log reacquired'
1639+
i = self.lva.VSLQ_Dispatch(
1640+
self.vslq, VSLQ_dispatch_f(self._callBack), None)
1641+
1642+
if i == 1:
1643+
continue
1644+
elif i > -2:
1645+
return i
1646+
if not self.vsm:
1647+
return i
1648+
1649+
self.lva.VSLQ_Flush(self.vslq, VSLQ_dispatch_f(self._callBack), None)
1650+
self.lva.VSLQ_Delete(byref(cast(self.vslq, c_void_p)))
1651+
self.vslq = None
1652+
if i == -2:
1653+
self.error = "Log abandoned"
1654+
#self.lva.VSM_Destroy(POINTER(self.vsm))
16321655
self.lva.VSM_Close(self.vsm)
1633-
return(1)
1634-
self.vslq = self.lva.VSLQ_New(
1635-
self.vsl, c, self.__g_arg, self.__q_arg)
1636-
self.error = 'Log reacquired'
1637-
i = self.lva.VSLQ_Dispatch(
1638-
self.vslq, VSLQ_dispatch_f(self._callBack), None)
1639-
return(i)
1640-
1641-
def __Dispatch10(self, cb, priv=None):
1642-
i = self.__cbMain(cb, priv)
1643-
if i > -2:
1656+
if i < -2:
1657+
self.error = "Log overrun"
16441658
return i
1645-
if not self.vsm:
1646-
return i
1647-
1648-
self.lva.VSLQ_Flush(self.vslq, VSLQ_dispatch_f(self._callBack), None)
1649-
self.lva.VSLQ_Delete(byref(cast(self.vslq, c_void_p)))
1650-
self.vslq = None
1651-
if i == -2:
1652-
self.error = "Log abandoned"
1653-
#self.lva.VSM_Destroy(POINTER(self.vsm))
1654-
self.lva.VSM_Close(self.vsm)
1655-
if i < -2:
1656-
self.error = "Log overrun"
1657-
return i
16581659

16591660
def __Dispatch20(self, cb, priv=None):
1660-
if self.vsm:
1661-
stat = self.lva.VSM_Status(self.vsm)
1662-
if stat & self.defi.VSM_WRK_RESTARTED:
1661+
self._cb = cb
1662+
self._priv = priv
1663+
while True:
1664+
if self.vsm:
1665+
stat = self.lva.VSM_Status(self.vsm)
1666+
if stat & self.defi.VSM_WRK_RESTARTED:
1667+
if self.hascursor < 1:
1668+
self.error = "Log abandoned"
1669+
self.lva.VSLQ_SetCursor(self.vslq, None)
1670+
self.hascursor = 0
16631671
if self.hascursor < 1:
1664-
self.error = "Log abandoned"
1665-
self.lva.VSLQ_SetCursor(self.vslq, None)
1666-
self.hascursor = 0
1667-
if self.hascursor < 1:
1668-
time.sleep(0.1)
1669-
c = self.lva.VSL_CursorVSM(self.vsl, self.vsm, self.cursor_opt)
1670-
if c == None:
1671-
self.lva.VSL_ResetError(self.vsl)
1672-
return 0
1673-
if self.hascursor == 0:
1674-
self.error = "Log reacquired"
1675-
self.hascursor = 1
1676-
self.lva.VSLQ_SetCursor(self.vslq, byref(cast(c, c_void_p)))
1677-
1678-
1679-
i = self.__cbMain(cb, priv)
1680-
1681-
if i > -2:
1682-
return i
1683-
if not self.vsm:
1672+
time.sleep(0.1)
1673+
c = self.lva.VSL_CursorVSM(self.vsl, self.vsm, self.cursor_opt)
1674+
if c == None:
1675+
self.lva.VSL_ResetError(self.vsl)
1676+
return 0
1677+
if self.hascursor == 0:
1678+
self.error = "Log reacquired"
1679+
self.hascursor = 1
1680+
self.lva.VSLQ_SetCursor(self.vslq, byref(cast(c, c_void_p)))
1681+
1682+
i = self.lva.VSLQ_Dispatch(
1683+
self.vslq, VSLQ_dispatch_f(self._callBack), None)
1684+
1685+
if i == 1:
1686+
continue
1687+
elif i > -2:
1688+
return i
1689+
if not self.vsm:
1690+
return i
1691+
1692+
self.lva.VSLQ_Flush(self.vslq, VSLQ_dispatch_f(self._callBack), None)
1693+
if i == -2:
1694+
self.error = "Log abandoned"
1695+
self.hascursor = 0
1696+
self.lva.VSLQ_SetCursor(self.vslq, None)
1697+
if i < -2:
1698+
self.error = "Log overrun"
16841699
return i
16851700

1686-
self.lva.VSLQ_Flush(self.vslq, VSLQ_dispatch_f(self._callBack), None)
1687-
if i == -2:
1688-
self.error = "Log abandoned"
1689-
self.hascursor = 0
1690-
self.lva.VSLQ_SetCursor(self.vslq, None)
1691-
if i < -2:
1692-
self.error = "Log overrun"
1693-
return i
1694-
16951701
def Dispatch(self, cb, priv=None):
16961702
if self.lva.apiversion >= 2.0:
16971703
return self.__Dispatch20(cb, priv)

0 commit comments

Comments
 (0)