Skip to content

Commit 81cd5dc

Browse files
authoredMay 10, 2024··
Fix QueryRejectCondition parameter in QueryWorkflowWithOptions (#1461)
Actually pass through QueryRejectCondition on QueryWorkflowWithOptions
1 parent ded70a3 commit 81cd5dc

File tree

3 files changed

+116
-4
lines changed

3 files changed

+116
-4
lines changed
 

‎internal/internal_workflow_client.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -897,10 +897,11 @@ func (wc *WorkflowClient) QueryWorkflowWithOptions(ctx context.Context, request
897897
}
898898

899899
result, err := wc.interceptor.QueryWorkflow(ctx, &ClientQueryWorkflowInput{
900-
WorkflowID: request.WorkflowID,
901-
RunID: request.RunID,
902-
QueryType: request.QueryType,
903-
Args: request.Args,
900+
WorkflowID: request.WorkflowID,
901+
RunID: request.RunID,
902+
QueryType: request.QueryType,
903+
Args: request.Args,
904+
QueryRejectCondition: request.QueryRejectCondition,
904905
})
905906
if err != nil {
906907
if err, ok := err.(*queryRejectedError); ok {

‎test/integration_test.go

+90
Original file line numberDiff line numberDiff line change
@@ -1871,6 +1871,96 @@ func (ts *IntegrationTestSuite) TestCancelChildAndExecuteActivityRace() {
18711871
ts.NoError(err)
18721872
}
18731873

1874+
func (ts *IntegrationTestSuite) TestQueryWorkflowRejectNotOpen() {
1875+
ctx, cancel := context.WithCancel(context.Background())
1876+
defer cancel()
1877+
1878+
// Start workflow
1879+
run, err := ts.client.ExecuteWorkflow(ctx, ts.startWorkflowOptions("test-workflow-query-reject-not-open"),
1880+
ts.workflows.QueryTestWorkflow)
1881+
ts.NoError(err)
1882+
1883+
// Query when the workflow is running
1884+
queryVal, err := ts.client.QueryWorkflowWithOptions(ctx, &client.QueryWorkflowWithOptionsRequest{
1885+
WorkflowID: run.GetID(),
1886+
RunID: run.GetRunID(),
1887+
QueryType: "query",
1888+
QueryRejectCondition: enumspb.QUERY_REJECT_CONDITION_NONE,
1889+
})
1890+
ts.NoError(err)
1891+
var queryRes string
1892+
ts.NoError(queryVal.QueryResult.Get(&queryRes))
1893+
ts.Equal("running", queryRes)
1894+
1895+
ts.NoError(ts.client.SignalWorkflow(ctx, run.GetID(), run.GetRunID(), "signal", false))
1896+
ts.NoError(run.Get(ctx, nil))
1897+
1898+
// Query when the workflow is completed
1899+
queryVal, err = ts.client.QueryWorkflowWithOptions(ctx, &client.QueryWorkflowWithOptionsRequest{
1900+
WorkflowID: run.GetID(),
1901+
RunID: run.GetRunID(),
1902+
QueryType: "query",
1903+
QueryRejectCondition: enumspb.QUERY_REJECT_CONDITION_NOT_COMPLETED_CLEANLY,
1904+
})
1905+
ts.NoError(err)
1906+
queryRes = ""
1907+
ts.NoError(queryVal.QueryResult.Get(&queryRes))
1908+
ts.Equal("completed", queryRes)
1909+
1910+
queryVal, err = ts.client.QueryWorkflowWithOptions(ctx, &client.QueryWorkflowWithOptionsRequest{
1911+
WorkflowID: run.GetID(),
1912+
RunID: run.GetRunID(),
1913+
QueryType: "query",
1914+
QueryRejectCondition: enumspb.QUERY_REJECT_CONDITION_NOT_OPEN,
1915+
})
1916+
ts.NoError(err)
1917+
ts.Equal(enumspb.WORKFLOW_EXECUTION_STATUS_COMPLETED, queryVal.QueryRejected.Status)
1918+
}
1919+
1920+
func (ts *IntegrationTestSuite) TestQueryWorkflowRejectNotCompleteCleanly() {
1921+
ctx, cancel := context.WithCancel(context.Background())
1922+
defer cancel()
1923+
1924+
// Start workflow
1925+
run, err := ts.client.ExecuteWorkflow(ctx, ts.startWorkflowOptions("test-workflow-query-not-complete-cleanly"),
1926+
ts.workflows.QueryTestWorkflow)
1927+
ts.NoError(err)
1928+
1929+
// Query when the workflow is running
1930+
queryVal, err := ts.client.QueryWorkflowWithOptions(ctx, &client.QueryWorkflowWithOptionsRequest{
1931+
WorkflowID: run.GetID(),
1932+
RunID: run.GetRunID(),
1933+
QueryType: "query",
1934+
QueryRejectCondition: enumspb.QUERY_REJECT_CONDITION_NONE,
1935+
})
1936+
ts.NoError(err)
1937+
var queryRes string
1938+
ts.NoError(queryVal.QueryResult.Get(&queryRes))
1939+
ts.Equal("running", queryRes)
1940+
1941+
ts.NoError(ts.client.SignalWorkflow(ctx, run.GetID(), run.GetRunID(), "signal", true))
1942+
ts.Error(run.Get(ctx, nil))
1943+
1944+
// Query when the workflow is failed
1945+
queryVal, err = ts.client.QueryWorkflowWithOptions(ctx, &client.QueryWorkflowWithOptionsRequest{
1946+
WorkflowID: run.GetID(),
1947+
RunID: run.GetRunID(),
1948+
QueryType: "query",
1949+
QueryRejectCondition: enumspb.QUERY_REJECT_CONDITION_NOT_OPEN,
1950+
})
1951+
ts.NoError(err)
1952+
ts.Equal(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED, queryVal.QueryRejected.Status)
1953+
1954+
queryVal, err = ts.client.QueryWorkflowWithOptions(ctx, &client.QueryWorkflowWithOptionsRequest{
1955+
WorkflowID: run.GetID(),
1956+
RunID: run.GetRunID(),
1957+
QueryType: "query",
1958+
QueryRejectCondition: enumspb.QUERY_REJECT_CONDITION_NOT_COMPLETED_CLEANLY,
1959+
})
1960+
ts.NoError(err)
1961+
ts.Equal(enumspb.WORKFLOW_EXECUTION_STATUS_FAILED, queryVal.QueryRejected.Status)
1962+
}
1963+
18741964
func (ts *IntegrationTestSuite) TestInterceptorCalls() {
18751965
ctx, cancel := context.WithCancel(context.Background())
18761966
defer cancel()

‎test/workflow_test.go

+21
Original file line numberDiff line numberDiff line change
@@ -2450,6 +2450,26 @@ func (w *Workflows) SignalCounter(ctx workflow.Context) error {
24502450
}
24512451
}
24522452

2453+
func (w *Workflows) QueryTestWorkflow(ctx workflow.Context) error {
2454+
status := "running"
2455+
defer func() {
2456+
status = "completed"
2457+
}()
2458+
err := workflow.SetQueryHandler(ctx, "query", func() (string, error) {
2459+
return status, nil
2460+
})
2461+
if err != nil {
2462+
return err
2463+
}
2464+
signalCh := workflow.GetSignalChannel(ctx, "signal")
2465+
var fail bool
2466+
signalCh.Receive(ctx, &fail)
2467+
if fail {
2468+
return errors.New("test failure")
2469+
}
2470+
return nil
2471+
}
2472+
24532473
func (w *Workflows) PanicOnSignal(ctx workflow.Context) error {
24542474
// Wait for signal then panic
24552475
workflow.GetSignalChannel(ctx, "panic-signal").Receive(ctx, nil)
@@ -3039,6 +3059,7 @@ func (w *Workflows) register(worker worker.Worker) {
30393059
worker.RegisterWorkflow(w.UpdateCancelableWorkflow)
30403060
worker.RegisterWorkflow(w.UpdateHandlerRegisteredLate)
30413061
worker.RegisterWorkflow(w.LocalActivityNextRetryDelay)
3062+
worker.RegisterWorkflow(w.QueryTestWorkflow)
30423063

30433064
worker.RegisterWorkflow(w.child)
30443065
worker.RegisterWorkflow(w.childWithRetryPolicy)

0 commit comments

Comments
 (0)
Please sign in to comment.