Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/pr-workflow.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ jobs:
- name: Create cluster
run: hack/create-kind-cluster.sh
- name: Install Agent Substrate
run: hack/install-ate-kind.sh --deploy-ate-system --ateapi-client-auth=${{ matrix.ateapi-client-auth }} --store-backend=postgres
run: hack/install-ate-kind.sh --deploy-ate-system --ateapi-client-auth=${{ matrix.ateapi-client-auth }}
- name: Deploy micro-VM counter demo
# Stages the (cached) assets into the cluster's rustfs and applies the
# counter-microvm demo onto the control plane installed above.
Expand Down
21 changes: 0 additions & 21 deletions LICENSES/github.com/alicebob/miniredis/v2/LICENSE

This file was deleted.

26 changes: 0 additions & 26 deletions LICENSES/github.com/alicebob/miniredis/v2/fpconv/LICENSE.txt

This file was deleted.

22 changes: 0 additions & 22 deletions LICENSES/github.com/alicebob/miniredis/v2/geohash/LICENSE

This file was deleted.

24 changes: 0 additions & 24 deletions LICENSES/github.com/alicebob/miniredis/v2/gopher-json/LICENSE

This file was deleted.

21 changes: 0 additions & 21 deletions LICENSES/github.com/alicebob/miniredis/v2/hyperloglog/LICENSE

This file was deleted.

24 changes: 0 additions & 24 deletions LICENSES/github.com/alicebob/miniredis/v2/metro/LICENSE

This file was deleted.

21 changes: 0 additions & 21 deletions LICENSES/github.com/dgryski/go-rendezvous/LICENSE

This file was deleted.

25 changes: 0 additions & 25 deletions LICENSES/github.com/redis/go-redis/v9/LICENSE

This file was deleted.

21 changes: 0 additions & 21 deletions LICENSES/github.com/yuin/gopher-lua/LICENSE

This file was deleted.

19 changes: 0 additions & 19 deletions LICENSES/go.uber.org/atomic/LICENSE.txt

This file was deleted.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ To quickly set up the complete environment:
# create cluster and local registry
hack/create-kind-cluster.sh

# install ate, valkey, rustfs
# install ate, PostgreSQL, rustfs
hack/install-ate-kind.sh --deploy-ate-system

