Skip to content

Commit

Permalink
refactor: move from ipfs/go-graphsync to filecoin-project/boost-graph…
Browse files Browse the repository at this point in the history
…sync
  • Loading branch information
dirkmc committed Mar 24, 2023
1 parent e3f9b89 commit dfe2dcc
Show file tree
Hide file tree
Showing 88 changed files with 305 additions and 306 deletions.
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ If your existing library (i.e. `go-ipfs` or `go-filecoin`) uses these other olde

```golang
import (
graphsync "github.com/ipfs/go-graphsync/impl"
gsnet "github.com/ipfs/go-graphsync/network"
graphsync "github.com/filecoin-project/boost-graphsync/impl"
gsnet "github.com/filecoin-project/boost-graphsync/network"
ipld "github.com/ipld/go-ipld-prime"
)

Expand All @@ -78,9 +78,9 @@ integrating with BlockStore's from IPFS.

```golang
import (
graphsync "github.com/ipfs/go-graphsync/impl"
gsnet "github.com/ipfs/go-graphsync/network"
storeutil "github.com/ipfs/go-graphsync/storeutil"
graphsync "github.com/filecoin-project/boost-graphsync/impl"
gsnet "github.com/filecoin-project/boost-graphsync/network"
storeutil "github.com/filecoin-project/boost-graphsync/storeutil"
ipld "github.com/ipld/go-ipld-prime"
blockstore "github.com/ipfs/go-ipfs-blockstore"
)
Expand Down
2 changes: 1 addition & 1 deletion allocator/allocator.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
logging "github.com/ipfs/go-log/v2"
peer "github.com/libp2p/go-libp2p/core/peer"

"github.com/ipfs/go-graphsync"
graphsync "github.com/filecoin-project/boost-graphsync"
)

var log = logging.Logger("graphsync_allocator")
Expand Down
4 changes: 2 additions & 2 deletions allocator/allocator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync/allocator"
"github.com/ipfs/go-graphsync/testutil"
"github.com/filecoin-project/boost-graphsync/allocator"
"github.com/filecoin-project/boost-graphsync/testutil"
)

func TestAllocator(t *testing.T) {
Expand Down
6 changes: 3 additions & 3 deletions benchmarks/benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ import (
"github.com/stretchr/testify/require"
"golang.org/x/sync/errgroup"

"github.com/ipfs/go-graphsync/benchmarks/testinstance"
tn "github.com/ipfs/go-graphsync/benchmarks/testnet"
graphsync "github.com/ipfs/go-graphsync/impl"
"github.com/filecoin-project/boost-graphsync/benchmarks/testinstance"
tn "github.com/filecoin-project/boost-graphsync/benchmarks/testnet"
graphsync "github.com/filecoin-project/boost-graphsync/impl"
)

type runStats struct {
Expand Down
10 changes: 5 additions & 5 deletions benchmarks/testinstance/testinstance.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ import (
p2ptestutil "github.com/libp2p/go-libp2p-testing/netutil"
peer "github.com/libp2p/go-libp2p/core/peer"

graphsync "github.com/ipfs/go-graphsync"
tn "github.com/ipfs/go-graphsync/benchmarks/testnet"
gsimpl "github.com/ipfs/go-graphsync/impl"
gsnet "github.com/ipfs/go-graphsync/network"
"github.com/ipfs/go-graphsync/storeutil"
graphsync "github.com/filecoin-project/boost-graphsync"
tn "github.com/filecoin-project/boost-graphsync/benchmarks/testnet"
gsimpl "github.com/filecoin-project/boost-graphsync/impl"
gsnet "github.com/filecoin-project/boost-graphsync/network"
"github.com/filecoin-project/boost-graphsync/storeutil"
)

// TempDirGenerator is any interface that can generate temporary directories
Expand Down
2 changes: 1 addition & 1 deletion benchmarks/testnet/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
tnet "github.com/libp2p/go-libp2p-testing/net"
"github.com/libp2p/go-libp2p/core/peer"

gsnet "github.com/ipfs/go-graphsync/network"
gsnet "github.com/filecoin-project/boost-graphsync/network"
)

// Network is an interface for generating graphsync network interfaces
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync/benchmarks/testnet"
"github.com/filecoin-project/boost-graphsync/benchmarks/testnet"
)

