Exemplo n.º 1
0
def test_lwwset():
    A = LWWSet()
    
    fake_time = 1

    def mock_time():
        return fake_time
    old_time = sets.time
    sets.time = mock_time

    A.add("eric")

    B = A.clone()
    C = A.clone()

    # Test that concurrent updates favor add
    fake_time = 2
    B.add("eric")
    C.remove("eric")

    D = LWWSet.merge(B, C)

    assert D.value == set(["eric"])

    sets.time = old_time
Exemplo n.º 2
0
class Friendship(StateCRDT):
    def __init__(self):
        # The user key is considered constant among replicas
        # so no CRDT is needed
        self.user_key = None
        self.following = LWWSet()
        self.followers = LWWSet()

    def get_payload(self):
        assert self.user_key, "Can not generate a payload without a user_key"
        return {
            "user_key": self.user_key,
            "following": self.following.payload,
            "followers": self.followers.payload,
        }

    def set_payload(self, payload):
        self.following = LWWSet.from_payload(payload['following'])
        self.followers = LWWSet.from_payload(payload['followers'])

        self.user_key = payload['user_key']

    payload = property(get_payload, set_payload)

    @property
    def value(self):
        return {
            "user_key": self.user_key,
            "following": self.following.value,
            "followers": self.followers.value,
        }

    @classmethod
    def merge(cls, X, Y):
        assert X.user_key == Y.user_key, "User keys do not match"
        assert X.user_key is not None, "user_key must be set"

        following = LWWSet.merge(X.following, Y.following)
        followers = LWWSet.merge(X.following, Y.following)

        new = cls()
        new.user_key = X.user_key
        new.following = following
        new.followers = followers

        return new

    #
    # Friendship API
    #
    def follow(self, friend):
        self.following.add(friend.user_key)
        friend.followers.add(self.user_key)

    def unfollow(self, friend):
        self.following.discard(friend.user_key)
        friend.followers.discard(self.user_key)
Exemplo n.º 3
0
class Friendship(StateCRDT):
    def __init__(self):
        # The user key is considered constant among replicas
        # so no CRDT is needed
        self.user_key  = None
        self.following = LWWSet()
        self.followers = LWWSet()

    def get_payload(self):
        assert self.user_key, "Can not generate a payload without a user_key"
        return {
            "user_key": self.user_key,
            "following": self.following.payload,
            "followers": self.followers.payload,
        }

    def set_payload(self, payload):
       self.following = LWWSet.from_payload(payload['following'])
       self.followers = LWWSet.from_payload(payload['followers'])

       self.user_key  = payload['user_key']

    payload = property(get_payload, set_payload)

    @property
    def value(self):
        return {
            "user_key": self.user_key,
            "following": self.following.value,
            "followers": self.followers.value,
            }
    
    @classmethod
    def merge(cls, X, Y):
        assert X.user_key == Y.user_key, "User keys do not match"
        assert X.user_key is not None, "user_key must be set"

        following = LWWSet.merge(X.following, Y.following)
        followers = LWWSet.merge(X.following, Y.following)

        new = cls()
        new.user_key = X.user_key
        new.following = following
        new.followers = followers
        
        return new

    #
    # Friendship API
    # 
    def follow(self, friend):
        self.following.add(friend.user_key)
        friend.followers.add(self.user_key)

    def unfollow(self, friend):
        self.following.discard(friend.user_key)
        friend.followers.discard(self.user_key)
Exemplo n.º 4
0
    def merge(cls, X, Y):
        assert X.user_key == Y.user_key, "User keys do not match"
        assert X.user_key is not None, "user_key must be set"

        following = LWWSet.merge(X.following, Y.following)
        followers = LWWSet.merge(X.following, Y.following)

        new = cls()
        new.user_key = X.user_key
        new.following = following
        new.followers = followers

        return new
Exemplo n.º 5
0
    def merge(cls, X, Y):
        assert X.user_key == Y.user_key, "User keys do not match"
        assert X.user_key is not None, "user_key must be set"

        following = LWWSet.merge(X.following, Y.following)
        followers = LWWSet.merge(X.following, Y.following)

        new = cls()
        new.user_key = X.user_key
        new.following = following
        new.followers = followers
        
        return new
Exemplo n.º 6
0
def test_lwwset():
    A = LWWSet()

    fake_time = 1

    def mock_time():
        return fake_time

    old_time = sets.time
    sets.time = mock_time

    A.add("eric")

    B = A.clone()
    C = A.clone()

    # Test that concurrent updates favor add
    fake_time = 2
    B.add("eric")
    C.remove("eric")

    D = LWWSet.merge(B, C)

    assert D.value == set(["eric"])

    sets.time = old_time
Exemplo n.º 7
0
    def set_payload(self, payload):
        self.following = LWWSet.from_payload(payload['following'])
        self.followers = LWWSet.from_payload(payload['followers'])

        self.user_key = payload['user_key']
Exemplo n.º 8
0
 def __init__(self):
     # The user key is considered constant among replicas
     # so no CRDT is needed
     self.user_key = None
     self.following = LWWSet()
     self.followers = LWWSet()
Exemplo n.º 9
0
 def __init__(self):
     # The user key is considered constant among replicas
     # so no CRDT is needed
     self.user_key  = None
     self.following = LWWSet()
     self.followers = LWWSet()
Exemplo n.º 10
0
    def set_payload(self, payload):
       self.following = LWWSet.from_payload(payload['following'])
       self.followers = LWWSet.from_payload(payload['followers'])

       self.user_key  = payload['user_key']