Missing feature in latest temporal web ui - Navigation to child workflow execution via hyperlink

Hi,

As per old temporal ui version, we were able to navigate to the child workflow run execution via the hyperlink(i.e value that is shown beside the workflowExecution.runId attribute in ChildWorkflowExecutionStarted state transition) as shown below :

But unable to navigate in similar fashion in latest temporal web ui :

Any plans to incorporate the same feature in latest web ui as well?

Hi, what version of temporalio/ui image are you using?
Trying with 2.10.3 and see the link available in ChildWorkflowExecutionStarted event:

Looks like latest image is getting deployed as below :

Maybe you have the “latest” cached. Try setting version explicitly:

image: temporalio/ui:2.10.0

I am trying to deploy using below docker compose file :

version: "3.5"
services:
  temporal:
    container_name: temporal
    image: temporalio/auto-setup:1.20.0
    networks:
      - temporal-network
    ports:
      - 7233:7233
    volumes:
      - ./dynamicconfig:/etc/temporal/config/dynamicconfig
    environment:
      - DB=postgresql
      - DB_PORT=5433
      - DBNAME=temporal
      - VISIBILITY_DBNAME=temporal_visibility
      - POSTGRES_USER=yugabyte
      - POSTGRES_PWD=yugabyte
      - POSTGRES_SEEDS=host.docker.internal
      - DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development.yaml
  temporal-admin-tools:
    container_name: temporal-admin-tools
    image: temporalio/admin-tools:1.20.0
    depends_on:
      - temporal
    networks:
      - temporal-network
    stdin_open: true
    tty: true
    environment:
      - TEMPORAL_CLI_ADDRESS=temporal:7233
  temporal-ui:
    container_name: temporal-ui
    image: temporalio/ui:2.10.3
    depends_on:
      - temporal
    environment:
      - TEMPORAL_ADDRESS=temporal:7233
    networks:
      - temporal-network
    ports:
      - 8080:8080
  temporal-web:
    container_name: temporal-web
    image: temporalio/web
    networks:
      - temporal-network
    ports:
      - 8088:8088
    depends_on:
      - temporal
    environment:
      - TEMPORAL_GRPC_ENDPOINT=temporal:7233
      - TEMPORAL_PERMIT_WRITE_API=true

networks:
  temporal-network:
    driver: bridge
    name: temporal-network

Facing issue as below :

