Skip to content
Snippets Groups Projects
Commit 8535fbfc authored by Trile Ro's avatar Trile Ro
Browse files

[+][FCB] Duplicates should be gone, but check the head, do not simply rely on...

[+][FCB] Duplicates should be gone, but check the head, do not simply rely on timestamp (regression)
parent 51bee9ba
No related branches found
No related tags found
No related merge requests found
......@@ -51,17 +51,24 @@ class SharingFolderUpdateCommandHandlerImpl(
): IO[Option[FederationMemberChangelogItem]] = {
getSharedFolderChangeLogItem(memberInformation)
.flatMap {
case Some(timestamp) if !isNewerMessage(timestamp, message) => logOutOfOrderCase(message, timestamp)
case Some(changelogItem) if !isMessageNewerAndDifferent(changelogItem, message) =>
logNotNewerNorDifferent(message, changelogItem.timestamp)
case _ => IO.pure(Some(FederationMemberChangelogItem(message.ipfsCid, message.timestamp)))
}
}
private def getSharedFolderChangeLogItem(information: FederationMemberInformation): IO[Option[Instant]] = {
changelogService.getNewest(information.id).map(_.map(_.timestamp))
private def getSharedFolderChangeLogItem(
information: FederationMemberInformation
): IO[Option[FederationMemberChangelogItem]] = {
changelogService.getNewest(information.id)
}
private def isNewerMessage(timestamp: Instant, message: FederationMemberSharingFolderUpdateMessage): Boolean = {
message.timestamp.isAfter(timestamp)
private def isMessageNewerAndDifferent(
changelogItem: FederationMemberChangelogItem,
message: FederationMemberSharingFolderUpdateMessage
): Boolean = {
message.timestamp.isAfter(changelogItem.timestamp) &&
!message.ipfsCid.equals(changelogItem.ipfsCid)
}
private def logResult(cmd: SharingFolderUpdateCommand): IO[Unit] = {
......@@ -69,12 +76,13 @@ class SharingFolderUpdateCommandHandlerImpl(
logger.info(s"Federation member changelog added. nickname=$nickname ipfsCid=${cmd.message.ipfsCid}")
}
private def logOutOfOrderCase(
private def logNotNewerNorDifferent(
message: FederationMemberSharingFolderUpdateMessage,
timestamp: Instant
): IO[Option[FederationMemberChangelogItem]] = {
logger.info(
s"Out of order message. Command request not processed. ipfsCid=${message.ipfsCid}, " +
s"Received message is not newer nor different, request dropped. " +
s"ipfsCid=${message.ipfsCid}, " +
s"latestTimestamp=$timestamp vs incomingTimestamp=${message.timestamp}"
) >>
IO.pure(None)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment