Giter Site home page Giter Site logo

temporalio / temporalite-archived Goto Github PK

View Code? Open in Web Editor NEW
607.0 19.0 77.0 528 KB

An experimental distribution of Temporal that runs as a single process

License: MIT License

Go 99.44% Dockerfile 0.56%
temporal workflow-engine ci go sqlite workflow-automation golang

temporalite-archived's Introduction

Temporalite

Go Reference ci codecov

⚠️ This project is deprecated and no longer maintained, we recommend using the Temporal CLI dev server instead. ⚠️

Temporalite is a distribution of Temporal that runs as a single process with zero runtime dependencies.

Persistence to disk and an in-memory mode are both supported via SQLite.

Check out this video for a brief introduction and demo: youtu.be/Hz7ZZzafBoE [16:13] -- demo starts at 11:28

Why

The primary goal of Temporalite is to make it simple and fast to run Temporal locally or in testing environments.

Features that align with this goal:

  • Easy setup and teardown
  • Fast startup time
  • Minimal resource overhead: no dependencies on a container runtime or database server
  • Support for Windows, Linux, and macOS
  • Ships with a web interface

Getting Started

Download and Start Temporal Server Locally

Download and extract the latest release from GitHub releases.

Start Temporal server:

temporalite start --namespace default

At this point you should have a server running on localhost:7233 and a web interface at http://localhost:8233.

Use CLI

Use Temporal's command line tool tctl to interact with the local Temporalite server.

tctl namespace list
tctl workflow list

Configuration

Use the help flag to see all available options:

temporalite start -h

Namespace Registration

Namespaces can be pre-registered at startup so they're available to use right away:

temporalite start --namespace foo --namespace bar

Registering namespaces the old-fashioned way via tctl --namespace foo namespace register works too!

Persistence Modes

File on Disk

By default temporalite persists state to a file in the current user's config directory. This path may be overridden:

temporalite start -f my_test.db

Ephemeral

An in-memory mode is also available. Note that all data will be lost on each restart.

temporalite start --ephemeral

Web UI

By default the web UI is started with Temporalite. The UI can be disabled via a runtime flag:

temporalite start --headless

To build without static UI assets, use the headless build tag when running go build.

Dynamic Config

Some advanced uses require Temporal dynamic configuration values which are usually set via a dynamic configuration file inside the Temporal configuration file. Alternatively, dynamic configuration values can be set via --dynamic-config-value KEY=JSON_VALUE.

For example, to disable search attribute cache to make created search attributes available for use right away:

temporalite start --dynamic-config-value system.forceSearchAttributesCacheRefreshOnRead=true

Development

To compile the source run:

go build -o dist/temporalite ./cmd/temporalite 

To run all tests:

go test ./...

Known Issues

  • When consuming Temporalite as a library in go mod, you may want to replace grpc-gateway with a fork to address URL escaping issue in UI. See #118

temporalite-archived's People

Contributors

anth0d avatar bergundy avatar cretz avatar dbpolito avatar dependabot[bot] avatar feedmeapples avatar grantfuhr avatar hferentschik avatar jbreiding avatar jlegrone avatar lminaudier avatar mightyshazam avatar paganotoni avatar plaisted avatar plarsson avatar robholland avatar sevein avatar theverything avatar tomcz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

temporalite-archived's Issues

Time skipping

Is your feature request related to a problem? Please describe.
In the Temporal test server based on Java there is functionality for skipping time. It's very useful for CI purposes.

The test framework provides a TestWorkflowEnvironment class which includes an in-memory implementation of the Temporal service that supports automatic time skipping. 
This allows you to easily test long-running Workflows in seconds, without having to change your Workflow code.

Describe the solution you'd like
Similar way like in Java, but generally in Java test server skipping is enabled by default. So there should be new endpoint for enabling/disabling.

Support dynamic config values via CLI

Is your feature request related to a problem? Please describe.

Right now it's very hard to set dynamic config values

