use of org.platformlayer.ops.OpsException in project platformlayer by platformlayer.
the class PlatformlayerBackedPool method release.
@Override
public void release(PlatformLayerKey owner, T item) throws OpsException {
for (int i = 0; i < 10; i++) {
ItemBase resource = platformLayer.getItem(resourceKey);
List<Assignment> assignments = findAssignments(resource);
String key = adapter.toKey(item);
Assignment assigned = Assignment.find(assignments, key, subkey);
if (assigned == null) {
throw new OpsException("Resource not assigned");
}
if (!assigned.item.equals(owner.getUrl())) {
throw new OpsException("Resource not held");
}
Tag assignmentTag = assigned.asTag();
TagChanges tagChanges = new TagChanges();
tagChanges.removeTags.add(assignmentTag);
if (null != platformLayer.changeTags(resourceKey, tagChanges, resource.getVersion())) {
return;
}
if (!TimeSpan.ONE_SECOND.doSafeSleep()) {
break;
}
}
// List<PlatformLayerKey> assignedTo = Tag.POOL_ASSIGNMENT.build(t) Tag.ASSIGNED_TO.find(item);
// if (!assignedTo.contains(holder)) {
// throw new OpsException("Resource not owned");
// }
//
// platformLayer.deleteItem(item.getKey());
}
use of org.platformlayer.ops.OpsException in project platformlayer by platformlayer.
the class OpenstackBackupContextFactory method build.
@Override
public OpenstackBackupContext build(ItemBase item) throws OpsException {
Machine machine = instances.findMachine(item);
if (machine == null) {
throw new OpsException("Cannot determine machine for: " + item);
}
StorageConfiguration storageConfiguration = cloud.getStorageConfiguration(machine);
return build(storageConfiguration);
}
use of org.platformlayer.ops.OpsException in project platformlayer by platformlayer.
the class CloudInstanceMapper method waitOperation.
private void waitOperation(AsyncServerOperation operation) throws OpsException {
try {
log.info("Waiting for server operation to complete");
operation.waitComplete(2, TimeUnit.MINUTES);
} catch (TimeoutException e) {
throw new OpsException("Timeout waiting for server operation to complete", e);
} catch (OpenstackException e) {
throw new OpsException("Error waiting for server operation to complete", e);
}
}
use of org.platformlayer.ops.OpsException in project platformlayer by platformlayer.
the class ScoreHostPolicy method choose.
@Override
public DirectCloudHost choose(List<DirectCloudHost> candidates) throws OpsException {
final String sameGroupId;
if (Strings.isNullOrEmpty(hostPolicy.groupId)) {
sameGroupId = DEFAULT_GROUP;
} else {
sameGroupId = hostPolicy.groupId;
}
final ItemType sameItemType;
if (hostPolicy.scoreSameItemType != 0) {
PlatformLayerKey owner = findOwner(newInstance);
if (owner == null) {
throw new OpsException();
}
sameItemType = owner.getItemType();
} else {
sameItemType = null;
}
List<HostRecord> records = Lists.newArrayList();
for (DirectCloudHost candidate : candidates) {
HostRecord record = new HostRecord();
record.candidate = candidate;
record.groups = Maps.newHashMap();
if (hostPolicy.scoreSameItemType != 0) {
record.owners = Maps.newHashMap();
}
records.add(record);
for (String assigned : candidate.getModel().getTags().findAll(Tag.ASSIGNED)) {
PlatformLayerKey instanceKey = PlatformLayerKey.parse(assigned);
// TODO: Avoid 1+N
DirectInstance instance = platformLayer.getItem(instanceKey);
if (instance == null) {
// TODO: Warn?
throw new IllegalStateException();
}
switch(instance.getState()) {
case DELETE_REQUESTED:
case DELETED:
continue;
}
HostPolicy instanceHostPolicy = instance.hostPolicy;
String instanceGroupId = instanceHostPolicy.groupId;
if (Strings.isNullOrEmpty(instanceGroupId)) {
instanceGroupId = DEFAULT_GROUP;
}
record.groups.put(instance, instanceGroupId);
if (sameItemType != null) {
PlatformLayerKey owner = findOwner(instance);
if (owner != null) {
record.owners.put(instance, owner);
}
}
record.all.add(instance);
}
}
Function<HostRecord, Float> score = new Function<HostRecord, Float>() {
@Override
public Float apply(HostRecord record) {
float score = 0;
for (DirectInstance instance : record.all) {
if (sameGroupId != null) {
String instanceGroupId = record.groups.get(instance);
if (Objects.equal(instanceGroupId, sameGroupId)) {
score += hostPolicy.scoreSameGroup;
}
}
if (sameItemType != null) {
PlatformLayerKey owner = record.owners.get(instance);
if (owner != null && owner.getItemType().equals(sameItemType)) {
score += hostPolicy.scoreSameItemType;
}
}
}
// Break ties using least-loaded
score -= record.all.size() / 1000.0f;
return score;
}
};
HostRecord bestRecord = ScoreChooser.chooseMax(score).choose(records);
return bestRecord.candidate;
}
use of org.platformlayer.ops.OpsException in project platformlayer by platformlayer.
the class GoogleComputeClient method listImages.
private Iterable<Image> listImages(String projectId) throws OpsException {
List<Image> ret = Lists.newArrayList();
ImageList imageList;
try {
log.debug("Listing images in project " + projectId);
imageList = compute.images().list(projectId).execute();
} catch (IOException e) {
throw new OpsException("Error listing images", e);
}
if (imageList.getItems() != null) {
ret.addAll(imageList.getItems());
}
return ret;
}
Aggregations