Hi Nemo devs,

Currently Nemo codebase is splitted into multiple Maven modules.
While it's good for ease of maintenance and modularity, a module cannot
reference classes and/or interfaces in other modules unless it declares
them as dependencies in pom.xml.
Sometimes it makes difficult to expose runtime-level behaviors as
IR-level abstractions, when nemo-compiler-* modules cannot access the
related definitions in nemo-runtime-* modules.

A good example isĀ  [NEMO-73] 'SchedulingPolicy as Vertex-levelExecution
Property'. The issue is to expose SchedulingPolicy to compiler passes so
that users can configure scheduling behavior using Nemo IR.
Unfortunately 'SchedulingPolicy' is defined in 'nemo-runtime-common', so
compilers cannot access it and I think the proper fix is to move it to
the 'nemo-common' module.
Also, to move 'SchedulingPolicy' to 'nemo-common' module, lots of
definitions in 'nemo-runtime-common' should also be moved to 'nemo-common'.
(Because 'SchedulingPolicy' is a function of 'ExecutorRepresenter's and
'ExecutableTask', and the definition of 'ExecutableTask' depends on
'PhysicalStageEdge', 'PhysicalStage', and 'KeyRange', and so on...)

The module 'nemo-runtime-common' has definitions that define 'policies',
as well as definitions that implement 'mechanisms'.
'KeyRange' is an example for the former (defines how to partition the
data in a block), and 'MessageListener' is an example for the latter
(implements RPC).
In my opinion, policy-related definitions should be moved to
nemo-common, so that we can add more ExecutionProperties about
scheduilng, dynamic optimization, state management, and so on.

What do you think about this issue?

Regards,
Jangho

Reply via email to