这个用于编写blob块的official example有一个步骤,用于检查哪些块尚未提交:
fmt.Println("Get uncommitted blocks list...")
list, err := b.GetBlockList(storage.BlockListTypeUncommitted, nil)
if err != nil {
return fmt.Errorf("get block list failed: %v", err)
}
uncommittedBlocksList := make([]storage.Block, len(list.UncommittedBlocks))
for i := range list.UncommittedBlocks {
uncommittedBlocksList[i].ID = list.UncommittedBlocks[i].Name
uncommittedBlocksList[i].Status = storage.BlockStatusUncommitted
}
如果我正在创建一个肯定还不存在的blob(有多个块)。跳过该代码有什么问题吗?
代码如下:
b := cnt.GetBlobReference(blockBlobName)
err := b.CreateBlockBlob(nil)
blockID := "00000"
data := randomData(1984)
err = b.PutBlock(blockID, data, nil)
blockID2 := "00001"
data2 := randomData(6542)
err = b.PutBlock(blockID2, data2, nil)
var uncommittedBlocksList []storage.Block
uncommittedBlocksList = append(uncommittedBlocksList,
Block{
ID:"00000"
Status:BlockStatusUncommitted,
},
Block{
ID:"00001"
Status:BlockStatusUncommitted,
},
)
err = b.PutBlockList(uncommittedBlocksList, nil)
答案 0 :(得分:3)
如果我正在创建一个绝对没有的blob(有多个块) 但是存在。跳过该代码有什么问题吗?
绝对不是。您当然可以跳过用于获取未提交的阻止列表的代码。当您尝试上载blob并且它之间失败并且您想要从上一个失败的块恢复上载时,这种用于获取未提交列表的方案很有用。通过跳过此代码,您实际上是在告诉Azure存储放弃任何其他未提交的块,并使用块列表中指定的块来创建blob。