updated Gradle version
All checks were successful
CI / build (push) Successful in 1m0s

reduced memocry usage of package synchronization

updated dependencies
This commit is contained in:
2025-09-15 14:37:18 +08:00
parent 5dcecfef03
commit 4669546e2b
9 changed files with 40 additions and 18 deletions

View File

@@ -4,7 +4,7 @@ on:
branches: [ master ]
jobs:
build:
runs-on: woryzen
runs-on: hostinger
steps:
- name: Checkout sources
uses: actions/checkout@v4

View File

@@ -105,6 +105,7 @@ dependencies {
testImplementation catalog.junit.jupiter.api
testImplementation catalog.junit.jupiter.params
testImplementation catalog.junit.platform.runner
testRuntimeOnly catalog.jakartaee.api
testRuntimeOnly catalog.junit.jupiter.engine

View File

@@ -1,8 +1,8 @@
org.gradle.parallel=true
org.gradle.caching=true
jpacrepo.version=2025.06.20
jpacrepo.version=2025.09.15
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

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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

View File

@@ -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) {

View File

@@ -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);
}
}