Skip to content

Commit 29e890d

Browse files
authored
Remove lock in consumer group, clean up context API (#52)
1 parent 86cd450 commit 29e890d

File tree

7 files changed

+29
-42
lines changed

7 files changed

+29
-42
lines changed

pkg/dataplane/http/context.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,7 @@ func NewClient(newClientInput *NewClientInput) *fasthttp.Client {
6767
}
6868
}
6969

70-
func NewDefaultClient() *fasthttp.Client {
71-
return NewClient(&NewClientInput{})
72-
}
73-
74-
func NewContext(parentLogger logger.Logger, client *fasthttp.Client, newContextInput *v3io.NewContextInput) (v3io.Context, error) {
70+
func NewContext(parentLogger logger.Logger, newContextInput *NewContextInput) (v3io.Context, error) {
7571
requestChanLen := newContextInput.RequestChanLen
7672
if requestChanLen == 0 {
7773
requestChanLen = 1024
@@ -82,9 +78,14 @@ func NewContext(parentLogger logger.Logger, client *fasthttp.Client, newContextI
8278
numWorkers = 8
8379
}
8480

81+
httpClient := newContextInput.HTTPClient
82+
if httpClient == nil {
83+
httpClient = NewClient(&NewClientInput{})
84+
}
85+
8586
newContext := &context{
8687
logger: parentLogger.GetChild("context.http"),
87-
httpClient: client,
88+
httpClient: httpClient,
8889
requestChan: make(chan *v3io.Request, requestChanLen),
8990
numWorkers: numWorkers,
9091
}
@@ -687,8 +688,6 @@ func (c *context) PutRecordsSync(putRecordsInput *v3io.PutRecordsInput) (*v3io.R
687688
}
688689

689690
buffer.WriteString(`]}`)
690-
str := buffer.String()
691-
fmt.Println(str)
692691

693692
response, err := c.sendRequest(&putRecordsInput.DataPlaneInput,
694693
http.MethodPost,

pkg/dataplane/http/types.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package v3iohttp
2+
3+
import "github.com/valyala/fasthttp"
4+
5+
type NewContextInput struct {
6+
HTTPClient *fasthttp.Client
7+
NumWorkers int
8+
RequestChanLen int
9+
}

pkg/dataplane/streamconsumergroup/sequencenumberhandler.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package streamconsumergroup
22

33
import (
4-
"sync"
54
"time"
65

76
"github.com/v3io/v3io-go/pkg/common"
@@ -17,7 +16,6 @@ type sequenceNumberHandler struct {
1716
logger logger.Logger
1817
member *member
1918
markedShardSequenceNumbers []uint64
20-
markedShardSequenceNumbersLock sync.RWMutex
2119
stopMarkedShardSequenceNumberCommitterChan chan struct{}
2220
lastCommittedShardSequenceNumbers []uint64
2321
}
@@ -54,12 +52,7 @@ func (snh *sequenceNumberHandler) stop() error {
5452
}
5553

5654
func (snh *sequenceNumberHandler) markShardSequenceNumber(shardID int, sequenceNumber uint64) error {
57-
58-
// lock semantics are reverse - it's OK to write in parallel since each write goes
59-
// to a different cell in the array, but once a read is happening we need to stop the world
60-
snh.markedShardSequenceNumbersLock.RLock()
6155
snh.markedShardSequenceNumbers[shardID] = sequenceNumber
62-
snh.markedShardSequenceNumbersLock.RUnlock()
6356

6457
return nil
6558
}
@@ -88,9 +81,7 @@ func (snh *sequenceNumberHandler) commitMarkedShardSequenceNumbers() error {
8881
var markedShardSequenceNumbersCopy []uint64
8982

9083
// create a copy of the marked shard sequenceNumbers
91-
snh.markedShardSequenceNumbersLock.Lock()
9284
markedShardSequenceNumbersCopy = append(markedShardSequenceNumbersCopy, snh.markedShardSequenceNumbers...)
93-
snh.markedShardSequenceNumbersLock.Unlock()
9485

9586
// if there was no chance since last, do nothing
9687
if common.Uint64SlicesEqual(snh.lastCommittedShardSequenceNumbers, markedShardSequenceNumbersCopy) {

pkg/dataplane/test/streamconsumergroup_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ type recordData struct {
2020
}
2121

2222
type streamConsumerGroupTestSuite struct {
23-
StreamTestSuite
23+
streamTestSuite
2424
streamPath string
2525
}
2626

2727
func (suite *streamConsumerGroupTestSuite) SetupSuite() {
28-
suite.StreamTestSuite.SetupSuite()
28+
suite.streamTestSuite.SetupSuite()
2929
suite.createContainer()
3030
suite.streamPath = fmt.Sprintf("%s/test-stream-0/", suite.testPath)
3131
}

pkg/dataplane/test/sync_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -632,22 +632,22 @@ func (suite *syncContainerKVTestSuite) SetupSuite() {
632632

633633
type syncStreamTestSuite struct {
634634
syncTestSuite
635-
StreamTestSuite StreamTestSuite
635+
streamTestSuite streamTestSuite
636636
}
637637

638638
func (suite *syncStreamTestSuite) SetupTest() {
639-
suite.StreamTestSuite = StreamTestSuite{
639+
suite.streamTestSuite = streamTestSuite{
640640
testSuite: suite.syncTestSuite.testSuite,
641641
}
642-
suite.StreamTestSuite.SetupTest()
642+
suite.streamTestSuite.SetupTest()
643643
}
644644

645645
func (suite *syncStreamTestSuite) TearDownTest() {
646-
suite.StreamTestSuite.TearDownTest()
646+
suite.streamTestSuite.TearDownTest()
647647
}
648648

649649
func (suite *syncStreamTestSuite) TestStream() {
650-
streamPath := fmt.Sprintf("%s/mystream/", suite.StreamTestSuite.testPath)
650+
streamPath := fmt.Sprintf("%s/mystream/", suite.streamTestSuite.testPath)
651651

652652
//
653653
// Create the stream

pkg/dataplane/test/test.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (suite *testSuite) createContext() {
3737
var err error
3838

3939
// create a context
40-
suite.container, err = v3iohttp.NewContext(suite.logger, v3iohttp.NewDefaultClient(), &v3io.NewContextInput{})
40+
suite.container, err = v3iohttp.NewContext(suite.logger, &v3iohttp.NewContextInput{})
4141
suite.Require().NoError(err)
4242

4343
// populate fields that would have been populated by session/container
@@ -57,7 +57,7 @@ func (suite *testSuite) createContext() {
5757
func (suite *testSuite) createContainer() {
5858

5959
// create a context
60-
context, err := v3iohttp.NewContext(suite.logger, v3iohttp.NewDefaultClient(), &v3io.NewContextInput{})
60+
context, err := v3iohttp.NewContext(suite.logger, &v3iohttp.NewContextInput{})
6161
suite.Require().NoError(err)
6262

6363
session, err := context.NewSession(&v3io.NewSessionInput{
@@ -74,17 +74,13 @@ func (suite *testSuite) createContainer() {
7474
suite.Require().NoError(err)
7575
}
7676

77-
type StreamTestSuite struct { // nolint: deadcode
77+
type streamTestSuite struct { // nolint: deadcode
7878
testSuite
7979
testPath string
8080
}
8181

82-
func (suite *StreamTestSuite) SetupSuite() {
83-
suite.testSuite.SetupSuite()
82+
func (suite *streamTestSuite) SetupTest() {
8483
suite.testPath = "/stream-test"
85-
}
86-
87-
func (suite *StreamTestSuite) SetupTest() {
8884
err := suite.deleteAllStreamsInPath(suite.testPath)
8985

9086
// get the underlying root error
@@ -97,12 +93,12 @@ func (suite *StreamTestSuite) SetupTest() {
9793
}
9894
}
9995

100-
func (suite *StreamTestSuite) TearDownTest() {
96+
func (suite *streamTestSuite) TearDownTest() {
10197
err := suite.deleteAllStreamsInPath(suite.testPath)
10298
suite.Require().NoError(err, "Failed to tear down test suite")
10399
}
104100

105-
func (suite *StreamTestSuite) deleteAllStreamsInPath(path string) error {
101+
func (suite *streamTestSuite) deleteAllStreamsInPath(path string) error {
106102
getContainerContentsInput := v3io.GetContainerContentsInput{
107103
Path: path,
108104
}

pkg/dataplane/types.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,12 @@ import (
2323
"strconv"
2424
"strings"
2525
"time"
26-
27-
"github.com/valyala/fasthttp"
2826
)
2927

3028
//
3129
// Control plane
3230
//
3331

34-
type NewContextInput struct {
35-
Client *fasthttp.Client
36-
NumWorkers int
37-
RequestChanLen int
38-
}
39-
4032
type NewSessionInput struct {
4133
URL string
4234
Username string

0 commit comments

Comments
 (0)