Describe the solution you'd like

  • Allow dynamic config values to be set via the CLI (probably overrides the entire dynamic config the user may have
  • Set, by default, the system.forceSearchAttributesCacheRefreshOnRead dynamic config value as true which disables the search attribute cache

This should probably wait on 1.18 when the dynamicconfig.Client gets greatly simplified down to one method (already the case in master).

Add detach option

Is your feature request related to a problem? Please describe.

In order to not see output, I have to add > /dev/null 2>&1 & like:

temporalite start --namespace default --ephemeral > /dev/null 2>&1 &

Describe the solution you'd like

Something like docker-compose's -d flag:

  -d, --detach                    Detached mode: Run containers in the background

github.com/temporalio/ui-server/v2-v2.5.1: 2 vulnerabilities (highest severity is: 6.1) - autoclosed

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.5.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.5.1.zip

Found in HEAD commit: 76d41244e782587db90e1b8e19ee16a1ee38a7c0

Vulnerabilities

CVE Severity CVSS Dependency Type Fixed in Remediation Available
WS-2021-0461 Medium 6.1 github.com/temporalio/ui-server/v2-v2.5.1 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3
CVE-2018-25031 Medium 4.3 github.com/temporalio/ui-server/v2-v2.5.1 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Details

WS-2021-0461

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.5.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.5.1.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.5.1 (Vulnerable Library)

Found in HEAD commit: 76d41244e782587db90e1b8e19ee16a1ee38a7c0

Found in base branch: main

Vulnerability Details

SwaggerUI supports displaying remote OpenAPI definitions through the ?url parameter. This enables robust demonstration capabilities on sites like petstore.swagger.io, editor.swagger.io, and similar sites, where users often want to see what their OpenAPI definitions would look like rendered.

However, this functionality may pose a risk for users who host their own SwaggerUI instances. In particular, including remote OpenAPI definitions opens a vector for phishing attacks by abusing the trusted names/domains of self-hosted instances.

Resolution:
We've made the decision to disable query parameters (#4872) by default starting with SwaggerUI version 4.1.3. Please update to this version when it becomes available (ETA: 2021 December). Users will still be able to be re-enable the options at their discretion. We'll continue to enable query parameters on the Swagger demo sites.

Publish Date: 2021-12-09

URL: WS-2021-0461

CVSS 3 Score Details (6.1)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Changed
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: Low
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2021-12-09

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

CVE-2018-25031

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.5.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.5.1.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.5.1 (Vulnerable Library)

Found in HEAD commit: 76d41244e782587db90e1b8e19ee16a1ee38a7c0

Found in base branch: main

Vulnerability Details

Swagger UI before 4.1.3 could allow a remote attacker to conduct spoofing attacks. By persuading a victim to open a crafted URL, an attacker could exploit this vulnerability to display remote OpenAPI definitions.

Publish Date: 2022-03-11

URL: CVE-2018-25031

CVSS 3 Score Details (4.3)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: None
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2022-03-11

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Can't terminate workflows from UI

Expected Behavior

Workflow should terminate after clicking on "Terminate" in the UI

Actual Behavior

Cannot terminate workflow pops up
Log of the failure:

{
  "time": "2023-03-07T11:32:39.178439386Z",
  "id": "",
  "remote_ip": "172.20.0.1",
  "host": "temporal:8233",
  "method": "POST",
  "uri": "/api/v1/namespaces/dev/workflows/Plan%2520(planId%253A%25201)/runs/b0523d3e-d771-4bb5-b78d-d4063b23c2e0/terminate?",
  "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
  "status": 400,
  "error": "code=400, message=missing csrf token in request header",
  "latency": 27652,
  "latency_human": "27.652µs",
  "bytes_in": 16,
  "bytes_out": 51
}

Steps to Reproduce the Problem

  1. Start the workflow
  2. Try to terminate it

Specifications

  • Version: 0.3.0
  • Platform: Linux Docker on Windows

github.com/temporalio/ui-server/v2-v2.6.2: 2 vulnerabilities (highest severity is: 6.1) - autoclosed

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.6.2

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.6.2.zip

Found in HEAD commit: 56f2fecade180afece61567863f71550e21ddd13

Vulnerabilities

CVE Severity CVSS Dependency Type Fixed in Remediation Available
WS-2021-0461 Medium 6.1 github.com/temporalio/ui-server/v2-v2.6.2 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3
CVE-2018-25031 Medium 4.3 github.com/temporalio/ui-server/v2-v2.6.2 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Details

WS-2021-0461

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.6.2

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.6.2.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.6.2 (Vulnerable Library)

Found in HEAD commit: 56f2fecade180afece61567863f71550e21ddd13

Found in base branch: main

Vulnerability Details

SwaggerUI supports displaying remote OpenAPI definitions through the ?url parameter. This enables robust demonstration capabilities on sites like petstore.swagger.io, editor.swagger.io, and similar sites, where users often want to see what their OpenAPI definitions would look like rendered.

However, this functionality may pose a risk for users who host their own SwaggerUI instances. In particular, including remote OpenAPI definitions opens a vector for phishing attacks by abusing the trusted names/domains of self-hosted instances.

Resolution:
We've made the decision to disable query parameters (#4872) by default starting with SwaggerUI version 4.1.3. Please update to this version when it becomes available (ETA: 2021 December). Users will still be able to be re-enable the options at their discretion. We'll continue to enable query parameters on the Swagger demo sites.

Publish Date: 2021-12-09

URL: WS-2021-0461

CVSS 3 Score Details (6.1)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Changed
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: Low
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2021-12-09

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

CVE-2018-25031

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.6.2

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.6.2.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.6.2 (Vulnerable Library)

Found in HEAD commit: 56f2fecade180afece61567863f71550e21ddd13

Found in base branch: main

Vulnerability Details

Swagger UI before 4.1.3 could allow a remote attacker to conduct spoofing attacks. By persuading a victim to open a crafted URL, an attacker could exploit this vulnerability to display remote OpenAPI definitions.

Publish Date: 2022-03-11

URL: CVE-2018-25031

CVSS 3 Score Details (4.3)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: None
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2022-03-11

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Misleading error is raised when host address is already binded locally.

Expected Behavior

The error that is being raised is super misleading when the address is already binded to another process. Ideally we should get something like

: Address already in use - bind(2) for "127.0.0.1" port 3001 (Errno::EADDRINUSE)
... backtrace ...

Actual Behavior

Panic error with no context in it.

❯ ./spec/support/go_server/main 3000 s                                                                                                                    [3.1.2]
2022/12/07 22:55:29 Let's do this!
2022/12/07 22:55:29 Starting server on port 3000 for namespace s
panic: Client must be created with client.Dial() or client.NewLazyClient()

goroutine 203 [running]:
go.temporal.io/sdk/internal.NewWorker(...)
        /Users/laertipapa/go/pkg/mod/go.temporal.io/[email protected]/internal/worker.go:233
go.temporal.io/sdk/worker.New({0x0?, 0x0?}, {0x300c11c?, 0x23?}, {0xa, 0x0, 0x0, 0x0, 0x0, 0x8, ...})
        /Users/laertipapa/go/pkg/mod/go.temporal.io/[email protected]/worker/worker.go:223 +0xdd
go.temporal.io/server/service/worker/scanner.(*Scanner).Start(0xc00030d8f0)
        /Users/laertipapa/go/pkg/mod/go.temporal.io/[email protected]/service/worker/scanner/scanner.go:153 +0x7a6
go.temporal.io/server/service/worker.(*Service).startScanner(0xc0002d8180)
        /Users/laertipapa/go/pkg/mod/go.temporal.io/[email protected]/service/worker/service.go:472 +0x22a
go.temporal.io/server/service/worker.(*Service).Start(0x0?)
        /Users/laertipapa/go/pkg/mod/go.temporal.io/[email protected]/service/worker/service.go:374 +0x3dc
go.temporal.io/server/service/worker.ServiceLifetimeHooks.func1.1({0x34d8248?, 0xc0002d8180?}, 0xc000368880?)
        /Users/laertipapa/go/pkg/mod/go.temporal.io/[email protected]/service/worker/fx.go:155 +0x2c
created by go.temporal.io/server/service/worker.ServiceLifetimeHooks.func1
        /Users/laertipapa/go/pkg/mod/go.temporal.io/[email protected]/service/worker/fx.go:153 +0x98

Steps to Reproduce the Problem

  1. Compile the server running here: https://github.com/temporalio/sdk-ruby/tree/main/spec/support/go_server
  2. Start which ever process you like locally in port X
  3. Try to run the go server in port X: ./main 3001 s

Port 7335 (ringpop) is already commonly used by Figma

I don't think this is really a "bug" but a common issue for me nonetheless. When trying to start temporalite it fails for me with the following error message:

{"level":"fatal","ts":"2021-12-31T16:21:07.116+0100","msg":"Failed to start ringpop listener","error":"listen tcp 127.0.0.1:7335: bind: address already in use","address":"127.0.0.1:7335","logging-call-at":"rpc.go:195","stacktrace":"go.temporal.io/server/common/log.(*zapLogger).Fatal\n\t/Users/schickling/Code/go/pkg/mod/go.temporal.io/[email protected]/common/log/zap_logger.go:150\ngo.temporal.io/server/common/rpc.(*RPCFactory).GetRingpopChannel\n\t/Users/schickling/Code/go/pkg/mod/go.temporal.io/[email protected]/common/rpc/rpc.go:195\ngo.temporal.io/server/temporal.newBootstrapParams.func1\n\t/Users/schickling/Code/go/pkg/mod/go.temporal.io/[email protected]/temporal/server_impl.go:212\ngo.temporal.io/server/common/resource.MembershipFactoryProvider\n\t/Users/schickling/Code/go/pkg/mod/go.temporal.io/[email protected]/common/resource/fx.go:231\nreflect.Value.call\n\t/nix/store/wapbf2yn132n0644hzaic6qzrj62qjd3-go-1.17.3/share/go/src/reflect/value.go:543\nreflect.Value.Call\n\t/nix/store/wapbf2yn132n0644hzaic6qzrj62qjd3-go-1.17.3/share/go/src/reflect/value.go:339\ngo.uber.org/dig.defaultInvoker\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:439\ngo.uber.org/dig.(*node).Call\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:912\ngo.uber.org/dig.paramSingle.Build\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:240\ngo.uber.org/dig.paramList.BuildList\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:196\ngo.uber.org/dig.(*node).Call\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:903\ngo.uber.org/dig.paramSingle.Build\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:240\ngo.uber.org/dig.paramList.BuildList\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:196\ngo.uber.org/dig.(*Container).Invoke\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:587\ngo.uber.org/fx.(*App).executeInvoke\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/app.go:873\ngo.uber.org/fx.(*App).executeInvokes\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/app.go:846\ngo.uber.org/fx.New\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/app.go:594\ngo.temporal.io/server/temporal.MatchingServiceProvider\n\t/Users/schickling/Code/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:324\nreflect.Value.call\n\t/nix/store/wapbf2yn132n0644hzaic6qzrj62qjd3-go-1.17.3/share/go/src/reflect/value.go:543\nreflect.Value.Call\n\t/nix/store/wapbf2yn132n0644hzaic6qzrj62qjd3-go-1.17.3/share/go/src/reflect/value.go:339\ngo.uber.org/dig.defaultInvoker\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:439\ngo.uber.org/dig.(*node).Call\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:912\ngo.uber.org/dig.paramGroupedSlice.Build\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:458\ngo.uber.org/dig.paramObjectField.Build\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:396\ngo.uber.org/dig.paramObject.Build\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:323\ngo.uber.org/dig.paramList.BuildList\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:196\ngo.uber.org/dig.(*node).Call\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:903\ngo.uber.org/dig.paramSingle.Build\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:240\ngo.uber.org/dig.paramList.BuildList\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:196\ngo.uber.org/dig.(*node).Call\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:903\ngo.uber.org/dig.paramSingle.Build\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:240\ngo.uber.org/dig.paramList.BuildList\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/param.go:196\ngo.uber.org/dig.(*Container).Invoke\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/dig.go:587\ngo.uber.org/fx.(*App).executeInvoke\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/app.go:873\ngo.uber.org/fx.(*App).executeInvokes\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/app.go:846\ngo.uber.org/fx.New\n\t/Users/schickling/Code/go/pkg/mod/go.uber.org/[email protected]/app.go:594\ngo.temporal.io/server/temporal.NewServerFx\n\t/Users/schickling/Code/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:97\ngo.temporal.io/server/temporal.NewServer\n\t/Users/schickling/Code/go/pkg/mod/go.temporal.io/[email protected]/temporal/server.go:58\ngithub.com/DataDog/temporalite.NewServer\n\t/Users/schickling/Code/go/pkg/mod/github.com/!data!dog/[email protected]/server.go:91\nmain.buildCLI.func2\n\t/Users/schickling/Code/go/pkg/mod/github.com/!data!dog/[email protected]/cmd/temporalite/main.go:149\ngithub.com/urfave/cli/v2.(*Command).Run\n\t/Users/schickling/Code/go/pkg/mod/github.com/urfave/cli/[email protected]/command.go:163\ngithub.com/urfave/cli/v2.(*App).RunContext\n\t/Users/schickling/Code/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:313\ngithub.com/urfave/cli/v2.(*App).Run\n\t/Users/schickling/Code/go/pkg/mod/github.com/urfave/cli/[email protected]/app.go:224\nmain.main\n\t/Users/schickling/Code/go/pkg/mod/github.com/!data!dog/[email protected]/cmd/temporalite/main.go:45\nruntime.main\n\t/nix/store/wapbf2yn132n0644hzaic6qzrj62qjd3-go-1.17.3/share/go/src/runtime/proc.go:255"}
The terminal process "/Users/schickling/.nix-profile/bin/fish '-c', 'temporalite start --filename tmp/temporalite.db --namespace default'" terminated with exit code: 1.

This seems to be due to a port conflict on 7335 between Temporal via ringpop and figma_agent.

My current work around is to run killall figma_agent

Update: After learning more about ringpop it doesn't seem to be needed by temporalite and thus should not expose this port.

SQLite settings/WAL support

Great project! Really makes temporal much more accessible and opens up some cool edge use cases (eg. raspberry pi, etc). While playing around for a low resource use case I noticed performance was lower than expected.

Is your feature request related to a problem? Please describe.
Using the Maru benchmarking tool I was getting ~1 workflows/s (3 activities) with persistence turned on. When using sqlite in memory, this increased to ~20 workflows/s. Sqlite has additional pragma settings that could improve the persisted perf.

Describe the solution you'd like
Add ability to CLI to adjusting sqlite connection attributes.

Tinkering around and hardcoding the following significantly improved performance to ~10 workflows/s including disk persistence:

sqliteConfig.ConnectAttributes["_journal"] = "WAL"
sqliteConfig.ConnectAttributes["_sync"] = "NORMAL"

It would be beneficial to have the ability to adjust the sqlite connection attributes. This could be done using a flag (eq --wal) to enable WAL support, or just allow arbitrary sqlite connect attributes (eg. --sqlite-attrib _journal=WAL --sqlite-attrib _sync=NORMAL) to be set.

Temporalite fails to start when file persistence is configured in nonexistent directory

Expected Behavior

Temporalite could create the directory first, then start writing to the database file.

Actual Behavior

User sees an error message like

2022/04/04 18:57:43 error setting up schema: unable to create SQLite admin DB: unable to open database file: no such file or directory

The error text doesn't include the file path that is being opened, which makes understanding the issue a bit more difficult.

Steps to Reproduce the Problem

  1. temporalite start -f some_dir_that_does_not_exist/foo.db

Specifications

  • Version: main
  • Platform: Any

Expose service to non-local user

Expected Behavior

Allow external users visit the service through ip

Actual Behavior

service can only be visited on localhost.
If the service is packaged into a docker container, then other containers cannot visit.

Steps to Reproduce the Problem

Specifications

  • Version: 0.1.0
  • Platform: Linux, Amd64

Temporalite v0.2.0 fails to install

Expected Behavior

Temporalite installs successfully using go install

Actual Behavior

Installation fails with the following error:

go: github.com/temporalio/temporalite/cmd/[email protected] (in github.com/temporalio/[email protected]):
	The go.mod file for the module providing named packages contains one or
	more replace directives. It must not contain directives that would cause
	it to be interpreted differently than if it were the main module.

Steps to Reproduce the Problem

  1. Run go install github.com/temporalio/temporalite/cmd/[email protected]
  2. Installation fails with mentioned error

Specifications

  • Version: 0.2.0
  • Platform: darwin-amd64

Support migrations between Temporal versions for sqlite db

Is your feature request related to a problem? Please describe.

When updating Temporalite's underlying temporal server version, the sqlite driver may require migrations in order to be compatible with old sqlite database files.

Describe the solution you'd like

  • Temporalite should ensure that it stops before data corruption issues occur across version upgrades.
  • When a migration is necessary, we should allow this to happen automatically via an opt-in flag.
  • Before running a migration, Temporalite should optionally back up (copy) the existing db file.
  • Consider adding a new subcommand to manage migrations/backups manually rather than at server startup time.

Describe alternatives you've considered

Temporal provides a sql-schema-tool that we could probably invoke outside of Temporalite: https://github.com/temporalio/temporal/blob/release/v1.17.x/tools/sql/README.md

I think adding subcommands and/or flags to temporalite directly should make for a much nicer user experience however.

Additional context

Error while installing temporalite

Expected Behavior

Should have installed correctly

Actual Behavior

go install github.com/temporalio/temporalite/cmd/temporalite@latest
go: downloading github.com/temporalio/temporalite v0.3.0
go: github.com/temporalio/temporalite/cmd/temporalite@latest (in github.com/temporalio/[email protected]):
        The go.mod file for the module providing named packages contains one or
        more replace directives. It must not contain directives that would cause
        it to be interpreted differently than if it were the main module.

Steps to Reproduce the Problem

  1. run the above command in terminal

Specifications

  • Platform: M1

Publish Temporalite to a public container registry

Is your feature request related to a problem? Please describe.

Users should be able to quickly spin up Temporalite instances in container environments like Kubernetes, docker-compose, and various CI providers.

Describe the solution you'd like

Configure goreleaser to build & push container images for Temporalite to a temporalio owned container repository.

Describe alternatives you've considered

Docker compose users can already leverage Temporalite by building from source, eg.

# docker-compose.yaml
version: '3.9'

services:
  temporalite:
    build: https://github.com/temporalio/temporalite.git#main
    ports:
      - 7233:7233
      - 8233:8233

Additional context

github.com/temporalio/ui-server/v2-v2.8.1: 2 vulnerabilities (highest severity is: 6.1) - autoclosed

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.8.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.8.1.zip

Found in HEAD commit: 93862e567fbc04975632cbd0df362110e74b1dd1

Vulnerabilities

CVE Severity CVSS Dependency Type Fixed in (github.com/temporalio/ui-server/v2-v2.8.1 version) Remediation Available
WS-2021-0461 Medium 6.1 github.com/temporalio/ui-server/v2-v2.8.1 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3
CVE-2018-25031 Medium 4.3 github.com/temporalio/ui-server/v2-v2.8.1 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Details

WS-2021-0461

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.8.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.8.1.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.8.1 (Vulnerable Library)

Found in HEAD commit: 93862e567fbc04975632cbd0df362110e74b1dd1

Found in base branch: main

Vulnerability Details

SwaggerUI supports displaying remote OpenAPI definitions through the ?url parameter. This enables robust demonstration capabilities on sites like petstore.swagger.io, editor.swagger.io, and similar sites, where users often want to see what their OpenAPI definitions would look like rendered.

However, this functionality may pose a risk for users who host their own SwaggerUI instances. In particular, including remote OpenAPI definitions opens a vector for phishing attacks by abusing the trusted names/domains of self-hosted instances.

Resolution:
We've made the decision to disable query parameters (#4872) by default starting with SwaggerUI version 4.1.3. Please update to this version when it becomes available (ETA: 2021 December). Users will still be able to be re-enable the options at their discretion. We'll continue to enable query parameters on the Swagger demo sites.

Publish Date: 2021-12-09

URL: WS-2021-0461

CVSS 3 Score Details (6.1)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Changed
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: Low
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2021-12-09

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

CVE-2018-25031

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.8.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.8.1.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.8.1 (Vulnerable Library)

Found in HEAD commit: 93862e567fbc04975632cbd0df362110e74b1dd1

Found in base branch: main

Vulnerability Details

Swagger UI before 4.1.3 could allow a remote attacker to conduct spoofing attacks. By persuading a victim to open a crafted URL, an attacker could exploit this vulnerability to display remote OpenAPI definitions.

Publish Date: 2022-03-11

URL: CVE-2018-25031

CVSS 3 Score Details (4.3)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: None
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2022-03-11

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

package dependency error when installing temporalite

Expected Behavior

the go install github.com/DataDog/temporalite/cmd/temporalite@latest command should produce the binary for temporalite without any errors.

Actual Behavior

Getting this error when trying to install temporalite as suggested in Getting started page

../pkg/mod/go.temporal.io/[email protected]/common/metrics/config.go:31:2: ambiguous import: found package github.com/cactus/go-statsd-client/statsd in multiple modules:
	github.com/cactus/go-statsd-client v3.1.1+incompatible (~/go/pkg/mod/github.com/cactus/[email protected]+incompatible/statsd)
	github.com/cactus/go-statsd-client/statsd v0.0.0-20200423205355-cb0885a1018c (~/go/pkg/mod/github.com/cactus/go-statsd-client/[email protected])

Steps to Reproduce the Problem

  1. Execute this command go install github.com/DataDog/temporalite/cmd/temporalite@latest

Specifications

  • Version: go1.16.3
  • Platform: darwin/amd64

Potential Solution

Add this statement to go.mod file solved the problem on my side:

replace github.com/cactus/go-statsd-client => github.com/cactus/go-statsd-client v3.2.1+incompatible

Configurable log level

Is your feature request related to a problem? Please describe.

Temporalite logs at the debug level by default, which is super verbose, logging many individual RPCs and cluster membership changes. For running in the foreground, this adds a lot of noise, especially if interleaved with any other processes like one might do with docker-compose or a shell script.

Describe the solution you'd like

It'd be great to run all the components at the info/warn level

Describe alternatives you've considered

grep -v works but adds annoying signal handling concerns and it'd be nice to have this right in the command line usage documentation instead of having to pull in other tools.

Additional context

Thanks!

Crashes with "duplicate proto type registered"

Expected Behavior

Be able to run temporalite start --namespace default after installing

Actual Behavior

Here's what I did:

$ go version
go version go1.18 linux/amd64
$ go install github.com/DataDog/temporalite/cmd/temporalite@latest
$ temporalite start --namespace default
2022/03/18 10:52:57 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RegisterNamespaceRequest
2022/03/18 10:52:57 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RegisterNamespaceRequest.DataEntry
2022/03/18 10:52:57 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RegisterNamespaceResponse
2022/03/18 10:52:57 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListNamespacesRequest
2022/03/18 10:52:57 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListNamespacesResponse

One possibility: I previously had Go 1.16 installed and tried to install temporalite. That failed, so I upgraded to Go 1.18, installed successfully, and ran ☝️ . Maybe I need to run some command to clear some data somewhere?

Steps to Reproduce the Problem

See bash input/output above

Specifications

  • Version: Whatever latest is right now
  • Platform: Ubuntu 18.04

Publish Temporalite to homebrew

Is your feature request related to a problem? Please describe.

Homebrew is a popular package manager for macOS that would allow users to get started with Temporalite quickly and receive updates in the future. Homebrew uses pre-built binaries, so users would no longer need to have the Go toolchain installed.

Describe the solution you'd like

Configure goreleaser to update the temporalio homebrew tap: https://github.com/temporalio/homebrew-brew

Describe alternatives you've considered

Additional context

github.com/temporalio/ui-server/v2-v2.8.3: 1 vulnerabilities (highest severity is: 4.3)

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.8.3

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.8.3.zip

Path to dependency file: /go.mod

Path to vulnerable library: /go.mod

Found in HEAD commit: fdc0165780ae650730a59957dc8b227794444190

Vulnerabilities

CVE Severity CVSS Dependency Type Fixed in (github.com/temporalio/ui-server/v2-v2.8.3 version) Remediation Possible**
CVE-2018-25031 Medium 4.3 github.com/temporalio/ui-server/v2-v2.8.3 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

**In some cases, Remediation PR cannot be created automatically for a vulnerability despite the availability of remediation

Details

CVE-2018-25031

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.8.3

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.8.3.zip

Path to dependency file: /go.mod

Path to vulnerable library: /go.mod

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.8.3 (Vulnerable Library)

Found in HEAD commit: fdc0165780ae650730a59957dc8b227794444190

Found in base branch: main

Vulnerability Details

Swagger UI before 4.1.3 could allow a remote attacker to conduct spoofing attacks. By persuading a victim to open a crafted URL, an attacker could exploit this vulnerability to display remote OpenAPI definitions.
Mend Note: Converted from WS-2021-0461, on 2022-12-21.

Publish Date: 2022-03-11

URL: CVE-2018-25031

CVSS 3 Score Details (4.3)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: None
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2022-03-11

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

⛑️ Automatic Remediation will be attempted for this issue.


⛑️Automatic Remediation will be attempted for this issue.

Unable to run Temporalite in an environment where $HOME is not defined

Expected Behavior

Trying to start Temporalite in a sandboxed environment (no $HOME or $XDG_CONFIG_HOME environment variable set), specifying an absolute path should work.

Actual Behavior

An error "$HOME is not defined" is returned.

Steps to Reproduce the Problem

  1. unset HOME && temporalite start --namespace default -f $(mktemp -d)/test.db

Specifications

  • Version: trunk
  • Platform: macOS

The problem is that the creation of a new server will fail when the default configuration is created - https://github.com/temporalio/temporalite/blob/f97473349ffc5f52640609c6cddbb61bfa96921f/internal/liteconfig/config.go#L81

func NewDefaultConfig() (*Config, error) {
	userConfigDir, err := os.UserConfigDir()
	if err != nil {
		return nil, fmt.Errorf("cannot determine user config directory: %w", err)
	}
       // ...

In sandboxed environments os.UserConfigDir() can return an error which is not handled here. If the path to the db file is explicitly specified it should still work. Maybe if os.UserConfigDir() returns an error, the db should be created in the current directory as a fallback.

github.com/temporalio/ui-server/v2-v2.6.0: 2 vulnerabilities (highest severity is: 6.1) - autoclosed

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.6.0

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.6.0.zip

Vulnerabilities

CVE Severity CVSS Dependency Type Fixed in Remediation Available
WS-2021-0461 Medium 6.1 github.com/temporalio/ui-server/v2-v2.6.0 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3
CVE-2018-25031 Medium 4.3 github.com/temporalio/ui-server/v2-v2.6.0 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Details

WS-2021-0461

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.6.0

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.6.0.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.6.0 (Vulnerable Library)

Found in base branch: main

Vulnerability Details

SwaggerUI supports displaying remote OpenAPI definitions through the ?url parameter. This enables robust demonstration capabilities on sites like petstore.swagger.io, editor.swagger.io, and similar sites, where users often want to see what their OpenAPI definitions would look like rendered.

However, this functionality may pose a risk for users who host their own SwaggerUI instances. In particular, including remote OpenAPI definitions opens a vector for phishing attacks by abusing the trusted names/domains of self-hosted instances.

Resolution:
We've made the decision to disable query parameters (#4872) by default starting with SwaggerUI version 4.1.3. Please update to this version when it becomes available (ETA: 2021 December). Users will still be able to be re-enable the options at their discretion. We'll continue to enable query parameters on the Swagger demo sites.

Publish Date: 2021-12-09

URL: WS-2021-0461

CVSS 3 Score Details (6.1)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Changed
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: Low
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2021-12-09

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

CVE-2018-25031

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.6.0

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.6.0.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.6.0 (Vulnerable Library)

Found in base branch: main

Vulnerability Details

Swagger UI before 4.1.3 could allow a remote attacker to conduct spoofing attacks. By persuading a victim to open a crafted URL, an attacker could exploit this vulnerability to display remote OpenAPI definitions.

Publish Date: 2022-03-11

URL: CVE-2018-25031

CVSS 3 Score Details (4.3)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: None
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2022-03-11

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Embed Temporal web UI

Is your feature request related to a problem? Please describe.

A web UI would simplify local development/debugging and help people new to Temporal explore and get familiar.

Describe the solution you'd like

Embed https://github.com/temporalio/ui assets and run https://github.com/temporalio/ui-server as part of the Temporalite server.

Additional context

There may be similar efforts planned or ongoing in the https://github.com/temporalio/temporal project, so we should coordinate with maintainers. Preferably this could be exposed as an upstream temporal.ServerOption. If we implement this feature first in Temporalite, then it should be forward-compatible with moving outside of the temporalite package at some point.

Note on binary size: while keeping binary size minimal is not an explicit goal of Temporalite, we should be mindful of the binary size change this introduces and consider including a build tag to conditionally skip embedding static assets.

Enable Advanced Visibility

https://github.com/prabhatsharma/zinc

100% golang built on top of the excellent Bluge golang code.

This will work well with SQLite for a single binary solution.

the http api matches Elastic too so easy to plug into . Not everything is supported yet

has a web gui. Not sure if temporalite has one yet .

no cli yet , but relatively easy to do with cobra and making http calls to server . Might already be an issue for it.

it’s fast too .

I am using it and it’s been great .
It’s a new project and still got some rough edges compared to Elastic.

there is also the possibility to integrate via litestream but I doubt you need it. Litestream ( https://github.com/benbjohnson/litestream) gives you a type of changefeed off SQLite as well as real time backup to s3.

if you have any questions feel free to holler !

applyWorkflowMutationTx failed Error: no such column: schedule_id

Expected Behavior

Workflow complete for simple case in samples-go/child-workflow-continue-as-new/

Actual Behavior

Workflow does not complete; observe "applyWorkflowMutationTx failed ... Error: no such column: schedule_id"

Steps to Reproduce the Problem

  1. Get latest samples-go
  2. Run temporalite: ./temporalite start --namespace default --ephemeral
  3. Run worker in child-workflow-continue-as-new/worker
  4. Run starter in child-workflow-continue-as-new/starter
  5. Observe problem

Details

...
{"level":"debug","ts":"2021-09-23T23:42:17.833+0800","msg":"Assigning task ID","service":"history","shard-id":1,"address":"127.0.0.1:7234","shard-item":"0xc00083dc00","queue-task-id":38797312,"logging-call-at":"context_impl.go:897"}
{"level":"debug","ts":"2021-09-23T23:42:17.833+0800","msg":"Updating MaxTaskID","service":"history","shard-id":1,"address":"127.0.0.1:7234","shard-item":"0xc00083dc00","max-level":38797312,"logging-call-at":"context_impl.go:762"}
{"level":"debug","ts":"2021-09-23T23:42:17.834+0800","msg":"Workflow task updated","service":"history","shard-id":1,"address":"127.0.0.1:7234","shard-item":"0xc00083dc00","component":"history-cache","wf-schedule-id":0,"wf-started-id":0,"workflow-task-request-id":"emptyUuid","workflow-task-timeout":0,"attempt":1,"wf-started-timestamp":"1970-01-01T00:00:00.000Z","logging-call-at":"workflow_task_state_machine.go:615"}
{"level":"debug","ts":"2021-09-23T23:42:17.835+0800","msg":"Assigning task ID","service":"history","shard-id":1,"address":"127.0.0.1:7234","shard-item":"0xc00083dc00","queue-task-id":38797319,"logging-call-at":"context_impl.go:897"}
{"level":"error","ts":"2021-09-23T23:42:17.835+0800","msg":"Operation failed with internal error.","service":"history","error":"applyWorkflowMutationTx failed. Error: Failed to update child execution info. Failed to execute update query. Error: no such column: schedule_id","metric-scope":6,"logging-call-at":"persistenceMetricClients.go:640","stacktrace":"go.temporal.io/server/common/log.(*zapLogger).Error\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/log/zap_logger.go:143\ngo.temporal.io/server/common/persistence.(*executionPersistenceClient).updateErrorMetric\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/persistence/persistenceMetricClients.go:640\ngo.temporal.io/server/common/persistence.(*executionPersistenceClient).UpdateWorkflowExecution\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/persistence/persistenceMetricClients.go:243\ngo.temporal.io/server/service/history/shard.(*ContextImpl).UpdateWorkflowExecution\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/shard/context_impl.go:496\ngo.temporal.io/server/service/history/workflow.updateWorkflowExecutionWithRetry.func1\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/workflow/transaction_impl.go:426\ngo.temporal.io/server/common/backoff.Retry.func1\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/backoff/retry.go:104\ngo.temporal.io/server/common/backoff.RetryContext\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/backoff/retry.go:125\ngo.temporal.io/server/common/backoff.Retry\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/backoff/retry.go:105\ngo.temporal.io/server/service/history/workflow.updateWorkflowExecutionWithRetry\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/workflow/transaction_impl.go:430\ngo.temporal.io/server/service/history/workflow.(*TransactionImpl).UpdateWorkflowExecution\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/workflow/transaction_impl.go:145\ngo.temporal.io/server/service/history/workflow.(*ContextImpl).UpdateWorkflowExecutionWithNew\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/workflow/context.go:686\ngo.temporal.io/server/service/history/workflow.(*ContextImpl).UpdateWorkflowExecutionAsActive\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/workflow/context.go:556\ngo.temporal.io/server/service/history.(*workflowTaskHandlerCallbacksImpl).handleWorkflowTaskCompleted\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/workflowTaskHandlerCallbacks.go:552\ngo.temporal.io/server/service/history.(*historyEngineImpl).RespondWorkflowTaskCompleted\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/historyEngine.go:1358\ngo.temporal.io/server/service/history.(*Handler).RespondWorkflowTaskCompleted\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/service/history/handler.go:489\ngo.temporal.io/server/api/historyservice/v1._HistoryService_RespondWorkflowTaskCompleted_Handler.func1\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/api/historyservice/v1/service.pb.go:969\ngo.temporal.io/server/common/rpc/interceptor.(*RateLimitInterceptor).Intercept\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/rpc/interceptor/rate_limit.go:83\ngoogle.golang.org/grpc.chainUnaryInterceptors.func1.1\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:1131\ngo.temporal.io/server/common/rpc/interceptor.(*TelemetryInterceptor).Intercept\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/rpc/interceptor/telemetry.go:108\ngoogle.golang.org/grpc.chainUnaryInterceptors.func1.1\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:1134\ngo.temporal.io/server/common/metrics.NewServerMetricsTrailerPropagatorInterceptor.func1\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/metrics/grpc.go:113\ngoogle.golang.org/grpc.chainUnaryInterceptors.func1.1\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:1134\ngo.temporal.io/server/common/metrics.NewServerMetricsContextInjectorInterceptor.func1\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/metrics/grpc.go:66\ngoogle.golang.org/grpc.chainUnaryInterceptors.func1.1\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:1134\ngo.temporal.io/server/common/rpc.ServiceErrorInterceptor\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/common/rpc/grpc.go:131\ngoogle.golang.org/grpc.chainUnaryInterceptors.func1.1\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:1134\ngoogle.golang.org/grpc.chainUnaryInterceptors.func1\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:1136\ngo.temporal.io/server/api/historyservice/v1._HistoryService_RespondWorkflowTaskCompleted_Handler\n\t/Users/leow/go/pkg/mod/go.temporal.io/[email protected]/api/historyservice/v1/service.pb.go:971\ngoogle.golang.org/grpc.(*Server).processUnaryRPC\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:1297\ngoogle.golang.org/grpc.(*Server).handleStream\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:1626\ngoogle.golang.org/grpc.(*Server).serveStreams.func1.2\n\t/Users/leow/go/pkg/mod/google.golang.org/[email protected]/server.go:941"}

Specifications

  • Version: Compile latest from repo
  • Platform: OSX

temporalite homebrew

Is your feature request related to a problem? Please describe.
I think we need to give alternative ways for installation temporalite. There is an easy way to use temporalite binary like homebrew for mac users. is there any obstacle to it?

Describe the solution you'd like
We can integrate brew release mechanism with goreleaser in an autonomous way and people can install temporalite easily on their macs.

Describe alternatives you've considered
I don't have alternative

Additional context
if it's acceptable I can work on it. Temporalio project has already homebrew repository. I can easily integrate with it in an autonomous way .

Error when following getting started guide

Hi, I am starting my experiments with Temporal and the getting started docs resulted in an error for me.

Temporal started normally when I pre-created the missing directory, but Temporal should probably either create it, or the docs should mention it is needed

mkdir -p /home/vpavlin/.config/temporalite/db

Expected Behavior

$ /home/vpavlin/devel/bin/temporalite start --namespace default
{"level":"info","ts":"2022-09-05T08:29:27.156+0200","msg":"Successfully saved cluster metadata.","component":"metadata-initializer","cluster-name":"active","logging-call-at":"fx.go:631"}

Actual Behavior

$ /home/vpavlin/devel/bin/temporalite start --namespace default
2022/09/05 08:27:57 error setting up schema: stat /home/vpavlin/.config/temporalite/db: no such file or directory

Steps to Reproduce the Problem

  1. go install github.com/temporalio/temporalite/cmd/temporalite@latest
  2. temporalite start --namespace default

Specifications

  • Version:
  • Platform:

Temporalite Repository Migration

We plan to deprecate the https://github.com/temporalio/temporalite git repository but retain its functionality in https://github.com/temporalio/temporal and https://github.com/temporalio/cli respectively.

Our goals for this migration are to:

  1. Streamline user experience when getting started with Temporal. Install a single CLI tool that allows you to interact with any Temporal server, and start your own development server.
  2. Synchronize Temporalite (library) releases with Temporal server.
  3. Officially support the temporalite and temporaltest package in the server Go module. Anyone who already imports the Temporal server module should be able to write e2e tests easily.

Migration Plan

When building as a git submodule, temporalite docker build fails to fetch VCS status

Expected Behavior

Running docker build . in the temporalite root folder when it is checked out as a submodule should complete with success and yield a temporalite image.

Actual Behavior

error obtaining VCS status: exit status 128
Use -buildvcs=false to disable VCS stamping.

~/temporal-ts-example/temporalite$ docker build .
Sending build context to Docker daemon  248.8kB
Step 1/10 : FROM golang:1.18 as builder
 ---> 5fedf7be08ce
Step 2/10 : WORKDIR ${GOPATH:-/go}/src/temporalite
 ---> Using cache
 ---> 6eade41865ba
Step 3/10 : COPY . .
 ---> 07766e30a072
Step 4/10 : RUN go mod download
 ---> Running in 9cae528d1223
Removing intermediate container 9cae528d1223
 ---> b1e44ea7077d
Step 5/10 : RUN go get -d -v ./...
 ---> Running in 23828201d0e2
Removing intermediate container 23828201d0e2
 ---> b523f95c1c35
Step 6/10 : RUN go build -o ${GOPATH:-/go}/bin/ ${GOPATH:-/go}/src/temporalite/cmd/temporalite
 ---> Running in c13724713caf
error obtaining VCS status: exit status 128
	Use -buildvcs=false to disable VCS stamping.
The command '/bin/sh -c go build -o ${GOPATH:-/go}/bin/ ${GOPATH:-/go}/src/temporalite/cmd/temporalite' returned a non-zero code: 1

Steps to Reproduce the Problem

  1. Create a git repository (git init)
  2. git submodule add https://github.com/temporalio/temporalite.git
  3. cd temporalite && docker build .

Specifications

  • Version:
    $ git log -n1
    commit 81d76ce23f943bcb6468d793e7dcba436b6cfc55 (HEAD -> main, origin/main, origin/HEAD)
    Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Date:   Thu Oct 20 04:15:00 2022 +0000
    
  • Platform:
    $ cat /etc/lsb-release 
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=18.04
    DISTRIB_CODENAME=bionic
    DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
    
    $ docker version
    Client: Docker Engine - Community
     Version:           20.10.18
     API version:       1.41
     Go version:        go1.18.6
     Git commit:        b40c2f6
     Built:             Thu Sep  8 23:11:34 2022
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.18
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.18.6
      Git commit:       e42327a
      Built:            Thu Sep  8 23:09:28 2022
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.6.8
      GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
     runc:
      Version:          1.1.4
      GitCommit:        v1.1.4-0-g5fd4c4d
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    

Mobile platforms

Can i use this for android or ios app devolepment? Any documentation that can help me?

UI does not work after starting Temporalite; Log contains errors.

Expected Behavior

After starting Temporal Lite, the UI must appear when you visit http://localhost:8233/ in the browser.

Actual Behavior

After starting Temporal Lite, the UI remains completely blank when you visit http://localhost:8233/ in the browser.

Specifications

  • go version go1.18.2 windows/amd64
  • Windows 10 Pro / 21H2 (Build 19044.1645)

Steps to Reproduce the Problem

  1. Install Temporal Lite (go install github.com/DataDog/temporalite/cmd/temporalite@latest)
  2. Run Temporal Lite (temporalite start --ephemeral --namespace default )
  3. Visit http://localhost:8233/ in the browser.

I can observe that a connection is estambished and "somethng" is received by the browser. However, the view remains completely blank. Here is the source of the page as shown by the browser:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="[/favicon.ico](view-source:http://localhost:8233/favicon.ico)" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="[/css/normalize.css](view-source:http://localhost:8233/css/normalize.css)" />
    <link rel="stylesheet" href="[/css/override.css](view-source:http://localhost:8233/css/override.css)" />
    <link rel="stylesheet" href="[/prism/prism.css](view-source:http://localhost:8233/prism/prism.css)" />
    <meta http-equiv="content-security-policy" content="">
	<link rel="modulepreload" href="[/_app/start-c7f9f9fa.js](view-source:http://localhost:8233/_app/start-c7f9f9fa.js)">
	<link rel="modulepreload" href="[/_app/chunks/index-d3b4e788.js](view-source:http://localhost:8233/_app/chunks/index-d3b4e788.js)">
	<link rel="modulepreload" href="[/_app/chunks/index-d96c6995.js](view-source:http://localhost:8233/_app/chunks/index-d96c6995.js)">
	<link rel="modulepreload" href="[/_app/chunks/singletons-d1fb5791.js](view-source:http://localhost:8233/_app/chunks/singletons-d1fb5791.js)">
  </head>

  <body>
    <div id="svelte">
		<script type="module" data-hydrate="45h">
		import { start } from "/_app/start-c7f9f9fa.js";
		start({
			target: document.querySelector('[data-hydrate="45h"]').parentNode,
			paths: {"base":"","assets":""},
			session: {},
			route: true,
			spa: true,
			trailing_slash: "never",
			hydrate: null
		});
	</script></div>
    <script src="[/prism/prism.js](view-source:http://localhost:8233/prism/prism.js)"></script>
  </body>
</html>

Note that I can actually successfully run requests against the server just started (Start Workflow, Send Signal etc).

There is a bunch of diagnostic output in the Console Window where Temporal Lite is started. The log below represents starting the server, loading a page (with the above blant result, pressing Ctrl-C and letting the server shut down.

Please note, the log below has indeed error messages implying the UI is shut does, but I am not sure of a root cause or a possilbe workaround.

2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RegisterNamespaceRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RegisterNamespaceRequest.DataEntry
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RegisterNamespaceResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListNamespacesRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListNamespacesResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.DescribeNamespaceRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.DescribeNamespaceResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.UpdateNamespaceRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.UpdateNamespaceResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.DeprecateNamespaceRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.DeprecateNamespaceResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.StartWorkflowExecutionRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.StartWorkflowExecutionResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryReverseRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryReverseResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.PollWorkflowTaskQueueRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.PollWorkflowTaskQueueResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.PollWorkflowTaskQueueResponse.QueriesEntry
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondWorkflowTaskCompletedRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondWorkflowTaskCompletedRequest.QueryResultsEntry
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondWorkflowTaskCompletedResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondWorkflowTaskFailedRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondWorkflowTaskFailedResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.PollActivityTaskQueueRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.PollActivityTaskQueueResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatByIdRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatByIdResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskCompletedRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskCompletedResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskCompletedByIdRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskCompletedByIdResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskFailedRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskFailedResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskFailedByIdRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskFailedByIdResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskCanceledRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskCanceledResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskCanceledByIdRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondActivityTaskCanceledByIdResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RequestCancelWorkflowExecutionRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RequestCancelWorkflowExecutionResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.SignalWorkflowExecutionRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.SignalWorkflowExecutionResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.SignalWithStartWorkflowExecutionRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.SignalWithStartWorkflowExecutionResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ResetWorkflowExecutionRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ResetWorkflowExecutionResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.TerminateWorkflowExecutionRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.TerminateWorkflowExecutionResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListOpenWorkflowExecutionsRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListOpenWorkflowExecutionsResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListClosedWorkflowExecutionsRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListClosedWorkflowExecutionsResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListWorkflowExecutionsRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListWorkflowExecutionsResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListArchivedWorkflowExecutionsRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListArchivedWorkflowExecutionsResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ScanWorkflowExecutionsRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ScanWorkflowExecutionsResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.CountWorkflowExecutionsRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.CountWorkflowExecutionsResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetSearchAttributesRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetSearchAttributesResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetSearchAttributesResponse.KeysEntry
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.RespondQueryTaskCompletedResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ResetStickyTaskQueueRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ResetStickyTaskQueueResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.QueryWorkflowRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.QueryWorkflowResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.DescribeWorkflowExecutionRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.DescribeWorkflowExecutionResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.DescribeTaskQueueRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.DescribeTaskQueueResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetClusterInfoRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetClusterInfoResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetClusterInfoResponse.SupportedClientsEntry
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetSystemInfoRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetSystemInfoResponse
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.GetSystemInfoResponse.Capabilities
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListTaskQueuePartitionsRequest
2022/05/14 18:15:51 proto: duplicate proto type registered: temporal.api.workflowservice.v1.ListTaskQueuePartitionsResponse
{"level":"info","ts":"2022-05-14T18:15:51.354-0700","msg":"Successfully saved cluster metadata.","component":"metadata-initializer","cluster-name":"active","logging-call-at":"fx.go:630"}
{"level":"info","ts":"2022-05-14T18:15:51.378-0700","msg":"Created gRPC listener","service":"history","address":"127.0.0.1:63796","logging-call-at":"rpc.go:156"}
{"level":"info","ts":"2022-05-14T18:15:51.383-0700","msg":"Created gRPC listener","service":"matching","address":"127.0.0.1:63798","logging-call-at":"rpc.go:156"}
{"level":"info","ts":"2022-05-14T18:15:51.392-0700","msg":"Created gRPC listener","service":"frontend","address":"127.0.0.1:7233","logging-call-at":"rpc.go:156"}
Starting UI server...
{"level":"info","ts":"2022-05-14T18:15:51.396-0700","msg":"PProf listen on ","port":63794,"logging-call-at":"pprof.go:73"}

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.6.3
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
{"level":"info","ts":"2022-05-14T18:15:51.396-0700","msg":"Starting server for services","value":{"frontend":{},"history":{},"matching":{},"worker":{}},"logging-call-at":"server_impl.go:99"}
⇨ http server started on 127.0.0.1:8233
{"level":"info","ts":"2022-05-14T18:15:51.403-0700","msg":"Membership heartbeat upserted successfully","service":"frontend","address":"127.0.0.1","port":63795,"hostId":"8f70a8f2-d3ec-11ec-a7d1-507b9db6fe6c","logging-call-at":"rpMonitor.go:229"}
{"level":"info","ts":"2022-05-14T18:15:51.404-0700","msg":"bootstrap hosts fetched","service":"frontend","bootstrap-hostports":"127.0.0.1:63795","logging-call-at":"rpMonitor.go:271"}
{"level":"info","ts":"2022-05-14T18:15:51.408-0700","msg":"Current reachable members","service":"frontend","component":"service-resolver","service":"frontend","addresses":["127.0.0.1:7233"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.408-0700","msg":"RuntimeMetricsReporter started","service":"frontend","logging-call-at":"runtime.go:140"}
{"level":"info","ts":"2022-05-14T18:15:51.409-0700","msg":"frontend starting","service":"frontend","logging-call-at":"service.go:258"}
{"level":"info","ts":"2022-05-14T18:15:51.409-0700","msg":"Starting to serve on frontend listener","service":"frontend","logging-call-at":"service.go:277"}
{"level":"info","ts":"2022-05-14T18:15:51.409-0700","msg":"Membership heartbeat upserted successfully","service":"worker","address":"127.0.0.1","port":63801,"hostId":"8f716c49-d3ec-11ec-a7d1-507b9db6fe6c","logging-call-at":"rpMonitor.go:229"}
{"level":"info","ts":"2022-05-14T18:15:51.410-0700","msg":"bootstrap hosts fetched","service":"worker","bootstrap-hostports":"127.0.0.1:63795,127.0.0.1:63801","logging-call-at":"rpMonitor.go:271"}
{"level":"info","ts":"2022-05-14T18:15:51.415-0700","msg":"Current reachable members","service":"worker","component":"service-resolver","service":"frontend","addresses":["127.0.0.1:7233"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.416-0700","msg":"Current reachable members","service":"worker","component":"service-resolver","service":"worker","addresses":["127.0.0.1:63800"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.417-0700","msg":"RuntimeMetricsReporter started","service":"worker","logging-call-at":"runtime.go:140"}
{"level":"info","ts":"2022-05-14T18:15:51.418-0700","msg":"worker starting","service":"worker","component":"worker","logging-call-at":"service.go:329"}
{"level":"info","ts":"2022-05-14T18:15:51.420-0700","msg":"Membership heartbeat upserted successfully","service":"matching","address":"127.0.0.1","port":63799,"hostId":"8f6f4a90-d3ec-11ec-a7d1-507b9db6fe6c","logging-call-at":"rpMonitor.go:229"}
{"level":"info","ts":"2022-05-14T18:15:51.423-0700","msg":"bootstrap hosts fetched","service":"matching","bootstrap-hostports":"127.0.0.1:63799,127.0.0.1:63795,127.0.0.1:63801","logging-call-at":"rpMonitor.go:271"}
{"level":"info","ts":"2022-05-14T18:15:51.426-0700","msg":"Current reachable members","service":"matching","component":"service-resolver","service":"frontend","addresses":["127.0.0.1:7233"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.426-0700","msg":"Current reachable members","service":"matching","component":"service-resolver","service":"matching","addresses":["127.0.0.1:63798"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.427-0700","msg":"Current reachable members","service":"worker","component":"service-resolver","service":"matching","addresses":["127.0.0.1:63798"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.428-0700","msg":"Current reachable members","service":"matching","component":"service-resolver","service":"worker","addresses":["127.0.0.1:63800"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.430-0700","msg":"RuntimeMetricsReporter started","service":"matching","logging-call-at":"runtime.go:140"}
{"level":"info","ts":"2022-05-14T18:15:51.430-0700","msg":"matching starting","service":"matching","logging-call-at":"service.go:91"}
{"level":"info","ts":"2022-05-14T18:15:51.431-0700","msg":"Starting to serve on matching listener","service":"matching","logging-call-at":"service.go:102"}
{"level":"info","ts":"2022-05-14T18:15:51.431-0700","msg":"Membership heartbeat upserted successfully","service":"history","address":"127.0.0.1","port":63797,"hostId":"8f6c7749-d3ec-11ec-a7d1-507b9db6fe6c","logging-call-at":"rpMonitor.go:229"}
{"level":"info","ts":"2022-05-14T18:15:51.433-0700","msg":"bootstrap hosts fetched","service":"history","bootstrap-hostports":"127.0.0.1:63799,127.0.0.1:63795,127.0.0.1:63801,127.0.0.1:63797","logging-call-at":"rpMonitor.go:271"}
{"level":"info","ts":"2022-05-14T18:15:51.438-0700","msg":"Current reachable members","service":"history","component":"service-resolver","service":"worker","addresses":["127.0.0.1:63800"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.439-0700","msg":"Current reachable members","service":"history","component":"service-resolver","service":"frontend","addresses":["127.0.0.1:7233"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.439-0700","msg":"Current reachable members","service":"history","component":"service-resolver","service":"history","addresses":["127.0.0.1:63796"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.440-0700","msg":"Current reachable members","service":"history","component":"service-resolver","service":"matching","addresses":["127.0.0.1:63798"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.441-0700","msg":"RuntimeMetricsReporter started","service":"history","logging-call-at":"runtime.go:140"}
{"level":"info","ts":"2022-05-14T18:15:51.442-0700","msg":"history starting","service":"history","logging-call-at":"service.go:96"}
{"level":"info","ts":"2022-05-14T18:15:51.443-0700","msg":"Replication task fetchers started.","logging-call-at":"replicationTaskFetcher.go:141"}
{"level":"info","ts":"2022-05-14T18:15:51.444-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","lifecycle":"Started","component":"shard-context","logging-call-at":"controller_impl.go:256"}
{"level":"info","ts":"2022-05-14T18:15:51.444-0700","msg":"Range updated for shardID","shard-id":1,"address":"127.0.0.1:63796","shard-range-id":1,"previous-shard-range-id":0,"number":0,"next-number":0,"logging-call-at":"context_impl.go:1083"}
{"level":"info","ts":"2022-05-14T18:15:51.445-0700","msg":"Current reachable members","service":"frontend","component":"service-resolver","service":"matching","addresses":["127.0.0.1:63798"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.445-0700","msg":"Current reachable members","service":"frontend","component":"service-resolver","service":"worker","addresses":["127.0.0.1:63800"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.445-0700","msg":"Acquired shard","shard-id":1,"address":"127.0.0.1:63796","logging-call-at":"context_impl.go:1744"}
{"level":"info","ts":"2022-05-14T18:15:51.447-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","lifecycle":"Starting","component":"shard-engine","logging-call-at":"context_impl.go:1350"}
{"level":"info","ts":"2022-05-14T18:15:51.448-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"history-engine","lifecycle":"Starting","logging-call-at":"historyEngine.go:245"}
{"level":"info","ts":"2022-05-14T18:15:51.448-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"transfer-queue-processor","cluster-name":"active","lifecycle":"Starting","component":"transfer-queue-processor","logging-call-at":"queueProcessor.go:140"}
{"level":"info","ts":"2022-05-14T18:15:51.450-0700","msg":"Task processor started.","shard-id":1,"address":"127.0.0.1:63796","component":"transfer-queue-processor","cluster-name":"active","logging-call-at":"taskProcessor.go:147"}
{"level":"info","ts":"2022-05-14T18:15:51.455-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"transfer-queue-processor","cluster-name":"active","lifecycle":"Started","component":"transfer-queue-processor","logging-call-at":"queueProcessor.go:149"}
{"level":"info","ts":"2022-05-14T18:15:51.457-0700","msg":"Task processor started.","shard-id":1,"address":"127.0.0.1:63796","component":"timer-queue-processor","cluster-name":"active","component":"timer-queue-processor","logging-call-at":"taskProcessor.go:147"}
{"level":"info","ts":"2022-05-14T18:15:51.458-0700","msg":"Timer queue processor started.","shard-id":1,"address":"127.0.0.1:63796","component":"timer-queue-processor","cluster-name":"active","component":"timer-queue-processor","logging-call-at":"timerQueueProcessorBase.go:150"}
{"level":"info","ts":"2022-05-14T18:15:51.459-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"visibility-queue-processor","lifecycle":"Starting","component":"transfer-queue-processor","logging-call-at":"queueProcessor.go:140"}
{"level":"info","ts":"2022-05-14T18:15:51.459-0700","msg":"Task processor started.","shard-id":1,"address":"127.0.0.1:63796","component":"visibility-queue-processor","logging-call-at":"taskProcessor.go:147"}
{"level":"info","ts":"2022-05-14T18:15:51.460-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"visibility-queue-processor","lifecycle":"Started","component":"transfer-queue-processor","logging-call-at":"queueProcessor.go:149"}
{"level":"info","ts":"2022-05-14T18:15:51.461-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"history-engine","lifecycle":"Started","logging-call-at":"historyEngine.go:261"}
{"level":"info","ts":"2022-05-14T18:15:51.461-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","lifecycle":"Started","component":"shard-engine","logging-call-at":"context_impl.go:1353"}
{"level":"info","ts":"2022-05-14T18:15:51.480-0700","msg":"none","component":"shard-controller","address":"127.0.0.1:63796","lifecycle":"Started","logging-call-at":"controller_impl.go:118"}
{"level":"info","ts":"2022-05-14T18:15:51.480-0700","msg":"Starting to serve on history listener","service":"history","logging-call-at":"service.go:107"}
{"level":"info","ts":"2022-05-14T18:15:51.511-0700","msg":"Current reachable members","service":"frontend","component":"service-resolver","service":"history","addresses":["127.0.0.1:63796"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:15:51.770-0700","msg":"Started Worker","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-tq-scanner-taskqueue-0","WorkerID":"47496@Gragus-P70@","logging-call-at":"scanner.go:155"}
{"level":"info","ts":"2022-05-14T18:15:51.774-0700","msg":"Started Worker","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-batcher-taskqueue","WorkerID":"47496@Gragus-P70@","logging-call-at":"batcher.go:94"}
{"level":"info","ts":"2022-05-14T18:15:51.776-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-tq-scanner-taskqueue-0/3","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.777-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-tq-scanner-taskqueue-0/3","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.778-0700","msg":"Started Worker","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-processor-parent-close-policy","WorkerID":"47496@Gragus-P70@","logging-call-at":"processor.go:100"}
{"level":"info","ts":"2022-05-14T18:15:51.778-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-tq-scanner-taskqueue-0/1","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.780-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-batcher-taskqueue/1","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.781-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-processor-parent-close-policy/1","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.782-0700","msg":"Started Worker","service":"worker","Namespace":"temporal-system","TaskQueue":"default-worker-tq","WorkerID":"47496@Gragus-P70@","logging-call-at":"worker.go:98"}
{"level":"info","ts":"2022-05-14T18:15:51.783-0700","msg":"none","component":"worker-manager","lifecycle":"Started","logging-call-at":"worker.go:101"}
{"level":"info","ts":"2022-05-14T18:15:51.782-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"Gragus-P70:066f6336-ca19-4a1d-a48a-0a06733fd0a2","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.784-0700","msg":"worker service started","service":"worker","component":"worker","address":"127.0.0.1:63800","logging-call-at":"service.go:372"}
{"level":"info","ts":"2022-05-14T18:15:51.785-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/default-worker-tq/2","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.787-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"Gragus-P70:dbe05cd8-b3e9-48b0-998f-3022dea399c5","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.788-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-processor-parent-close-policy/3","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.789-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"temporal-sys-tq-scanner-taskqueue-0","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.792-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"Gragus-P70:a94f1e4d-03c5-4a11-95ac-935b01706738","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.795-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-batcher-taskqueue/3","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.796-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-batcher-taskqueue/2","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.797-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"Gragus-P70:7aeedb1c-d250-4ced-bbd0-fbe80376851b","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.798-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"temporal-sys-tq-scanner-taskqueue-0","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.799-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-batcher-taskqueue/1","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.800-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-tq-scanner-taskqueue-0/1","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.801-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-batcher-taskqueue/3","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.802-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-tq-scanner-taskqueue-0/2","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.803-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"temporal-sys-processor-parent-close-policy","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.803-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"/_sys/temporal-sys-processor-parent-close-policy/1","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.804-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"temporal-sys-processor-parent-close-policy","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.805-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"temporal-sys-batcher-taskqueue","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.809-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"default-worker-tq","wf-task-queue-type":"Workflow","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.809-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"default-worker-tq","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:51.810-0700","msg":"none","service":"matching","component":"matching-engine","wf-task-queue-name":"temporal-sys-batcher-taskqueue","wf-task-queue-type":"Activity","wf-namespace":"temporal-system","lifecycle":"Started","logging-call-at":"taskQueueManager.go:246"}
{"level":"info","ts":"2022-05-14T18:15:55.458-0700","msg":"temporal-sys-tq-scanner-workflow workflow successfully started","service":"worker","logging-call-at":"scanner.go:202"}
{"time":"2022-05-14T18:15:58.7056828-07:00","id":"","remote_ip":"127.0.0.1","host":"localhost:8233","method":"GET","uri":"/namespaces/default/workflows","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0","status":200,"error":"","latency":50100,"latency_human":"50.1µs","bytes_in":0,"bytes_out":1104}
{"time":"2022-05-14T18:15:58.9932673-07:00","id":"","remote_ip":"127.0.0.1","host":"localhost:8233","method":"GET","uri":"/css/override.css","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0","status":200,"error":"","latency":97906600,"latency_human":"97.9066ms","bytes_in":0,"bytes_out":55}
{"time":"2022-05-14T18:15:58.9932673-07:00","id":"","remote_ip":"127.0.0.1","host":"localhost:8233","method":"GET","uri":"/css/normalize.css","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0","status":200,"error":"","latency":109765200,"latency_human":"109.7652ms","bytes_in":0,"bytes_out":1815}
{"time":"2022-05-14T18:15:58.9932673-07:00","id":"","remote_ip":"127.0.0.1","host":"localhost:8233","method":"GET","uri":"/prism/prism.css","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0","status":200,"error":"","latency":97362400,"latency_human":"97.3624ms","bytes_in":0,"bytes_out":1877}
{"time":"2022-05-14T18:15:58.9932673-07:00","id":"","remote_ip":"127.0.0.1","host":"localhost:8233","method":"GET","uri":"/prism/prism.js","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0","status":200,"error":"","latency":113272800,"latency_human":"113.2728ms","bytes_in":0,"bytes_out":7865}
{"time":"2022-05-14T18:15:58.9932673-07:00","id":"","remote_ip":"127.0.0.1","host":"localhost:8233","method":"GET","uri":"/_app/start-c7f9f9fa.js","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0","status":200,"error":"","latency":111595700,"latency_human":"111.5957ms","bytes_in":0,"bytes_out":48278}
{"time":"2022-05-14T18:15:59.0049761-07:00","id":"","remote_ip":"127.0.0.1","host":"localhost:8233","method":"GET","uri":"/favicon.ico","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0","status":200,"error":"","latency":848800,"latency_human":"848.8µs","bytes_in":0,"bytes_out":15406}
{"level":"info","ts":"2022-05-14T18:16:01.417-0700","msg":"Current reachable members","service":"worker","component":"service-resolver","service":"history","addresses":["127.0.0.1:63796"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:16:01.432-0700","msg":"Current reachable members","service":"matching","component":"service-resolver","service":"history","addresses":["127.0.0.1:63796"],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:16:03.191-0700","msg":"Received interrupt signal, stopping the server.","value":"interrupt","logging-call-at":"server_impl.go:123"}
{"level":"info","ts":"2022-05-14T18:16:03.193-0700","msg":"Stopped Worker","service":"worker","Namespace":"temporal-system","TaskQueue":"default-worker-tq","WorkerID":"47496@Gragus-P70@","logging-call-at":"worker.go:114"}
{"level":"info","ts":"2022-05-14T18:16:03.202-0700","msg":"none","component":"worker-manager","lifecycle":"Stopped","logging-call-at":"worker.go:116"}
{"level":"warn","ts":"2022-05-14T18:16:03.193-0700","msg":"Failed to poll for task.","service":"worker","Namespace":"temporal-system","TaskQueue":"default-worker-tq","WorkerID":"47496@Gragus-P70@","WorkerType":"WorkflowWorker","Error":"worker stopping","logging-call-at":"internal_worker_base.go:276"}
{"level":"info","ts":"2022-05-14T18:16:03.193-0700","msg":"ShutdownHandler: Updating gRPC health status to ShuttingDown","service":"frontend","logging-call-at":"service.go:301"}
{"level":"warn","ts":"2022-05-14T18:16:03.193-0700","msg":"Failed to poll for task.","service":"worker","Namespace":"temporal-system","TaskQueue":"default-worker-tq","WorkerID":"47496@Gragus-P70@","WorkerType":"ActivityWorker","Error":"worker stopping","logging-call-at":"internal_worker_base.go:276"}
{"level":"info","ts":"2022-05-14T18:16:03.193-0700","msg":"ShutdownHandler: Evicting self from membership ring","service":"history","logging-call-at":"service.go:137"}
{"level":"info","ts":"2022-05-14T18:16:03.194-0700","msg":"ShutdownHandler: Evicting self from membership ring","service":"matching","logging-call-at":"service.go:115"}
{"level":"info","ts":"2022-05-14T18:16:03.206-0700","msg":"worker service stopped","service":"worker","component":"worker","address":"127.0.0.1:63800","logging-call-at":"service.go:399"}
{"level":"info","ts":"2022-05-14T18:16:03.216-0700","msg":"ShutdownHandler: Waiting for others to discover I am unhealthy","service":"frontend","logging-call-at":"service.go:304"}
{"level":"info","ts":"2022-05-14T18:16:03.236-0700","msg":"Current reachable members","service":"history","component":"service-resolver","service":"history","addresses":[],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:16:03.238-0700","msg":"Current reachable members","service":"matching","component":"service-resolver","service":"matching","addresses":[],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:16:03.238-0700","msg":"Current reachable members","service":"matching","component":"service-resolver","service":"history","addresses":[],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:16:03.238-0700","msg":"Current reachable members","service":"frontend","component":"service-resolver","service":"history","addresses":[],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:16:03.238-0700","msg":"ShutdownHandler: Waiting for others to discover I am unhealthy","service":"history","logging-call-at":"service.go:140"}
{"level":"info","ts":"2022-05-14T18:16:03.239-0700","msg":"Current reachable members","service":"frontend","component":"service-resolver","service":"matching","addresses":[],"logging-call-at":"rpServiceResolver.go:266"}
{"level":"info","ts":"2022-05-14T18:16:03.239-0700","msg":"ShutdownHandler: Waiting for others to discover I am unhealthy","service":"matching","logging-call-at":"service.go:117"}
{"level":"info","ts":"2022-05-14T18:16:03.239-0700","msg":"RuntimeMetricsReporter stopped","service":"worker","logging-call-at":"runtime.go:146"}
{"level":"info","ts":"2022-05-14T18:16:03.241-0700","msg":"ShutdownHandler: Draining traffic","service":"frontend","logging-call-at":"service.go:313"}
{"level":"info","ts":"2022-05-14T18:16:03.243-0700","msg":"none","component":"shard-controller","address":"127.0.0.1:63796","shard-update":"RingMembershipChangedEvent","number-processed":0,"number-deleted":1,"number":0,"logging-call-at":"controller_impl.go:305"}
{"level":"info","ts":"2022-05-14T18:16:03.254-0700","msg":"ShutdownHandler: Initiating shardController shutdown","service":"history","logging-call-at":"service.go:143"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching stopped","service":"matching","logging-call-at":"service.go:125"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"matching","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"matching","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"matching","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"matching","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"matching","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.260-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.259-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.260-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.260-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.260-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.260-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.260-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.260-0700","msg":"matching client encountered error","service":"frontend","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.260-0700","msg":"matching client encountered error","service":"matching","error":"error reading from server: EOF","service-error-type":"serviceerror.Unavailable","logging-call-at":"metricClient.go:268"}
{"level":"info","ts":"2022-05-14T18:16:03.261-0700","msg":"frontend stopped","service":"frontend","logging-call-at":"service.go:323"}
{"level":"warn","ts":"2022-05-14T18:16:03.261-0700","msg":"Failed to poll for task.","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-processor-parent-close-policy","WorkerID":"47496@Gragus-P70@","WorkerType":"WorkflowWorker","Error":"error reading from server: EOF","logging-call-at":"internal_worker_base.go:276"}
{"level":"warn","ts":"2022-05-14T18:16:03.261-0700","msg":"Failed to poll for task.","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-tq-scanner-taskqueue-0","WorkerID":"47496@Gragus-P70@","WorkerType":"ActivityWorker","Error":"error reading from server: EOF","logging-call-at":"internal_worker_base.go:276"}
{"level":"warn","ts":"2022-05-14T18:16:03.261-0700","msg":"Failed to poll for task.","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-batcher-taskqueue","WorkerID":"47496@Gragus-P70@","WorkerType":"WorkflowWorker","Error":"error reading from server: EOF","logging-call-at":"internal_worker_base.go:276"}
{"level":"warn","ts":"2022-05-14T18:16:03.261-0700","msg":"Failed to poll for task.","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-tq-scanner-taskqueue-0","WorkerID":"47496@Gragus-P70@","WorkerType":"WorkflowWorker","Error":"error reading from server: EOF","logging-call-at":"internal_worker_base.go:276"}
{"level":"warn","ts":"2022-05-14T18:16:03.261-0700","msg":"Failed to poll for task.","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-processor-parent-close-policy","WorkerID":"47496@Gragus-P70@","WorkerType":"ActivityWorker","Error":"error reading from server: EOF","logging-call-at":"internal_worker_base.go:276"}
{"level":"warn","ts":"2022-05-14T18:16:03.261-0700","msg":"Failed to poll for task.","service":"worker","Namespace":"temporal-system","TaskQueue":"temporal-sys-batcher-taskqueue","WorkerID":"47496@Gragus-P70@","WorkerType":"ActivityWorker","Error":"error reading from server: EOF","logging-call-at":"internal_worker_base.go:276"}
{"level":"error","ts":"2022-05-14T18:16:03.264-0700","msg":"Error looking up host for shardID","component":"shard-controller","address":"127.0.0.1:63796","error":"Not enough hosts to serve the request","operation-result":"OperationFailed","shard-id":1,"logging-call-at":"controller_impl.go:335","stacktrace":"go.temporal.io/server/common/log.(*zapLogger).Error\n\tC:/Users/gregp/go/pkg/mod/go.temporal.io/[email protected]/common/log/zap_logger.go:142\ngo.temporal.io/server/service/history/shard.(*ControllerImpl).acquireShards.func1\n\tC:/Users/gregp/go/pkg/mod/go.temporal.io/[email protected]/service/history/shard/controller_impl.go:335"}
{"level":"info","ts":"2022-05-14T18:16:03.268-0700","msg":"RuntimeMetricsReporter stopped","service":"matching","logging-call-at":"runtime.go:146"}
{"level":"info","ts":"2022-05-14T18:16:03.291-0700","msg":"RuntimeMetricsReporter stopped","service":"frontend","logging-call-at":"runtime.go:146"}
{"level":"info","ts":"2022-05-14T18:16:03.298-0700","msg":"none","component":"shard-controller","address":"127.0.0.1:63796","lifecycle":"Stopping","logging-call-at":"controller_impl.go:372"}
{"level":"info","ts":"2022-05-14T18:16:03.300-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","lifecycle":"Stopping","component":"shard-engine","logging-call-at":"context_impl.go:1406"}
{"level":"info","ts":"2022-05-14T18:16:03.301-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"history-engine","lifecycle":"Stopping","logging-call-at":"historyEngine.go:273"}
{"level":"info","ts":"2022-05-14T18:16:03.302-0700","msg":"Timer queue processor pump shutting down.","shard-id":1,"address":"127.0.0.1:63796","component":"timer-queue-processor","cluster-name":"active","component":"timer-queue-processor","logging-call-at":"timerQueueProcessorBase.go:188"}
{"level":"info","ts":"2022-05-14T18:16:03.302-0700","msg":"Timer processor exiting.","shard-id":1,"address":"127.0.0.1:63796","component":"timer-queue-processor","cluster-name":"active","component":"timer-queue-processor","logging-call-at":"timerQueueProcessorBase.go:189"}
{"level":"info","ts":"2022-05-14T18:16:03.303-0700","msg":"Task processor shutdown.","shard-id":1,"address":"127.0.0.1:63796","component":"timer-queue-processor","cluster-name":"active","component":"timer-queue-processor","logging-call-at":"taskProcessor.go:155"}
{"level":"info","ts":"2022-05-14T18:16:03.303-0700","msg":"Timer queue processor stopped.","shard-id":1,"address":"127.0.0.1:63796","component":"timer-queue-processor","cluster-name":"active","component":"timer-queue-processor","logging-call-at":"timerQueueProcessorBase.go:169"}
{"level":"info","ts":"2022-05-14T18:16:03.304-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"visibility-queue-processor","lifecycle":"Stopping","component":"transfer-queue-processor","logging-call-at":"queueProcessor.go:156"}
{"level":"info","ts":"2022-05-14T18:16:03.304-0700","msg":"Queue processor pump shut down.","shard-id":1,"address":"127.0.0.1:63796","component":"visibility-queue-processor","logging-call-at":"queueProcessor.go:231"}
{"level":"info","ts":"2022-05-14T18:16:03.305-0700","msg":"Task processor shutdown.","shard-id":1,"address":"127.0.0.1:63796","component":"visibility-queue-processor","logging-call-at":"taskProcessor.go:155"}
{"level":"info","ts":"2022-05-14T18:16:03.305-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"visibility-queue-processor","lifecycle":"Stopped","component":"transfer-queue-processor","logging-call-at":"queueProcessor.go:169"}
{"level":"info","ts":"2022-05-14T18:16:03.306-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"transfer-queue-processor","cluster-name":"active","lifecycle":"Stopping","component":"transfer-queue-processor","logging-call-at":"queueProcessor.go:156"}
{"level":"info","ts":"2022-05-14T18:16:03.307-0700","msg":"Queue processor pump shut down.","shard-id":1,"address":"127.0.0.1:63796","component":"transfer-queue-processor","cluster-name":"active","logging-call-at":"queueProcessor.go:231"}
{"level":"info","ts":"2022-05-14T18:16:03.310-0700","msg":"Task processor shutdown.","shard-id":1,"address":"127.0.0.1:63796","component":"transfer-queue-processor","cluster-name":"active","logging-call-at":"taskProcessor.go:155"}
{"level":"info","ts":"2022-05-14T18:16:03.310-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"transfer-queue-processor","cluster-name":"active","lifecycle":"Stopped","component":"transfer-queue-processor","logging-call-at":"queueProcessor.go:169"}
{"level":"info","ts":"2022-05-14T18:16:03.311-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","component":"history-engine","lifecycle":"Stopped","logging-call-at":"historyEngine.go:288"}
{"level":"info","ts":"2022-05-14T18:16:03.311-0700","msg":"none","shard-id":1,"address":"127.0.0.1:63796","lifecycle":"Stopped","component":"shard-engine","logging-call-at":"context_impl.go:1408"}
{"level":"info","ts":"2022-05-14T18:16:03.312-0700","msg":"none","component":"shard-controller","address":"127.0.0.1:63796","lifecycle":"Stopped","logging-call-at":"controller_impl.go:142"}
{"level":"info","ts":"2022-05-14T18:16:03.313-0700","msg":"ShutdownHandler: Waiting for traffic to drain","service":"history","logging-call-at":"service.go:145"}
{"level":"info","ts":"2022-05-14T18:16:03.314-0700","msg":"ShutdownHandler: No longer taking rpc requests","service":"history","logging-call-at":"service.go:148"}
{"level":"info","ts":"2022-05-14T18:16:03.314-0700","msg":"Replication task fetchers stopped.","logging-call-at":"replicationTaskFetcher.go:160"}
{"level":"info","ts":"2022-05-14T18:16:03.315-0700","msg":"history stopped","service":"history","logging-call-at":"service.go:157"}
{"level":"info","ts":"2022-05-14T18:16:03.316-0700","msg":"RuntimeMetricsReporter stopped","service":"history","logging-call-at":"runtime.go:146"}
All services are stopped.

Tag releases

Is your feature request related to a problem? Please describe.

It seems goreleaser is setup, but there are no tags to trigger releases to build binaries. Having downloadable binaries helps users of Temporalite who don't want to build. For my use case in particular, the Python SDK would love to download and run Temporalite instead of building it in CI.

Describe the solution you'd like

Tag releases. Granted I can't figure out what the best release numbering scheme would be considering this is also a Go library so must remain on semver, but it may make sense to align with server version.

(this is obviously non-urgent as building Temporalite is trivial)

Unable to upgrade to Temporal 1.20 due to missing Internal frontend configuration

Expected Behavior

I am trying to upgrade Temporalite to Temporal 1.20. When I update go.mod to have the following dependencies:

	go.temporal.io/api v1.18.2-0.20230324225508-f2c7ab685b44
	go.temporal.io/sdk v1.21.2
	go.temporal.io/server v1.20.2

go test should pass after the upgrade.

Actual Behavior

go test fails with the following error:

go test ./...
?   	github.com/temporalio/temporalite	[no test files]
?   	github.com/temporalio/temporalite/internal/copyright	[no test files]
?   	github.com/temporalio/temporalite/internal/examples/helloworld	[no test files]
?   	github.com/temporalio/temporalite/internal/examples/mtls	[no test files]
?   	github.com/temporalio/temporalite/internal/liteconfig	[no test files]
2023/05/08 16:44:22 INFO  No logger configured for temporal client. Created default one.
[Fx] PROVIDE	*pprof.PProfInitializerImpl <= go.temporal.io/server/common/pprof.NewInitializer()
[Fx] PROVIDE	*temporal.ServerImpl <= go.temporal.io/server/temporal.NewServerFxImpl()
[Fx] PROVIDE	temporal.Server <= go.temporal.io/server/temporal.glob..func9()
[Fx] SUPPLY	[]temporal.ServerOption
[Fx] PROVIDE	*temporal.serverOptions <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	chan interface {} <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	*config.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	*config.PProf <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	log.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	resource.ServiceNames <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	resource.NamespaceLogger <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	resolver.ServiceResolver <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	client.AbstractDataStoreFactory <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	searchattribute.Mapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	[]grpc.UnaryServerInterceptor <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	authorization.Authorizer <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	authorization.ClaimMapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	authorization.JWTAudienceMapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	log.Logger <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	client.FactoryProvider <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	dynamicconfig.Client <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	*dynamicconfig.Collection <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	encryption.TLSConfigProvider <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	*client.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	client.Client <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	metrics.Handler <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	[]trace.SpanExporter <= go.temporal.io/server/temporal.glob..func2()
[Fx] PROVIDE	client.FactoryProviderFn <= go.temporal.io/server/temporal.PersistenceFactoryProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.HistoryServiceProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.MatchingServiceProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.FrontendServiceProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.InternalFrontendServiceProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.WorkerServiceProvider()
[Fx] PROVIDE	*cluster.Config <= go.temporal.io/server/temporal.ApplyClusterMetadataConfigProvider()
[Fx] PROVIDE	config.Persistence <= go.temporal.io/server/temporal.ApplyClusterMetadataConfigProvider()
[Fx] PROVIDE	fx.Lifecycle <= go.uber.org/fx.New.func1()
[Fx] PROVIDE	fx.Shutdowner <= go.uber.org/fx.(*App).shutdowner-fm()
[Fx] PROVIDE	fx.DotGraph <= go.uber.org/fx.(*App).dotGraph-fm()
[Fx] ERROR		Failed to initialize custom logger: could not build arguments for function "go.uber.org/fx".(*App).constructCustomLogger.func2
	/Users/hartmut.ferentschik/go/pkg/mod/go.uber.org/[email protected]/app.go:414:
failed to build fxevent.Logger:
could not build arguments for function "go.temporal.io/server/temporal".glob..func8
	/Users/hartmut.ferentschik/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:1025:
failed to build log.Logger:
received non-nil error from function "go.temporal.io/server/temporal".ServerOptionsProvider
	/Users/hartmut.ferentschik/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:159:
config validation error: "internal-frontend" service is missing in config
Server closed with error: unable to instantiate server: could not build arguments for function "go.uber.org/fx".(*App).constructCustomLogger.func2 (/Users/hartmut.ferentschik/go/pkg/mod/go.uber.org/[email protected]/app.go:414): failed to build fxevent.Logger: could not build arguments for function "go.temporal.io/server/temporal".glob..func8 (/Users/hartmut.ferentschik/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:1025): failed to build log.Logger: received non-nil error from function "go.temporal.io/server/temporal".ServerOptionsProvider (/Users/hartmut.ferentschik/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:159): config validation error: "internal-frontend" service is missing in config
2023/05/08 16:44:22 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:22 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:23 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:24 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:25 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:26 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
2023/05/08 16:44:27 INFO  No logger configured for temporal client. Created default one.
--- FAIL: TestCreateDataDirectory (5.28s)
    --- FAIL: TestCreateDataDirectory/default_db_path (5.27s)
        main_test.go:110: failed reaching server: last connection error: connection error: desc = "transport: Error while dialing: dial tcp [::1]:57199: connect: connection refused"
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
	panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x20 pc=0x1020522e4]

goroutine 11 [running]:
testing.tRunner.func1.2({0x103b501c0, 0x1051f4030})
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1526 +0x1c8
testing.tRunner.func1()
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1529 +0x384
panic({0x103b501c0, 0x1051f4030})
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/runtime/panic.go:884 +0x204
github.com/temporalio/temporalite/cmd/temporalite.assertServerHealth(_, {_, _}, {{0x14000a103b0, 0xf}, {0x102073ef2, 0xf}, {0x0, 0x0}, {0x0, ...}, ...})
	/Users/hartmut.ferentschik/go/src/github.com/temporalio/temporalite/cmd/temporalite/main_test.go:113 +0x134
github.com/temporalio/temporalite/cmd/temporalite.TestCreateDataDirectory.func3(0x14000583d40)
	/Users/hartmut.ferentschik/go/src/github.com/temporalio/temporalite/cmd/temporalite/main_test.go:178 +0x1e0
testing.tRunner(0x14000583d40, 0x140009fd080)
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1576 +0x10c
created by testing.(*T).Run
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1629 +0x368
FAIL	github.com/temporalio/temporalite/cmd/temporalite	6.469s
[Fx] PROVIDE	*pprof.PProfInitializerImpl <= go.temporal.io/server/common/pprof.NewInitializer()
[Fx] PROVIDE	*temporal.ServerImpl <= go.temporal.io/server/temporal.NewServerFxImpl()
[Fx] PROVIDE	temporal.Server <= go.temporal.io/server/temporal.glob..func9()
[Fx] SUPPLY	[]temporal.ServerOption
[Fx] PROVIDE	*temporal.serverOptions <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	chan interface {} <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	*config.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	*config.PProf <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	log.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	resource.ServiceNames <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	resource.NamespaceLogger <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	resolver.ServiceResolver <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	client.AbstractDataStoreFactory <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	searchattribute.Mapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	[]grpc.UnaryServerInterceptor <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	authorization.Authorizer <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	authorization.ClaimMapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	authorization.JWTAudienceMapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	log.Logger <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	client.FactoryProvider <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	dynamicconfig.Client <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	*dynamicconfig.Collection <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	encryption.TLSConfigProvider <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	*client.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	client.Client <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	metrics.Handler <= go.temporal.io/server/temporal.ServerOptionsProvider()
[Fx] PROVIDE	[]trace.SpanExporter <= go.temporal.io/server/temporal.glob..func2()
[Fx] PROVIDE	client.FactoryProviderFn <= go.temporal.io/server/temporal.PersistenceFactoryProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.HistoryServiceProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.MatchingServiceProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.FrontendServiceProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.InternalFrontendServiceProvider()
[Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.WorkerServiceProvider()
[Fx] PROVIDE	*cluster.Config <= go.temporal.io/server/temporal.ApplyClusterMetadataConfigProvider()
[Fx] PROVIDE	config.Persistence <= go.temporal.io/server/temporal.ApplyClusterMetadataConfigProvider()
[Fx] PROVIDE	fx.Lifecycle <= go.uber.org/fx.New.func1()
[Fx] PROVIDE	fx.Shutdowner <= go.uber.org/fx.(*App).shutdowner-fm()
[Fx] PROVIDE	fx.DotGraph <= go.uber.org/fx.(*App).dotGraph-fm()
[Fx] ERROR		Failed to initialize custom logger: could not build arguments for function "go.uber.org/fx".(*App).constructCustomLogger.func2
	/Users/hartmut.ferentschik/go/pkg/mod/go.uber.org/[email protected]/app.go:414:
failed to build fxevent.Logger:
could not build arguments for function "go.temporal.io/server/temporal".glob..func8
	/Users/hartmut.ferentschik/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:1025:
failed to build log.Logger:
received non-nil error from function "go.temporal.io/server/temporal".ServerOptionsProvider
	/Users/hartmut.ferentschik/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:159:
config validation error: "internal-frontend" service is missing in config
--- FAIL: TestNewServer (0.01s)
    server.go:39: error creating server: unable to instantiate server: could not build arguments for function "go.uber.org/fx".(*App).constructCustomLogger.func2 (/Users/hartmut.ferentschik/go/pkg/mod/go.uber.org/[email protected]/app.go:414): failed to build fxevent.Logger: could not build arguments for function "go.temporal.io/server/temporal".glob..func8 (/Users/hartmut.ferentschik/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:1025): failed to build log.Logger: received non-nil error from function "go.temporal.io/server/temporal".ServerOptionsProvider (/Users/hartmut.ferentschik/go/pkg/mod/go.temporal.io/[email protected]/temporal/fx.go:159): config validation error: "internal-frontend" service is missing in config
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
	panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x10 pc=0x1027f318c]

goroutine 10 [running]:
testing.tRunner.func1.2({0x102f83b80, 0x104566f90})
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1526 +0x1c8
testing.tRunner.func1()
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1529 +0x384
panic({0x102f83b80, 0x104566f90})
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/runtime/panic.go:884 +0x204
github.com/temporalio/temporalite.(*Server).Stop(0x0)
	/Users/hartmut.ferentschik/go/src/github.com/temporalio/temporalite/server.go:144 +0x1c
github.com/temporalio/temporalite/temporaltest.(*TestServer).Stop(0x1400042d080)
	/Users/hartmut.ferentschik/go/src/github.com/temporalio/temporalite/temporaltest/server.go:116 +0xbc
github.com/temporalio/temporalite/temporaltest.NewServer.func1()
	/Users/hartmut.ferentschik/go/src/github.com/temporalio/temporalite/temporaltest/server.go:142 +0x20
testing.(*common).Cleanup.func1()
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1150 +0x100
testing.(*common).runCleanup(0x140005c3040, 0x0?)
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1328 +0xd8
testing.tRunner.func2()
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1570 +0x2c
runtime.Goexit()
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/runtime/panic.go:522 +0x180
testing.(*common).FailNow(0x140005c3040)
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:980 +0x44
testing.(*common).Fatal(0x140005c3040, {0x14000ae5c50?, 0x14000ae5c50?, 0x1?})
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1057 +0x54
github.com/temporalio/temporalite/temporaltest.(*TestServer).fatal(...)
	/Users/hartmut.ferentschik/go/src/github.com/temporalio/temporalite/temporaltest/server.go:39
github.com/temporalio/temporalite/temporaltest.NewServer({0x14000aace18, 0x1, 0x59a00000006?})
	/Users/hartmut.ferentschik/go/src/github.com/temporalio/temporalite/temporaltest/server.go:158 +0x62c
github.com/temporalio/temporalite/temporaltest_test.TestNewServer(0x140005c3040)
	/Users/hartmut.ferentschik/go/src/github.com/temporalio/temporalite/temporaltest/server_test.go:58 +0xc8
testing.tRunner(0x140005c3040, 0x1033005c8)
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1576 +0x10c
created by testing.(*T).Run
	/opt/homebrew/Cellar/go/1.20.3/libexec/src/testing/testing.go:1629 +0x368
FAIL	github.com/temporalio/temporalite/temporaltest	0.619s
FAIL

Specifications

  • Version: trunk
  • Platform: macOS

I believe the problem is the following code - https://github.com/temporalio/temporalite/blob/c5c2ad375e186a1eb5eb00cd04d7caae0198085c/server.go#L90:

	serverOpts := []temporal.ServerOption{
		temporal.WithConfig(cfg),
		temporal.ForServices(temporal.Services),
		temporal.WithLogger(c.Logger),
		temporal.WithAuthorizer(authorizer),
		temporal.WithClaimMapper(func(cfg *config.Config) authorization.ClaimMapper {
			return claimMapper
		}),
	}

temporal.Services is a list of all Temporal services. In Temporal 1.20 there is a new service "Internal frontend" which is added this way. However, the required configuration for internal frontend is missing. I think for Temporalite it makes sense to eventually make use of internal frontend, but a intermediate step could be the following:

	services := []string{
		string(primitives.FrontendService),
		string(primitives.HistoryService),
		string(primitives.MatchingService),
		string(primitives.WorkerService),
	}
	serverOpts := []temporal.ServerOption{
		temporal.WithConfig(cfg),
		temporal.ForServices(services),
		temporal.WithLogger(c.Logger),
		temporal.WithAuthorizer(authorizer),
		temporal.WithClaimMapper(func(cfg *config.Config) authorization.ClaimMapper {
			return claimMapper
		}),
	}

This excludes the internal frontend service for now.

Support for user specified server/sdk versions

Is your feature request related to a problem? Please describe.
Hi,

First of all, thank you for all the great work on Temporal and Temporalite; I am "sort of" new here and am looking forward to incorporating Temporal framework into my project!

Would it be possible to use Temporalite to support the testing of different server and/or sdk versions? For example, if I have a project that was running sdk version 1.6 and server version 1.13; would it be possible to start Temporalite with those specifications for unit testing purposes?

Describe the solution you'd like
Ability to start Temporalite with a configuration file or add command line arguments to specify server and sdk version.

Describe alternatives you've considered
The only alternative I am aware of is to use docker-compose to run an actual dev Temporal server cluster with a specified version.

Additional context
I had evaluated Temporal.io a couple of years back with sdk 1.2 (Temporal's Java sdk) and really liked how Temporal as a micro-service orchestration framework. Due to other priorities, I had to switch my focus and only recently started to revisit/incorporate Temporal into my project. I was pleasantly surprised and encouraged to see the tremendous progress the team had made, obviously, the evaluation code I wrote can simply be updated to work on the latest versions. As I proceed to refresh my old dev cluster with updated docker-compose, I saw Temporalite as an alternative to running a dev cluster and decided to give it a try. I think Temporalite is an extremely valuable tool for developers to test their workflow locally (and run CI) but I couldn't stop thinking what if a team's production environment is running a slightly older version, how could we make it easier for development teams to use Temporalite across server/sdk versions.

github.com/temporalio/ui-server/v2-v2.7.1: 2 vulnerabilities (highest severity is: 6.1) - autoclosed

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.7.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.7.1.zip

Found in HEAD commit: 61fc4f32a63860c6ff5fbd83dc393bc623f432ed

Vulnerabilities

CVE Severity CVSS Dependency Type Fixed in Remediation Available
WS-2021-0461 Medium 6.1 github.com/temporalio/ui-server/v2-v2.7.1 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3
CVE-2018-25031 Medium 4.3 github.com/temporalio/ui-server/v2-v2.7.1 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Details

WS-2021-0461

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.7.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.7.1.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.7.1 (Vulnerable Library)

Found in HEAD commit: 61fc4f32a63860c6ff5fbd83dc393bc623f432ed

Found in base branch: main

Vulnerability Details

SwaggerUI supports displaying remote OpenAPI definitions through the ?url parameter. This enables robust demonstration capabilities on sites like petstore.swagger.io, editor.swagger.io, and similar sites, where users often want to see what their OpenAPI definitions would look like rendered.

However, this functionality may pose a risk for users who host their own SwaggerUI instances. In particular, including remote OpenAPI definitions opens a vector for phishing attacks by abusing the trusted names/domains of self-hosted instances.

Resolution:
We've made the decision to disable query parameters (#4872) by default starting with SwaggerUI version 4.1.3. Please update to this version when it becomes available (ETA: 2021 December). Users will still be able to be re-enable the options at their discretion. We'll continue to enable query parameters on the Swagger demo sites.

Publish Date: 2021-12-09

URL: WS-2021-0461

CVSS 3 Score Details (6.1)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Changed
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: Low
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2021-12-09

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

CVE-2018-25031

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.7.1

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.7.1.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.7.1 (Vulnerable Library)

Found in HEAD commit: 61fc4f32a63860c6ff5fbd83dc393bc623f432ed

Found in base branch: main

Vulnerability Details

Swagger UI before 4.1.3 could allow a remote attacker to conduct spoofing attacks. By persuading a victim to open a crafted URL, an attacker could exploit this vulnerability to display remote OpenAPI definitions.

Publish Date: 2022-03-11

URL: CVE-2018-25031

CVSS 3 Score Details (4.3)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: None
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2022-03-11

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

github.com/temporalio/ui-server/v2-v2.8.0: 2 vulnerabilities (highest severity is: 6.1) - autoclosed

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.8.0

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.8.0.zip

Found in HEAD commit: 4d2846ea5a1ebd31054fa47f97595d3be1ea3538

Vulnerabilities

CVE Severity CVSS Dependency Type Fixed in (github.com/temporalio/ui-server/v2-v2.8.0 version) Remediation Available
WS-2021-0461 Medium 6.1 github.com/temporalio/ui-server/v2-v2.8.0 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3
CVE-2018-25031 Medium 4.3 github.com/temporalio/ui-server/v2-v2.8.0 Direct swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Details

WS-2021-0461

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.8.0

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.8.0.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.8.0 (Vulnerable Library)

Found in HEAD commit: 4d2846ea5a1ebd31054fa47f97595d3be1ea3538

Found in base branch: main

Vulnerability Details

SwaggerUI supports displaying remote OpenAPI definitions through the ?url parameter. This enables robust demonstration capabilities on sites like petstore.swagger.io, editor.swagger.io, and similar sites, where users often want to see what their OpenAPI definitions would look like rendered.

However, this functionality may pose a risk for users who host their own SwaggerUI instances. In particular, including remote OpenAPI definitions opens a vector for phishing attacks by abusing the trusted names/domains of self-hosted instances.

Resolution:
We've made the decision to disable query parameters (#4872) by default starting with SwaggerUI version 4.1.3. Please update to this version when it becomes available (ETA: 2021 December). Users will still be able to be re-enable the options at their discretion. We'll continue to enable query parameters on the Swagger demo sites.

Publish Date: 2021-12-09

URL: WS-2021-0461

CVSS 3 Score Details (6.1)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Changed
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: Low
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2021-12-09

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

CVE-2018-25031

Vulnerable Library - github.com/temporalio/ui-server/v2-v2.8.0

Golang Server for https://github.com/temporalio/ui

Library home page: https://proxy.golang.org/github.com/temporalio/ui-server/v2/@v/v2.8.0.zip

Dependency Hierarchy:

  • github.com/temporalio/ui-server/v2-v2.8.0 (Vulnerable Library)

Found in HEAD commit: 4d2846ea5a1ebd31054fa47f97595d3be1ea3538

Found in base branch: main

Vulnerability Details

Swagger UI before 4.1.3 could allow a remote attacker to conduct spoofing attacks. By persuading a victim to open a crafted URL, an attacker could exploit this vulnerability to display remote OpenAPI definitions.

Publish Date: 2022-03-11

URL: CVE-2018-25031

CVSS 3 Score Details (4.3)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: Required
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: Low
    • Integrity Impact: None
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: GHSA-qrmm-w75w-3wpx

Release Date: 2022-03-11

Fix Resolution: swagger-ui - 4.1.3;swagger-ui-dist - 4.1.3

Does not build on Windows

Expected Behavior

Builds on Windows.

Actual Behavior

Not building. From a fresh recursive git clone, a go build ./cmd/temporalite gives:

C:\Users\user\go\pkg\mod\github.com\temporalio\[email protected]\server\server.go:47:113: pattern generated/ui/_app/assets/pages/namespaces/\[namespace\]/queues/\[queue\]/*: syntax error in pattern

Since the UI server was added, https://github.com/temporalio/ui-server/issues/104 is causing problems with Windows build. Supporting the UI as a build flag (or one prefixed with a bang for opt-out) per #33 could alleviate this temporarily. Also, I'd recommend adding Windows do the CI workflow.

This is on Go 1.17.7. I have not investigated the fix, this is just for tracking.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.