package eu.europeana.cloud.service.mcs.cleaner; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.ws.rs.client.Client; import javax.ws.rs.core.Response; import org.apache.log4j.BasicConfigurator; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.FacetField; import org.apache.solr.client.solrj.response.QueryResponse; import org.glassfish.jersey.client.JerseyClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Removes all records from Metadata & Content service. * */ public final class MCSCleaner { private static final int STATUS_CODE_NO_CONTENT = 204; private static final int FACET_LIMIT = 100; private static Logger logger = LoggerFactory.getLogger(MCSCleaner.class); private static Client client = JerseyClientBuilder.newClient(); private MCSCleaner() { // Utility classes should not have a public or default constructor } /** * Removes all records from Metadata & Content service. Get all record identifiers from Solr, then send DELETE/{id} * request to MCS. * * @param args * URL to Solr server, URL to Metadata & Content service. */ public static void main(String[] args) { BasicConfigurator.configure(); List<String> idList = new ArrayList<>(); if (args.length < 2) { throw new IllegalStateException("SolrURL & MCSUrl prooperties are required"); } String solrUrl = args[0]; String mcsUrl = args[1]; SolrClient solrServer = new HttpSolrClient(solrUrl); try { SolrQuery query = new SolrQuery("*:*").addFacetField("cloud_id").setRows(0).setFacet(true) .setFacetLimit(FACET_LIMIT); int resultCount = 1; int offset = 0; while (resultCount != 0) { query.set("facet.offset", offset); QueryResponse response = solrServer.query(query); FacetField facets = response.getFacetField("cloud_id"); resultCount = facets.getValueCount(); offset += resultCount; List<FacetField.Count> values = facets.getValues(); for (FacetField.Count field : values) { idList.add(field.getName()); } } logger.info(idList.size() + " records to delete"); for (String id : idList) { logger.debug("Deleting " + id); Response response = client.target(mcsUrl + "records/" + id).request().delete(); if (response.getStatus() != STATUS_CODE_NO_CONTENT) { logger.error("Cannot remove record " + id + " " + response.toString()); } } } catch (SolrServerException | IOException ex) { logger.error(ex.getMessage()); } finally { try { solrServer.close(); } catch (IOException ex) { } } } }