storage/driver/azure: Update vendored Azure SDK
This change refreshes the updated version of Azure SDK for Go that has the latest changes. I manually vendored the new SDK (github.com/Azure/azure-sdk-for-go) and I removed `management/` `core/` packages manually simply because they're not used here and they have a fork of `net/http` and `crypto/tls` for a particular reason. It was introducing a 44k SLOC change otherwise... This also undoes the `include_azure` flag (actually Steven removed the driver from imports but forgot to add the build flag apparently, so the flag wasn't really including azure. 😄 ). This also must be obsolete now. Fixes #620, #175. Signed-off-by: Ahmet Alp Balkan <ahmetalpbalkan@gmail.com>
This commit is contained in:
parent
9808a1c7b7
commit
5c372ded1b
7 changed files with 31 additions and 22 deletions
|
@ -16,7 +16,7 @@ import (
|
||||||
"github.com/docker/distribution/registry/storage/driver/base"
|
"github.com/docker/distribution/registry/storage/driver/base"
|
||||||
"github.com/docker/distribution/registry/storage/driver/factory"
|
"github.com/docker/distribution/registry/storage/driver/factory"
|
||||||
|
|
||||||
azure "github.com/MSOpenTech/azure-sdk-for-go/storage"
|
azure "github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
const driverName = "azure"
|
const driverName = "azure"
|
||||||
|
@ -68,7 +68,7 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
|
||||||
|
|
||||||
realm, ok := parameters[paramRealm]
|
realm, ok := parameters[paramRealm]
|
||||||
if !ok || fmt.Sprint(realm) == "" {
|
if !ok || fmt.Sprint(realm) == "" {
|
||||||
realm = azure.DefaultBaseUrl
|
realm = azure.DefaultBaseURL
|
||||||
}
|
}
|
||||||
|
|
||||||
return New(fmt.Sprint(accountName), fmt.Sprint(accountKey), fmt.Sprint(container), fmt.Sprint(realm))
|
return New(fmt.Sprint(accountName), fmt.Sprint(accountKey), fmt.Sprint(container), fmt.Sprint(realm))
|
||||||
|
@ -76,7 +76,7 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
|
||||||
|
|
||||||
// New constructs a new Driver with the given Azure Storage Account credentials
|
// New constructs a new Driver with the given Azure Storage Account credentials
|
||||||
func New(accountName, accountKey, container, realm string) (*Driver, error) {
|
func New(accountName, accountKey, container, realm string) (*Driver, error) {
|
||||||
api, err := azure.NewClient(accountName, accountKey, realm, azure.DefaultApiVersion, true)
|
api, err := azure.NewClient(accountName, accountKey, realm, azure.DefaultAPIVersion, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ func New(accountName, accountKey, container, realm string) (*Driver, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
d := &driver{
|
d := &driver{
|
||||||
client: *blobClient,
|
client: blobClient,
|
||||||
container: container}
|
container: container}
|
||||||
return &Driver{baseEmbed: baseEmbed{Base: base.Base{StorageDriver: d}}}, nil
|
return &Driver{baseEmbed: baseEmbed{Base: base.Base{StorageDriver: d}}}, nil
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,16 @@ func (d *driver) GetContent(ctx context.Context, path string) ([]byte, error) {
|
||||||
|
|
||||||
// PutContent stores the []byte content at a location designated by "path".
|
// PutContent stores the []byte content at a location designated by "path".
|
||||||
func (d *driver) PutContent(ctx context.Context, path string, contents []byte) error {
|
func (d *driver) PutContent(ctx context.Context, path string, contents []byte) error {
|
||||||
return d.client.PutBlockBlob(d.container, path, ioutil.NopCloser(bytes.NewReader(contents)))
|
if _, err := d.client.DeleteBlobIfExists(d.container, path); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := d.client.CreateBlockBlob(d.container, path); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
bs := newAzureBlockStorage(d.client)
|
||||||
|
bw := newRandomBlobWriter(&bs, azure.MaxBlobBlockSize)
|
||||||
|
_, err := bw.WriteBlobAt(d.container, path, 0, bytes.NewReader(contents))
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadStream retrieves an io.ReadCloser for the content stored at "path" with a
|
// ReadStream retrieves an io.ReadCloser for the content stored at "path" with a
|
||||||
|
@ -233,7 +242,7 @@ func (d *driver) List(ctx context.Context, path string) ([]string, error) {
|
||||||
// Move moves an object stored at sourcePath to destPath, removing the original
|
// Move moves an object stored at sourcePath to destPath, removing the original
|
||||||
// object.
|
// object.
|
||||||
func (d *driver) Move(ctx context.Context, sourcePath string, destPath string) error {
|
func (d *driver) Move(ctx context.Context, sourcePath string, destPath string) error {
|
||||||
sourceBlobURL := d.client.GetBlobUrl(d.container, sourcePath)
|
sourceBlobURL := d.client.GetBlobURL(d.container, sourcePath)
|
||||||
err := d.client.CopyBlob(d.container, destPath, sourceBlobURL)
|
err := d.client.CopyBlob(d.container, destPath, sourceBlobURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if is404(err) {
|
if is404(err) {
|
||||||
|
@ -352,6 +361,6 @@ func (d *driver) listBlobs(container, virtPath string) ([]string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func is404(err error) bool {
|
func is404(err error) bool {
|
||||||
e, ok := err.(azure.StorageServiceError)
|
e, ok := err.(azure.AzureStorageServiceError)
|
||||||
return ok && e.StatusCode == http.StatusNotFound
|
return ok && e.StatusCode == http.StatusNotFound
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
azure "github.com/MSOpenTech/azure-sdk-for-go/storage"
|
azure "github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
// azureBlockStorage is adaptor between azure.BlobStorageClient and
|
// azureBlockStorage is adaptor between azure.BlobStorageClient and
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
azure "github.com/MSOpenTech/azure-sdk-for-go/storage"
|
azure "github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
type StorageSimulator struct {
|
type StorageSimulator struct {
|
||||||
|
@ -122,12 +122,12 @@ func (s *StorageSimulator) PutBlockList(container, blob string, blocks []azure.B
|
||||||
|
|
||||||
var blockIDs []string
|
var blockIDs []string
|
||||||
for _, v := range blocks {
|
for _, v := range blocks {
|
||||||
bl, ok := bb.blocks[v.Id]
|
bl, ok := bb.blocks[v.ID]
|
||||||
if !ok { // check if block ID exists
|
if !ok { // check if block ID exists
|
||||||
return fmt.Errorf("Block id '%s' not found", v.Id)
|
return fmt.Errorf("Block id '%s' not found", v.ID)
|
||||||
}
|
}
|
||||||
bl.committed = true
|
bl.committed = true
|
||||||
blockIDs = append(blockIDs, v.Id)
|
blockIDs = append(blockIDs, v.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark all other blocks uncommitted
|
// Mark all other blocks uncommitted
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
azure "github.com/MSOpenTech/azure-sdk-for-go/storage"
|
azure "github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
type blockIDGenerator struct {
|
type blockIDGenerator struct {
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"math"
|
"math"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
azure "github.com/MSOpenTech/azure-sdk-for-go/storage"
|
azure "github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_blockIdGenerator(t *testing.T) {
|
func Test_blockIdGenerator(t *testing.T) {
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
azure "github.com/MSOpenTech/azure-sdk-for-go/storage"
|
azure "github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
// blockStorage is the interface required from a block storage service
|
// blockStorage is the interface required from a block storage service
|
||||||
|
@ -75,7 +75,7 @@ func (r *randomBlobWriter) WriteBlobAt(container, blob string, offset int64, chu
|
||||||
// Use existing block list
|
// Use existing block list
|
||||||
var existingBlocks []azure.Block
|
var existingBlocks []azure.Block
|
||||||
for _, v := range blocks.CommittedBlocks {
|
for _, v := range blocks.CommittedBlocks {
|
||||||
existingBlocks = append(existingBlocks, azure.Block{Id: v.Name, Status: azure.BlockStatusCommitted})
|
existingBlocks = append(existingBlocks, azure.Block{ID: v.Name, Status: azure.BlockStatusCommitted})
|
||||||
}
|
}
|
||||||
blockList = append(existingBlocks, blockList...)
|
blockList = append(existingBlocks, blockList...)
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ func (r *randomBlobWriter) writeChunkToBlocks(container, blob string, chunk io.R
|
||||||
if err := r.bs.PutBlock(container, blob, blockID, data); err != nil {
|
if err := r.bs.PutBlock(container, blob, blockID, data); err != nil {
|
||||||
return newBlocks, nn, err
|
return newBlocks, nn, err
|
||||||
}
|
}
|
||||||
newBlocks = append(newBlocks, azure.Block{Id: blockID, Status: azure.BlockStatusUncommitted})
|
newBlocks = append(newBlocks, azure.Block{ID: blockID, Status: azure.BlockStatusUncommitted})
|
||||||
}
|
}
|
||||||
return newBlocks, nn, nil
|
return newBlocks, nn, nil
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ func (r *randomBlobWriter) blocksLeftSide(container, blob string, writeOffset in
|
||||||
for _, v := range bx.CommittedBlocks {
|
for _, v := range bx.CommittedBlocks {
|
||||||
blkSize := int64(v.Size)
|
blkSize := int64(v.Size)
|
||||||
if o >= blkSize { // use existing block
|
if o >= blkSize { // use existing block
|
||||||
left = append(left, azure.Block{Id: v.Name, Status: azure.BlockStatusCommitted})
|
left = append(left, azure.Block{ID: v.Name, Status: azure.BlockStatusCommitted})
|
||||||
o -= blkSize
|
o -= blkSize
|
||||||
elapsed += blkSize
|
elapsed += blkSize
|
||||||
} else if o > 0 { // current block needs to be splitted
|
} else if o > 0 { // current block needs to be splitted
|
||||||
|
@ -150,7 +150,7 @@ func (r *randomBlobWriter) blocksLeftSide(container, blob string, writeOffset in
|
||||||
if err = r.bs.PutBlock(container, blob, newBlockID, data); err != nil {
|
if err = r.bs.PutBlock(container, blob, newBlockID, data); err != nil {
|
||||||
return left, err
|
return left, err
|
||||||
}
|
}
|
||||||
left = append(left, azure.Block{Id: newBlockID, Status: azure.BlockStatusUncommitted})
|
left = append(left, azure.Block{ID: newBlockID, Status: azure.BlockStatusUncommitted})
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -177,7 +177,7 @@ func (r *randomBlobWriter) blocksRightSide(container, blob string, writeOffset i
|
||||||
)
|
)
|
||||||
|
|
||||||
if bs > re { // take the block as is
|
if bs > re { // take the block as is
|
||||||
right = append(right, azure.Block{Id: v.Name, Status: azure.BlockStatusCommitted})
|
right = append(right, azure.Block{ID: v.Name, Status: azure.BlockStatusCommitted})
|
||||||
} else if be > re { // current block needs to be splitted
|
} else if be > re { // current block needs to be splitted
|
||||||
part, err := r.bs.GetSectionReader(container, blob, re+1, be-(re+1)+1)
|
part, err := r.bs.GetSectionReader(container, blob, re+1, be-(re+1)+1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -192,7 +192,7 @@ func (r *randomBlobWriter) blocksRightSide(container, blob string, writeOffset i
|
||||||
if err = r.bs.PutBlock(container, blob, newBlockID, data); err != nil {
|
if err = r.bs.PutBlock(container, blob, newBlockID, data); err != nil {
|
||||||
return right, err
|
return right, err
|
||||||
}
|
}
|
||||||
right = append(right, azure.Block{Id: newBlockID, Status: azure.BlockStatusUncommitted})
|
right = append(right, azure.Block{ID: newBlockID, Status: azure.BlockStatusUncommitted})
|
||||||
}
|
}
|
||||||
elapsed += int64(v.Size)
|
elapsed += int64(v.Size)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
azure "github.com/MSOpenTech/azure-sdk-for-go/storage"
|
azure "github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRandomWriter_writeChunkToBlocks(t *testing.T) {
|
func TestRandomWriter_writeChunkToBlocks(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue