From fd9a66d1934a444d8b5fc0efd0a59c091e1fa0a7 Mon Sep 17 00:00:00 2001 From: matst80 Date: Sun, 10 Nov 2024 12:50:29 +0100 Subject: [PATCH] limit queue --- packet-queue.go | 2 +- packet-queue_test.go | 32 ++++++++++++++++++++++++++++++++ synced-pool.go | 4 ++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 packet-queue_test.go diff --git a/packet-queue.go b/packet-queue.go index 0cb90e6..faa365b 100644 --- a/packet-queue.go +++ b/packet-queue.go @@ -47,7 +47,7 @@ func NewPacketQueue(connection net.Conn) *PacketQueue { l := make([]PacketWithData, 0, len(queue.Packets)) for _, packet := range queue.Packets { - if !packet.Consumed { + if !packet.Consumed && packet.Added.After(ts.Add(-time.Second)) { l = append(l, packet) } } diff --git a/packet-queue_test.go b/packet-queue_test.go new file mode 100644 index 0000000..ac5d624 --- /dev/null +++ b/packet-queue_test.go @@ -0,0 +1,32 @@ +package main + +import ( + "testing" + "time" +) + +func TestQueue(t *testing.T) { + localPool := NewGrainLocalPool(100, time.Minute, func(id CartId) (*CartGrain, error) { + return &CartGrain{ + Id: id, + storageMessages: []Message{}, + Items: []CartItem{}, + TotalPrice: 0, + }, nil + }) + pool, err := NewSyncedPool(localPool, "localhost", nil) + if err != nil { + t.Errorf("Error creating pool: %v", err) + } + + err = pool.AddRemote("localhost") + if err != nil { + t.Errorf("Error adding remote: %v", err) + } + r := pool.remotes[0] + + if len(r.PacketQueue.Packets) != 1 { + t.Errorf("Expected 1 packet, got %d", len(r.PacketQueue.Packets)) + } + +} diff --git a/synced-pool.go b/synced-pool.go index 900369e..60d99d8 100644 --- a/synced-pool.go +++ b/synced-pool.go @@ -422,6 +422,10 @@ func (p *SyncedPool) addRemoteHost(address string, remote *RemoteHost) error { ids := remote.GetCartMappings() p.mu.Lock() for _, id := range ids { + if p.local.grains[id] != nil { + log.Printf("Grain %s already exists locally, deleting\n", id) + delete(p.local.grains, id) + } p.remoteIndex[id] = remote.Pool } p.mu.Unlock()