reduced memocry usage of package synchronization
This commit is contained in:
@@ -4,7 +4,7 @@ on:
|
||||
branches: [ master ]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: woryzen
|
||||
runs-on: hostinger
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
|
@@ -1,8 +1,8 @@
|
||||
org.gradle.parallel=true
|
||||
org.gradle.caching=true
|
||||
|
||||
jpacrepo.version=2025.06.20
|
||||
jpacrepo.version=2025.09.12
|
||||
|
||||
lys.version=2025.06.10
|
||||
lys.version=2025.08.15
|
||||
|
||||
gitea.maven.url=https://gitea.woggioni.net/api/packages/woggioni/maven
|
||||
gitea.maven.url=https://gitea.woggioni.net/api/packages/woggioni/maven
|
||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
@@ -83,7 +83,6 @@ public class JpacrepoCli implements Runnable {
|
||||
}
|
||||
prop.put(Context.SECURITY_PRINCIPAL, rpcUsername);
|
||||
prop.put(Context.SECURITY_CREDENTIALS, rpcPassword);
|
||||
|
||||
prop.put("jboss.naming.client.ejb.context", true);
|
||||
return new InitialContext(prop);
|
||||
}
|
||||
|
@@ -34,7 +34,6 @@ import java.nio.file.Path;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CompletionService;
|
||||
@@ -85,10 +84,10 @@ public class PackageSynchronizerEJB implements FileSystemSynchronizer {
|
||||
logger.info("Starting repository cleanup");
|
||||
//Removes from DB the packages that have been deleted from filesystem
|
||||
logger.info("Searching for packages that are no more in the filesystem");
|
||||
List<String> resultList = Queries.listAllPackageFiles(em)
|
||||
.getResultList();
|
||||
Stream<String> resultList = Queries.listAllPackageFiles(em)
|
||||
.getResultStream();
|
||||
logger.info("Got list of filenames from db");
|
||||
Set<String> knownPkg = resultList.stream().filter(fileName -> {
|
||||
Set<String> knownPkg = resultList.filter(fileName -> {
|
||||
Path file = ctx.getFile(fileName);
|
||||
boolean result = Files.exists(file);
|
||||
if (!result) {
|
||||
|
@@ -16,6 +16,7 @@ import jakarta.ejb.TransactionManagementType;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceContext;
|
||||
import jakarta.persistence.Query;
|
||||
import lombok.SneakyThrows;
|
||||
import net.woggioni.jpacrepo.api.model.CompressionFormat;
|
||||
import net.woggioni.jpacrepo.api.model.PkgData;
|
||||
@@ -79,14 +80,13 @@ public class PacmanServiceEJB implements PacmanServiceLocal {
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
static void deletePackage(AppConfig ctx, EntityManager em, String filename) {
|
||||
List<PkgData> savedFiles = Queries.getPackageByFileName(em, filename).getResultList();
|
||||
if (savedFiles.isEmpty()) {
|
||||
throw JWO.newThrowable(IllegalArgumentException.class, "Package with name %s not found", filename);
|
||||
static void deletePackage(AppConfig ctx, EntityManager em, String fileName) {
|
||||
Query deleteQuery = Queries.deletePackageByFilename(em, fileName);
|
||||
final var deletedPackages = deleteQuery.executeUpdate();
|
||||
if (deletedPackages == 0) {
|
||||
throw JWO.newThrowable(IllegalArgumentException.class, "Package with name %s not found", fileName);
|
||||
}
|
||||
PkgData pkg = savedFiles.getFirst();
|
||||
em.remove(pkg);
|
||||
Files.delete(ctx.getFile(pkg));
|
||||
Files.delete(ctx.getFile(fileName));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -184,7 +184,7 @@ public class PacmanWebService {
|
||||
|
||||
@GET
|
||||
@Path("file/{fileName}")
|
||||
private Response getPackageByFileName(String fileName) {
|
||||
public Response getPackageByFileName(String fileName) {
|
||||
try {
|
||||
return Response.ok(service.searchByFileName(fileName)).build();
|
||||
} catch (NoResultException nre) {
|
||||
|
@@ -2,9 +2,11 @@ package net.woggioni.jpacrepo.service.jpa;
|
||||
|
||||
import jakarta.persistence.EntityGraph;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.Query;
|
||||
import jakarta.persistence.Tuple;
|
||||
import jakarta.persistence.TypedQuery;
|
||||
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||
import jakarta.persistence.criteria.CriteriaDelete;
|
||||
import jakarta.persistence.criteria.CriteriaQuery;
|
||||
import jakarta.persistence.criteria.Path;
|
||||
import jakarta.persistence.criteria.Predicate;
|
||||
@@ -328,4 +330,25 @@ public class Queries {
|
||||
return graph;
|
||||
}
|
||||
|
||||
public static Query deletePackagesByFilenames(EntityManager em, Collection<String> fileNames) {
|
||||
CriteriaBuilder cb = em.getCriteriaBuilder();
|
||||
CriteriaDelete<PkgData> criteriaQuery = cb.createCriteriaDelete(PkgData.class);
|
||||
Metamodel metamodel = em.getMetamodel();
|
||||
EntityType<PkgData> entity = metamodel.entity(PkgData.class);
|
||||
Root<PkgData> root = criteriaQuery.from(entity);
|
||||
Predicate predicate = root.get(PkgData_.fileName).in(fileNames);
|
||||
criteriaQuery.where(predicate);
|
||||
return em.createQuery(criteriaQuery);
|
||||
}
|
||||
|
||||
public static Query deletePackageByFilename(EntityManager em, String fileNames) {
|
||||
CriteriaBuilder cb = em.getCriteriaBuilder();
|
||||
CriteriaDelete<PkgData> criteriaQuery = cb.createCriteriaDelete(PkgData.class);
|
||||
Metamodel metamodel = em.getMetamodel();
|
||||
EntityType<PkgData> entity = metamodel.entity(PkgData.class);
|
||||
Root<PkgData> root = criteriaQuery.from(entity);
|
||||
Predicate predicate = cb.equal(root.get(PkgData_.fileName), fileNames);
|
||||
criteriaQuery.where(predicate);
|
||||
return em.createQuery(criteriaQuery);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user