const testSeed = 99
Expand Down
6 changes: 3 additions & 3 deletions benchmarks/testnet/network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import (
"github.com/libp2p/go-libp2p/core/peer"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync/benchmarks/testnet"
gsmsg "github.com/ipfs/go-graphsync/message"
gsnet "github.com/ipfs/go-graphsync/network"
"github.com/filecoin-project/boost-graphsync/benchmarks/testnet"
gsmsg "github.com/filecoin-project/boost-graphsync/message"
gsnet "github.com/filecoin-project/boost-graphsync/network"
)

func TestSendMessageAsyncButWaitForResponse(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion benchmarks/testnet/peernet.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/libp2p/go-libp2p/core/peer"
mockpeernet "github.com/libp2p/go-libp2p/p2p/net/mock"

gsnet "github.com/ipfs/go-graphsync/network"
gsnet "github.com/filecoin-project/boost-graphsync/network"
)

type peernet struct {
Expand Down
6 changes: 3 additions & 3 deletions benchmarks/testnet/virtual.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ import (
mocknet "github.com/libp2p/go-libp2p/p2p/net/mock"
"google.golang.org/protobuf/proto"

gsmsg "github.com/ipfs/go-graphsync/message"
gsmsgv1 "github.com/ipfs/go-graphsync/message/v1"
gsnet "github.com/ipfs/go-graphsync/network"
gsmsg "github.com/filecoin-project/boost-graphsync/message"
gsmsgv1 "github.com/filecoin-project/boost-graphsync/message/v1"
gsnet "github.com/filecoin-project/boost-graphsync/network"
)

// VirtualNetwork generates a new testnet instance - a fake network that
Expand Down
2 changes: 1 addition & 1 deletion cidset/cidset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"github.com/ipfs/go-cid"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync/testutil"
"github.com/filecoin-project/boost-graphsync/testutil"
)

