Skip to content
This repository has been archived by the owner on Apr 3, 2024. It is now read-only.

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

Open
hferentschik opened this issue May 8, 2023 · 2 comments

Comments

@hferentschik
Copy link
Contributor

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.

@karelbilek
Copy link

I try to get 1.22 work (for advanced visibility), hitting same issue

@dilyevsky
Copy link

@hferentschik you can use temporal.DefaultServices (https://github.com/temporalio/temporal/blob/69cc69763af17a456b2ce4efc3f4f520325bedca/temporal/server.go#L59) available since 1.20

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants