Skip to content

Commit

Permalink
Various fixes (#906)
Browse files Browse the repository at this point in the history
* remove panic from drand-client cmds
* fix chain hash format on error description
* fix default logger func
* change http status code when beacon is not present on http
* exit with non-0 status code on cmd error
* refactor relay code to handle hashes config better
* add gossip binary on dev image
* change the way contextToConfig works
* serve the correct network when using hash in the url on relay
* deprecate --hash flag on relay http
  • Loading branch information
emmanuelm41 committed Jan 28, 2022
1 parent 0a93691 commit d4b803a
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 34 deletions.
3 changes: 2 additions & 1 deletion cmd/client/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ func main() {

err := app.Run(os.Args)
if err != nil {
panic(err)
fmt.Printf("an error was found while executing the command. Err: [%s] \n", err)
os.Exit(1)
}
}

Expand Down
35 changes: 31 additions & 4 deletions cmd/drand-cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,7 @@ var appCommands = []*cli.Command{
"also check a whole group's connectivity with the group flag.",
Flags: toArray(groupFlag, certsDirFlag, insecureFlag, verboseFlag, beaconIDFlag),
Action: checkConnection,
Before: checkArgs,
},
{
Name: "remote-status",
Expand Down Expand Up @@ -450,6 +451,7 @@ var appCommands = []*cli.Command{
Usage: "Migrate folder structure to support multi-beacon drand. You DO NOT have to run it while drand is running.\n",
Flags: toArray(folderFlag),
Action: migrateCmd,
Before: checkArgs,
},
{
Name: "reset",
Expand Down Expand Up @@ -613,7 +615,12 @@ func askPort() string {
}

func runMigration(c *cli.Context) error {
if err := checkArgs(c); err != nil {
return err
}

config := contextToConfig(c)

if err := migration.MigrateSBFolderStructure(config.ConfigFolder()); err != nil {
return err
}
Expand All @@ -622,7 +629,12 @@ func runMigration(c *cli.Context) error {
}

func checkMigration(c *cli.Context) error {
if err := checkArgs(c); err != nil {
return err
}

config := contextToConfig(c)

if isPresent := migration.CheckSBFolderStructure(config.ConfigFolder()); isPresent {
return fmt.Errorf("single-beacon drand folder structure was not migrated, " +
"please first do it with 'drand util migrate' command")
Expand Down Expand Up @@ -688,8 +700,9 @@ func keygenCmd(c *cli.Context) error {

var buff bytes.Buffer
if err := toml.NewEncoder(&buff).Encode(priv.Public.TOML()); err != nil {
panic(err)
return err
}

buff.WriteString("\n")
fmt.Println(buff.String())
return nil
Expand Down Expand Up @@ -882,6 +895,22 @@ func getGroup(c *cli.Context) (*key.Group, error) {
return g, nil
}

func checkArgs(c *cli.Context) error {
if c.Bool("tls-disable") {
if c.IsSet("tls-cert") || c.IsSet("tls-key") {
return fmt.Errorf("option 'tls-disable' used with 'tls-cert' or 'tls-key': combination is not valid")
}
}
if c.IsSet("certs-dir") {
_, err := fs.Files(c.String("certs-dir"))
if err != nil {
return err
}
}

return nil
}

func contextToConfig(c *cli.Context) *core.Config {
var opts []core.ConfigOption
version := common.GetAppVersion()
Expand Down Expand Up @@ -910,16 +939,14 @@ func contextToConfig(c *cli.Context) *core.Config {

if c.Bool("tls-disable") {
opts = append(opts, core.WithInsecure())
if c.IsSet("tls-cert") || c.IsSet("tls-key") {
panic("option 'tls-disable' used with 'tls-cert' or 'tls-key': combination is not valid")
}
} else {
certPath, keyPath := c.String("tls-cert"), c.String("tls-key")
opts = append(opts, core.WithTLS(certPath, keyPath))
}
if c.IsSet("certs-dir") {
paths, err := fs.Files(c.String("certs-dir"))
if err != nil {
// it wouldn't reach here, as it was verified on checkArgs func before
panic(err)
}
opts = append(opts, core.WithTrustedCerts(paths...))
Expand Down
6 changes: 6 additions & 0 deletions cmd/drand-cli/control.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ func getShareArgs(c *cli.Context) (*shareArgs, error) {
return nil, fmt.Errorf("error getting entropy source: %w", err)
}

if err := checkArgs(c); err != nil {
return nil, err
}

args.conf = contextToConfig(c)

return args, nil
Expand Down Expand Up @@ -502,6 +506,7 @@ func statusCmd(c *cli.Context) error {

func migrateCmd(c *cli.Context) error {
conf := contextToConfig(c)

if err := migration.MigrateSBFolderStructure(conf.ConfigFolder()); err != nil {
return fmt.Errorf("cannot migrate folder structure, please try again. err: %s", err)
}
Expand Down Expand Up @@ -675,6 +680,7 @@ func entropyInfoFromReader(c *cli.Context) (*control.EntropyInfo, error) {

func selfSign(c *cli.Context) error {
conf := contextToConfig(c)

beaconID := getBeaconID(c)

fs := key.NewFileStore(conf.ConfigFolderMB(), beaconID)
Expand Down
54 changes: 29 additions & 25 deletions cmd/relay/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"net/http/httptest"
"os"

dclient "github.com/drand/drand/client"
"github.com/drand/drand/cmd/client/lib"
"github.com/drand/drand/common"
dhttp "github.com/drand/drand/http"
Expand Down Expand Up @@ -59,6 +58,11 @@ func Relay(c *cli.Context) error {
}
}

hashFlagSet := c.IsSet(lib.HashFlag.Name)
if hashFlagSet {
return fmt.Errorf("--%s is deprecated on relay http, please use %s instead", lib.HashFlag.Name, lib.HashListFlag.Name)
}

client, err := lib.Create(c, c.IsSet(metricsFlag.Name))
if err != nil {
return err
Expand All @@ -69,32 +73,32 @@ func Relay(c *cli.Context) error {
return fmt.Errorf("failed to create rest handler: %w", err)
}

if c.IsSet(lib.HashFlag.Name) {
hash, err := hex.DecodeString(c.String(lib.HashFlag.Name))
if err != nil {
return fmt.Errorf("failed to decode hash flag: %w", err)
}
handler.RegisterNewBeaconHandler(client, string(hash))
} else {
if c.IsSet(lib.HashListFlag.Name) {
hashList := c.StringSlice(lib.HashListFlag.Name)
for _, hashHex := range hashList {
hash, err := hex.DecodeString(hashHex)
if err != nil {
return fmt.Errorf("failed to decode hash flag: %w", err)
}

c, err := lib.Create(c, c.IsSet(metricsFlag.Name), dclient.WithChainHash(hash))
if err != nil {
return err
}

handler.RegisterNewBeaconHandler(c, fmt.Sprintf("%x", hash))
}
} else {
fmt.Println("hash flags were not set. Registering beacon handler for default chain hash")
hashesList := make([]string, 0)
hashesList = append(hashesList, common.DefaultChainHash)
if c.IsSet(lib.HashListFlag.Name) {
hashesList = c.StringSlice(lib.HashListFlag.Name)
}

for _, hash := range hashesList {
if hash == common.DefaultChainHash {
handler.RegisterNewBeaconHandler(client, common.DefaultChainHash)
continue
}

if _, err := hex.DecodeString(hash); err != nil {
return fmt.Errorf("failed to decode chain hash value: %s", err)
}

if err := c.Set(lib.HashFlag.Name, hash); err != nil {
return fmt.Errorf("failed to initiate chain hash handler: %s", err)
}

c, err := lib.Create(c, c.IsSet(metricsFlag.Name))
if err != nil {
return err
}

handler.RegisterNewBeaconHandler(c, hash)
}

if c.IsSet(accessLogFlag.Name) {
Expand Down
5 changes: 3 additions & 2 deletions http/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ func (h *DrandHandler) ChainInfo(w http.ResponseWriter, r *http.Request) {
info := h.getChainInfo(r.Context(), chainHashHex)
if info == nil {
h.log.Warnw("", "http_server", "failed to serve group", "client", r.RemoteAddr, "req", url.PathEscape(r.URL.Path))
http.Error(w, "group not found", http.StatusNoContent)
http.Error(w, "group not found", http.StatusNotFound)
return
}

Expand Down Expand Up @@ -561,7 +561,8 @@ func (h *DrandHandler) getBeaconHandler(chainHash []byte) (*beaconHandler, error
bh, exists := h.beacons[chainHashStr]

if !exists {
return nil, fmt.Errorf("there's no BeaconHandler for beaconHash %s", chainHash)
return nil, fmt.Errorf("there is no BeaconHandler for beaconHash [%s]. "+
"Is the chain hash correct?. Please check it", chainHashStr)
}

return bh, nil
Expand Down
7 changes: 5 additions & 2 deletions log/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package log

import (
"os"
"sync"

"go.uber.org/zap"
"go.uber.org/zap/zapcore"
Expand Down Expand Up @@ -38,6 +39,8 @@ const (
// logger.
const DefaultLevel = LogInfo

var isDefaultLoggerSet sync.Once

// ConfigureDefaultLogger updates the default logger to wrap a provided kit logger.
func ConfigureDefaultLogger(output zapcore.WriteSyncer, level int, jsonFormat bool) {
if jsonFormat {
Expand All @@ -49,9 +52,9 @@ func ConfigureDefaultLogger(output zapcore.WriteSyncer, level int, jsonFormat bo

// DefaultLogger is the default logger that only logs at the `DefaultLevel`.
func DefaultLogger() Logger {
if zap.S() == nil {
isDefaultLoggerSet.Do(func() {
zap.ReplaceGlobals(NewZapLogger(nil, getConsoleEncoder(), DefaultLevel))
}
})

return zap.S()
}
Expand Down
2 changes: 2 additions & 0 deletions test/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ RUN go mod download
COPY . $SRC_PATH
RUN make client
RUN make relay-http
RUN make relay-gossip

FROM busybox:1-glibc

Expand All @@ -28,6 +29,7 @@ ENV DRAND_HOME /data/drand

COPY --from=builder $SRC_PATH/drand-client /usr/local/bin/drand-client
COPY --from=builder $SRC_PATH/drand-relay-http /usr/local/bin/drand-relay-http
COPY --from=builder $SRC_PATH/drand-relay-gossip /usr/local/bin/drand-relay-gossip

VOLUME $DRAND_HOME
ENTRYPOINT [""]
Expand Down

0 comments on commit d4b803a

Please sign in to comment.