func TestDecodeEncodeCidSet(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/ipfs/go-graphsync
module github.com/filecoin-project/boost-graphsync

go 1.18

Expand Down
38 changes: 19 additions & 19 deletions impl/graphsync.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,25 @@ import (
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/allocator"
"github.com/ipfs/go-graphsync/listeners"
gsmsg "github.com/ipfs/go-graphsync/message"
"github.com/ipfs/go-graphsync/messagequeue"
gsnet "github.com/ipfs/go-graphsync/network"
"github.com/ipfs/go-graphsync/panics"
"github.com/ipfs/go-graphsync/peermanager"
"github.com/ipfs/go-graphsync/peerstate"
"github.com/ipfs/go-graphsync/persistenceoptions"
"github.com/ipfs/go-graphsync/requestmanager"
"github.com/ipfs/go-graphsync/requestmanager/executor"
requestorhooks "github.com/ipfs/go-graphsync/requestmanager/hooks"
"github.com/ipfs/go-graphsync/responsemanager"
responderhooks "github.com/ipfs/go-graphsync/responsemanager/hooks"
"github.com/ipfs/go-graphsync/responsemanager/queryexecutor"
"github.com/ipfs/go-graphsync/responsemanager/responseassembler"
"github.com/ipfs/go-graphsync/selectorvalidator"
"github.com/ipfs/go-graphsync/taskqueue"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/allocator"
"github.com/filecoin-project/boost-graphsync/listeners"
gsmsg "github.com/filecoin-project/boost-graphsync/message"
"github.com/filecoin-project/boost-graphsync/messagequeue"
gsnet "github.com/filecoin-project/boost-graphsync/network"
"github.com/filecoin-project/boost-graphsync/panics"
"github.com/filecoin-project/boost-graphsync/peermanager"
"github.com/filecoin-project/boost-graphsync/peerstate"
"github.com/filecoin-project/boost-graphsync/persistenceoptions"
"github.com/filecoin-project/boost-graphsync/requestmanager"
"github.com/filecoin-project/boost-graphsync/requestmanager/executor"
requestorhooks "github.com/filecoin-project/boost-graphsync/requestmanager/hooks"
"github.com/filecoin-project/boost-graphsync/responsemanager"
responderhooks "github.com/filecoin-project/boost-graphsync/responsemanager/hooks"
"github.com/filecoin-project/boost-graphsync/responsemanager/queryexecutor"
"github.com/filecoin-project/boost-graphsync/responsemanager/responseassembler"
"github.com/filecoin-project/boost-graphsync/selectorvalidator"
"github.com/filecoin-project/boost-graphsync/taskqueue"
)

var log = logging.Logger("graphsync")
Expand Down
26 changes: 13 additions & 13 deletions impl/graphsync_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,15 @@ import (
mocknet "github.com/libp2p/go-libp2p/p2p/net/mock"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/cidset"
"github.com/ipfs/go-graphsync/donotsendfirstblocks"
"github.com/ipfs/go-graphsync/ipldutil"
gsnet "github.com/ipfs/go-graphsync/network"
"github.com/ipfs/go-graphsync/requestmanager/hooks"
"github.com/ipfs/go-graphsync/storeutil"
"github.com/ipfs/go-graphsync/taskqueue"
"github.com/ipfs/go-graphsync/testutil"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/cidset"
"github.com/filecoin-project/boost-graphsync/donotsendfirstblocks"
"github.com/filecoin-project/boost-graphsync/ipldutil"
gsnet "github.com/filecoin-project/boost-graphsync/network"
"github.com/filecoin-project/boost-graphsync/requestmanager/hooks"
"github.com/filecoin-project/boost-graphsync/storeutil"
"github.com/filecoin-project/boost-graphsync/taskqueue"
"github.com/filecoin-project/boost-graphsync/testutil"
)

// nil means use the default protocols
Expand Down Expand Up @@ -109,7 +109,7 @@ func TestRejectRequestsByDefault(t *testing.T) {
// has ContextCancelError exception recorded in the right place
tracing.SingleExceptionEvent(t, "request(0)->executeTask(0)", "ContextCancelError", ipldutil.ContextCancelError{}.Error(), false)
// RejectAllRequestsByDefault() causes no request validator to be set, so they are all invalid
tracing.SingleExceptionEvent(t, "response(0)", "github.com/ipfs/go-graphsync/responsemanager.errorString", "request not valid", true)
tracing.SingleExceptionEvent(t, "response(0)", "github.com/filecoin-project/boost-graphsync/responsemanager.errorString", "request not valid", true)
}

func TestGraphsyncRoundTripRequestBudgetRequestor(t *testing.T) {
Expand Down Expand Up @@ -624,7 +624,7 @@ func TestPauseResume(t *testing.T) {
require.Contains(t, traceStrings, "request(0)->verifyBlock(0)") // should have one of these per block

// pause recorded
tracing.SingleExceptionEvent(t, "response(0)->executeTask(0)", "github.com/ipfs/go-graphsync/responsemanager/hooks.ErrPaused", hooks.ErrPaused{}.Error(), false)
tracing.SingleExceptionEvent(t, "response(0)->executeTask(0)", "github.com/filecoin-project/boost-graphsync/responsemanager/hooks.ErrPaused", hooks.ErrPaused{}.Error(), false)
}

func TestPauseResumeRequest(t *testing.T) {
Expand Down Expand Up @@ -798,7 +798,7 @@ func TestPauseResumeViaUpdate(t *testing.T) {
processUpdateSpan := tracing.FindSpanByTraceString("response(0)->processUpdate(0)")
require.Equal(t, []string{string(td.extensionName)}, testutil.AttributeValueInTraceSpan(t, *processUpdateSpan, "extensions").AsStringSlice())
// pause recorded
tracing.SingleExceptionEvent(t, "response(0)->executeTask(0)", "github.com/ipfs/go-graphsync/responsemanager/hooks.ErrPaused", hooks.ErrPaused{}.Error(), false)
tracing.SingleExceptionEvent(t, "response(0)->executeTask(0)", "github.com/filecoin-project/boost-graphsync/responsemanager/hooks.ErrPaused", hooks.ErrPaused{}.Error(), false)

message0Span := tracing.FindSpanByTraceString("processRequests(0)")
message1Span := tracing.FindSpanByTraceString("processRequests(1)")
Expand Down Expand Up @@ -902,7 +902,7 @@ func TestPauseResumeViaUpdateOnBlockHook(t *testing.T) {
processUpdateSpan := tracing.FindSpanByTraceString("response(0)->processUpdate(0)")
require.Equal(t, []string{string(td.extensionName)}, testutil.AttributeValueInTraceSpan(t, *processUpdateSpan, "extensions").AsStringSlice())
// pause recorded
tracing.SingleExceptionEvent(t, "response(0)->executeTask(0)", "github.com/ipfs/go-graphsync/responsemanager/hooks.ErrPaused", hooks.ErrPaused{}.Error(), false)
tracing.SingleExceptionEvent(t, "response(0)->executeTask(0)", "github.com/filecoin-project/boost-graphsync/responsemanager/hooks.ErrPaused", hooks.ErrPaused{}.Error(), false)
}

func TestNetworkDisconnect(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion ipldutil/traverser.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
"github.com/ipld/go-ipld-prime/traversal"
"github.com/ipld/go-ipld-prime/traversal/selector"

"github.com/ipfs/go-graphsync/panics"
"github.com/filecoin-project/boost-graphsync/panics"
)

/* TODO: This traverser creates an extra go-routine and is quite complicated, in order to give calling code control of
Expand Down
4 changes: 2 additions & 2 deletions ipldutil/traverser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ import (
"github.com/ipld/go-ipld-prime/traversal/selector/builder"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/testutil"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/testutil"
)

func TestTraverser(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion linktracker/linktracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package linktracker
import (
"github.com/ipld/go-ipld-prime"

"github.com/ipfs/go-graphsync"
graphsync "github.com/filecoin-project/boost-graphsync"
)

// LinkTracker records links being traversed to determine useful information
Expand Down
4 changes: 2 additions & 2 deletions linktracker/linktracker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import (
"github.com/ipld/go-ipld-prime"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/testutil"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/testutil"
)

type request struct {
Expand Down
2 changes: 1 addition & 1 deletion listeners/listeners.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"github.com/hannahhoward/go-pubsub"
peer "github.com/libp2p/go-libp2p/core/peer"

"github.com/ipfs/go-graphsync"
graphsync "github.com/filecoin-project/boost-graphsync"
)

// CompletedResponseListeners is a set of listeners for completed responses
Expand Down
10 changes: 5 additions & 5 deletions message/bench/bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ import (
"github.com/libp2p/go-libp2p/core/peer"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/message"
v1 "github.com/ipfs/go-graphsync/message/v1"
v2 "github.com/ipfs/go-graphsync/message/v2"
"github.com/ipfs/go-graphsync/testutil"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/message"
v1 "github.com/filecoin-project/boost-graphsync/message/v1"
v2 "github.com/filecoin-project/boost-graphsync/message/v2"
"github.com/filecoin-project/boost-graphsync/testutil"
)

func BenchmarkMessageEncodingRoundtrip(b *testing.B) {
Expand Down
2 changes: 1 addition & 1 deletion message/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"github.com/ipld/go-ipld-prime"
cidlink "github.com/ipld/go-ipld-prime/linking/cid"

"github.com/ipfs/go-graphsync"
graphsync "github.com/filecoin-project/boost-graphsync"
)

// Builder captures components of a message across multiple
Expand Down
4 changes: 2 additions & 2 deletions message/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import (
"github.com/ipld/go-ipld-prime/node/basicnode"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/testutil"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/testutil"
)

func TestMessageBuilding(t *testing.T) {
Expand Down
4 changes: 2 additions & 2 deletions message/ipldbind/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
cid "github.com/ipfs/go-cid"
"github.com/ipld/go-ipld-prime/datamodel"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/message"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/message"
)

// GraphSyncExtensions is a container for representing extension data for
Expand Down
2 changes: 1 addition & 1 deletion message/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-msgio"

"github.com/ipfs/go-graphsync"
graphsync "github.com/filecoin-project/boost-graphsync"
)

// MessageHandler provides a consistent interface for maintaining per-peer state
Expand Down
8 changes: 4 additions & 4 deletions message/v1/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ import (
"github.com/libp2p/go-msgio"
"google.golang.org/protobuf/proto"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/message"
pb "github.com/ipfs/go-graphsync/message/pb"
"github.com/ipfs/go-graphsync/message/v1/metadata"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/message"
pb "github.com/filecoin-project/boost-graphsync/message/pb"
"github.com/filecoin-project/boost-graphsync/message/v1/metadata"
)

const extensionMetadata = string("graphsync/response-metadata")
Expand Down
6 changes: 3 additions & 3 deletions message/v1/message_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import (
"github.com/libp2p/go-libp2p/core/peer"
"github.com/stretchr/testify/require"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/message"
"github.com/ipfs/go-graphsync/testutil"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/message"
"github.com/filecoin-project/boost-graphsync/testutil"
)

func TestAppendingRequests(t *testing.T) {
Expand Down
4 changes: 2 additions & 2 deletions message/v1/metadata/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
"github.com/ipld/go-ipld-prime/datamodel"
"github.com/ipld/go-ipld-prime/node/bindnode"

"github.com/ipfs/go-graphsync"
"github.com/ipfs/go-graphsync/message"
graphsync "github.com/filecoin-project/boost-graphsync"
"github.com/filecoin-project/boost-graphsync/message"
)

// Item is a single link traversed in a repsonse
Expand Down
Loading

0 comments on commit dfe2dcc

Please sign in to comment.