47
ShardInfo: persistence.NewDataBlob(row.Data, row.DataEncoding),
48
}, nil
50
default:
51
return nil, serviceerror.NewUnavailablef("GetOrCreateShard: failed to get ShardID %v. Error: %v", request.ShardID, err)
52
}
53
54
>
if request.CreateShardInfo == nil {
shard.go
55
return nil, serviceerror.NewNotFoundf("GetOrCreateShard: ShardID %v not found. Error: %v", request.ShardID, err)
56
}
57
58
>
rangeID, shardInfo, err := request.CreateShardInfo()
shard.go
59
>
if err != nil {
60
return nil, serviceerror.NewUnavailablef("GetOrCreateShard: failed to encode shard info for ShardID %v. Error: %v", request.ShardID, err)
61
}
62
>
row = &sqlplugin.ShardsRow{
shard.go
63
>
ShardID: request.ShardID,
64
>
RangeID: rangeID,
65
>
Data: shardInfo.Data,
66
>
DataEncoding: shardInfo.EncodingType.String(),
67
>
}
68
>
_, err = m.DB.InsertIntoShards(ctx, row)
69
>
if err == nil {
70
>
return &persistence.InternalGetOrCreateShardResponse{
71
>
ShardInfo: shardInfo,
72
>
}, nil
73
>
} else if m.DB.IsDupEntryError(err) {
74
// conflict, try again
75
request.CreateShardInfo = nil // prevent loop