Skip to content

Commit d4cbb62

Browse files
Vladimir Kotalahornace
authored andcommitted
allow to trigger reindex based on time and RESTful call
fixes #3581
1 parent e9f7f35 commit d4cbb62

File tree

1 file changed

+50
-48
lines changed

1 file changed

+50
-48
lines changed

docker/start.py

Lines changed: 50 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@
7777
REINDEX_POINT = '/reindex'
7878

7979

80+
def trigger_reindex():
81+
# Signal the sync/indexer thread.
82+
sleep_event.set()
83+
sleep_event.clear()
84+
85+
8086
@auth.verify_token
8187
def verify_token(token):
8288
if expected_token is None:
@@ -89,9 +95,7 @@ def verify_token(token):
8995
@app.route(REINDEX_POINT)
9096
@auth.login_required
9197
def index():
92-
# Signal the sync/indexer thread.
93-
sleep_event.set()
94-
sleep_event.clear()
98+
trigger_reindex()
9599

96100
return "Reindex triggered"
97101

@@ -263,18 +267,13 @@ def merge_commands_env(commands, env):
263267
return commands
264268

265269

266-
def indexer_no_projects(logger, uri, config_path, sync_period,
267-
extra_indexer_options):
270+
def indexer_no_projects(logger, uri, config_path, extra_indexer_options):
268271
"""
269272
Project less indexer
270273
"""
271274

272275
wait_for_tomcat(logger, uri)
273276

274-
periodic_sync = True
275-
if sync_period is None or sync_period == 0:
276-
periodic_sync = False
277-
278277
while True:
279278
indexer_options = ['-s', OPENGROK_SRC_ROOT,
280279
'-d', OPENGROK_DATA_ROOT,
@@ -291,29 +290,27 @@ def indexer_no_projects(logger, uri, config_path, sync_period,
291290
jar=OPENGROK_JAR, doprint=True)
292291
indexer.execute()
293292

294-
if periodic_sync:
295-
sleep_seconds = sync_period * 60
296-
logger.info("Sleeping for {} seconds".format(sleep_seconds))
297-
time.sleep(sleep_seconds)
298-
elif not periodic_sync:
299-
logger.info("Waiting for reindex trigger on {} endpoint".
300-
format(REINDEX_POINT))
301-
sleep_event.wait()
293+
logger.info("Waiting for reindex to be triggered")
294+
sleep_event.wait()
302295

303296

304-
def project_syncer(logger, loglevel, uri, config_path, sync_period,
305-
numworkers, env):
297+
def timeout_loop(logger, sync_period):
298+
while True:
299+
sleep_seconds = sync_period * 60
300+
logger.info("Sleeping for {} seconds".format(sleep_seconds))
301+
time.sleep(sleep_seconds)
302+
303+
trigger_reindex()
304+
305+
306+
def project_syncer(logger, loglevel, uri, config_path, numworkers, env):
306307
"""
307308
Wrapper for running opengrok-sync.
308309
To be run in a thread/process in the background.
309310
"""
310311

311312
wait_for_tomcat(logger, uri)
312313

313-
periodic_sync = True
314-
if sync_period is None or sync_period == 0:
315-
periodic_sync = False
316-
317314
while True:
318315
refresh_projects(logger, uri)
319316

@@ -351,14 +348,8 @@ def project_syncer(logger, loglevel, uri, config_path, sync_period,
351348

352349
save_config(logger, uri, config_path)
353350

354-
if periodic_sync:
355-
sleep_seconds = sync_period * 60
356-
logger.info("Sleeping for {} seconds".format(sleep_seconds))
357-
time.sleep(sleep_seconds)
358-
elif not periodic_sync:
359-
logger.info("Waiting for reindex trigger on {} endpoint".
360-
format(REINDEX_POINT))
361-
sleep_event.wait()
351+
logger.info("Waiting for reindex to be triggered")
352+
sleep_event.wait()
362353

363354

364355
def create_bare_config(logger, use_projects, extra_indexer_options=None):
@@ -435,6 +426,30 @@ def check_index_and_wipe_out(logger):
435426
logger.error("cannot delete '{}': {}".format(path, e))
436427

437428

429+
def start_rest_thread(logger):
430+
rest_port = get_num_from_env(logger, 'REST_PORT', 5000)
431+
token = os.environ.get('REST_TOKEN')
432+
global expected_token
433+
if token:
434+
logger.debug("Setting expected token for REST endpoint"
435+
"on port {}".format(rest_port))
436+
expected_token = token
437+
logger.debug("Starting REST thread to listen for requests "
438+
"on port {} on the {} endpoint".
439+
format(rest_port, REINDEX_POINT))
440+
rest_thread = threading.Thread(target=rest_function,
441+
name="REST thread",
442+
args=(logger, rest_port), daemon=True)
443+
rest_thread.start()
444+
445+
446+
def start_timeout_thread(logger, sync_period):
447+
thread = threading.Thread(target=timeout_loop,
448+
name="Timeout thread",
449+
args=(logger, sync_period), daemon=True)
450+
thread.start()
451+
452+
438453
def main():
439454
log_level = os.environ.get('OPENGROK_LOG_LEVEL')
440455
if log_level:
@@ -519,32 +534,19 @@ def main():
519534
worker_function = project_syncer
520535
syncer_args = (logger, log_level, uri,
521536
OPENGROK_CONFIG_FILE,
522-
sync_period, num_workers, env)
537+
num_workers, env)
523538
else:
524539
worker_function = indexer_no_projects
525-
syncer_args = (logger, uri, OPENGROK_CONFIG_FILE, sync_period,
540+
syncer_args = (logger, uri, OPENGROK_CONFIG_FILE,
526541
extra_indexer_options)
527542

528543
logger.debug("Starting sync thread")
529544
sync_thread = threading.Thread(target=worker_function, name="Sync thread",
530545
args=syncer_args, daemon=True)
531546
sync_thread.start()
532547

533-
if sync_period == 0:
534-
rest_port = get_num_from_env(logger, 'REST_PORT', 5000)
535-
token = os.environ.get('REST_TOKEN')
536-
global expected_token
537-
if token:
538-
logger.debug("Setting expected token for REST endpoint"
539-
"on port {}".format(rest_port))
540-
expected_token = token
541-
logger.debug("Starting REST thread to listen for requests "
542-
"on port {} on the {} endpoint".
543-
format(rest_port, REINDEX_POINT))
544-
rest_thread = threading.Thread(target=rest_function,
545-
name="REST thread",
546-
args=(logger, rest_port), daemon=True)
547-
rest_thread.start()
548+
start_rest_thread(logger)
549+
start_timeout_thread(logger, sync_period)
548550

549551
# Start Tomcat last. It will be the foreground process.
550552
logger.info("Starting Tomcat")

0 commit comments

Comments
 (0)