From 5f9a7e112739ab7845606491e5c011f597c1330c Mon Sep 17 00:00:00 2001 From: Brainiac 5 Date: Fri, 31 Oct 2025 18:11:49 +0100 Subject: [PATCH 1/3] feat: KVS Delete --- kvs.go | 12 ++++++++++++ kvs_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/kvs.go b/kvs.go index eb2bf95..ca52491 100644 --- a/kvs.go +++ b/kvs.go @@ -23,6 +23,8 @@ type KeyValueStore interface { Put(ctx context.Context, key, value []byte) error // Save saves key-value pair to the underlying storage and returns the reference. Save(ctx context.Context) ([]byte, error) + // Delete takes a key-value pair out of the trie + Delete(ctx context.Context, key []byte) error } type SwarmKvs struct { @@ -88,3 +90,13 @@ func (ps *SwarmKvs) Save(ctx context.Context) ([]byte, error) { } return ref, nil } + +// Delete takes a key-value pair out of the trie +func (ps *SwarmKvs) Delete(ctx context.Context, key []byte) error { + err := ps.idx.Delete(ctx, key) + if err != nil { + return fmt.Errorf("failed to delete key-value pair from pot %w", err) + } + return nil +} + diff --git a/kvs_test.go b/kvs_test.go index 25eedf3..ce006e1 100644 --- a/kvs_test.go +++ b/kvs_test.go @@ -85,4 +85,28 @@ func TestPotKvs_Save(t *testing.T) { assert.NoError(t, err) assert.Equal(t, val2, val) }) + t.Run("Save KVS and delete one item, test that it is deleted, after-save value exist", func(t *testing.T) { + ls := createLs() + kvs1, _ := pot.NewSwarmKvs(ls) + + err := kvs1.Put(ctx, key1, val1) + assert.NoError(t, err) + val, err := kvs1.Get(ctx, key1) + assert.NoError(t, err) + assert.Equal(t, val1, val) + ref, err := kvs1.Save(ctx) + assert.NoError(t, err) + err = kvs1.Delete(ctx, key1) + assert.NoError(t, err) + val, err = kvs1.Get(ctx, key1) + assert.Error(t, err, "not found") + + // New KVS + kvs2, err := pot.NewSwarmKvsReference(ctx, ls, ref) + assert.NoError(t, err) + + val, err = kvs2.Get(ctx, key1) + assert.NoError(t, err) + assert.Equal(t, val1, val) + }) } From 6f6526dadb46036692ef48d7a43da379062d5594 Mon Sep 17 00:00:00 2001 From: Brainiac 5 Date: Sat, 20 Dec 2025 20:55:02 +0100 Subject: [PATCH 2/3] failing test for issue #15 --- kvs_test.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/kvs_test.go b/kvs_test.go index ce006e1..a537f71 100644 --- a/kvs_test.go +++ b/kvs_test.go @@ -109,4 +109,29 @@ func TestPotKvs_Save(t *testing.T) { assert.NoError(t, err) assert.Equal(t, val1, val) }) + t.Run("Save KVS with two items, after-load values exist", func(t *testing.T) { + ls := createLs() + kvs1, _ := pot.NewSwarmKvs(ls) + + err := kvs1.Put(ctx, key1, val1) + assert.NoError(t, err) + + err = kvs1.Put(ctx, key2, val2) + assert.NoError(t, err) + + ref, err := kvs1.Save(ctx) + assert.NoError(t, err) + + // New KVS + kvs2, err := pot.NewSwarmKvsReference(ctx, ls, ref) + assert.NoError(t, err) + + val, err := kvs2.Get(ctx, key1) + assert.NoError(t, err) + assert.Equal(t, val1, val) + + val, err = kvs2.Get(ctx, key2) + assert.NoError(t, err) + assert.Equal(t, val2, val) + }) } From a39473f129580ccb1db627856d6c4f9de004c0c4 Mon Sep 17 00:00:00 2001 From: Brainiac 5 Date: Sat, 20 Dec 2025 20:56:10 +0100 Subject: [PATCH 3/3] fix: fork unmarshaling (#15) --- pkg/elements/persist.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/elements/persist.go b/pkg/elements/persist.go index 791faab..17efee2 100644 --- a/pkg/elements/persist.go +++ b/pkg/elements/persist.go @@ -106,7 +106,7 @@ func (n *SwarmNode) UnmarshalBinary(buf []byte) error { c := 0 poMap := make([]int8, 0, 32) for i := 0; i < 256; i++ { - if bitMap[i/8]&(1<<(i%8)) != 0 { + if bitMap[i/8]&(1<<(7-i%8)) != 0 { poMap = append(poMap, int8(i)) c++ }