From 0b96f699e6479a149a1a94881eeb1441f5c67350 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Mon, 15 Sep 2025 14:37:18 +0800 Subject: [PATCH] updated Gradle version reduced memocry usage of package synchronization --- .gitea/workflows/build.yaml | 2 +- gradle.properties | 6 ++--- gradle/wrapper/gradle-wrapper.properties | 2 +- .../woggioni/jpacrepo/client/JpacrepoCli.java | 1 - .../service/PackageSynchronizerEJB.java | 7 +++--- .../jpacrepo/service/PacmanServiceEJB.java | 14 +++++------ .../jpacrepo/service/PacmanWebService.java | 2 +- .../jpacrepo/service/jpa/Queries.java | 23 +++++++++++++++++++ 8 files changed, 39 insertions(+), 18 deletions(-) diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index f0ff2a3..5d29c8c 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -4,7 +4,7 @@ on: branches: [ master ] jobs: build: - runs-on: woryzen + runs-on: hostinger steps: - name: Checkout sources uses: actions/checkout@v4 diff --git a/gradle.properties b/gradle.properties index b3a5bb9..7c0e92f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 \ No newline at end of file +gitea.maven.url=https://gitea.woggioni.net/api/packages/woggioni/maven diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ff23a68..2a84e18 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/jpacrepo-client/src/main/java/net/woggioni/jpacrepo/client/JpacrepoCli.java b/jpacrepo-client/src/main/java/net/woggioni/jpacrepo/client/JpacrepoCli.java index ea1032c..46f8c4d 100644 --- a/jpacrepo-client/src/main/java/net/woggioni/jpacrepo/client/JpacrepoCli.java +++ b/jpacrepo-client/src/main/java/net/woggioni/jpacrepo/client/JpacrepoCli.java @@ -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); } diff --git a/src/main/java/net/woggioni/jpacrepo/service/PackageSynchronizerEJB.java b/src/main/java/net/woggioni/jpacrepo/service/PackageSynchronizerEJB.java index 3853809..855c370 100644 --- a/src/main/java/net/woggioni/jpacrepo/service/PackageSynchronizerEJB.java +++ b/src/main/java/net/woggioni/jpacrepo/service/PackageSynchronizerEJB.java @@ -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 resultList = Queries.listAllPackageFiles(em) - .getResultList(); + Stream resultList = Queries.listAllPackageFiles(em) + .getResultStream(); logger.info("Got list of filenames from db"); - Set knownPkg = resultList.stream().filter(fileName -> { + Set knownPkg = resultList.filter(fileName -> { Path file = ctx.getFile(fileName); boolean result = Files.exists(file); if (!result) { diff --git a/src/main/java/net/woggioni/jpacrepo/service/PacmanServiceEJB.java b/src/main/java/net/woggioni/jpacrepo/service/PacmanServiceEJB.java index 3e37f93..831fc07 100644 --- a/src/main/java/net/woggioni/jpacrepo/service/PacmanServiceEJB.java +++ b/src/main/java/net/woggioni/jpacrepo/service/PacmanServiceEJB.java @@ -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 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 diff --git a/src/main/java/net/woggioni/jpacrepo/service/PacmanWebService.java b/src/main/java/net/woggioni/jpacrepo/service/PacmanWebService.java index 02a4a64..ed0df0f 100644 --- a/src/main/java/net/woggioni/jpacrepo/service/PacmanWebService.java +++ b/src/main/java/net/woggioni/jpacrepo/service/PacmanWebService.java @@ -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) { diff --git a/src/main/java/net/woggioni/jpacrepo/service/jpa/Queries.java b/src/main/java/net/woggioni/jpacrepo/service/jpa/Queries.java index 80af411..62a68f7 100644 --- a/src/main/java/net/woggioni/jpacrepo/service/jpa/Queries.java +++ b/src/main/java/net/woggioni/jpacrepo/service/jpa/Queries.java @@ -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 fileNames) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaDelete criteriaQuery = cb.createCriteriaDelete(PkgData.class); + Metamodel metamodel = em.getMetamodel(); + EntityType entity = metamodel.entity(PkgData.class); + Root 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 criteriaQuery = cb.createCriteriaDelete(PkgData.class); + Metamodel metamodel = em.getMetamodel(); + EntityType entity = metamodel.entity(PkgData.class); + Root root = criteriaQuery.from(entity); + Predicate predicate = cb.equal(root.get(PkgData_.fileName), fileNames); + criteriaQuery.where(predicate); + return em.createQuery(criteriaQuery); + } }