Skip to content

Commit c8ea201

Browse files
author
Vladimir Kotal
authored
parallelize repository mirroring (#2744)
fixes #2743
1 parent f3fa009 commit c8ea201

File tree

3 files changed

+49
-30
lines changed

3 files changed

+49
-30
lines changed

opengrok-tools/src/main/python/opengrok_tools/mirror.py

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import os
3535
import sys
3636
import tempfile
37+
from multiprocessing import Pool, cpu_count
3738

3839
from filelock import Timeout, FileLock
3940

@@ -52,7 +53,22 @@
5253
print("Need Python 3, you are running {}".format(major_version))
5354
sys.exit(1)
5455

55-
__version__ = "0.7"
56+
__version__ = "0.8"
57+
58+
59+
def worker(args):
60+
project_name, logdir, loglevel, backupcount, config, incoming, uri, \
61+
source_root, batch = args
62+
63+
if batch:
64+
get_batch_logger(logdir, project_name,
65+
loglevel,
66+
backupcount,
67+
get_class_basename())
68+
69+
return mirror_project(config, project_name,
70+
incoming,
71+
uri, source_root)
5672

5773

5874
def main():
@@ -77,6 +93,9 @@ def main():
7793
parser.add_argument('-I', '--incoming', action='store_true',
7894
help='Check for incoming changes, terminate the '
7995
'processing if not found.')
96+
parser.add_argument('-w', '--workers', default=cpu_count(),
97+
help='Number of worker processes')
98+
8099
try:
81100
args = parser.parse_args()
82101
except ValueError as e:
@@ -150,18 +169,22 @@ def main():
150169
lock = FileLock(os.path.join(tempfile.gettempdir(), lockfile + ".lock"))
151170
try:
152171
with lock.acquire(timeout=0):
153-
for project_name in projects:
154-
if args.batch:
155-
get_batch_logger(logdir, project_name,
156-
args.loglevel,
157-
args.backupcount,
158-
get_class_basename())
159-
160-
project_result = mirror_project(config, project_name,
161-
args.incoming,
162-
args.uri, source_root)
163-
if project_result == 1:
164-
ret = 1
172+
with Pool(processes=int(args.workers)) as pool:
173+
worker_args = []
174+
for x in projects:
175+
worker_args.append([x, logdir, args.loglevel,
176+
args.backupcount, config,
177+
args.incoming,
178+
args.uri, source_root,
179+
args.batch])
180+
print(worker_args)
181+
try:
182+
project_results = pool.map(worker, worker_args, 1)
183+
except KeyboardInterrupt:
184+
sys.exit(1)
185+
else:
186+
if any([True for x in project_results if x == 1]):
187+
ret = 1
165188
except Timeout:
166189
logger.warning("Already running, exiting.")
167190
sys.exit(1)

opengrok-tools/src/main/python/opengrok_tools/sync.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -183,21 +183,19 @@ def main():
183183
cmds_base.append(cmd_base)
184184

185185
# Map the commands into pool of workers so they can be processed.
186-
pool = Pool(processes=int(args.workers))
187-
try:
188-
cmds_base_results = pool.map(worker, cmds_base, 1)
189-
except KeyboardInterrupt:
190-
pool.close()
191-
pool.terminate()
192-
sys.exit(1)
193-
else:
194-
for cmds_base in cmds_base_results:
195-
logger.debug("Checking results of project {}".
196-
format(cmds_base))
197-
cmds = CommandSequence(cmds_base)
198-
cmds.fill(cmds_base.retcodes, cmds_base.outputs,
199-
cmds_base.failed)
200-
cmds.check(ignore_errors)
186+
with Pool(processes=int(args.workers)) as pool:
187+
try:
188+
cmds_base_results = pool.map(worker, cmds_base, 1)
189+
except KeyboardInterrupt:
190+
sys.exit(1)
191+
else:
192+
for cmds_base in cmds_base_results:
193+
logger.debug("Checking results of project {}".
194+
format(cmds_base))
195+
cmds = CommandSequence(cmds_base)
196+
cmds.fill(cmds_base.retcodes, cmds_base.outputs,
197+
cmds_base.failed)
198+
cmds.check(ignore_errors)
201199
except Timeout:
202200
logger.warning("Already running, exiting.")
203201
sys.exit(1)

opengrok-tools/src/main/python/opengrok_tools/utils/log.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,6 @@ def get_batch_logger(logdir, project_name, loglevel, backupcount,
147147
logger = logging.getLogger(name)
148148

149149
logfile = os.path.join(logdir, project_name + ".log")
150-
logger.debug("Switching logging to the {} file".
151-
format(logfile))
152150

153151
handler = RotatingFileHandler(logfile, maxBytes=0, mode='a',
154152
backupCount=backupcount)

0 commit comments

Comments
 (0)