0

从文档中,finagle 给出了这个例子:

import com.twitter.finagle.mysql.{Client, Transactions}
import com.twitter.util.{Future, Throw}

case class ReallyBadException() extends Exception

val client: Client with Transactions = ???

client.session { session =>
  val result = for {
    _ <- session.query("LOCK")
    r <- session.transaction { tx =>
      tx.query("...")
    }
    _ <- session.query("UNLOCK")
  } yield r

  result.rescue {
    case e: ReallyBadException =>
      session.discard().flatMap(_ =>
        Future.exception(e)
      )
  }
}

好的,所以当我为锁添加正确的 sql 时: SELECT GET_LOCK('foo',2) 这应该持有锁。对于这个测试,我有意删除了任何解锁——我希望它在第二次尝试获得锁时失败。

但是……对该代码的两次后续调用都有效——没有锁定失败,即使我引入延迟 >2 秒,旨在导致第二次锁定尝试超时。

为什么锁定行为似乎没有做任何事情?

4

0 回答 0