[36mtemporal                |e[0m 	/home/builder/temporal/temporal/fx.go:159:
e[36mtemporal                |e[0m sql schema version compatibility check failed: version mismatch for keyspace/database: "temporal". Expected version: 1.9 cannot be greater than Actual version: 1.7
e[36mtemporal                |e[0m Unable to create server. Error: could not build arguments for function "go.uber.org/fx".(*App).constructCustomLogger.func2 (/go/pkg/mod/go.uber.org/fx@v1.18.2/app.go:414): failed to build fxevent.Logger: could not build arguments for function "go.temporal.io/server/temporal".glob..func8 (/home/builder/temporal/temporal/fx.go:1013): failed to build log.Logger: received non-nil error from function "go.temporal.io/server/temporal".ServerOptionsProvider (/home/builder/temporal/temporal/fx.go:159): sql schema version compatibility check failed: version mismatch for keyspace/database: "temporal". Expected version: 1.9 cannot be greater than Actual version: 1.7.
e[32mtemporal-ui             |e[0m {"time":"2023-03-01T06:38:56.275888213Z","id":"","remote_ip":"192.168.240.1","host":"localhost:8080","method":"GET","uri":"/_app/version.json","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36","status":200,"error":"","latency":330667,"latency_human":"330.667µs","bytes_in":0,"bytes_out":27}
e[36mtemporal exited with code 1

Can you please help on the same.

Is your postgres container running?
“Version mismatch” errors typically mean the db is not initialized. If you can share your postgres service compose definition too I can try to reproduce.

As attached in above docker-compose, I am pointing to a yugabyte database that is deployed as part of different docker compose file.

I can see the temporal database created with below details :

But unable to see temporal_visibility database.

Detailed logs as below :

[36mtemporal                |e[0m 2023-03-02T05:00:07.768Z	e[35mDEBUGe[0m	Schema updated from 1.5 to 1.6	{"logging-call-at": "updatetask.go:143"}
e[36mtemporal                |e[0m 2023-03-02T05:00:07.768Z	e[35mDEBUGe[0m	---- Executing updates for version 1.7 ----	{"logging-call-at": "updatetask.go:151"}
e[36mtemporal                |e[0m 2023-03-02T05:00:07.768Z	e[35mDEBUGe[0m	CREATE TABLE cluster_metadata_info ( metadata_partition INTEGER NOT NULL, cluster_name VARCHAR(255) NOT NULL, data BYTEA NOT NULL, data_encoding VARCHAR(16) NOT NULL, version BIGINT NOT NULL, PRIMARY KEY(metadata_partition, cluster_name) );	{"logging-call-at": "updatetask.go:153"}
e[36mtemporal                |e[0m 2023-03-02T05:00:08.237Z	e[35mDEBUGe[0m	ALTER TABLE current_executions ALTER COLUMN start_version SET DEFAULT 0;	{"logging-call-at": "updatetask.go:153"}
e[36mtemporal                |e[0m 2023-03-02T05:00:08.294Z	e[35mDEBUGe[0m	CREATE TABLE tiered_storage_tasks( shard_id INTEGER NOT NULL, task_id BIGINT NOT NULL, data BYTEA NOT NULL, data_encoding VARCHAR(16) NOT NULL, PRIMARY KEY (shard_id, task_id) );	{"logging-call-at": "updatetask.go:153"}
e[36mtemporal                |e[0m 2023-03-02T05:00:08.834Z	e[35mDEBUGe[0m	---- Done ----	{"logging-call-at": "updatetask.go:159"}
e[36mtemporal                |e[0m 2023-03-02T05:00:08.862Z	e[35mDEBUGe[0m	Schema updated from 1.6 to 1.7	{"logging-call-at": "updatetask.go:143"}
e[36mtemporal                |e[0m 2023-03-02T05:00:08.862Z	e[35mDEBUGe[0m	---- Executing updates for version 1.8 ----	{"logging-call-at": "updatetask.go:151"}
e[36mtemporal                |e[0m 2023-03-02T05:00:08.862Z	e[35mDEBUGe[0m	DROP TABLE tiered_storage_tasks;	{"logging-call-at": "updatetask.go:153"}
e[36mtemporal                |e[0m 2023-03-02T05:00:09.169Z	e[35mDEBUGe[0m	ALTER TABLE current_executions ALTER COLUMN create_request_id TYPE VARCHAR(255);	{"logging-call-at": "updatetask.go:153"}
e[36mtemporal                |e[0m 2023-03-02T05:00:09.244Z	e[35mDEBUGe[0m	ALTER TABLE signals_requested_sets ALTER COLUMN signal_id TYPE VARCHAR(255);	{"logging-call-at": "updatetask.go:153"}
e[36mtemporal                |e[0m 2023-03-02T05:00:10.902Z	e[31mERRORe[0m	Unable to update SQL schema.	{"error": "error executing statement:pq: could not open relation with OID 55700", "logging-call-at": "handler.go:78"}
e[36mtemporal                |e[0m 2023/03/02 05:00:11 Loading config; env=docker,zone=,configDir=config
e[36mtemporal                |e[0m 2023/03/02 05:00:11 Loading config files=[config/docker.yaml]
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.147Z","msg":"Build info.","git-time":"2023-02-17T00:53:28.000Z","git-revision":"b313b7f586415f98dde332c6b4d1801e48b187a4","git-modified":false,"go-arch":"arm64","go-os":"linux","go-version":"go1.19.5","cgo-enabled":false,"server-version":"1.20.0","debug-mode":false,"logging-call-at":"main.go:143"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: system.advancedvisibilitywritingmode oldValue: nil newValue: { constraints: {} value: off }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: frontend.historymgrnumconns oldValue: nil newValue: { constraints: {} value: 10 }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: history.historymgrnumconns oldValue: nil newValue: { constraints: {} value: 50 }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: system.forcesearchattributescacherefreshonread oldValue: nil newValue: { constraints: {} value: true }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: history.defaultworkflowretrypolicy oldValue: nil newValue: { constraints: {} value: map[BackoffCoefficient:2 InitialIntervalInSeconds:1 MaximumAttempts:0 MaximumIntervalCoefficient:100] }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: history.persistencemaxqps oldValue: nil newValue: { constraints: {} value: 3000 }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: history.defaultactivityretrypolicy oldValue: nil newValue: { constraints: {} value: map[BackoffCoefficient:2 InitialIntervalInSeconds:1 MaximumAttempts:0 MaximumIntervalCoefficient:100] }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: frontend.persistencemaxqps oldValue: nil newValue: { constraints: {} value: 3000 }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: frontend.throttledlogrps oldValue: nil newValue: { constraints: {} value: 20 }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"dynamic config changed for the key: frontend.enableclientversioncheck oldValue: nil newValue: { constraints: {} value: true }","logging-call-at":"file_based_client.go:275"}
e[36mtemporal                |e[0m {"level":"info","ts":"2023-03-02T05:00:11.165Z","msg":"Updated dynamic config","logging-call-at":"file_based_client.go:195"}
e[36mtemporal                |e[0m {"level":"warn","ts":"2023-03-02T05:00:11.165Z","msg":"Not using any authorizer and flag `--allow-no-auth` not detected. Future versions will require using the flag `--allow-no-auth` if you do not want to set an authorizer.","logging-call-at":"main.go:173"}
e[36mtemporal                |e[0m [Fx] PROVIDE	*pprof.PProfInitializerImpl <= go.temporal.io/server/common/pprof.NewInitializer()
e[36mtemporal                |e[0m [Fx] PROVIDE	*temporal.ServerImpl <= go.temporal.io/server/temporal.NewServerFxImpl()
e[36mtemporal                |e[0m [Fx] PROVIDE	temporal.Server <= go.temporal.io/server/temporal.glob..func9()
e[36mtemporal                |e[0m [Fx] SUPPLY	[]temporal.ServerOption
e[36mtemporal                |e[0m [Fx] PROVIDE	*temporal.serverOptions <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	chan interface {} <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*config.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*config.PProf <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	log.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	resource.ServiceNames <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	resource.NamespaceLogger <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	resolver.ServiceResolver <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	client.AbstractDataStoreFactory <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	searchattribute.Mapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	[]grpc.UnaryServerInterceptor <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	authorization.Authorizer <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	authorization.ClaimMapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	authorization.JWTAudienceMapper <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	log.Logger <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	client.FactoryProvider <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	dynamicconfig.Client <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*dynamicconfig.Collection <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	encryption.TLSConfigProvider <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*client.Config <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	client.Client <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	metrics.Handler <= go.temporal.io/server/temporal.ServerOptionsProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	[]trace.SpanExporter <= go.temporal.io/server/temporal.glob..func2()
e[36mtemporal                |e[0m [Fx] PROVIDE	client.FactoryProviderFn <= go.temporal.io/server/temporal.PersistenceFactoryProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.HistoryServiceProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.MatchingServiceProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.FrontendServiceProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.InternalFrontendServiceProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*temporal.ServicesMetadata[group = "services"] <= go.temporal.io/server/temporal.WorkerServiceProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	*cluster.Config <= go.temporal.io/server/temporal.ApplyClusterMetadataConfigProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	config.Persistence <= go.temporal.io/server/temporal.ApplyClusterMetadataConfigProvider()
e[36mtemporal                |e[0m [Fx] PROVIDE	fx.Lifecycle <= go.uber.org/fx.New.func1()
e[36mtemporal                |e[0m [Fx] PROVIDE	fx.Shutdowner <= go.uber.org/fx.(*App).shutdowner-fm()
e[36mtemporal                |e[0m [Fx] PROVIDE	fx.DotGraph <= go.uber.org/fx.(*App).dotGraph-fm()
e[36mtemporal                |e[0m [Fx] ERROR		Failed to initialize custom logger: could not build arguments for function "go.uber.org/fx".(*App).constructCustomLogger.func2
e[36mtemporal                |e[0m 	/go/pkg/mod/go.uber.org/fx@v1.18.2/app.go:414:
e[36mtemporal                |e[0m failed to build fxevent.Logger:
e[36mtemporal                |e[0m could not build arguments for function "go.temporal.io/server/temporal".glob..func8
e[36mtemporal                |e[0m 	/home/builder/temporal/temporal/fx.go:1013:
e[36mtemporal                |e[0m failed to build log.Logger:
e[36mtemporal                |e[0m received non-nil error from function "go.temporal.io/server/temporal".ServerOptionsProvider
e[36mtemporal                |e[0m 	/home/builder/temporal/temporal/fx.go:159:
e[36mtemporal                |e[0m sql schema version compatibility check failed: version mismatch for keyspace/database: "temporal". Expected version: 1.9 cannot be greater than Actual version: 1.7
e[36mtemporal                |e[0m Unable to create server. Error: could not build arguments for function "go.uber.org/fx".(*App).constructCustomLogger.func2 (/go/pkg/mod/go.uber.org/fx@v1.18.2/app.go:414): failed to build fxevent.Logger: could not build arguments for function "go.temporal.io/server/temporal".glob..func8 (/home/builder/temporal/temporal/fx.go:1013): failed to build log.Logger: received non-nil error from function "go.temporal.io/server/temporal".ServerOptionsProvider (/home/builder/temporal/temporal/fx.go:159): sql schema version compatibility check failed: version mismatch for keyspace/database: "temporal". Expected version: 1.9 cannot be greater than Actual version: 1.7.
e[36mtemporal exited with code 1