我打算在我们的大学高性能计算集群上运行一个使用SBT的广泛测试套件(它使用Lustre文件系统)。
由于我拥有非常基本的用户权限,因此我只能通过提取tarball手动安装并安装。
即使使用-Dsbt.boot.lock=false
,我也会获得以下堆栈跟踪:
java.io.IOException: Function not implemented
at sun.nio.ch.FileDispatcherImpl.lock0(Native Method)
at sun.nio.ch.FileDispatcherImpl.lock(FileDispatcherImpl.java:89)
at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1024)
at java.nio.channels.FileChannel.tryLock(FileChannel.java:1154)
at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:86)
at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:78)
at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:97)
at xsbt.boot.Using$.withResource(Using.scala:10)
at xsbt.boot.Using$.apply(Using.scala:9)
at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:58)
at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:48)
at xsbt.boot.Locks$.apply0(Locks.scala:31)
at xsbt.boot.Locks$.apply(Locks.scala:28)
at xsbt.boot.Launch.locked(Launch.scala:238)
at xsbt.boot.Launch.app(Launch.scala:147)
at xsbt.boot.Launch.app(Launch.scala:145)
at xsbt.boot.Launch$.run(Launch.scala:102)
at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35)
at xsbt.boot.Launch$.launch(Launch.scala:117)
at xsbt.boot.Launch$.apply(Launch.scala:18)
at xsbt.boot.Boot$.runImpl(Boot.scala:41)
at xsbt.boot.Boot$.main(Boot.scala:17)
at xsbt.boot.Boot.main(Boot.scala)
Error during sbt execution: java.io.IOException: Function not implemented
问题是并行分布式文件系统(如Lustre和NFS)没有实现lock0
,但SBT似乎依赖它。
无法在高性能群集上运行我的测试套件是一个巨大的缺点,因为在我的Intel i5,7200 rpm HDD笔记本电脑上运行测试套件需要至少6个小时(这是我唯一的选择)。我无法访问分布式文件系统以外的任何文件系统,因此将引导目录放在别处不是一种选择。
我原本打算在GitHub上将此问题作为问题提交,但社群指南表明在StackOverflow上发布问题是解决此类问题的更好选择。
我最终在笔记本电脑上运行测试,但我对此并不满意。除非这个问题得到解决,否则我将无法继续使用SBT进行基于演员的测试研究。
答案 0 :(得分:0)
您需要使用-o flock
挂载客户端才能启用分布式锁定。