summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2023-02-13 18:40:48 +0000
committerLibravatar GitHub <noreply@github.com>2023-02-13 18:40:48 +0000
commitacc95923da555b2bf17a5638e62e533218c5840a (patch)
tree7df5d0636137efa5b49298a8f0ced81d35767a5b /cmd
parent[docs] move federating with gotosocial documentation into single file (#1494) (diff)
downloadgotosocial-acc95923da555b2bf17a5638e62e533218c5840a.tar.xz
[performance] processing media and scheduled jobs improvements (#1482)
* replace media workers with just runners.WorkerPool, move to state structure, use go-sched for global task scheduling * improved code comment * fix worker tryUntil function, update go-runners/go-sched * make preprocess functions package public, use these where possible to stop doubled up processing * remove separate emoji worker pool * limit calls to time.Now() during media preprocessing * use Processor{} to manage singular runtime of processing media * ensure workers get started when media manager is used * improved error setting in processing media, fix media test * port changes from processingmedia to processing emoji * finish code commenting * finish code commenting and comment-out client API + federator worker pools until concurrency worker pools replaced * linterrrrrrrrrrrrrrrr --------- Signed-off-by: kim <grufwub@gmail.com>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/gotosocial/action/admin/account/account.go6
-rw-r--r--cmd/gotosocial/action/admin/media/prune/common.go17
-rw-r--r--cmd/gotosocial/action/server/server.go34
-rw-r--r--cmd/gotosocial/main.go10
4 files changed, 39 insertions, 28 deletions
diff --git a/cmd/gotosocial/action/admin/account/account.go b/cmd/gotosocial/action/admin/account/account.go
index ad8da5d41..d7cd40df4 100644
--- a/cmd/gotosocial/action/admin/account/account.go
+++ b/cmd/gotosocial/action/admin/account/account.go
@@ -36,6 +36,7 @@ import (
var Create action.GTSAction = func(ctx context.Context) error {
var state state.State
state.Caches.Init()
+ state.Workers.Start()
dbConn, err := bundb.NewBunDBService(ctx, &state)
if err != nil {
@@ -97,6 +98,7 @@ var Create action.GTSAction = func(ctx context.Context) error {
var Confirm action.GTSAction = func(ctx context.Context) error {
var state state.State
state.Caches.Init()
+ state.Workers.Start()
dbConn, err := bundb.NewBunDBService(ctx, &state)
if err != nil {
@@ -140,6 +142,7 @@ var Confirm action.GTSAction = func(ctx context.Context) error {
var Promote action.GTSAction = func(ctx context.Context) error {
var state state.State
state.Caches.Init()
+ state.Workers.Start()
dbConn, err := bundb.NewBunDBService(ctx, &state)
if err != nil {
@@ -180,6 +183,7 @@ var Promote action.GTSAction = func(ctx context.Context) error {
var Demote action.GTSAction = func(ctx context.Context) error {
var state state.State
state.Caches.Init()
+ state.Workers.Start()
dbConn, err := bundb.NewBunDBService(ctx, &state)
if err != nil {
@@ -220,6 +224,7 @@ var Demote action.GTSAction = func(ctx context.Context) error {
var Disable action.GTSAction = func(ctx context.Context) error {
var state state.State
state.Caches.Init()
+ state.Workers.Start()
dbConn, err := bundb.NewBunDBService(ctx, &state)
if err != nil {
@@ -260,6 +265,7 @@ var Disable action.GTSAction = func(ctx context.Context) error {
var Password action.GTSAction = func(ctx context.Context) error {
var state state.State
state.Caches.Init()
+ state.Workers.Start()
dbConn, err := bundb.NewBunDBService(ctx, &state)
if err != nil {
diff --git a/cmd/gotosocial/action/admin/media/prune/common.go b/cmd/gotosocial/action/admin/media/prune/common.go
index 07b9c13bb..bd759a0d4 100644
--- a/cmd/gotosocial/action/admin/media/prune/common.go
+++ b/cmd/gotosocial/action/admin/media/prune/common.go
@@ -38,21 +38,24 @@ type prune struct {
func setupPrune(ctx context.Context) (*prune, error) {
var state state.State
state.Caches.Init()
+ state.Workers.Start()
dbService, err := bundb.NewBunDBService(ctx, &state)
if err != nil {
return nil, fmt.Errorf("error creating dbservice: %w", err)
}
- storage, err := gtsstorage.AutoConfig() //nolint:contextcheck
+ //nolint:contextcheck
+ storage, err := gtsstorage.AutoConfig()
if err != nil {
return nil, fmt.Errorf("error creating storage backend: %w", err)
}
- manager, err := media.NewManager(dbService, storage) //nolint:contextcheck
- if err != nil {
- return nil, fmt.Errorf("error instantiating mediamanager: %w", err)
- }
+ state.DB = dbService
+ state.Storage = storage
+
+ //nolint:contextcheck
+ manager := media.NewManager(&state)
return &prune{
dbService: dbService,
@@ -70,9 +73,5 @@ func (p *prune) shutdown(ctx context.Context) error {
return fmt.Errorf("error closing dbservice: %w", err)
}
- if err := p.manager.Stop(); err != nil {
- return fmt.Errorf("error closing media manager: %w", err)
- }
-
return nil
}
diff --git a/cmd/gotosocial/action/server/server.go b/cmd/gotosocial/action/server/server.go
index 74a5be24b..89486a5dc 100644
--- a/cmd/gotosocial/action/server/server.go
+++ b/cmd/gotosocial/action/server/server.go
@@ -91,33 +91,35 @@ var Start action.GTSAction = func(ctx context.Context) error {
return fmt.Errorf("error creating instance instance: %s", err)
}
- // Create the client API and federator worker pools
- // NOTE: these MUST NOT be used until they are passed to the
- // processor and it is started. The reason being that the processor
- // sets the Worker process functions and start the underlying pools
- clientWorker := concurrency.NewWorkerPool[messages.FromClientAPI](-1, -1)
- fedWorker := concurrency.NewWorkerPool[messages.FromFederator](-1, -1)
-
- federatingDB := federatingdb.New(dbService, fedWorker)
-
- // build converters and util
- typeConverter := typeutils.NewConverter(dbService)
-
// Open the storage backend
storage, err := gtsstorage.AutoConfig()
if err != nil {
return fmt.Errorf("error creating storage backend: %w", err)
}
+ // Set the state storage driver
+ state.Storage = storage
+
// Build HTTP client (TODO: add configurables here)
client := httpclient.New(httpclient.Config{})
+ // Initialize workers.
+ state.Workers.Start()
+ defer state.Workers.Stop()
+
+ // Create the client API and federator worker pools
+ // NOTE: these MUST NOT be used until they are passed to the
+ // processor and it is started. The reason being that the processor
+ // sets the Worker process functions and start the underlying pools
+ // TODO: move these into state.Workers (and maybe reformat worker pools).
+ clientWorker := concurrency.NewWorkerPool[messages.FromClientAPI](-1, -1)
+ fedWorker := concurrency.NewWorkerPool[messages.FromFederator](-1, -1)
+
// build backend handlers
- mediaManager, err := media.NewManager(dbService, storage)
- if err != nil {
- return fmt.Errorf("error creating media manager: %s", err)
- }
+ mediaManager := media.NewManager(&state)
oauthServer := oauth.New(ctx, dbService)
+ typeConverter := typeutils.NewConverter(dbService)
+ federatingDB := federatingdb.New(dbService, fedWorker, typeConverter)
transportController := transport.NewController(dbService, federatingDB, &federation.Clock{}, client)
federator := federation.NewFederator(dbService, federatingDB, transportController, typeConverter, mediaManager)
diff --git a/cmd/gotosocial/main.go b/cmd/gotosocial/main.go
index 30758b8c6..e3af77548 100644
--- a/cmd/gotosocial/main.go
+++ b/cmd/gotosocial/main.go
@@ -20,9 +20,10 @@ package main
import (
"log"
- "runtime/debug"
+ godebug "runtime/debug"
"strings"
+ "codeberg.org/gruf/go-debug"
"github.com/spf13/cobra"
_ "github.com/superseriousbusiness/gotosocial/docs"
@@ -60,9 +61,12 @@ func main() {
// add subcommands
rootCmd.AddCommand(serverCommands())
- rootCmd.AddCommand(testrigCommands())
rootCmd.AddCommand(debugCommands())
rootCmd.AddCommand(adminCommands())
+ if debug.DEBUG {
+ // only add testrig if debug enabled.
+ rootCmd.AddCommand(testrigCommands())
+ }
// run
if err := rootCmd.Execute(); err != nil {
@@ -73,7 +77,7 @@ func main() {
// version will build a version string from binary's stored build information.
func version() string {
// Read build information from binary
- build, ok := debug.ReadBuildInfo()
+ build, ok := godebug.ReadBuildInfo()
if !ok {
return ""
}