Я написал функцию, которая должна блокировать, пока все экземпляры в списке не находятся в определенном состоянии, поэтому вот что у меня есть:
private void waitForInstanceState(List<String> instancesId, InstanceStateName state) {
int numAchievedState = 0;
while (numAchievedState != instancesId.size()) {
numAchievedState = 0;
DescribeInstanceStatusRequest describeRequest = new DescribeInstanceStatusRequest().withInstanceIds(instancesId);
DescribeInstanceStatusResult instanceStatus = ec2.describeInstanceStatus(describeRequest);
for (InstanceStatus status : instanceStatus.getInstanceStatuses()) {
if (status.getInstanceState().getName().equals(state.toString())) {
numAchievedState++;
}
}
try {
Thread.sleep(15000);
} catch (InterruptedException ex) {
Logger.getLogger(AmazonLibrary.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Код, который вызывает вышеупомянутую функцию, похож начто:
public void startInstace(List<String> instancesId) {
StartInstancesRequest startRequest = new StartInstancesRequest(instancesId);
ec2.startInstances(startRequest);
waitForInstanceState(instancesId, InstanceStateName.Running);
System.out.println("The instance has been started");
}
Дело в том, что иногда описывающий запрос экземпляра возвращает значение NULL для InstanceStatus, что, я думаю, никогда не должно происходить, поскольку экземпляр в amazon всегда имеет состояние?Также при использовании в функции instanceRun она работает, а при запуске с InstanceStateName, установленной в Stopped, она не работает.Нет исключений или ошибок.