use of org.infinispan.commons.dataconversion.internal.Json in project infinispan by infinispan.
the class XSiteResource method updateTakeOffline.
private CompletionStage<RestResponse> updateTakeOffline(RestRequest request) {
NettyRestResponse.Builder responseBuilder = new NettyRestResponse.Builder().status(NO_CONTENT);
String site = request.variables().get("site");
Optional<XSiteAdminOperations> xsiteAdminOpt = getXSiteAdminAndCheckSite(request, responseBuilder);
if (!xsiteAdminOpt.isPresent()) {
return completedFuture(responseBuilder.build());
}
XSiteAdminOperations xsiteAdmin = xsiteAdminOpt.get();
TakeOfflineConfiguration current = xsiteAdmin.getTakeOfflineConfiguration(site);
assert current != null;
String content = request.contents().asString();
if (content == null || content.isEmpty()) {
return completedFuture(responseBuilder.status(BAD_REQUEST).build());
}
int afterFailures, minWait;
try {
Json json = Json.read(content);
Json minWaitValue = json.at(MIN_WAIT_FIELD);
Json afterFailuresValue = json.at(AFTER_FAILURES_FIELD);
if (minWaitValue == null || afterFailuresValue == null) {
return completedFuture(responseBuilder.status(BAD_REQUEST).build());
}
minWait = minWaitValue.asInteger();
afterFailures = afterFailuresValue.asInteger();
} catch (Exception e) {
Throwable rootCause = Util.getRootCause(e);
return completedFuture(responseBuilder.status(BAD_REQUEST).entity(rootCause.getMessage()).build());
}
if (afterFailures == current.afterFailures() && minWait == current.minTimeToWait()) {
return completedFuture(responseBuilder.status(NOT_MODIFIED).build());
}
return supplyAsync(() -> {
String status = Security.doAs(request.getSubject(), (PrivilegedAction<String>) () -> xsiteAdmin.amendTakeOffline(site, afterFailures, minWait));
if (!status.equals(XSiteAdminOperations.SUCCESS)) {
responseBuilder.status(INTERNAL_SERVER_ERROR).entity(site);
}
return responseBuilder.build();
}, invocationHelper.getExecutor());
}
use of org.infinispan.commons.dataconversion.internal.Json in project infinispan by infinispan.
the class TasksResourceTest method testTaskUpload.
@Test
public void testTaskUpload() throws Exception {
RestTaskClient taskClient = client.tasks();
String script = getResourceAsString("hello.js", getClass().getClassLoader());
RestEntity scriptEntity = RestEntity.create(APPLICATION_JAVASCRIPT, script);
CompletionStage<RestResponse> response = taskClient.uploadScript("hello", scriptEntity);
ResponseAssertion.assertThat(response).isOk();
response = taskClient.exec("hello", Collections.singletonMap("greetee", "Friend"));
ResponseAssertion.assertThat(response).isOk();
Json jsonNode = Json.read(join(response).getBody());
assertEquals("Hello Friend", jsonNode.asString());
}
use of org.infinispan.commons.dataconversion.internal.Json in project infinispan by infinispan.
the class XSiteResourceTest method testGetStatusAllCaches.
@Test
public void testGetStatusAllCaches() {
RestClient restClient = clientPerSite.get(LON);
assertAllSitesOnline(restClient);
assertSuccessful(restClient.cache(CACHE_2).takeSiteOffline(NYC));
Json json = jsonResponseBody(restClient.cacheManager(CACHE_MANAGER).backupStatuses());
assertEquals(json.at(NYC).at("status").asString(), "mixed");
assertEquals(json.at(NYC).at("online").asJsonList().iterator().next().asString(), CACHE_1);
assertEquals(json.at(NYC).at("offline").asJsonList().iterator().next().asString(), CACHE_2);
json = jsonResponseBody(restClient.cacheManager(CACHE_MANAGER).backupStatus(NYC));
assertEquals(json.at("status").asString(), "mixed");
assertEquals(json.at("online").asJsonList().iterator().next().asString(), CACHE_1);
assertEquals(json.at("offline").asJsonList().iterator().next().asString(), CACHE_2);
assertSuccessful(restClient.cache(CACHE_2).bringSiteOnline(NYC));
assertAllSitesOnline(restClient);
// add a second node
TestSite site = site(LON);
EmbeddedCacheManager cm = site.addCacheManager(null, defaultGlobalConfigurationForSite(site.getSiteIndex()), defaultConfigurationForSite(site.getSiteIndex()), true);
site.waitForClusterToForm(CACHE_1);
site.waitForClusterToForm(CACHE_2);
TakeOfflineManager takeOfflineManager = TestingUtil.extractComponent(cm.getCache(CACHE_1), TakeOfflineManager.class);
takeOfflineManager.takeSiteOffline(NYC);
json = jsonResponseBody(restClient.cacheManager(CACHE_MANAGER).backupStatuses());
assertEquals(json.at(NYC).at("status").asString(), "mixed");
assertEquals(json.at(NYC).at("online").asJsonList().iterator().next().asString(), CACHE_2);
assertTrue(json.at(NYC).at("offline").asJsonList().isEmpty());
assertEquals(json.at(NYC).at("mixed").asJsonList().iterator().next().asString(), CACHE_1);
json = jsonResponseBody(restClient.cacheManager(CACHE_MANAGER).backupStatus(NYC));
assertEquals(json.at("status").asString(), "mixed");
assertEquals(json.at("online").asJsonList().iterator().next().asString(), CACHE_2);
assertTrue(json.at("offline").asJsonList().isEmpty());
assertEquals(json.at("mixed").asJsonList().iterator().next().asString(), CACHE_1);
takeOfflineManager.bringSiteOnline(NYC);
}
use of org.infinispan.commons.dataconversion.internal.Json in project infinispan by infinispan.
the class XSiteResourceTest method assertAllSitesOnline.
private void assertAllSitesOnline(RestClient restClient, String... sites) {
Json json = jsonResponseBody(restClient.cacheManager(CACHE_MANAGER).backupStatuses());
Arrays.stream(sites).forEach(s -> assertEquals(json.at(s).at("status").asString(), "online"));
}
use of org.infinispan.commons.dataconversion.internal.Json in project infinispan by infinispan.
the class XSiteResourceTest method testBringAllCachesOnlineOffline.
@Test
public void testBringAllCachesOnlineOffline() {
RestClient restClient = clientPerSite.get(LON);
RestCacheManagerClient restCacheManagerClient = restClient.cacheManager(CACHE_MANAGER);
assertSuccessful(restCacheManagerClient.takeOffline(SFO));
Json json = jsonResponseBody(restCacheManagerClient.backupStatuses());
assertEquals(json.at(SFO).at("status").asString(), "offline");
assertSuccessful(restCacheManagerClient.bringBackupOnline(SFO));
json = jsonResponseBody(restCacheManagerClient.backupStatuses());
assertEquals(json.at(SFO).at("status").asString(), "online");
}
Aggregations