2a1557845d
The problem is that inserting an sd blob with ~5k blobs takes longer than 30 seconds. So the client times out and retries the request. At that point, reflector is not done inserting so it replies with a smaller number of blobs than it should. The client uploads that many blobs and marks the stream as reflected. The remaining blobs never get uploaded. Doing the insert inside a transaction should be faster than doing 10k (2 per blob) inserts independently.
44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package shared
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBlobTrace_Serialize(t *testing.T) {
|
|
hostName, err := os.Hostname()
|
|
require.NoError(t, err)
|
|
|
|
stack := NewBlobTrace(10*time.Second, "test")
|
|
stack.Stack(20*time.Second, "test2")
|
|
stack.Stack(30*time.Second, "test3")
|
|
serialized, err := stack.Serialize()
|
|
require.NoError(t, err)
|
|
|
|
expected := `{"stacks":[{"timing":10000000000,"origin_name":"test","host_name":"` +
|
|
hostName +
|
|
`"},{"timing":20000000000,"origin_name":"test2","host_name":"` +
|
|
hostName +
|
|
`"},{"timing":30000000000,"origin_name":"test3","host_name":"` +
|
|
hostName +
|
|
`"}]}`
|
|
assert.Equal(t, expected, serialized)
|
|
}
|
|
|
|
func TestBlobTrace_Deserialize(t *testing.T) {
|
|
serialized := `{"stacks":[{"timing":10000000000,"origin_name":"test"},{"timing":20000000000,"origin_name":"test2"},{"timing":30000000000,"origin_name":"test3"}]}`
|
|
stack, err := Deserialize(serialized)
|
|
require.NoError(t, err)
|
|
|
|
assert.Len(t, stack.Stacks, 3)
|
|
assert.Equal(t, stack.Stacks[0].Timing, 10*time.Second)
|
|
assert.Equal(t, stack.Stacks[1].Timing, 20*time.Second)
|
|
assert.Equal(t, stack.Stacks[2].Timing, 30*time.Second)
|
|
assert.Equal(t, stack.Stacks[0].OriginName, "test")
|
|
assert.Equal(t, stack.Stacks[1].OriginName, "test2")
|
|
assert.Equal(t, stack.Stacks[2].OriginName, "test3")
|
|
}
|