aboutsummaryrefslogtreecommitdiff
path: root/cmd/dendrite-monolith-server
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2023-02-14 12:47:47 +0100
committerGitHub <noreply@github.com>2023-02-14 12:47:47 +0100
commit11d9b9db0e96c51c1430d451d23cf5ae9f36e4ee (patch)
treea0837bfa69051295b76140e3940a45fc61854cab /cmd/dendrite-monolith-server
parentcc59879faa57cac043cf5f1585773b301994bebf (diff)
Remove polylith/API mode (#2967)
This removes most of the code used for polylith/API mode. This removes the `/api` internal endpoints entirely. Binary size change roughly 5%: ``` 51437560 Feb 13 10:15 dendrite-monolith-server # old 48759008 Feb 13 10:15 dendrite-monolith-server # new ```
Diffstat (limited to 'cmd/dendrite-monolith-server')
-rw-r--r--cmd/dendrite-monolith-server/main.go178
-rw-r--r--cmd/dendrite-monolith-server/main_test.go50
2 files changed, 0 insertions, 228 deletions
diff --git a/cmd/dendrite-monolith-server/main.go b/cmd/dendrite-monolith-server/main.go
deleted file mode 100644
index 6836b642..00000000
--- a/cmd/dendrite-monolith-server/main.go
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2017 Vector Creations Ltd
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "flag"
- "os"
-
- "github.com/sirupsen/logrus"
-
- "github.com/matrix-org/dendrite/appservice"
- "github.com/matrix-org/dendrite/federationapi"
- "github.com/matrix-org/dendrite/keyserver"
- "github.com/matrix-org/dendrite/roomserver"
- "github.com/matrix-org/dendrite/roomserver/api"
- "github.com/matrix-org/dendrite/setup"
- basepkg "github.com/matrix-org/dendrite/setup/base"
- "github.com/matrix-org/dendrite/setup/config"
- "github.com/matrix-org/dendrite/setup/mscs"
- "github.com/matrix-org/dendrite/userapi"
- uapi "github.com/matrix-org/dendrite/userapi/api"
-)
-
-var (
- httpBindAddr = flag.String("http-bind-address", ":8008", "The HTTP listening port for the server")
- httpsBindAddr = flag.String("https-bind-address", ":8448", "The HTTPS listening port for the server")
- apiBindAddr = flag.String("api-bind-address", "localhost:18008", "The HTTP listening port for the internal HTTP APIs (if -api is enabled)")
- certFile = flag.String("tls-cert", "", "The PEM formatted X509 certificate to use for TLS")
- keyFile = flag.String("tls-key", "", "The PEM private key to use for TLS")
- enableHTTPAPIs = flag.Bool("api", false, "Use HTTP APIs instead of short-circuiting (warning: exposes API endpoints!)")
- traceInternal = os.Getenv("DENDRITE_TRACE_INTERNAL") == "1"
-)
-
-func main() {
- cfg := setup.ParseFlags(true)
- httpAddr := config.HTTPAddress("http://" + *httpBindAddr)
- httpsAddr := config.HTTPAddress("https://" + *httpsBindAddr)
- httpAPIAddr := httpAddr
- options := []basepkg.BaseDendriteOptions{}
- if *enableHTTPAPIs {
- logrus.Warnf("DANGER! The -api option is enabled, exposing internal APIs on %q!", *apiBindAddr)
- httpAPIAddr = config.HTTPAddress("http://" + *apiBindAddr)
- // If the HTTP APIs are enabled then we need to update the Listen
- // statements in the configuration so that we know where to find
- // the API endpoints. They'll listen on the same port as the monolith
- // itself.
- cfg.AppServiceAPI.InternalAPI.Connect = httpAPIAddr
- cfg.ClientAPI.InternalAPI.Connect = httpAPIAddr
- cfg.FederationAPI.InternalAPI.Connect = httpAPIAddr
- cfg.KeyServer.InternalAPI.Connect = httpAPIAddr
- cfg.MediaAPI.InternalAPI.Connect = httpAPIAddr
- cfg.RoomServer.InternalAPI.Connect = httpAPIAddr
- cfg.SyncAPI.InternalAPI.Connect = httpAPIAddr
- cfg.UserAPI.InternalAPI.Connect = httpAPIAddr
- options = append(options, basepkg.UseHTTPAPIs)
- }
-
- base := basepkg.NewBaseDendrite(cfg, "Monolith", options...)
- defer base.Close() // nolint: errcheck
-
- federation := base.CreateFederationClient()
-
- rsImpl := roomserver.NewInternalAPI(base)
- // call functions directly on the impl unless running in HTTP mode
- rsAPI := rsImpl
- if base.UseHTTPAPIs {
- roomserver.AddInternalRoutes(base.InternalAPIMux, rsImpl, base.EnableMetrics)
- rsAPI = base.RoomserverHTTPClient()
- }
- if traceInternal {
- rsAPI = &api.RoomserverInternalAPITrace{
- Impl: rsAPI,
- }
- }
-
- fsAPI := federationapi.NewInternalAPI(
- base, federation, rsAPI, base.Caches, nil, false,
- )
- fsImplAPI := fsAPI
- if base.UseHTTPAPIs {
- federationapi.AddInternalRoutes(base.InternalAPIMux, fsAPI, base.EnableMetrics)
- fsAPI = base.FederationAPIHTTPClient()
- }
- keyRing := fsAPI.KeyRing()
-
- keyImpl := keyserver.NewInternalAPI(base, &base.Cfg.KeyServer, fsAPI, rsAPI)
- keyAPI := keyImpl
- if base.UseHTTPAPIs {
- keyserver.AddInternalRoutes(base.InternalAPIMux, keyAPI, base.EnableMetrics)
- keyAPI = base.KeyServerHTTPClient()
- }
-
- pgClient := base.PushGatewayHTTPClient()
- userImpl := userapi.NewInternalAPI(base, &cfg.UserAPI, cfg.Derived.ApplicationServices, keyAPI, rsAPI, pgClient)
- userAPI := userImpl
- if base.UseHTTPAPIs {
- userapi.AddInternalRoutes(base.InternalAPIMux, userAPI, base.EnableMetrics)
- userAPI = base.UserAPIClient()
- }
- if traceInternal {
- userAPI = &uapi.UserInternalAPITrace{
- Impl: userAPI,
- }
- }
-
- // TODO: This should use userAPI, not userImpl, but the appservice setup races with
- // the listeners and panics at startup if it tries to create appservice accounts
- // before the listeners are up.
- asAPI := appservice.NewInternalAPI(base, userImpl, rsAPI)
- if base.UseHTTPAPIs {
- appservice.AddInternalRoutes(base.InternalAPIMux, asAPI, base.EnableMetrics)
- asAPI = base.AppserviceHTTPClient()
- }
-
- // The underlying roomserver implementation needs to be able to call the fedsender.
- // This is different to rsAPI which can be the http client which doesn't need this
- // dependency. Other components also need updating after their dependencies are up.
- rsImpl.SetFederationAPI(fsAPI, keyRing)
- rsImpl.SetAppserviceAPI(asAPI)
- rsImpl.SetUserAPI(userAPI)
- keyImpl.SetUserAPI(userAPI)
-
- monolith := setup.Monolith{
- Config: base.Cfg,
- Client: base.CreateClient(),
- FedClient: federation,
- KeyRing: keyRing,
-
- AppserviceAPI: asAPI,
- // always use the concrete impl here even in -http mode because adding public routes
- // must be done on the concrete impl not an HTTP client else fedapi will call itself
- FederationAPI: fsImplAPI,
- RoomserverAPI: rsAPI,
- UserAPI: userAPI,
- KeyAPI: keyAPI,
- }
- monolith.AddAllPublicRoutes(base)
-
- if len(base.Cfg.MSCs.MSCs) > 0 {
- if err := mscs.Enable(base, &monolith); err != nil {
- logrus.WithError(err).Fatalf("Failed to enable MSCs")
- }
- }
-
- // Expose the matrix APIs directly rather than putting them under a /api path.
- go func() {
- base.SetupAndServeHTTP(
- httpAPIAddr, // internal API
- httpAddr, // external API
- nil, nil, // TLS settings
- )
- }()
- // Handle HTTPS if certificate and key are provided
- if *certFile != "" && *keyFile != "" {
- go func() {
- base.SetupAndServeHTTP(
- basepkg.NoListener, // internal API
- httpsAddr, // external API
- certFile, keyFile, // TLS settings
- )
- }()
- }
-
- // We want to block forever to let the HTTP and HTTPS handler serve the APIs
- base.WaitForShutdown()
-}
diff --git a/cmd/dendrite-monolith-server/main_test.go b/cmd/dendrite-monolith-server/main_test.go
deleted file mode 100644
index efa1a926..00000000
--- a/cmd/dendrite-monolith-server/main_test.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package main
-
-import (
- "os"
- "os/signal"
- "strings"
- "syscall"
- "testing"
-)
-
-// This is an instrumented main, used when running integration tests (sytest) with code coverage.
-// Compile: go test -c -race -cover -covermode=atomic -o monolith.debug -coverpkg "github.com/matrix-org/..." ./cmd/dendrite-monolith-server
-// Run the monolith: ./monolith.debug -test.coverprofile=/somewhere/to/dump/integrationcover.out DEVEL --config dendrite.yaml
-// Generate HTML with coverage: go tool cover -html=/somewhere/where/there/is/integrationcover.out -o cover.html
-// Source: https://dzone.com/articles/measuring-integration-test-coverage-rate-in-pouchc
-func TestMain(_ *testing.T) {
- var (
- args []string
- )
-
- for _, arg := range os.Args {
- switch {
- case strings.HasPrefix(arg, "DEVEL"):
- case strings.HasPrefix(arg, "-test"):
- default:
- args = append(args, arg)
- }
- }
- // only run the tests if there are args to be passed
- if len(args) <= 1 {
- return
- }
-
- waitCh := make(chan int, 1)
- os.Args = args
- go func() {
- main()
- close(waitCh)
- }()
-
- signalCh := make(chan os.Signal, 1)
- signal.Notify(signalCh, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGHUP)
-
- select {
- case <-signalCh:
- return
- case <-waitCh:
- return
- }
-}