mirror of
https://github.com/rocky-linux/peridot.git
synced 2024-12-26 04:00:55 +00:00
411 lines
15 KiB
Go
411 lines
15 KiB
Go
// The MIT License
|
|
//
|
|
// Copyright (c) 2021 Temporal Technologies Inc. All rights reserved.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
package internal
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"go.temporal.io/sdk/converter"
|
|
"go.temporal.io/sdk/internal/common/metrics"
|
|
"go.temporal.io/sdk/log"
|
|
)
|
|
|
|
// InterceptorBase is a default implementation of Interceptor meant for
|
|
// embedding. See documentation in the interceptor package for more details.
|
|
type InterceptorBase struct {
|
|
ClientInterceptorBase
|
|
WorkerInterceptorBase
|
|
}
|
|
|
|
// WorkerInterceptorBase is a default implementation of WorkerInterceptor meant
|
|
// for embedding. See documentation in the interceptor package for more details.
|
|
type WorkerInterceptorBase struct{}
|
|
|
|
var _ WorkerInterceptor = &WorkerInterceptorBase{}
|
|
|
|
// InterceptActivity implements WorkerInterceptor.InterceptActivity.
|
|
func (*WorkerInterceptorBase) InterceptActivity(
|
|
ctx context.Context,
|
|
next ActivityInboundInterceptor,
|
|
) ActivityInboundInterceptor {
|
|
return &ActivityInboundInterceptorBase{Next: next}
|
|
}
|
|
|
|
// InterceptWorkflow implements WorkerInterceptor.InterceptWorkflow.
|
|
func (*WorkerInterceptorBase) InterceptWorkflow(
|
|
ctx Context,
|
|
next WorkflowInboundInterceptor,
|
|
) WorkflowInboundInterceptor {
|
|
return &WorkflowInboundInterceptorBase{Next: next}
|
|
}
|
|
|
|
func (*WorkerInterceptorBase) mustEmbedWorkerInterceptorBase() {}
|
|
|
|
// ActivityInboundInterceptorBase is a default implementation of
|
|
// ActivityInboundInterceptor meant for embedding. See documentation in the
|
|
// interceptor package for more details.
|
|
type ActivityInboundInterceptorBase struct {
|
|
Next ActivityInboundInterceptor
|
|
}
|
|
|
|
var _ ActivityInboundInterceptor = &ActivityInboundInterceptorBase{}
|
|
|
|
// Init implements ActivityInboundInterceptor.Init.
|
|
func (a *ActivityInboundInterceptorBase) Init(outbound ActivityOutboundInterceptor) error {
|
|
return a.Next.Init(outbound)
|
|
}
|
|
|
|
// ExecuteActivity implements ActivityInboundInterceptor.ExecuteActivity.
|
|
func (a *ActivityInboundInterceptorBase) ExecuteActivity(
|
|
ctx context.Context,
|
|
in *ExecuteActivityInput,
|
|
) (interface{}, error) {
|
|
return a.Next.ExecuteActivity(ctx, in)
|
|
}
|
|
|
|
func (*ActivityInboundInterceptorBase) mustEmbedActivityInboundInterceptorBase() {}
|
|
|
|
// ActivityOutboundInterceptorBase is a default implementation of
|
|
// ActivityOutboundInterceptor meant for embedding. See documentation in the
|
|
// interceptor package for more details.
|
|
type ActivityOutboundInterceptorBase struct {
|
|
Next ActivityOutboundInterceptor
|
|
}
|
|
|
|
var _ ActivityOutboundInterceptor = &ActivityOutboundInterceptorBase{}
|
|
|
|
// GetInfo implements ActivityOutboundInterceptor.GetInfo.
|
|
func (a *ActivityOutboundInterceptorBase) GetInfo(ctx context.Context) ActivityInfo {
|
|
return a.Next.GetInfo(ctx)
|
|
}
|
|
|
|
// GetLogger implements ActivityOutboundInterceptor.GetLogger.
|
|
func (a *ActivityOutboundInterceptorBase) GetLogger(ctx context.Context) log.Logger {
|
|
return a.Next.GetLogger(ctx)
|
|
}
|
|
|
|
// GetMetricsHandler implements ActivityOutboundInterceptor.GetMetricsHandler.
|
|
func (a *ActivityOutboundInterceptorBase) GetMetricsHandler(ctx context.Context) metrics.Handler {
|
|
return a.Next.GetMetricsHandler(ctx)
|
|
}
|
|
|
|
// RecordHeartbeat implements ActivityOutboundInterceptor.RecordHeartbeat.
|
|
func (a *ActivityOutboundInterceptorBase) RecordHeartbeat(ctx context.Context, details ...interface{}) {
|
|
a.Next.RecordHeartbeat(ctx, details...)
|
|
}
|
|
|
|
// HasHeartbeatDetails implements
|
|
// ActivityOutboundInterceptor.HasHeartbeatDetails.
|
|
func (a *ActivityOutboundInterceptorBase) HasHeartbeatDetails(ctx context.Context) bool {
|
|
return a.Next.HasHeartbeatDetails(ctx)
|
|
}
|
|
|
|
// GetHeartbeatDetails implements
|
|
// ActivityOutboundInterceptor.GetHeartbeatDetails.
|
|
func (a *ActivityOutboundInterceptorBase) GetHeartbeatDetails(ctx context.Context, d ...interface{}) error {
|
|
return a.Next.GetHeartbeatDetails(ctx, d...)
|
|
}
|
|
|
|
// GetWorkerStopChannel implements
|
|
// ActivityOutboundInterceptor.GetWorkerStopChannel.
|
|
func (a *ActivityOutboundInterceptorBase) GetWorkerStopChannel(ctx context.Context) <-chan struct{} {
|
|
return a.Next.GetWorkerStopChannel(ctx)
|
|
}
|
|
|
|
func (*ActivityOutboundInterceptorBase) mustEmbedActivityOutboundInterceptorBase() {}
|
|
|
|
// WorkflowInboundInterceptorBase is a default implementation of
|
|
// WorkflowInboundInterceptor meant for embedding. See documentation in the
|
|
// interceptor package for more details.
|
|
type WorkflowInboundInterceptorBase struct {
|
|
Next WorkflowInboundInterceptor
|
|
}
|
|
|
|
var _ WorkflowInboundInterceptor = &WorkflowInboundInterceptorBase{}
|
|
|
|
// Init implements WorkflowInboundInterceptor.Init.
|
|
func (w *WorkflowInboundInterceptorBase) Init(outbound WorkflowOutboundInterceptor) error {
|
|
return w.Next.Init(outbound)
|
|
}
|
|
|
|
// ExecuteWorkflow implements WorkflowInboundInterceptor.ExecuteWorkflow.
|
|
func (w *WorkflowInboundInterceptorBase) ExecuteWorkflow(ctx Context, in *ExecuteWorkflowInput) (interface{}, error) {
|
|
return w.Next.ExecuteWorkflow(ctx, in)
|
|
}
|
|
|
|
// HandleSignal implements WorkflowInboundInterceptor.HandleSignal.
|
|
func (w *WorkflowInboundInterceptorBase) HandleSignal(ctx Context, in *HandleSignalInput) error {
|
|
return w.Next.HandleSignal(ctx, in)
|
|
}
|
|
|
|
// HandleQuery implements WorkflowInboundInterceptor.HandleQuery.
|
|
func (w *WorkflowInboundInterceptorBase) HandleQuery(ctx Context, in *HandleQueryInput) (interface{}, error) {
|
|
return w.Next.HandleQuery(ctx, in)
|
|
}
|
|
|
|
func (*WorkflowInboundInterceptorBase) mustEmbedWorkflowInboundInterceptorBase() {}
|
|
|
|
// WorkflowOutboundInterceptorBase is a default implementation of
|
|
// WorkflowOutboundInterceptor meant for embedding. See documentation in the
|
|
// interceptor package for more details.
|
|
type WorkflowOutboundInterceptorBase struct {
|
|
Next WorkflowOutboundInterceptor
|
|
}
|
|
|
|
var _ WorkflowOutboundInterceptor = &WorkflowOutboundInterceptorBase{}
|
|
|
|
// Go implements WorkflowOutboundInterceptor.Go.
|
|
func (w *WorkflowOutboundInterceptorBase) Go(ctx Context, name string, f func(ctx Context)) Context {
|
|
return w.Next.Go(ctx, name, f)
|
|
}
|
|
|
|
// ExecuteActivity implements WorkflowOutboundInterceptor.ExecuteActivity.
|
|
func (w *WorkflowOutboundInterceptorBase) ExecuteActivity(ctx Context, activityType string, args ...interface{}) Future {
|
|
return w.Next.ExecuteActivity(ctx, activityType, args...)
|
|
}
|
|
|
|
// ExecuteLocalActivity implements WorkflowOutboundInterceptor.ExecuteLocalActivity.
|
|
func (w *WorkflowOutboundInterceptorBase) ExecuteLocalActivity(
|
|
ctx Context,
|
|
activityType string,
|
|
args ...interface{},
|
|
) Future {
|
|
return w.Next.ExecuteLocalActivity(ctx, activityType, args...)
|
|
}
|
|
|
|
// ExecuteChildWorkflow implements WorkflowOutboundInterceptor.ExecuteChildWorkflow.
|
|
func (w *WorkflowOutboundInterceptorBase) ExecuteChildWorkflow(
|
|
ctx Context,
|
|
childWorkflowType string,
|
|
args ...interface{},
|
|
) ChildWorkflowFuture {
|
|
return w.Next.ExecuteChildWorkflow(ctx, childWorkflowType, args...)
|
|
}
|
|
|
|
// GetInfo implements WorkflowOutboundInterceptor.GetInfo.
|
|
func (w *WorkflowOutboundInterceptorBase) GetInfo(ctx Context) *WorkflowInfo {
|
|
return w.Next.GetInfo(ctx)
|
|
}
|
|
|
|
// GetLogger implements WorkflowOutboundInterceptor.GetLogger.
|
|
func (w *WorkflowOutboundInterceptorBase) GetLogger(ctx Context) log.Logger {
|
|
return w.Next.GetLogger(ctx)
|
|
}
|
|
|
|
// GetMetricsHandler implements WorkflowOutboundInterceptor.GetMetricsHandler.
|
|
func (w *WorkflowOutboundInterceptorBase) GetMetricsHandler(ctx Context) metrics.Handler {
|
|
return w.Next.GetMetricsHandler(ctx)
|
|
}
|
|
|
|
// Now implements WorkflowOutboundInterceptor.Now.
|
|
func (w *WorkflowOutboundInterceptorBase) Now(ctx Context) time.Time {
|
|
return w.Next.Now(ctx)
|
|
}
|
|
|
|
// NewTimer implements WorkflowOutboundInterceptor.NewTimer.
|
|
func (w *WorkflowOutboundInterceptorBase) NewTimer(ctx Context, d time.Duration) Future {
|
|
return w.Next.NewTimer(ctx, d)
|
|
}
|
|
|
|
// Sleep implements WorkflowOutboundInterceptor.Sleep.
|
|
func (w *WorkflowOutboundInterceptorBase) Sleep(ctx Context, d time.Duration) (err error) {
|
|
return w.Next.Sleep(ctx, d)
|
|
}
|
|
|
|
// RequestCancelExternalWorkflow implements
|
|
// WorkflowOutboundInterceptor.RequestCancelExternalWorkflow.
|
|
func (w *WorkflowOutboundInterceptorBase) RequestCancelExternalWorkflow(
|
|
ctx Context,
|
|
workflowID string,
|
|
runID string,
|
|
) Future {
|
|
return w.Next.RequestCancelExternalWorkflow(ctx, workflowID, runID)
|
|
}
|
|
|
|
// SignalExternalWorkflow implements
|
|
// WorkflowOutboundInterceptor.SignalExternalWorkflow.
|
|
func (w *WorkflowOutboundInterceptorBase) SignalExternalWorkflow(
|
|
ctx Context,
|
|
workflowID string,
|
|
runID string,
|
|
signalName string,
|
|
arg interface{},
|
|
) Future {
|
|
return w.Next.SignalExternalWorkflow(ctx, workflowID, runID, signalName, arg)
|
|
}
|
|
|
|
// SignalChildWorkflow implements
|
|
// WorkflowOutboundInterceptor.SignalChildWorkflow.
|
|
func (w *WorkflowOutboundInterceptorBase) SignalChildWorkflow(
|
|
ctx Context,
|
|
workflowID string,
|
|
signalName string,
|
|
arg interface{},
|
|
) Future {
|
|
return w.Next.SignalChildWorkflow(ctx, workflowID, signalName, arg)
|
|
}
|
|
|
|
// UpsertSearchAttributes implements
|
|
// WorkflowOutboundInterceptor.UpsertSearchAttributes.
|
|
func (w *WorkflowOutboundInterceptorBase) UpsertSearchAttributes(ctx Context, attributes map[string]interface{}) error {
|
|
return w.Next.UpsertSearchAttributes(ctx, attributes)
|
|
}
|
|
|
|
// GetSignalChannel implements WorkflowOutboundInterceptor.GetSignalChannel.
|
|
func (w *WorkflowOutboundInterceptorBase) GetSignalChannel(ctx Context, signalName string) ReceiveChannel {
|
|
return w.Next.GetSignalChannel(ctx, signalName)
|
|
}
|
|
|
|
// SideEffect implements WorkflowOutboundInterceptor.SideEffect.
|
|
func (w *WorkflowOutboundInterceptorBase) SideEffect(
|
|
ctx Context,
|
|
f func(ctx Context) interface{},
|
|
) converter.EncodedValue {
|
|
return w.Next.SideEffect(ctx, f)
|
|
}
|
|
|
|
// MutableSideEffect implements WorkflowOutboundInterceptor.MutableSideEffect.
|
|
func (w *WorkflowOutboundInterceptorBase) MutableSideEffect(
|
|
ctx Context,
|
|
id string,
|
|
f func(ctx Context) interface{},
|
|
equals func(a, b interface{}) bool,
|
|
) converter.EncodedValue {
|
|
return w.Next.MutableSideEffect(ctx, id, f, equals)
|
|
}
|
|
|
|
// GetVersion implements WorkflowOutboundInterceptor.GetVersion.
|
|
func (w *WorkflowOutboundInterceptorBase) GetVersion(
|
|
ctx Context,
|
|
changeID string,
|
|
minSupported Version,
|
|
maxSupported Version,
|
|
) Version {
|
|
return w.Next.GetVersion(ctx, changeID, minSupported, maxSupported)
|
|
}
|
|
|
|
// SetQueryHandler implements WorkflowOutboundInterceptor.SetQueryHandler.
|
|
func (w *WorkflowOutboundInterceptorBase) SetQueryHandler(ctx Context, queryType string, handler interface{}) error {
|
|
return w.Next.SetQueryHandler(ctx, queryType, handler)
|
|
}
|
|
|
|
// IsReplaying implements WorkflowOutboundInterceptor.IsReplaying.
|
|
func (w *WorkflowOutboundInterceptorBase) IsReplaying(ctx Context) bool {
|
|
return w.Next.IsReplaying(ctx)
|
|
}
|
|
|
|
// HasLastCompletionResult implements
|
|
// WorkflowOutboundInterceptor.HasLastCompletionResult.
|
|
func (w *WorkflowOutboundInterceptorBase) HasLastCompletionResult(ctx Context) bool {
|
|
return w.Next.HasLastCompletionResult(ctx)
|
|
}
|
|
|
|
// GetLastCompletionResult implements
|
|
// WorkflowOutboundInterceptor.GetLastCompletionResult.
|
|
func (w *WorkflowOutboundInterceptorBase) GetLastCompletionResult(ctx Context, d ...interface{}) error {
|
|
return w.Next.GetLastCompletionResult(ctx, d...)
|
|
}
|
|
|
|
// GetLastError implements WorkflowOutboundInterceptor.GetLastError.
|
|
func (w *WorkflowOutboundInterceptorBase) GetLastError(ctx Context) error {
|
|
return w.Next.GetLastError(ctx)
|
|
}
|
|
|
|
// NewContinueAsNewError implements
|
|
// WorkflowOutboundInterceptor.NewContinueAsNewError.
|
|
func (w *WorkflowOutboundInterceptorBase) NewContinueAsNewError(
|
|
ctx Context,
|
|
wfn interface{},
|
|
args ...interface{},
|
|
) error {
|
|
return w.Next.NewContinueAsNewError(ctx, wfn, args...)
|
|
}
|
|
|
|
func (*WorkflowOutboundInterceptorBase) mustEmbedWorkflowOutboundInterceptorBase() {}
|
|
|
|
// ClientInterceptorBase is a default implementation of ClientInterceptor meant
|
|
// for embedding. See documentation in the interceptor package for more details.
|
|
type ClientInterceptorBase struct{}
|
|
|
|
var _ ClientInterceptor = &ClientInterceptorBase{}
|
|
|
|
// InterceptClient implements ClientInterceptor.InterceptClient.
|
|
func (*ClientInterceptorBase) InterceptClient(
|
|
next ClientOutboundInterceptor,
|
|
) ClientOutboundInterceptor {
|
|
return &ClientOutboundInterceptorBase{Next: next}
|
|
}
|
|
|
|
func (*ClientInterceptorBase) mustEmbedClientInterceptorBase() {}
|
|
|
|
// ClientOutboundInterceptorBase is a default implementation of
|
|
// ClientOutboundInterceptor meant for embedding. See documentation in the
|
|
// interceptor package for more details.
|
|
type ClientOutboundInterceptorBase struct {
|
|
Next ClientOutboundInterceptor
|
|
}
|
|
|
|
var _ ClientOutboundInterceptor = &ClientOutboundInterceptorBase{}
|
|
|
|
// ExecuteWorkflow implements ClientOutboundInterceptor.ExecuteWorkflow.
|
|
func (c *ClientOutboundInterceptorBase) ExecuteWorkflow(
|
|
ctx context.Context,
|
|
in *ClientExecuteWorkflowInput,
|
|
) (WorkflowRun, error) {
|
|
return c.Next.ExecuteWorkflow(ctx, in)
|
|
}
|
|
|
|
// SignalWorkflow implements ClientOutboundInterceptor.SignalWorkflow.
|
|
func (c *ClientOutboundInterceptorBase) SignalWorkflow(ctx context.Context, in *ClientSignalWorkflowInput) error {
|
|
return c.Next.SignalWorkflow(ctx, in)
|
|
}
|
|
|
|
// SignalWithStartWorkflow implements
|
|
// ClientOutboundInterceptor.SignalWithStartWorkflow.
|
|
func (c *ClientOutboundInterceptorBase) SignalWithStartWorkflow(
|
|
ctx context.Context,
|
|
in *ClientSignalWithStartWorkflowInput,
|
|
) (WorkflowRun, error) {
|
|
return c.Next.SignalWithStartWorkflow(ctx, in)
|
|
}
|
|
|
|
// CancelWorkflow implements ClientOutboundInterceptor.CancelWorkflow.
|
|
func (c *ClientOutboundInterceptorBase) CancelWorkflow(ctx context.Context, in *ClientCancelWorkflowInput) error {
|
|
return c.Next.CancelWorkflow(ctx, in)
|
|
}
|
|
|
|
// TerminateWorkflow implements ClientOutboundInterceptor.TerminateWorkflow.
|
|
func (c *ClientOutboundInterceptorBase) TerminateWorkflow(ctx context.Context, in *ClientTerminateWorkflowInput) error {
|
|
return c.Next.TerminateWorkflow(ctx, in)
|
|
}
|
|
|
|
// QueryWorkflow implements ClientOutboundInterceptor.QueryWorkflow.
|
|
func (c *ClientOutboundInterceptorBase) QueryWorkflow(
|
|
ctx context.Context,
|
|
in *ClientQueryWorkflowInput,
|
|
) (converter.EncodedValue, error) {
|
|
return c.Next.QueryWorkflow(ctx, in)
|
|
}
|
|
|
|
func (*ClientOutboundInterceptorBase) mustEmbedClientOutboundInterceptorBase() {}
|