0

I'm using a cluster with multiple machines that all share a filesystem. This is managed using SLURM, and in order to get compute time, I request a node for a period of time and I get one of 100 or more possible machines, with a name like 'c222-103'. When I switch machines, SBT insists on recompiling every single one of my Scala and Java files rather than only the ones that have changed.

This doesn't happen if the last compilation was on the same machine as the next one, e.g. if I compile multiple times in a single session or if I request a new compute session and happen to get the same node as last time, so somewhere SBT is clearly noting which machine I'm on and deciding to recompile everything if it changes, even though all the paths are the same due to the shared filesystem.

How do I debug and/or fix this problem?

Urban Vagabond
  • 7,282
  • 3
  • 28
  • 31
  • Is the locations of the `.sbt` and `.ivy2` directories also in the shared filesystem? Otherwise, the timestamp of the .jars in your dependencies will not be the same on the different machines, and basically your classpath effectively change completely from one machine to another, forcing a full recompilation. – sjrd Jun 25 '14 at 11:16
  • Yes, those directories are shared. The only thing that isn't shared is /tmp. – Urban Vagabond Jun 26 '14 at 22:15
  • Which file system is that? Some high-performances parallel filesystems have the option of not updating the meta data (e.g. modification time) on the file servers. – damienfrancois Aug 07 '14 at 20:14
  • Apparently it's based on Lustre 2.4.1. – Urban Vagabond Aug 15 '14 at 02:35

0 Answers0