Browse Source

Sorting plugins so that execution order is deterministic (#1961)

Luka Čehovin Zajc 4 years ago
parent
commit
268afb3438
1 changed files with 9 additions and 2 deletions
  1. 9 2
      server/service.go

+ 9 - 2
server/service.go

@@ -27,6 +27,7 @@ import (
 	"math/big"
 	"net"
 	"net/http"
+	"sort"
 	"time"
 
 	"github.com/fatedier/frp/assets"
@@ -133,8 +134,14 @@ func NewService(cfg config.ServerCommonConf) (svr *Service, err error) {
 	}
 
 	// Init all plugins
-	for name, options := range cfg.HTTPPlugins {
-		svr.pluginManager.Register(plugin.NewHTTPPluginOptions(options))
+	plugin_names := make([]string, 0, len(cfg.HTTPPlugins))
+	for n := range cfg.HTTPPlugins {
+		plugin_names = append(plugin_names, n)
+	}
+	sort.Strings(plugin_names)
+
+	for _, name := range plugin_names {
+		svr.pluginManager.Register(plugin.NewHTTPPluginOptions(cfg.HTTPPlugins[name]))
 		log.Info("plugin [%s] has been registered", name)
 	}
 	svr.rc.PluginManager = svr.pluginManager