Skip to content

Commit

Permalink
Change actorID to be non-optional (#151)
Browse files Browse the repository at this point in the history
  • Loading branch information
humdrum authored Feb 23, 2024
1 parent 4fc579b commit 2dee076
Show file tree
Hide file tree
Showing 10 changed files with 37 additions and 74 deletions.
4 changes: 2 additions & 2 deletions Sources/API/Converter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ extension Converter {
var pbTimeTicket = PbTimeTicket()
pbTimeTicket.lamport = ticket.lamport
pbTimeTicket.delimiter = ticket.delimiter
pbTimeTicket.actorID = ticket.actorID?.toData ?? Data()
pbTimeTicket.actorID = ticket.actorID.toData ?? Data()
return pbTimeTicket
}

Expand All @@ -213,7 +213,7 @@ extension Converter {
static func fromTimeTicket(_ pbTimeTicket: PbTimeTicket) -> TimeTicket {
TimeTicket(lamport: pbTimeTicket.lamport,
delimiter: pbTimeTicket.delimiter,
actorID: pbTimeTicket.actorID.isEmpty ? nil : pbTimeTicket.actorID.toHexString)
actorID: pbTimeTicket.actorID.toHexString)
}
}

Expand Down
4 changes: 2 additions & 2 deletions Sources/Document/CRDT/CRDTText.swift
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ final class CRDTText: CRDTGCElement {
var createdAtMapByActor = [String: TimeTicket]()
var toBeStyleds = [RGATreeSplitNode<TextValue>]()
for node in nodes {
guard let actorID = node.createdAt.actorID else { continue }
let actorID = node.createdAt.actorID

let latestCreatedAt: TimeTicket

Expand Down Expand Up @@ -272,7 +272,7 @@ final class CRDTText: CRDTGCElement {

let (fromIdx, toIdx) = try self.rgaTreeSplit.findIndexesFromRange(node.createPosRange)
changes.append(TextChange(type: .style,
actor: editedAt.actorID!,
actor: editedAt.actorID,
from: fromIdx,
to: toIdx,
content: nil,
Expand Down
28 changes: 5 additions & 23 deletions Sources/Document/CRDT/CRDTTree.swift
Original file line number Diff line number Diff line change
Expand Up @@ -576,10 +576,6 @@ class CRDTTree: CRDTGCElement {
let (toParent, toLeft) = try self.findNodesAndSplitText(range.1, editedAt)
var changes: [TreeChange] = []

guard let actorID = editedAt.actorID else {
throw YorkieError.unexpected(message: "No actor ID.")
}

var value: TreeChangeValue?

if let attributes {
Expand All @@ -596,7 +592,7 @@ class CRDTTree: CRDTGCElement {
node.attrs?.set(key: key, value: value, executedAt: editedAt)
}

try changes.append(TreeChange(actor: actorID,
try changes.append(TreeChange(actor: editedAt.actorID,
type: .style,
from: self.toIndex(fromParent, fromLeft),
to: self.toIndex(toParent, toLeft),
Expand Down Expand Up @@ -644,9 +640,7 @@ class CRDTTree: CRDTGCElement {
toBeMovedToFromParents.append(contentsOf: node.children)
}

guard let actorID = node.createdAt.actorID else {
throw YorkieError.unexpected(message: "Can't get actorID")
}
let actorID = node.createdAt.actorID

let latestCreatedAt = latestCreatedAtMapByActor.isEmpty == false ? latestCreatedAtMapByActor[actorID] ?? TimeTicket.initial : TimeTicket.max

Expand Down Expand Up @@ -697,11 +691,7 @@ class CRDTTree: CRDTGCElement {
splitCount += 1
}

guard let actorID = editedAt.actorID else {
throw YorkieError.unexpected(message: "Can't get actorID")
}

changes.append(TreeChange(actor: actorID,
changes.append(TreeChange(actor: editedAt.actorID,
type: .content,
from: fromIdx,
to: fromIdx,
Expand Down Expand Up @@ -755,11 +745,7 @@ class CRDTTree: CRDTGCElement {
changes.removeLast()
changes.append(last)
} else {
guard let actorID = editedAt.actorID else {
throw YorkieError.unexpected(message: "Can't find actorID")
}

changes.append(TreeChange(actor: actorID,
changes.append(TreeChange(actor: editedAt.actorID,
type: .content,
from: fromIdx,
to: fromIdx,
Expand Down Expand Up @@ -1110,11 +1096,7 @@ class CRDTTree: CRDTGCElement {
changes.removeLast()
changes.append(last)
} else {
guard let actorID = editedAt.actorID else {
throw YorkieError.unexpected(message: "Can't get actorID")
}

try changes.append(TreeChange(actor: actorID,
try changes.append(TreeChange(actor: editedAt.actorID,
type: .content,
from: fromIdx,
to: toIdx,
Expand Down
18 changes: 9 additions & 9 deletions Sources/Document/CRDT/RGATreeSplit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ class RGATreeSplit<T: RGATreeSplitValue> {
if !changes.isEmpty, changes[changes.count - 1].from == idx {
changes[changes.count - 1].content = value
} else {
changes.append(ContentChange<T>(actor: editedAt.actorID!, from: idx, to: idx, content: value))
changes.append(ContentChange<T>(actor: editedAt.actorID, from: idx, to: idx, content: value))
}

caretPos = RGATreeSplitPos(inserted.id, Int32(inserted.contentLength))
Expand Down Expand Up @@ -712,13 +712,13 @@ class RGATreeSplit<T: RGATreeSplitValue> {

for node in nodesToDelete {
// Then make nodes be tombstones and map that.
if let actorID = node.createdAt.actorID {
if createdAtMapByActor[actorID] == nil ||
node.id.createdAt.after(createdAtMapByActor[actorID]!)
{
createdAtMapByActor[actorID] = node.id.createdAt
}
let actorID = node.createdAt.actorID
if createdAtMapByActor[actorID] == nil ||
node.id.createdAt.after(createdAtMapByActor[actorID]!)
{
createdAtMapByActor[actorID] = node.id.createdAt
}

removedNodeMap[node.id.toIDString] = node
node.remove(editedAt)
}
Expand All @@ -743,7 +743,7 @@ class RGATreeSplit<T: RGATreeSplitValue> {
let latestCreatedAt: TimeTicket

if isRemote {
if let actorID = node.createdAt.actorID, let latest = latestCreatedAtMapByActor?[actorID] {
if let latest = latestCreatedAtMapByActor?[node.createdAt.actorID] {
latestCreatedAt = latest
} else {
latestCreatedAt = TimeTicket.initial
Expand Down Expand Up @@ -807,7 +807,7 @@ class RGATreeSplit<T: RGATreeSplitValue> {
}

if fromIdx < toIdx {
changes.append(ContentChange<T>(actor: editedAt.actorID!, from: fromIdx, to: toIdx, content: nil))
changes.append(ContentChange<T>(actor: editedAt.actorID, from: fromIdx, to: toIdx, content: nil))
}
}

Expand Down
12 changes: 3 additions & 9 deletions Sources/Document/Change/ChangeID.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ struct ChangeID {

private let clientSeq: UInt32
private var lamport: Int64
private var actor: ActorID?
private var actor: ActorID

init(clientSeq: UInt32, lamport: Int64, actor: ActorID? = nil) {
init(clientSeq: UInt32, lamport: Int64, actor: ActorID) {
self.clientSeq = clientSeq
self.lamport = lamport
self.actor = actor
Expand Down Expand Up @@ -105,12 +105,6 @@ struct ChangeID {
* `toTestString` returns a string containing the meta data of this ID.
*/
var toTestString: String {
var actor: String
if let value = self.actor {
actor = String(value.suffix(2))
} else {
actor = "nil"
}
return "\(self.lamport):\(actor):\(self.clientSeq)"
"\(self.lamport):\(String(self.actor.suffix(2))):\(self.clientSeq)"
}
}
2 changes: 1 addition & 1 deletion Sources/Document/Json/JSONTree.swift
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,7 @@ public class JSONTree {
struct TimeTicketStruct: Codable {
let lamport: String
let delimiter: UInt32
let actorID: ActorID?
let actorID: ActorID
}

/**
Expand Down
23 changes: 8 additions & 15 deletions Sources/Document/Time/TimeTicket.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ public struct TimeTicket: Comparable {
/**
* `actorID` returns actorID.
*/
private(set) var actorID: ActorID?
private(set) var actorID: ActorID

init(lamport: Int64, delimiter: UInt32, actorID: ActorID?) {
init(lamport: Int64, delimiter: UInt32, actorID: ActorID) {
self.lamport = lamport
self.delimiter = delimiter
self.actorID = actorID
Expand All @@ -55,28 +55,21 @@ public struct TimeTicket: Comparable {
* `toIDString` returns the lamport string for this Ticket.
*/
var toIDString: String {
guard let actorID = self.actorID else {
return "\(self.lamport):nil:\(self.delimiter)"
}
return "\(self.lamport):\(actorID):\(self.delimiter)"
"\(self.lamport):\(self.actorID):\(self.delimiter)"
}

/**
* `toTestString` returns a string containing the meta data of the ticket
* for debugging purpose.
*/
var toTestString: String {
guard let actorID = self.actorID else {
return "\(self.lamport):nil:\(self.delimiter)"
}

// If aactorID is digit display last two charactors.
let formatedActorID: String

if actorID.count >= 2, CharacterSet(charactersIn: actorID).isSubset(of: CharacterSet(charactersIn: "0123456789abcdef")) {
formatedActorID = actorID.substring(from: actorID.count - 2, to: actorID.count - 1)
if self.actorID.count >= 2, CharacterSet(charactersIn: self.actorID).isSubset(of: CharacterSet(charactersIn: "0123456789abcdef")) {
formatedActorID = self.actorID.substring(from: self.actorID.count - 2, to: self.actorID.count - 1)
} else {
formatedActorID = actorID
formatedActorID = self.actorID
}

return "\(self.lamport):\(formatedActorID):\(self.delimiter)"
Expand Down Expand Up @@ -108,8 +101,8 @@ public struct TimeTicket: Comparable {
return lhs.lamport < rhs.lamport
}

if let lhsActorID = lhs.actorID, let rhsActorID = rhs.actorID, lhsActorID.localizedCompare(rhsActorID) != .orderedSame {
return lhsActorID.localizedCompare(rhsActorID) == .orderedAscending
if lhs.actorID.localizedCompare(rhs.actorID) != .orderedSame {
return lhs.actorID.localizedCompare(rhs.actorID) == .orderedAscending
}

return lhs.delimiter < rhs.delimiter
Expand Down
6 changes: 3 additions & 3 deletions Tests/Unit/Document/Change/ChangeContextTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class ChangeContextTests: XCTestCase {

let root = CRDTRoot(rootObject: rootObject)

let changeID = ChangeID(clientSeq: 1, lamport: 2)
let changeID = ChangeID(clientSeq: 1, lamport: 2, actor: actorId)
let target = ChangeContext(id: changeID, root: root, message: "test message.")

let object3 = CRDTObject(createdAt: TimeTicket(lamport: 6, delimiter: 0, actorID: actorId))
Expand Down Expand Up @@ -66,10 +66,10 @@ class ChangeContextTests: XCTestCase {

let root = CRDTRoot(rootObject: rootObject)

let changeID = ChangeID(clientSeq: 1, lamport: 2)
let changeID = ChangeID(clientSeq: 1, lamport: 2, actor: "actorID")
let target = ChangeContext(id: changeID, root: root, message: "test message.")

let result = target.issueTimeTicket
XCTAssertEqual(result.toTestString, "2:nil:1")
XCTAssertEqual(result.toTestString, "2:actorID:1")
}
}
10 changes: 2 additions & 8 deletions Tests/Unit/Document/Change/ChangeIDTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,6 @@ import XCTest
@testable import Yorkie

class ChangeIDTests: XCTestCase {
func test_no_actor() {
let target = ChangeID(clientSeq: 1, lamport: 2)

XCTAssertEqual(target.toTestString, "2:nil:1")
}

func test_with_actor() {
let actorID = "abcdefghijklmnopqrstuvwxyz"
let target = ChangeID(clientSeq: 1, lamport: 2, actor: actorID)
Expand All @@ -32,13 +26,13 @@ class ChangeIDTests: XCTestCase {
}

func test_change_lmport_to_bigger_than_current_lamport() {
var target = ChangeID(clientSeq: 1, lamport: 2)
var target = ChangeID(clientSeq: 1, lamport: 2, actor: "actorID")
target.syncLamport(with: 10)
XCTAssertEqual(target.getLamport(), 10)
}

func test_change_lmport_to_smaller_than_current_lamport() {
var target = ChangeID(clientSeq: 1, lamport: 10)
var target = ChangeID(clientSeq: 1, lamport: 10, actor: "actorID")
target.syncLamport(with: 5)
XCTAssertEqual(target.getLamport(), 11)
}
Expand Down
4 changes: 2 additions & 2 deletions Tests/Unit/Document/Change/ChangePackTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class ChangePackTests: XCTestCase {
}

func test_can_has_changes() {
let change1 = Change(id: ChangeID(clientSeq: 1, lamport: 10), operations: [])
let change2 = Change(id: ChangeID(clientSeq: 2, lamport: 20), operations: [])
let change1 = Change(id: ChangeID(clientSeq: 1, lamport: 10, actor: "actorID"), operations: [])
let change2 = Change(id: ChangeID(clientSeq: 2, lamport: 20, actor: "actorID"), operations: [])

let target = ChangePack(key: "documentKey-1",
checkpoint: Checkpoint(serverSeq: 1, clientSeq: 10),
Expand Down

0 comments on commit 2dee076

Please sign in to comment.