DG
sealed abstract class Try[+T] extends Product with Serializable {
или я что-то путаю, но вроде не инвариантен
Size: a a a
DG
sealed abstract class Try[+T] extends Product with Serializable {
Oℕ
DG
PM
sealed abstract class Try[+T] extends Product with Serializable {
DG
Oℕ
DG
Oℕ
Futureсуть в том, что я отправляют пирам запрос. могу получить либо Success со своим респонсом (но так как я использую старые акторы, респонс не типизирован) поэтому
.sequence(peers
.map(peer => (peer ? _ValueForKey(key))(peerConnectionTimeout))
.map(_.transform(Success(_))))
.map { responses =>
responses
.collect { case Success(x: PersistedDataStoreValue) => x }
.groupBy(_.creationTimestamp)
.maxBy(_._1)
._2
}
.flatMap { latestKeyValueOccurences =>
val occurences = latestKeyValueOccurences.length
val responseVal = latestKeyValueOccurences.head.value
val x = if (occurences < r) None else Some(responseVal)
Future(GetResponse(key, x))
}
}
.pipeTo(sender)
Try[Any]
DG
[info] java.lang.AssertionError: assertion failed: expected GetResponse(MockKey(key,5),None), found Future(Success(GetResponse(MockKey(key,5),None)))
DG
DG
PM
[info] java.lang.AssertionError: assertion failed: expected GetResponse(MockKey(key,5),None), found Future(Success(GetResponse(MockKey(key,5),None)))
Future[Try[Any]](...) shouldBe GetResponse(MockKey(key,5),None)
, так?DG
Future[Try[Any]](...) shouldBe GetResponse(MockKey(key,5),None)
, так?PM
DG
PM
val myfut: Future[Try[Any]] = ...
myfut.map(r => r shouldBe Success(GetResponse...
DG
val myfut: Future[Try[Any]] = ...
myfut.map(r => r shouldBe Success(GetResponse...
Oℕ
Futureно мне не нравится, что хранится весь список values, для результата это не нужно, если он большой, можно переписать на reductLeft
.traverse(peers)(_ ? _ValueForKey(key) collect { case x: PersistedDataStoreValue => x })
.map { values =>
val latest = values.groupBy(_.creationTimestamp).maxBy(_._1)._2
val res = latest.headOption.filter(_ => latest.length < r)
GetResponse(key, res)
}
DG
client.send(peer, Get(key))
successor.expectMsg(FindSuccessor(key.id))
successor.reply(SuccessorFound(peerEntry))
client.expectMsg(GetResponse(key, None))
DG
Futureно мне не нравится, что хранится весь список values, для результата это не нужно, если он большой, можно переписать на reductLeft
.traverse(peers)(_ ? _ValueForKey(key) collect { case x: PersistedDataStoreValue => x })
.map { values =>
val latest = values.groupBy(_.creationTimestamp).maxBy(_._1)._2
val res = latest.headOption.filter(_ => latest.length < r)
GetResponse(key, res)
}
[info] java.lang.AssertionError: assertion failed: expected GetResponse(MockKey(key,5),None), found Failure(akka.pattern.AskTimeoutException: Ask timed out on [Actor[akka://DHTSuite/user/$d#-1795963380]] after [1000 ms]. Message of type [peer.application.StorageActor$_Get] was sent by [Actor[akka://DHTSuite/user/$d#-1795963380]]. A typical reason for `AskTimeoutException` is that the recipient actor didn't send a reply.)