Here a list of some things I’ve noticed:
* The already mentioned Server -> ServerCLI -> Server cycle I mentioned in
the other tread
* The “conf” package contains both configuration model classes, but some
“checks” (passive) which actually more are “tasks” (active)
* The “Check” classes in the config package are only used by the CLI
operations (They should be moved in some sort of “tasks” package relative to
the CLI implementation
* In the config node the RPC stuff is located in a “thrift” package which
doesn’t sensibly give any information on what it does (We should rename that to
something “rpc” or “rpcserver”
* The same RPC classes are located alongside the DataNode class (We should
move them into the same package sub-name as we do for the config node)
* In the DataNode all of the sub-services RestService, RPCService,
MQTTService, … are all located parallel to the main DataNode class which uses
them
* I would propose to define and use a “Service” interface and have this
implemented by all sub-services.
* I would propose to move stuff such as the MQTT Service, RestService, …
into separate maven modules.
* This would allow us to provide differing implementations such as an
MQTT subsystem, that provides its own MQTT server (like we currently do) or a
version that simply acts as a Client to an existing MQTT infrastructure
* In the DataNode module it feels like the “protocols” package doesn’t
really contain any protocol, but client stubs of different type (which
themselves partially use different protocols in the end)
* I would propose to move some of these out into separate modules, just
like the “Services” that use them.
* The DataNode protocols package contains clients for ConfigNodes (cn) and
DataNodes (dn) which feels slightly odd (I assume this is because a client
always connects to a DataNode in order to execute operations … even operations
on other DataNodes and ConfigNodes). Possibly a separate CLI module would be
more appropriate?