本文整理汇总了Golang中github.com/coreos/torus/block.OpenBlockVolume函数的典型用法代码示例。如果您正苦于以下问题:Golang OpenBlockVolume函数的具体用法?Golang OpenBlockVolume怎么用?Golang OpenBlockVolume使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了OpenBlockVolume函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: bsnapListAction
func bsnapListAction(cmd *cobra.Command, args []string) {
if len(args) != 1 {
cmd.Usage()
os.Exit(1)
}
vol := args[0]
srv := createServer()
defer srv.Close()
blockvol, err := block.OpenBlockVolume(srv, vol)
if err != nil {
die("couldn't open block volume %s: %v", vol, err)
}
snaps, err := blockvol.GetSnapshots()
if err != nil {
die("couldn't get snapshots for block volume %s: %v", vol, err)
}
table := NewTableWriter(os.Stdout)
table.SetHeader([]string{"Snapshot Name", "Timestamp"})
for _, x := range snaps {
table.Append([]string{
x.Name,
x.When.Format(time.RFC3339),
})
}
if !outputAsCSV {
fmt.Printf("Volume: %s\n", vol)
table.Render()
} else {
table.RenderCSV()
}
}
开发者ID:ConfusedReality,项目名称:server_distributed-storage_torus,代码行数:31,代码来源:block_snapshot.go
示例2: FindDevice
func (f *finder) FindDevice(name string) (nbd.Device, error) {
blockvol, err := block.OpenBlockVolume(f.srv, name)
if err != nil {
return nil, err
}
return blockvol.OpenBlockFile()
}
开发者ID:ConfusedReality,项目名称:server_distributed-storage_torus,代码行数:8,代码来源:nbd.go
示例3: openVol
func openVol(t *testing.T, server *torus.Server, volname string) *block.BlockFile {
blockvol, err := block.OpenBlockVolume(server, volname)
if err != nil {
t.Fatalf("couldn't open block volume %s: %v", volname, err)
}
f, err := blockvol.OpenBlockFile()
if err != nil {
t.Fatalf("couldn't open blockfile %s: %v", volname, err)
}
return f
}
开发者ID:coreos,项目名称:torus,代码行数:11,代码来源:integration_test.go
示例4: BenchmarkLoadThree
func BenchmarkLoadThree(b *testing.B) {
b.StopTimer()
servers, mds := ringN(b, 3)
client := newServer(b, mds)
err := distributor.OpenReplication(client)
if err != nil {
b.Fatal(err)
}
defer client.Close()
size := BlockSize * 100
data := makeTestData(size)
b.StartTimer()
for i := 0; i < b.N; i++ {
input := bytes.NewReader(data)
volname := fmt.Sprintf("testvol-%d", i)
err = block.CreateBlockVolume(client.MDS, volname, uint64(size))
if err != nil {
b.Fatalf("couldn't create block volume %s: %v", volname, err)
}
blockvol, err := block.OpenBlockVolume(client, volname)
if err != nil {
b.Fatalf("couldn't open block volume %s: %v", volname, err)
}
f, err := blockvol.OpenBlockFile()
if err != nil {
b.Fatalf("couldn't open blockfile %s: %v", volname, err)
}
copied, err := io.Copy(f, input)
if err != nil {
b.Fatalf("couldn't copy: %v", err)
}
err = f.Sync()
if err != nil {
b.Fatalf("couldn't sync: %v", err)
}
err = f.Close()
if err != nil {
b.Fatalf("couldn't close: %v", err)
}
b.Logf("copied %d bytes", copied)
}
b.SetBytes(int64(size))
b.StopTimer()
closeAll(b, servers...)
b.StartTimer()
}
开发者ID:coreos,项目名称:torus,代码行数:53,代码来源:integration_test.go
示例5: blockDumpAction
func blockDumpAction(cmd *cobra.Command, args []string) error {
if len(args) != 2 {
return torus.ErrUsage
}
output, err := getWriterFromArg(args[1])
if err != nil {
return fmt.Errorf("couldn't open output: %v", err)
}
srv := createServer()
defer srv.Close()
blockvol, err := block.OpenBlockVolume(srv, args[0])
if err != nil {
return fmt.Errorf("couldn't open block volume %s: %v", args[0], err)
}
tempsnap := fmt.Sprintf("temp-dump-%d", os.Getpid())
err = blockvol.SaveSnapshot(tempsnap)
if err != nil {
return fmt.Errorf("couldn't snapshot: %v", err)
}
bf, err := blockvol.OpenSnapshot(tempsnap)
if err != nil {
return fmt.Errorf("couldn't open snapshot: %v", err)
}
size := int64(bf.Size())
if progress {
pb := progressutil.NewCopyProgressPrinter()
pb.AddCopy(bf, path.Base(args[0]), size, output)
err := pb.PrintAndWait(os.Stderr, 500*time.Millisecond, nil)
if err != nil {
return fmt.Errorf("couldn't copy: %v", err)
}
} else {
n, err := io.Copy(output, bf)
if err != nil {
return fmt.Errorf("couldn't copy: %v", err)
}
if n != size {
return fmt.Errorf("short read of %q", args[0])
}
}
err = blockvol.DeleteSnapshot(tempsnap)
if err != nil {
return fmt.Errorf("couldn't delete snapshot: %v", err)
}
fmt.Printf("copied %d bytes\n", size)
return nil
}
开发者ID:coreos,项目名称:torus,代码行数:50,代码来源:block_dump_load.go
示例6: nbdAction
func nbdAction(cmd *cobra.Command, args []string) error {
if len(detachDevice) > 0 && len(args) == 0 {
if err := nbd.Detach(detachDevice); err != nil {
return fmt.Errorf("failed to detach: %v", err)
}
return nil
}
if len(args) != 1 && len(args) != 2 {
return torus.ErrUsage
}
var knownDev string
if len(args) == 2 {
knownDev = args[1]
}
srv := createServer()
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
closer := make(chan bool)
go func() {
for _ = range signalChan {
fmt.Println("\nReceived an interrupt, disconnecting...")
close(closer)
}
}()
defer srv.Close()
blockvol, err := block.OpenBlockVolume(srv, args[0])
if err != nil {
return fmt.Errorf("server doesn't support block volumes: %s", err)
}
f, err := blockvol.OpenBlockFile()
if err != nil {
if err == torus.ErrLocked {
return fmt.Errorf("volume %s is already mounted on another host", args[0])
}
return fmt.Errorf("can't open block volume: %s", err)
}
defer f.Close()
err = connectNBD(srv, f, knownDev, closer)
if err != nil {
return err
}
return nil
}
开发者ID:coreos,项目名称:torus,代码行数:49,代码来源:nbd.go
示例7: nbdAction
func nbdAction(cmd *cobra.Command, args []string) {
if len(args) != 1 && len(args) != 2 {
cmd.Usage()
os.Exit(1)
}
var knownDev string
if len(args) == 2 {
knownDev = args[1]
}
srv := createServer()
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
closer := make(chan bool)
go func() {
for _ = range signalChan {
fmt.Println("\nReceived an interrupt, disconnecting...")
close(closer)
}
}()
defer srv.Close()
blockvol, err := block.OpenBlockVolume(srv, args[0])
if err != nil {
fmt.Fprintf(os.Stderr, "server doesn't support block volumes: %s\n", err)
os.Exit(1)
}
f, err := blockvol.OpenBlockFile()
if err != nil {
if err == torus.ErrLocked {
fmt.Fprintf(os.Stderr, "volume %s is already mounted on another host\n", args[0])
} else {
fmt.Fprintf(os.Stderr, "can't open block volume: %s\n", err)
}
os.Exit(1)
}
defer f.Close()
err = connectNBD(srv, f, knownDev, closer)
if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
}
开发者ID:ConfusedReality,项目名称:server_distributed-storage_torus,代码行数:46,代码来源:nbd.go
示例8: bsnapCreateAction
func bsnapCreateAction(cmd *cobra.Command, args []string) {
if len(args) != 1 {
cmd.Usage()
os.Exit(1)
}
vol := ParseSnapName(args[0])
if vol.Snapshot == "" {
die("can't create snapshot without a name, please use the form [email protected]_NAME")
}
srv := createServer()
defer srv.Close()
blockvol, err := block.OpenBlockVolume(srv, vol.Volume)
if err != nil {
die("couldn't open block volume %s: %v", vol.Volume, err)
}
err = blockvol.SaveSnapshot(vol.Snapshot)
if err != nil {
die("couldn't snapshot: %v", err)
}
}
开发者ID:ConfusedReality,项目名称:server_distributed-storage_torus,代码行数:20,代码来源:block_snapshot.go
示例9: bsnapRestoreAction
func bsnapRestoreAction(cmd *cobra.Command, args []string) error {
if len(args) != 1 {
return torus.ErrUsage
}
vol := ParseSnapName(args[0])
if vol.Snapshot == "" {
return fmt.Errorf("can't restore a snapshot without a name, please use the form [email protected]_NAME")
}
srv := createServer()
defer srv.Close()
blockvol, err := block.OpenBlockVolume(srv, vol.Volume)
if err != nil {
return fmt.Errorf("couldn't open block volume %s: %v", vol.Volume, err)
}
err = blockvol.RestoreSnapshot(vol.Snapshot)
if err != nil {
return fmt.Errorf("couldn't restore snapshot: %v", err)
}
return nil
}
开发者ID:coreos,项目名称:torus,代码行数:20,代码来源:block_snapshot.go
示例10: tcmuAction
func tcmuAction(cmd *cobra.Command, args []string) error {
if len(args) != 1 {
return torus.ErrUsage
}
srv := createServer()
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
closer := make(chan bool)
go func() {
for range signalChan {
fmt.Println("\nReceived an interrupt, disconnecting...")
close(closer)
}
}()
defer srv.Close()
blockvol, err := block.OpenBlockVolume(srv, args[0])
if err != nil {
return fmt.Errorf("server doesn't support block volumes: %s", err)
}
f, err := blockvol.OpenBlockFile()
if err != nil {
if err == torus.ErrLocked {
return fmt.Errorf("volume %s is already mounted on another host", args[0])
}
return fmt.Errorf("can't open block volume: %s", err)
}
defer f.Close()
err = torustcmu.ConnectAndServe(f, args[0], closer)
if err != nil {
return fmt.Errorf("failed to serve volume using SCSI: %s", err)
}
return nil
}
开发者ID:coreos,项目名称:torus,代码行数:37,代码来源:tcmu.go
示例11: testAoEServer
// testAoEServer sets up a Torus AoE server and returns:
// - an io.Reader which contains the server's response to a request
// - an io.Writer which can be used to issue a request to the server
// - a closure which can be used to run the server for a single
// request/response cycle
// - a closure which can be used to tear down all server resources
func testAoEServer(t *testing.T) (response io.Reader, request io.Writer, run func() error, done func()) {
ts := torus.NewMemoryServer()
mds, err := temp.NewTemp(ts.Cfg)
if err != nil {
t.Fatalf("failed to configure metadata service: %v", err)
}
ts.MDS = mds
const volName = "test"
if err := block.CreateBlockVolume(mds, volName, 1024); err != nil {
t.Fatalf("failed to create block volume: %v", err)
}
vol, err := block.OpenBlockVolume(ts, volName)
if err != nil {
t.Fatalf("error opening block volume: %v", err)
}
as, err := NewServer(vol, nil)
if err != nil {
t.Fatalf("error opening AoE server: %v", err)
}
serverWrite := bytes.NewBuffer(nil)
serverRead := bytes.NewBuffer(nil)
bp := &bufPacketConn{
rb: serverWrite,
wb: serverRead,
}
iface := &Interface{
Interface: &net.Interface{
Name: "lo",
MTU: testMTU,
},
PacketConn: bp,
}
run = func() error {
if err := as.Serve(iface); err != nil {
return fmt.Errorf("failed to serve AoE: %v", err)
}
bp.mu.Lock()
defer bp.mu.Unlock()
if !bp.gotBroadcast {
return errors.New("broadcast advertise was never received")
}
return nil
}
done = func() {
_ = as.Close()
_ = iface.PacketConn.Close()
_ = ts.Close()
}
return serverRead, serverWrite, run, done
}
开发者ID:ConfusedReality,项目名称:server_distributed-storage_torus,代码行数:69,代码来源:aoe_test.go
示例12: blockLoadAction
func blockLoadAction(cmd *cobra.Command, args []string) error {
if len(args) != 2 && len(args) != 3 {
return torus.ErrUsage
}
input, err := getReaderFromArg(args[0])
if err != nil {
return fmt.Errorf("couldn't open input: %v", err)
}
srv := createServer()
defer srv.Close()
fi, err := input.Stat()
if err != nil {
return fmt.Errorf("couldn't stat input file: %v", err)
}
size := uint64(fi.Size())
if len(args) == 3 {
expSize, err := humanize.ParseBytes(args[2])
if err != nil {
return fmt.Errorf("error parsing size %s: %v", args[2], err)
}
if expSize < size {
return fmt.Errorf("size must be larger than input file")
}
size = expSize
}
err = block.CreateBlockVolume(srv.MDS, args[1], size)
if err != nil {
return fmt.Errorf("couldn't create block volume %s: %v", args[1], err)
}
blockvol, err := block.OpenBlockVolume(srv, args[1])
if err != nil {
return fmt.Errorf("couldn't open block volume %s: %v", args[1], err)
}
f, err := blockvol.OpenBlockFile()
if err != nil {
return fmt.Errorf("couldn't open blockfile %s: %v", args[1], err)
}
defer f.Close()
if progress {
pb := progressutil.NewCopyProgressPrinter()
pb.AddCopy(input, path.Base(args[0]), fi.Size(), f)
err := pb.PrintAndWait(os.Stderr, 500*time.Millisecond, nil)
if err != nil {
return fmt.Errorf("couldn't copy: %v", err)
}
} else {
_, err := io.Copy(f, input)
if err != nil {
return fmt.Errorf("couldn't copy: %v", err)
}
}
err = f.Sync()
if err != nil {
return fmt.Errorf("couldn't sync: %v", err)
}
fmt.Printf("copied %d bytes\n", fi.Size())
return nil
}
开发者ID:coreos,项目名称:torus,代码行数:64,代码来源:block_dump_load.go
示例13: aoeAction
func aoeAction(cmd *cobra.Command, args []string) {
if len(args) != 4 {
cmd.Usage()
os.Exit(1)
}
srv := createServer()
vol := args[0]
ifname := args[1]
maj := args[2]
min := args[3]
major, err := strconv.ParseUint(maj, 10, 16)
if err != nil {
die("Failed to parse major address %q: %v\n", maj, err)
}
minor, err := strconv.ParseUint(min, 10, 8)
if err != nil {
die("Failed to parse minor address %q: %v\n", min, err)
}
blockvol, err := block.OpenBlockVolume(srv, vol)
if err != nil {
fmt.Println("server doesn't support block volumes:", err)
os.Exit(1)
}
ai, err := aoe.NewInterface(ifname)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to set up interface %q: %v\n", ifname, err)
os.Exit(1)
}
as, err := aoe.NewServer(blockvol, &aoe.ServerOptions{
Major: uint16(major),
Minor: uint8(minor),
})
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to crate AoE server: %v\n", err)
os.Exit(1)
}
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
go func(sv *torus.Server, iface *aoe.Interface) {
for _ = range signalChan {
fmt.Println("\nReceived an interrupt, stopping services...")
iface.Close()
sv.Close()
as.Close()
os.Exit(0)
}
}(srv, ai)
if err = as.Serve(ai); err != nil {
fmt.Fprintf(os.Stderr, "Failed to serve AoE: %v\n", err)
os.Exit(1)
}
}
开发者ID:ConfusedReality,项目名称:server_distributed-storage_torus,代码行数:63,代码来源:aoe.go
示例14: aoeAction
func aoeAction(cmd *cobra.Command, args []string) error {
if len(aoeFlush) > 0 && len(args) == 0 {
if err := flush(aoeFlush); err != nil {
return fmt.Errorf("failed to flush: %v", err)
}
return nil
}
if len(args) != 4 {
return torus.ErrUsage
}
srv := createServer()
defer srv.Close()
vol := args[0]
ifname := args[1]
maj := args[2]
min := args[3]
major, err := strconv.ParseUint(maj, 10, 16)
if err != nil {
return fmt.Errorf("Failed to parse major address %q: %v", maj, err)
}
minor, err := strconv.ParseUint(min, 10, 8)
if err != nil {
return fmt.Errorf("Failed to parse minor address %q: %v", min, err)
}
blockvol, err := block.OpenBlockVolume(srv, vol)
if err != nil {
return fmt.Errorf("server doesn't support block volumes: %v", err)
}
ai, err := aoe.NewInterface(ifname)
if err != nil {
return fmt.Errorf("Failed to set up interface %q: %v", ifname, err)
}
as, err := aoe.NewServer(blockvol, &aoe.ServerOptions{
Major: uint16(major),
Minor: uint8(minor),
})
if err != nil {
return fmt.Errorf("Failed to crate AoE server: %v", err)
}
defer as.Close()
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
go func(iface *aoe.Interface) {
for _ = range signalChan {
fmt.Println("\nReceived an interrupt, stopping services...")
iface.Close()
}
}(ai)
if err = as.Serve(ai); err != nil {
return fmt.Errorf("Failed to serve AoE: %v", err)
}
return nil
}
开发者ID:coreos,项目名称:torus,代码行数:64,代码来源:aoe.go
注:本文中的github.com/coreos/torus/block.OpenBlockVolume函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论