Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
orpheuslummis committed Dec 16, 2022
1 parent 82e0d2f commit 7839112
Show file tree
Hide file tree
Showing 34 changed files with 1,359 additions and 1,155 deletions.
37 changes: 22 additions & 15 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ ifndef VERBOSE
MAKEFLAGS+=--no-print-directory
endif

BUILDPATH=./build

# Provide info from git to the version package using linker flags.
ifeq (, $(shell which git))
$(error "No git in $(PATH), version information won't be included")
Expand Down Expand Up @@ -38,7 +40,7 @@ install:
.PHONY: build
build:
ifeq ($(path),)
@go build $(BUILD_FLAGS) -o build/defradb cmd/defradb/main.go
@go build $(BUILD_FLAGS) -o $(BUILDPATH)/defradb cmd/defradb/main.go
else
@go build $(BUILD_FLAGS) -o $(path) cmd/defradb/main.go
endif
Expand All @@ -53,15 +55,15 @@ cross-build:
.PHONY: start
start:
@$(MAKE) build
./build/defradb start
$(BUILDPATH)/defradb start

.PHONY: client\:dump
client\:dump:
./build/defradb client dump
$(BUILDPATH)/defradb client dump

.PHONY: client\:add-schema
client\:add-schema:
./build/defradb client schema add -f examples/schema/bookauthpub.graphql
$(BUILDPATH)/defradb client schema add -f examples/schema/bookauthpub.graphql

.PHONY: deps\:lint
deps\:lint:
Expand Down Expand Up @@ -99,7 +101,7 @@ deps:
.PHONY: dev\:start
dev\:start:
@$(MAKE) build
DEFRA_ENV=dev ./build/defradb start
DEFRA_ENV=dev $(BUILDPATH)/defradb start

# Note: In some situations `verify` can modify `go.sum` file, but until a
# read-only version is available we have to rely on this.
Expand All @@ -123,7 +125,7 @@ tidy:
.PHONY: clean
clean:
go clean cmd/defradb/main.go
rm -f build/defradb
rm -f $(BUILDPATH)/defradb

.PHONY: clean\:test
clean\:test:
Expand All @@ -142,31 +144,36 @@ endif

.PHONY: test
test:
gotestsum --format pkgname -- ./... -race -shuffle=on
@PATH=$(BUILDPATH):$(PATH) gotestsum --format pkgname -- ./... -race -shuffle=on

.PHONY: test\:integrationcli
test\:integrationcli:
@$(MAKE) build
@PATH=$(BUILDPATH):$(PATH) gotestsum --format pkgname -- -race -shuffle=on ./tests/integration/cli/... -tags integrationcli

.PHONY: test\:ci
test\:ci:
DEFRA_BADGER_MEMORY=true DEFRA_BADGER_FILE=true $(MAKE) test:names
PATH=$(BUILDPATH):$(PATH) DEFRA_BADGER_MEMORY=true DEFRA_BADGER_FILE=true $(MAKE) test:names

.PHONY: test\:go
test\:go:
go test ./... -race -shuffle=on
PATH=$(BUILDPATH):$(PATH) go test ./... -race -shuffle=on

.PHONY: test\:names
test\:names:
gotestsum --format testname -- ./... -race -shuffle=on
PATH=$(BUILDPATH):$(PATH) gotestsum --format testname -- ./... -race -shuffle=on

.PHONY: test\:verbose
test\:verbose:
gotestsum --format standard-verbose -- ./... -race -shuffle=on
PATH=$(BUILDPATH):$(PATH) gotestsum --format standard-verbose -- ./... -race -shuffle=on

.PHONY: test\:watch
test\:watch:
gotestsum --watch -- ./...
PATH=$(BUILDPATH):$(PATH) gotestsum --watch -- ./...

.PHONY: test\:clean
test\:clean:
@$(MAKE) clean:test && $(MAKE) test
@$(MAKE) clean:test && PATH=$(BUILDPATH):$(PATH) $(MAKE) test

.PHONY: test\:bench
test\:bench:
Expand Down Expand Up @@ -247,13 +254,13 @@ docs\:cli:

