in tools/scripts/codegen/legacy_c2j_cpp_gen.py [0:0]
def generate(self, executor: ProcessPoolExecutor, max_workers: int, args: dict) -> int:
"""
Call C++ SDK clients generator to generate service clients and endpoint tests in parallel
:param executor: executor to use to run parallel code generation
:param max_workers: maximum number of parallel tasks
:param args: input arguments from the command line
:return:
"""
self.build_generator(self.path_to_generator)
if args.get("prepare_tools"):
return 0
pending = set()
done = set()
print(f"Running code generator, up to {max_workers} processes in parallel")
sys.stdout.flush()
for core_component in ["defaults", "partitions"]:
if args.get("all") or args.get(core_component):
core_output_dir = f"{self.output_location}/../src/"
task = executor.submit(self._generate_core_component,
core_component,
CORE_COMPONENT_TO_MODEL[core_component],
core_output_dir,
None,
self.raw_generator_arguments)
pending.add(task)
for service, model_files in self.c2j_models.items():
while len(pending) >= max_workers:
new_done, pending = wait(pending, return_when=FIRST_COMPLETED)
done.update(new_done)
task = executor.submit(self._generate_single_service,
service,
model_files,
self.output_location,
None,
self.raw_generator_arguments)
pending.add(task)
new_done, _ = wait(pending, return_when=ALL_COMPLETED)
done.update(new_done)
failures = set()
for result in done:
try:
service, status = result.result() # will rethrow any exceptions
if status != 0:
raise RuntimeError(f"Service {service} (re)generation failed with non-zero return: {status}")
except Exception as exc:
failures.add(f"Service (re)generation failed with error.\n Exception: {exc}\n"
f"stderr: {getattr(exc, 'stderr', None)}")
if len(failures):
print(f"Code generation failed, processed {len(done)} packages. "
f"Encountered {len(failures)} failures:\n") # Including defaults and partitions
for failure in failures:
print(failure)
if len(failures):
return -1
print(f"Code generation done, (re)generated {len(done)} packages.") # Including defaults and partitions
return 0