From 951accc43535d5e7622ca1d3961555da8d9bd86f Mon Sep 17 00:00:00 2001 From: Duckflip Date: Wed, 26 Feb 2025 17:17:49 +0100 Subject: [PATCH] #1741 : correction post Anthony review --- docker-compose/Dockerfile | 10 +---- docker-compose/datasets/entrypoint | 2 - docker-compose/datasets/wait-for-solr.sh | 20 --------- .../shanoir/ng/ShanoirDatasetIndexation.java | 42 ++++++++++++++----- 4 files changed, 33 insertions(+), 41 deletions(-) delete mode 100755 docker-compose/datasets/wait-for-solr.sh diff --git a/docker-compose/Dockerfile b/docker-compose/Dockerfile index 3c1e80cda4..2b3f06deef 100644 --- a/docker-compose/Dockerfile +++ b/docker-compose/Dockerfile @@ -90,9 +90,6 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ locales \ locales-all -RUN apt-get install -y iputils-ping - - # take care of path ENV PATH /opt/dcm4che/bin:$PATH ENV LC_ALL en_US.UTF-8 @@ -101,21 +98,18 @@ ENV LANGUAGE en_US.UTF-8 # install the files from the 'dowloader' stage COPY --link --from=datasets-download /target/. / -COPY --link datasets/shanoir-ng-datasets.jar shanoir-ng-datasets.jar COPY --link datasets/entrypoint /usr/bin/ -COPY --link datasets/wait-for-solr.sh /usr/bin/ +COPY --link datasets/shanoir-ng-datasets.jar shanoir-ng-datasets.jar - # Use the below line for remote debugging +# Use the below line for remote debugging #CMD ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:9914", "-jar", "/shanoir-ng-datasets.jar"] CMD ["-jar", "/shanoir-ng-datasets.jar"] - - ################ import #################################################### FROM base-microservice as import diff --git a/docker-compose/datasets/entrypoint b/docker-compose/datasets/entrypoint index 8af8638309..f65888a51d 100755 --- a/docker-compose/datasets/entrypoint +++ b/docker-compose/datasets/entrypoint @@ -19,6 +19,4 @@ handle_microservice_migration abort_if_error -/usr/bin/wait-for-solr.sh - run_microservice "$@" \ No newline at end of file diff --git a/docker-compose/datasets/wait-for-solr.sh b/docker-compose/datasets/wait-for-solr.sh deleted file mode 100755 index d69aeb41e2..0000000000 --- a/docker-compose/datasets/wait-for-solr.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -WAIT_TIME=300 - -echo "Waiting for the solr container to be reachable..." - -# Try pinging the solr container -while ! ping -c 1 -W 1 "solr" > /dev/null 2>&1; do - echo "Container solr is not reachable, retrying..." - sleep 5 - - # Decrement wait time and exit if it reaches zero - WAIT_TIME=$((WAIT_TIME - 1)) - if [ "$WAIT_TIME" -le 0 ]; then - echo "Error : Timeout waiting for container solr to become reachable." - exit 1 - fi -done - -echo "Container solr reached, launching container datasets." diff --git a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/ShanoirDatasetIndexation.java b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/ShanoirDatasetIndexation.java index 956718b8d5..8abdadaf1b 100644 --- a/shanoir-ng-datasets/src/main/java/org/shanoir/ng/ShanoirDatasetIndexation.java +++ b/shanoir-ng-datasets/src/main/java/org/shanoir/ng/ShanoirDatasetIndexation.java @@ -2,10 +2,12 @@ import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.shanoir.ng.solr.service.SolrServiceImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.context.annotation.Profile; @@ -18,24 +20,42 @@ @Profile("!test") public class ShanoirDatasetIndexation implements ApplicationRunner { - @Autowired - private SolrClient solrClient; - @Autowired private SolrServiceImpl solrServiceImpl; + @Value("${spring.data.solr.host}") + private String solrUrl; + + private static final int RETRY_INTERVAL_MS = 5000; + + private static final int MAX_WAIT_TIME_MS = 10 * 60 * 1000; + private static final Logger LOG = LoggerFactory.getLogger(ShanoirDatasetIndexation.class); @Override public void run(ApplicationArguments args) throws Exception { - SolrQuery q = new SolrQuery("*:*"); - q.setRows(0); // don't actually request any data - if(Objects.nonNull(solrClient.query(q)) && Objects.equals(0L, solrClient.query(q).getResults().getNumFound())){ - LOG.info("Solr index empty. Re-indexing..."); - solrServiceImpl.indexAllNoAuth(); - LOG.info("Solr indexation complete."); - } else { - LOG.info("Solr index already complete, no re-indexation required."); + SolrClient solrClient = null; + long startTime = System.currentTimeMillis(); + + while (Objects.isNull(solrClient) && (System.currentTimeMillis() - startTime) < MAX_WAIT_TIME_MS) { + try { + solrClient = new HttpSolrClient.Builder(solrUrl).build(); + } catch (Exception ignored) { + Thread.sleep(RETRY_INTERVAL_MS); + } + } + + if(Objects.nonNull(solrClient)){ + SolrQuery q = new SolrQuery("*:*"); + q.setRows(0); // don't actually request any data + if (Objects.nonNull(solrClient.query(q)) && Objects.equals(0L, solrClient.query(q).getResults().getNumFound())) { + LOG.info("Solr index empty. Re-indexing..."); + solrServiceImpl.indexAllNoAuth(); + LOG.info("Solr indexation complete."); + } else { + LOG.info("Solr index already complete, no re-indexation required."); + } } } } +