.PHONY: docs\:manpages
docs\:manpages:
go run cmd/genmanpages/main.go -o build/man/
go run cmd/genmanpages/main.go -o $(BUILDPATH)/man/

detectedOS := $(shell uname)
.PHONY: install\:manpages
install\:manpages:
ifeq ($(detectedOS),Linux)
cp build/man/* /usr/share/man/man1/
cp $(BUILDPATH)/man/* /usr/share/man/man1/
endif
ifneq ($(detectedOS),Linux)
@echo "Direct installation of Defradb's man pages is not supported on your system."
Expand Down
88 changes: 44 additions & 44 deletions cli/addreplicator.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,60 +18,60 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"

"github.com/sourcenetwork/defradb/config"
"github.com/sourcenetwork/defradb/errors"
"github.com/sourcenetwork/defradb/logging"
netclient "github.com/sourcenetwork/defradb/net/api/client"
)

var addReplicatorCmd = &cobra.Command{
Use: "addreplicator <collection> <peer>",
Short: "Add a new replicator",
Long: `Use this command if you wish to add a new target replicator
func MakeAddReplicatorCommand(cfg *config.Config) *cobra.Command {
var cmd = &cobra.Command{
Use: "addreplicator <collection> <peer>",
Short: "Add a new replicator",
Long: `Use this command if you wish to add a new target replicator
for the p2p data sync system.`,
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 2 {
if err := cmd.Usage(); err != nil {
return err
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 2 {
if err := cmd.Usage(); err != nil {
return err
}
return errors.New("must specify two arguments: collection and peer")
}
collection := args[0]
peerAddr, err := ma.NewMultiaddr(args[1])
if err != nil {
return errors.Wrap("could not parse peer address", err)
}
return errors.New("must specify two arguments: collection and peer")
}
collection := args[0]
peerAddr, err := ma.NewMultiaddr(args[1])
if err != nil {
return errors.Wrap("could not parse peer address", err)
}

log.FeedbackInfo(
cmd.Context(),
"Adding replicator for collection",
logging.NewKV("PeerAddress", peerAddr),
logging.NewKV("Collection", collection),
logging.NewKV("RPCAddress", cfg.Net.RPCAddress),
)

cred := insecure.NewCredentials()
client, err := netclient.NewClient(cfg.Net.RPCAddress, grpc.WithTransportCredentials(cred))
if err != nil {
return errors.Wrap("failed to create RPC client", err)
}
log.FeedbackInfo(
cmd.Context(),
"Adding replicator for collection",
logging.NewKV("PeerAddress", peerAddr),
logging.NewKV("Collection", collection),
logging.NewKV("RPCAddress", cfg.Net.RPCAddress),
)

rpcTimeoutDuration, err := cfg.Net.RPCTimeoutDuration()
if err != nil {
return errors.Wrap("failed to parse RPC timeout duration", err)
}
cred := insecure.NewCredentials()
client, err := netclient.NewClient(cfg.Net.RPCAddress, grpc.WithTransportCredentials(cred))
if err != nil {
return errors.Wrap("failed to create RPC client", err)
}

ctx, cancel := context.WithTimeout(cmd.Context(), rpcTimeoutDuration)
defer cancel()
rpcTimeoutDuration, err := cfg.Net.RPCTimeoutDuration()
if err != nil {
return errors.Wrap("failed to parse RPC timeout duration", err)
}

pid, err := client.AddReplicator(ctx, collection, peerAddr)
if err != nil {
return errors.Wrap("failed to add replicator, request failed", err)
}
log.FeedbackInfo(ctx, "Successfully added replicator", logging.NewKV("PID", pid))
return nil
},
}
ctx, cancel := context.WithTimeout(cmd.Context(), rpcTimeoutDuration)
defer cancel()

func init() {
rpcCmd.AddCommand(addReplicatorCmd)
pid, err := client.AddReplicator(ctx, collection, peerAddr)
if err != nil {
return errors.Wrap("failed to add replicator, request failed", err)
}
log.FeedbackInfo(ctx, "Successfully added replicator", logging.NewKV("PID", pid))
return nil
},
}
return cmd
}
12 changes: 6 additions & 6 deletions cli/blocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ import (
"github.com/spf13/cobra"
)

var blocksCmd = &cobra.Command{
Use: "blocks",
Short: "Interact with the database's blockstore",
}
func MakeBlocksCommand() *cobra.Command {
var cmd = &cobra.Command{
Use: "blocks",
Short: "Interact with the database's blockstore",
}

func init() {
clientCmd.AddCommand(blocksCmd)
return cmd
}
92 changes: 46 additions & 46 deletions cli/blocks_get.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,64 +19,64 @@ import (
"github.com/spf13/cobra"

httpapi "github.com/sourcenetwork/defradb/api/http"
"github.com/sourcenetwork/defradb/config"
"github.com/sourcenetwork/defradb/errors"
)

var getCmd = &cobra.Command{
Use: "get [CID]",
Short: "Get a block by its CID from the blockstore.",
RunE: func(cmd *cobra.Command, args []string) (err error) {
if len(args) != 1 {
return errors.New("missing argument: CID")
}
cid := args[0]

endpoint, err := httpapi.JoinPaths(cfg.API.AddressToURL(), httpapi.BlocksPath, cid)
if err != nil {
return errors.Wrap("failed to join endpoint", err)
}
func MakeBlocksGetCommand(cfg *config.Config) *cobra.Command {
var cmd = &cobra.Command{
Use: "get [CID]",
Short: "Get a block by its CID from the blockstore.",
RunE: func(cmd *cobra.Command, args []string) (err error) {
if len(args) != 1 {
return errors.New("missing argument: CID")
}
cid := args[0]

res, err := http.Get(endpoint.String())
if err != nil {
return errors.Wrap("failed to send get request", err)
}
endpoint, err := httpapi.JoinPaths(cfg.API.AddressToURL(), httpapi.BlocksPath, cid)
if err != nil {
return errors.Wrap("failed to join endpoint", err)
}

defer func() {
if e := res.Body.Close(); e != nil {
err = errors.Wrap(fmt.Sprintf("failed to read response body: %v", e.Error()), err)
res, err := http.Get(endpoint.String())
if err != nil {
return errors.Wrap("failed to send get request", err)
}
}()

response, err := io.ReadAll(res.Body)
if err != nil {
return errors.Wrap("failed to read response body", err)
}
defer func() {
if e := res.Body.Close(); e != nil {
err = errors.Wrap(fmt.Sprintf("failed to read response body: %v", e.Error()), err)
}
}()

stdout, err := os.Stdout.Stat()
if err != nil {
return errors.Wrap("failed to stat stdout", err)
}
if isFileInfoPipe(stdout) {
cmd.Println(string(response))
} else {
graphlErr, err := hasGraphQLErrors(response)
response, err := io.ReadAll(res.Body)
if err != nil {
return errors.Wrap("failed to handle GraphQL errors", err)
return errors.Wrap("failed to read response body", err)
}
indentedResult, err := indentJSON(response)

stdout, err := os.Stdout.Stat()
if err != nil {
return errors.Wrap("failed to pretty print response", err)
return errors.Wrap("failed to stat stdout", err)
}
if graphlErr {
log.FeedbackError(cmd.Context(), indentedResult)
if isFileInfoPipe(stdout) {
cmd.Println(string(response))
} else {
log.FeedbackInfo(cmd.Context(), indentedResult)
graphlErr, err := hasGraphQLErrors(response)
if err != nil {
return errors.Wrap("failed to handle GraphQL errors", err)
}
indentedResult, err := indentJSON(response)
if err != nil {
return errors.Wrap("failed to pretty print response", err)
}
if graphlErr {
log.FeedbackError(cmd.Context(), indentedResult)
} else {
log.FeedbackInfo(cmd.Context(), indentedResult)
}
}
}
return nil
},
}

func init() {
blocksCmd.AddCommand(getCmd)
return nil
},
}
return cmd
}
Loading

0 comments on commit 7839112

Please sign in to comment.