batchdelete to datastore
This commit is contained in:
@@ -449,6 +449,27 @@ func (d *dataStore) Delete(ctx context.Context, key DataKey) error {
|
||||
return d.kv.Delete(ctx, dataSection, key.String())
|
||||
}
|
||||
|
||||
func (n *dataStore) BatchDelete(ctx context.Context, keys []DataKey) error {
|
||||
for len(keys) > 0 {
|
||||
batch := keys
|
||||
if len(batch) > dataBatchSize {
|
||||
batch = batch[:dataBatchSize]
|
||||
}
|
||||
|
||||
keys = keys[len(batch):]
|
||||
stringKeys := make([]string, len(batch))
|
||||
for _, dataKey := range batch {
|
||||
stringKeys = append(stringKeys, dataKey.String())
|
||||
}
|
||||
|
||||
if err := n.kv.BatchDelete(ctx, dataSection, stringKeys); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ParseKey parses a string key into a DataKey struct
|
||||
func ParseKey(key string) (DataKey, error) {
|
||||
parts := strings.Split(key, "/")
|
||||
|
||||
@@ -2950,6 +2950,42 @@ func TestDataStore_getGroupResources(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDataStore_BatchDelete(t *testing.T) {
|
||||
ds := setupTestDataStore(t)
|
||||
ctx := context.Background()
|
||||
|
||||
keys := make([]DataKey, 95)
|
||||
for i := 0; i < 95; i++ {
|
||||
rv := node.Generate().Int64()
|
||||
keys[i] = DataKey{
|
||||
Namespace: "test-namespace",
|
||||
Group: "test-group",
|
||||
Resource: "test-resource",
|
||||
Name: fmt.Sprintf("test-name-%d", i),
|
||||
ResourceVersion: rv,
|
||||
Action: DataActionCreated,
|
||||
Folder: "test-folder",
|
||||
}
|
||||
content := fmt.Sprintf("test-value-%d", i)
|
||||
err := ds.Save(ctx, keys[i], bytes.NewReader([]byte(content)))
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
err := ds.BatchDelete(ctx, keys)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Verify all events were deleted
|
||||
for i := 0; i < 95; i++ {
|
||||
_, err := ds.Get(ctx, DataKey{
|
||||
Namespace: "test-namespace",
|
||||
Group: "test-group",
|
||||
Resource: "test-resource",
|
||||
Name: fmt.Sprintf("test-name-%d", i),
|
||||
})
|
||||
require.Error(t, err, "Resource should have been deleted")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDataStore_BatchGet(t *testing.T) {
|
||||
ds := setupTestDataStore(t)
|
||||
ctx := context.Background()
|
||||
|
||||
Reference in New Issue
Block a user