dapr / dapr/js-sdk

[Actor] reentrancy setting not works

Open
#365 7 comments 0 reactions 1 assignee Assigned to @DeepanshuA View on GitHub
bug triaged/resolved
Dominant language
JavaScript
Stars
217
Forks
104
PR merge metrics
No merged PRs in 30d

Description

## Expected Behavior
`step2` should be logged as `reentrancy` is enabled.

## Actual Behavior
`step2` is not logged because of the same actorId locking.

## Steps to Reproduce the Problem
This is my code. If I understand it correctly, `step2` should be logged as `reentrancy` is enabled.
Correct me if I'm wrong. Thanks.

```ts
import { AbstractActor, DaprServer, ActorProxyBuilder, CommunicationProtocolEnum, DaprClient, ActorId } from '@dapr/dapr';

const daprHost = process.env.DAPR_HOST || '0.0.0.0';
const daprPort = process.env.DAPR_HTTP_PORT || '3500';
const serverHost = '0.0.0.0';
const serverPort = '3000';

const server = new DaprServer(serverHost, serverPort, daprHost, daprPort, CommunicationProtocolEnum.HTTP, {
actor: {
reentrancy: {
enabled: true,
},
},
});

const client = new DaprClient(daprHost, daprPort, CommunicationProtocolEnum.HTTP);

class ExampleActor extends AbstractActor {
public async step1() {
console.log('step1');
const actorId = this.getActorId();
const builder = new ActorProxyBuilder(ExampleActor, this.getDaprClient());
const actor = builder.build(actorId);
await actor.step2();
}

public async step2() {
console.log('step2');
}

public async onActivate(): Promise {
console.log('on activated');
}

public async onDeactivate(): Promise {
console.log('deactivated');
}
}

(async () => {
await server.actor.registerActor(ExampleActor);
await server.actor.init();
await server.start();
await new Promise((resolve) => setTimeout(resolve, 5 * 1000));
const resRegisteredActors = await server.actor.getRegisteredActors();
console.log(
`Registered Actor Types: ${JSON.stringify(resRegisteredActors)}`,
);
const builder = new ActorProxyBuilder(ExampleActor, client);
const actor = builder.build(ActorId.createRandomId());
await actor.step1();
})();
```
components
```yaml
---
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
namespace: default
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: "localhost:6379"
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
---
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: lock
namespace: default
spec:
type: lock.redis
version: v1
metadata:
- name: redisHost
value: "localhost:6379"
- name: redisPassword
value: ""
---
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.