protected void registerQueriesWithRetry(String serverTemplateId, String serverInstanceId, Set<QueryDefinition> queryDefinitions) throws Exception{ long waitLimit = 5 * 60 * 1000; // default 5 min long elapsed = 0; QueryServicesClient queryClient = kieServerIntegration.getAdminServerClient(serverTemplateId).getServicesClient(QueryServicesClient.class); while (elapsed < waitLimit) { try { Iterator<QueryDefinition> definitionIt = queryDefinitions.iterator(); while (definitionIt.hasNext()) { QueryDefinition definition = definitionIt.next(); queryClient.replaceQuery(definition); LOGGER.info("Query definition {} (type {}) successfully registered on kie server '{}'", definition.getName(), definition.getTarget(), serverInstanceId); // remove successfully stored definition to avoid duplicated reads in case of intermediate error definitionIt.remove(); } event.fire(new KieServerDataSetRegistered(serverInstanceId, serverTemplateId)); return; } catch (KieServicesException | KieServerHttpRequestException e) { // unable to register, might still be booting Thread.sleep(500); elapsed += 500; // get admin client with forced check of endpoints as they might have been banned (marked as failed) queryClient = kieServerIntegration.getAdminServerClientCheckEndpoints(serverTemplateId).getServicesClient(QueryServicesClient.class); LOGGER.debug("Cannot reach KIE Server, elapsed time while waiting '{}', max time '{}' error {}", elapsed, waitLimit, e.getMessage()); } } }
queryClient.replaceQuery(definition); LOGGER.info("Query definition {} (type {}) successfully registered on kie server '{}'", definition.getName(),
private void registerQueriesWithRetryException(Exception exception) throws Exception { QueryDefinition query = QueryDefinition.builder().name("test").expression("expression").source("jbpm").target("CUSTOM").build(); Set<QueryDefinition> definitions = new HashSet<>(); definitions.add(query); KieServicesClient kieClientRecreated = Mockito.mock(KieServicesClient.class); QueryServicesClient queryClientRecreated = Mockito.mock(QueryServicesClient.class); when(kieClientRecreated.getServicesClient(any())).thenReturn(queryClientRecreated); when(kieServerIntegration.getAdminServerClientCheckEndpoints(anyString())).thenReturn(kieClientRecreated); doThrow(exception).when(queryClient).replaceQuery(any()); kieServerDataSetManager.registerQueriesWithRetry("template", "instance", definitions); verify(kieServerIntegration, times(1)).getAdminServerClient(anyString(), anyString()); verify(kieServerIntegration, times(1)).getAdminServerClientCheckEndpoints(anyString()); verify(queryClient, times(1)).replaceQuery(any()); verify(queryClientRecreated, times(1)).replaceQuery(any()); assertEquals(1, receivedEvents.size()); }
private void registerQueriesWithRetryException(Exception exception) throws Exception { QueryDefinition query = QueryDefinition.builder().name("test").expression("expression").source("jbpm").target("CUSTOM").build(); Set<QueryDefinition> definitions = new HashSet<>(); definitions.add(query); KieServicesClient kieClientRecreated = Mockito.mock(KieServicesClient.class); QueryServicesClient queryClientRecreated = Mockito.mock(QueryServicesClient.class); when(kieClientRecreated.getServicesClient(any())).thenReturn(queryClientRecreated); when(kieServerIntegration.getAdminServerClientCheckEndpoints(anyString())).thenReturn(kieClientRecreated); doThrow(exception).when(queryClient).replaceQuery(any()); kieServerDataSetManager.registerQueriesWithRetry("template", "instance", definitions); verify(kieServerIntegration, times(1)).getAdminServerClient(anyString(), anyString()); verify(kieServerIntegration, times(1)).getAdminServerClientCheckEndpoints(anyString()); verify(queryClient, times(1)).replaceQuery(any()); verify(queryClientRecreated, times(1)).replaceQuery(any()); assertEquals(1, receivedEvents.size()); }
@Test public void testRegisterQueriesWithoutRetry() throws Exception { QueryDefinition query = QueryDefinition.builder().name("test").expression("expression").source("jbpm").target("CUSTOM").build(); Set<QueryDefinition> definitions = new HashSet<>(); definitions.add(query); kieServerDataSetManager.registerQueriesWithRetry("template", "instance", definitions); verify(kieServerIntegration, times(1)).getAdminServerClient(anyString(), anyString()); verify(queryClient, times(1)).replaceQuery(any()); assertEquals(1, receivedEvents.size()); }
@Test public void testRegisterQueriesOnServerWithoutBPMCapability() throws Exception { when(kieClient.getServicesClient(any())).thenThrow(KieServicesException.class); QueryDefinition query = QueryDefinition.builder().name("test").expression("expression").source("jbpm").target("CUSTOM").build(); Set<QueryDefinition> definitions = new HashSet<>(); definitions.add(query); kieServerDataSetManager.registerQueriesWithRetry("template", "instance", definitions); verify(kieServerIntegration, times(1)).getAdminServerClient(anyString(), anyString()); verify(queryClient, never()).replaceQuery(any()); assertEquals(0, receivedEvents.size()); } }
@Test public void testRegisterQueriesWithoutRetry() throws Exception { QueryDefinition query = QueryDefinition.builder().name("test").expression("expression").source("jbpm").target("CUSTOM").build(); Set<QueryDefinition> definitions = new HashSet<>(); definitions.add(query); kieServerDataSetManager.registerQueriesWithRetry("template", "instance", definitions); verify(kieServerIntegration, times(1)).getAdminServerClient(anyString(), anyString()); verify(queryClient, times(1)).replaceQuery(any()); assertEquals(1, receivedEvents.size()); }
@Test public void testRegisterQueriesOnServerWithoutBPMCapability() throws Exception { when(kieClient.getServicesClient(any())).thenThrow(KieServicesException.class); QueryDefinition query = QueryDefinition.builder().name("test").expression("expression").source("jbpm").target("CUSTOM").build(); Set<QueryDefinition> definitions = new HashSet<>(); definitions.add(query); kieServerDataSetManager.registerQueriesWithRetry("template", "instance", definitions); verify(kieServerIntegration, times(1)).getAdminServerClient(anyString(), anyString()); verify(queryClient, never()).replaceQuery(any()); assertEquals(0, receivedEvents.size()); } }
protected void replaceQueryInKieServers(DataSetDef def) { if (def instanceof RemoteDataSetDef && ((RemoteDataSetDef) def).getServerTemplateId() != null) { QueryDefinition queryDefinition = QueryDefinition.builder() .name(def.getUUID()) .source(((RemoteDataSetDef) def).getDataSource()) .target(((RemoteDataSetDef) def).getQueryTarget()) .expression(((RemoteDataSetDef) def).getDbSQL()) .build(); kieServerIntegration.broadcastToKieServers(((RemoteDataSetDef) def).getServerTemplateId(), (KieServicesClient client) -> { QueryServicesClient instanceQueryClient = client.getServicesClient(QueryServicesClient.class); QueryDefinition registered = instanceQueryClient.replaceQuery(queryDefinition); return registered; }); LOGGER.info("Data set definition {} ({}) modification event processed", def.getUUID(), def.getName()); } } }
(KieServicesClient client) -> { QueryServicesClient instanceQueryClient = client.getServicesClient(QueryServicesClient.class); QueryDefinition registered = instanceQueryClient.replaceQuery(queryDefinition); if (registered.getColumns() != null) {
queryClient.replaceQuery(query);
QueryDefinition replaced = queryClient.replaceQuery(query);