I didn't see anything in buildNode that requires it to be sync except for the assert on nodes, I think if we can keep it not to require sync we can speed things up, as it would be better to keep it also async (build).

I missed that publish is not sync, I think that we should simply make this `publishNode` sync? btw, it does't have to be sync'ed if we make dataDirToClean a ConcurrentSet