# install counter demo
Expand Down Expand Up @@ -128,7 +128,7 @@ curl -X POST -H "Host: my-counter-1.demo.actors.resources.substrate.ate.dev" -i
gcloud auth application-default login --project=${PROJECT_ID}
```

3. Provision the required GCP resources (GKE cluster, Redis, GCS, and IAM bindings):
3. Provision the required GCP resources (GKE cluster, GCS, and IAM bindings):
```bash
go run ./tools/setup-gcp bootstrap
```
Expand Down
2 changes: 1 addition & 1 deletion benchmarking/locust/common/ateapi_pb2_grpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ def ListActors(self, request, context):
raise NotImplementedError('Method not implemented!')

def CreateAtespace(self, request, context):
"""Create a new Atespace. Substrate-native, stored in Redis.
"""Create a new Atespace. Substrate-native, stored in PostgreSQL.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
Expand Down
5 changes: 1 addition & 4 deletions cmd/ateapi/internal/actoridentity/actoridentity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,10 +261,7 @@ func seedActor(t *testing.T, ctx context.Context, st store.Interface, f actorFix
WorkerPodUid: "worker-uid",
}
}
created, err := st.CreateActor(ctx, actor)
if err != nil {
t.Fatalf("seed actor: %v", err)
}
created := storetest.MustCreateActor(t, ctx, st, actor)

if f.noWorker {
return
Expand Down
19 changes: 6 additions & 13 deletions cmd/ateapi/internal/controlapi/actor_snapshot_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -353,20 +353,17 @@ func TestCreateActorSnapshotTag_RejectsUnsetScope(t *testing.T) {
}

// serviceWithActorSnapshotTag seeds an ActorSnapshot and a tag pointing at it
// in a miniredis-backed store, and returns a Service over it.
// in a PostgreSQL-backed store, and returns a Service over it.
func serviceWithActorSnapshotTag(t *testing.T, tag *ateapipb.ActorSnapshotTag) (*Service, *ateapipb.ActorSnapshotTag) {
t.Helper()
persistence, cleanup := storetest.SetupTestStore(t)
t.Cleanup(cleanup)

atespace, name := tag.GetMetadata().GetAtespace(), tag.GetMetadata().GetName()
snapshot, err := persistence.CreateActorSnapshot(context.Background(), &ateapipb.ActorSnapshot{
snapshot := storetest.MustCreateActorSnapshot(t, context.Background(), persistence, &ateapipb.ActorSnapshot{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same problem as mentioned for CreateActor. If you create a tag for a snapshot that doesn't exist and you get ErrNotFound from the pre-check. But if the snapshot is deleted after the pre-check and before the insert, the FK violation comes back as ErrFailedPrecondition instead.

Generally we need to not rely on pre-checks to guard an operation if it can race with other operations.

Metadata: &ateapipb.ResourceMetadata{Atespace: atespace, Name: "snapshot-" + name},
SnapshotUri: "gs://my-bucket/snapshots/" + atespace + "/snapshot-" + name,
})
if err != nil {
t.Fatalf("Failed to CreateActorSnapshot: %v", err)
}
tag.Snapshot = &ateapipb.ObjectRef{Atespace: snapshot.GetMetadata().GetAtespace(), Name: snapshot.GetMetadata().GetName()}
created, err := persistence.CreateActorSnapshotTag(context.Background(), atespace, snapshot.GetMetadata().GetName(), tag)
if err != nil {
Expand All @@ -383,12 +380,10 @@ func TestUpdateActorSnapshotTag_DeleteRecreateRace(t *testing.T) {
t.Cleanup(cleanup)

for _, name := range []string{"snapshot-1", "snapshot-2"} {
if _, err := persistence.CreateActorSnapshot(ctx, &ateapipb.ActorSnapshot{
storetest.MustCreateActorSnapshot(t, ctx, persistence, &ateapipb.ActorSnapshot{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I decided to also do a quick scan for unindexed queries.

Postgres automatically indexes the referenced side of a foreign key but not the referencing side, and there's no index on actor_snapshot_tags (snapshot_atespace, snapshot_name) so the queries against are full scans.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch for this, thanks! I missed the usage of this index in the FK trigger when deleting snapshots

Metadata: &ateapipb.ResourceMetadata{Atespace: testAtespace, Name: name},
SnapshotUri: "gs://bucket/root/snapshots/" + testAtespace + "/" + name,
}); err != nil {
t.Fatalf("Failed to CreateActorSnapshot(%s): %v", name, err)
}
})
}

const tagName = "before-upgrade"
Expand Down Expand Up @@ -461,12 +456,10 @@ func TestUpdateActorSnapshotTag_ConcurrentUnguardedUpdate(t *testing.T) {
persistence, cleanup := storetest.SetupTestStore(t)
t.Cleanup(cleanup)

if _, err := persistence.CreateActorSnapshot(ctx, &ateapipb.ActorSnapshot{
storetest.MustCreateActorSnapshot(t, ctx, persistence, &ateapipb.ActorSnapshot{
Metadata: &ateapipb.ResourceMetadata{Atespace: testAtespace, Name: "snapshot-1"},
SnapshotUri: "gs://bucket/root/snapshots/" + testAtespace + "/snapshot-1",
}); err != nil {
t.Fatalf("Failed to CreateActorSnapshot: %v", err)
}
})

const tagName = "before-upgrade"
originalTag, err := persistence.CreateActorSnapshotTag(ctx, testAtespace, "snapshot-1", &ateapipb.ActorSnapshotTag{
Expand Down
Loading
Loading