use of com.peterphi.std.guice.database.annotation.Transactional in project stdlib by petergeneric.
the class ResourceProvisionService method newInstance.
@Transactional
public ResourceInstanceEntity newInstance(final ResourceTemplateEntity dbTemplate, final ResourceTemplateDefinition definition, Map<String, String> metadata) {
log.info("Provision new instance of template:" + dbTemplate.getId());
final AzureExistingVM azureVM = definition.azureExistingVM;
// TODO when adding a second provider make this generic so providers can be easily plugged in
List<ResourceInstanceEntity> running = getAllRunning(dbTemplate);
if (running.isEmpty()) {
log.info("Provision new instance of template: ");
ResourceInstanceEntity instance = new ResourceInstanceEntity();
instance.setTemplate(dbTemplate);
instance.setTemplateRevision(dbTemplate.getLatestRevision());
instance.setTemplateRevisionCounter(dbTemplate.getRevisions());
instance.setMetadata(metadata);
instance.setProvider(AzureExistingVMProvider.PROVIDER);
instance.setProviderInstanceId(azureVM.id);
// TODO in the future when making generic this should be TO_PROVISION and we should make the provision call asynchronously
instance.setState(ResourceInstanceState.PROVISIONING);
instance.setId(instanceDao.save(instance));
// Create a new instance
azureExistingVMProvider.start(azureVM, metadata);
return instance;
} else {
throw new IllegalArgumentException("Cannot create a new instance: provider is " + AzureExistingVMProvider.PROVIDER + " but an instance already appears to be running: " + running.stream().map(e -> e.getProviderInstanceId()).collect(Collectors.toList()));
}
}
use of com.peterphi.std.guice.database.annotation.Transactional in project stdlib by petergeneric.
the class ServiceManagerResourceUIServiceImpl method getResources.
@Override
@Transactional(readOnly = true)
public String getResources() {
final TemplateCall call = templater.template("resource_templates");
call.set("entities", templateDao.getAll());
return call.process();
}
use of com.peterphi.std.guice.database.annotation.Transactional in project stdlib by petergeneric.
the class ServiceManagerResourceUIServiceImpl method doDiscard.
@Override
@Transactional
public Response doDiscard(final int id, final String nonce) {
nonceStore.validate(nonce);
final ResourceInstanceEntity instance = resourceProvisionService.discardInstance(id);
return Response.seeOther(URI.create("/resources/template/" + instance.getTemplate().getId())).build();
}
use of com.peterphi.std.guice.database.annotation.Transactional in project stdlib by petergeneric.
the class LargeTableQueryTest method testSearchWorks.
/**
* Test that searching works with a simple primary key
*/
@Test
@Transactional
public void testSearchWorks() {
dao.save(new LargeTableSimplePKEntity("Alice"));
dao.save(new LargeTableSimplePKEntity("Bob"));
dao.save(new LargeTableSimplePKEntity("Carol"));
dao.save(new LargeTableSimplePKEntity("Dave"));
dao.save(new LargeTableSimplePKEntity("Eve"));
// Try a regular query
assertEquals(2, dao.countWithAInName());
// Now try a web query
assertEquals(2, dao.findByUriQuery(new WebQuery().contains("name", "a")).getList().size());
}
use of com.peterphi.std.guice.database.annotation.Transactional in project stdlib by petergeneric.
the class ServiceManagerRegistryRestServiceImpl method register.
@Override
@Transactional
public void register(final String instanceId, final String endpoint, final String managementToken, final String codeRevision) {
ServiceInstanceEntity entity = dao.getById(instanceId);
final boolean update = (entity != null);
// Update an existing entity
if (entity == null) {
entity = new ServiceInstanceEntity();
entity.setId(instanceId);
}
entity.setEndpoint(endpoint);
entity.setManagementToken(managementToken);
entity.setCodeRevision(codeRevision);
// Proactively update the cache used by the logging service so that it won't have to make a db query
cache.put(entity);
if (update)
dao.update(entity);
else
dao.save(entity);
}
Aggregations