summaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2020-01-29 01:01:06 +0000
committerGitHub <noreply@github.com>2020-01-28 20:01:06 -0500
commitc01221e70fc71f5bcff5f699095fbcbfc1e2b4a3 (patch)
tree4017848a786da2080e9a003a77bd40bd81625680 /cmd
parent7c84dbca4f0f79dc90752105800a6964693283bd (diff)
downloadgitea-c01221e70fc71f5bcff5f699095fbcbfc1e2b4a3.tar.gz
gitea-c01221e70fc71f5bcff5f699095fbcbfc1e2b4a3.zip
Queue: Make WorkerPools and Queues flushable (#10001)
* Make WorkerPools and Queues flushable Adds Flush methods to Queues and the WorkerPool Further abstracts the WorkerPool Adds a final step to Flush the queues in the defer from PrintCurrentTest Fixes an issue with Settings inheritance in queues Signed-off-by: Andrew Thornton <art27@cantab.net> * Change to for loop * Add IsEmpty and begin just making the queues composed WorkerPools * subsume workerpool into the queues and create a flushable interface * Add manager command * Move flushall to queue.Manager and add to testlogger * As per @guillep2k * as per @guillep2k * Just make queues all implement flushable and clean up the wrapped queue flushes * cope with no timeout Co-authored-by: Lauris BH <lauris@nix.lv>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/manager.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/cmd/manager.go b/cmd/manager.go
new file mode 100644
index 0000000000..eed0a9e823
--- /dev/null
+++ b/cmd/manager.go
@@ -0,0 +1,92 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package cmd
+
+import (
+ "fmt"
+ "net/http"
+ "os"
+ "time"
+
+ "code.gitea.io/gitea/modules/private"
+
+ "github.com/urfave/cli"
+)
+
+var (
+ // CmdManager represents the manager command
+ CmdManager = cli.Command{
+ Name: "manager",
+ Usage: "Manage the running gitea process",
+ Description: "This is a command for managing the running gitea process",
+ Subcommands: []cli.Command{
+ subcmdShutdown,
+ subcmdRestart,
+ subcmdFlushQueues,
+ },
+ }
+ subcmdShutdown = cli.Command{
+ Name: "shutdown",
+ Usage: "Gracefully shutdown the running process",
+ Action: runShutdown,
+ }
+ subcmdRestart = cli.Command{
+ Name: "restart",
+ Usage: "Gracefully restart the running process - (not implemented for windows servers)",
+ Action: runRestart,
+ }
+ subcmdFlushQueues = cli.Command{
+ Name: "flush-queues",
+ Usage: "Flush queues in the running process",
+ Action: runFlushQueues,
+ Flags: []cli.Flag{
+ cli.DurationFlag{
+ Name: "timeout",
+ Value: 60 * time.Second,
+ Usage: "Timeout for the flushing process",
+ },
+ cli.BoolFlag{
+ Name: "non-blocking",
+ Usage: "Set to true to not wait for flush to complete before returning",
+ },
+ },
+ }
+)
+
+func runShutdown(c *cli.Context) error {
+ setup("manager", false)
+ statusCode, msg := private.Shutdown()
+ switch statusCode {
+ case http.StatusInternalServerError:
+ fail("InternalServerError", msg)
+ }
+
+ fmt.Fprintln(os.Stdout, msg)
+ return nil
+}
+
+func runRestart(c *cli.Context) error {
+ setup("manager", false)
+ statusCode, msg := private.Restart()
+ switch statusCode {
+ case http.StatusInternalServerError:
+ fail("InternalServerError", msg)
+ }
+
+ fmt.Fprintln(os.Stdout, msg)
+ return nil
+}
+
+func runFlushQueues(c *cli.Context) error {
+ setup("manager", false)
+ statusCode, msg := private.FlushQueues(c.Duration("timeout"), c.Bool("non-blocking"))
+ switch statusCode {
+ case http.StatusInternalServerError:
+ fail("InternalServerError", msg)
+ }
+
+ fmt.Fprintln(os.Stdout, msg)
+ return nil
+}