我有多个运行EBS支持的EC2实例,我希望能够在其中一个后面拍摄EBS卷的快照,从该快照创建一个新的EBS卷,然后将该新的EBS卷作为附加驱动器安装到另一个上.我知道如何通过AWS Web控制台执行此操作,但我希望使用AWS Java API自动执行此过程.
如果我只是一个接一个地调用以下命令:
CreateSnapshotResult snapRes
= ec2.createSnapshot(new CreateSnapshotRequest(oldVolumeID, "Test snapshot"));
Snapshot snap = snapRes.getSnapshot();
CreateVolumeResult volRes
= ec2.createVolume(new CreateVolumeRequest(snap.getSnapshotId(), aZone));
String newVolumeID = volRes.getVolume().getVolumeId();
AttachVolumeResult attachRes
= ec2.attachVolume(new AttachVolumeRequest(newVolumeID, instanceID, "xvdg"));
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Caught Exception: Snapshot 'snap-8e822cfd' is not 'completed'.
Reponse Status Code: 400
Error Code: IncorrectState
Request ID: 40bc6bad-43e0-49e6-a89a-0489744d24e6
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我显然需要等到快照完成后再从快照创建新的EBS卷.根据亚马逊文档,Snapshot.getState()的可能值是"挂起,完成或错误",因此我决定使用AWS签入以查看快照是否仍处于"挂起"状态.我写了下面的代码,但它没有用:
CreateSnapshotResult snapRes
= ec2.createSnapshot(new CreateSnapshotRequest(oldVolumeID, "Test snapshot"));
Snapshot snap = snapRes.getSnapshot();
System.out.println("Snapshot request sent.");
System.out.println("Waiting for snapshot to be created");
String snapState = snap.getState();
System.out.println("snapState is …
Run Code Online (Sandbox Code Playgroud) 在我的一个 Rust 项目中,我有一个多级枚举层次结构。这是一个简化版本(游乐场链接):
enum Child {
ChildA,
ChildB,
}
enum Parent {
ParentA(Child),
ParentB,
}
enum GrandParent {
GrandParentA(Parent),
GrandParentB,
}
Run Code Online (Sandbox Code Playgroud)
为了方便起见,我在每个级别与其之上的级别之间实现了转换器:
impl From<Child> for Parent {
fn from(c: Child) -> Self {
Parent::ParentA(c)
}
}
impl From<Parent> for GrandParent {
fn from(p: Parent) -> Self {
GrandParent::GrandParentA(p)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想从 a 转换Child
为 aParent
我现在可以做
let c: Child = Child::ChildA;
let p: Parent = c.into();
Run Code Online (Sandbox Code Playgroud)
但如果我想从 a 转换Child
为 a Grandparent
,我似乎无法将多个调用链接到into()
: …
我正在使用 Go 的 pprof 工具来调查我的服务的内存使用情况。几乎所有内存使用都来自设置多个有界队列通道的单个函数。我对 pprof 在这里告诉我的内容有些困惑:
$ go tool pprof ~/pprof/pprof.server.alloc_objects.alloc_space.inuse_objects.inuse_space.007.pb.gz
File: server
Type: inuse_space
Time: Dec 21, 2020 at 10:46am (PST)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) list foo
Total: 102.73MB
ROUTINE ======================== github.com/******/foo in ***.go
79.10MB 79.10MB (flat, cum) 77.00% of Total
. . 135:
. . 136:func foo() {
. . 137:
14.04MB 14.04MB 138: chanA := make(chan chanAEntry, bufferSize)
. . 139: defer close(chanA)
. . 140:
. . 141: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个通用的String转换器函数,它接受一个字符串和一个转换函数,并将该函数应用于字符串:
def convertString[A](s: String, f: String => A): A = f(s)
Run Code Online (Sandbox Code Playgroud)
我正在尝试传递toInt
函数f
,但我的IDE一直抱怨它Cannot resolve symbol toInt
.
如何toInt
像其他函数一样访问我可以使用的函数对象?
我有一片uuid.UUID
元素。从来源来看, auuid.UUID
只是字节数组的类型别名:type UUID [16]byte
。
我正在尝试使用以下代码将uuid.Uuid
s的这片转换为 s 的片:[]byte
package main
import (
"fmt"
"github.com/google/uuid"
)
func main() {
ids := []uuid.UUID {
uuid.New(),
uuid.New(),
uuid.New(),
}
fmt.Printf("ids: %v\n", ids)
idBytes := make([][]byte, len(ids))
for i, id := range ids {
idBytes[i] = id[:]
}
fmt.Printf("idBytes: %x\n", idBytes)
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这会产生以下输出:
ids: [66b4bb26-3c1f-4dd7-a608-aa8f799e4bfe 014e0537-c326-4021-be38-165f49595eed 5c71efff-ddb5-4f6e-8f85-c1dab013b5d1]
idBytes: [5c71efffddb54f6e8f85c1dab013b5d1 5c71efffddb54f6e8f85c1dab013b5d1 5c71efffddb54f6e8f85c1dab013b5d1]
Run Code Online (Sandbox Code Playgroud)
显然有 3 个不同的 UUID,但输出切片仅包含最后一个,重复了 3 次。这里发生了什么?
我尝试过的事情: