Add a watchdog for the inbox thread

master
Bob Mottram 2019-09-02 22:52:43 +01:00
parent 9bdb0c007a
commit 5ca2b1c762
2 changed files with 19 additions and 3 deletions

View File

@ -47,6 +47,7 @@ from posts import expireCache
from inbox import inboxPermittedMessage from inbox import inboxPermittedMessage
from inbox import inboxMessageHasParams from inbox import inboxMessageHasParams
from inbox import runInboxQueue from inbox import runInboxQueue
from inbox import runInboxQueueWatchdog
from inbox import savePostToInboxQueue from inbox import savePostToInboxQueue
from inbox import populateReplies from inbox import populateReplies
from follow import getFollowingFeed from follow import getFollowingFeed
@ -3264,7 +3265,7 @@ class PubServer(BaseHTTPRequestHandler):
class PubServerUnitTest(PubServer): class PubServerUnitTest(PubServer):
protocol_version = 'HTTP/1.0' protocol_version = 'HTTP/1.0'
def runDaemon(projectVersion, \ def runDaemon(projectVersion, \
instanceId,clientToServer: bool, \ instanceId,clientToServer: bool, \
baseDir: str,domain: str, \ baseDir: str,domain: str, \
@ -3377,7 +3378,10 @@ def runDaemon(projectVersion, \
httpd.ocapAlways,maxReplies, \ httpd.ocapAlways,maxReplies, \
domainMaxPostsPerDay,accountMaxPostsPerDay, \ domainMaxPostsPerDay,accountMaxPostsPerDay, \
allowDeletion,debug,httpd.acceptedCaps),daemon=True) allowDeletion,debug,httpd.acceptedCaps),daemon=True)
httpd.thrInboxQueue.start() httpd.thrWatchdog= \
threadWithTrace(target=runInboxQueueWatchdog, \
args=(projectVersion,httpd),daemon=True)
httpd.thrWatchdog.start()
if clientToServer: if clientToServer:
print('Running ActivityPub client on ' + domain + ' port ' + str(proxyPort)) print('Running ActivityPub client on ' + domain + ' port ' + str(proxyPort))
else: else:

View File

@ -1135,7 +1135,19 @@ def restoreQueueItems(baseDir: str,queue: []) -> None:
queue.append(os.path.join(queueDir, qfile)) queue.append(os.path.join(queueDir, qfile))
if len(queue)>0: if len(queue)>0:
print('Restored '+str(len(queue))+' inbox queue items') print('Restored '+str(len(queue))+' inbox queue items')
def runInboxQueueWatchdog(projectVersion: str,httpd) -> None:
"""This tries to keep the inbox thread running even if it dies
"""
print('Starting inbox queue watchdog')
httpd.thrInboxQueue.start()
while True:
time.sleep(20)
if not httpd.thrInboxQueue.isAlive():
httpd.thrInboxQueue.kill()
httpd.thrInboxQueue.start()
print('Restarting inbox queue...')
def runInboxQueue(projectVersion: str, \ def runInboxQueue(projectVersion: str, \
baseDir: str,httpPrefix: str,sendThreads: [],postLog: [], \ baseDir: str,httpPrefix: str,sendThreads: [],postLog: [], \
cachedWebfingers: {},personCache: {},queue: [], \ cachedWebfingers: {},personCache: {},queue: [], \