When atime is disabled, setTimes() throws an exception if the passed-in atime is not -1. But since atime is not -1, distCp fails when it tries to set the mtime and atime.
There are several options:
1) make distCp check for 0 atime and call setTimes() with -1. I am not very enthusiastic about it.
2) make NN also accept 0 atime in addition to -1, when the atime support is disabled.
3) support setting mtime & atime regardless of the atime support. The main reason why atime is disabled is to avoid edit logging/syncing during getBlockLocations() read calls. Explicit setting can be allowed.