reduced memocry usage of package synchronization updated dependencies
This commit is contained in:
@@ -4,7 +4,7 @@ on:
|
|||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: woryzen
|
runs-on: hostinger
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
@@ -105,6 +105,7 @@ dependencies {
|
|||||||
|
|
||||||
testImplementation catalog.junit.jupiter.api
|
testImplementation catalog.junit.jupiter.api
|
||||||
testImplementation catalog.junit.jupiter.params
|
testImplementation catalog.junit.jupiter.params
|
||||||
|
testImplementation catalog.junit.platform.runner
|
||||||
|
|
||||||
testRuntimeOnly catalog.jakartaee.api
|
testRuntimeOnly catalog.jakartaee.api
|
||||||
testRuntimeOnly catalog.junit.jupiter.engine
|
testRuntimeOnly catalog.junit.jupiter.engine
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
org.gradle.caching=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
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
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
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
@@ -83,7 +83,6 @@ public class JpacrepoCli implements Runnable {
|
|||||||
}
|
}
|
||||||
prop.put(Context.SECURITY_PRINCIPAL, rpcUsername);
|
prop.put(Context.SECURITY_PRINCIPAL, rpcUsername);
|
||||||
prop.put(Context.SECURITY_CREDENTIALS, rpcPassword);
|
prop.put(Context.SECURITY_CREDENTIALS, rpcPassword);
|
||||||
|
|
||||||
prop.put("jboss.naming.client.ejb.context", true);
|
prop.put("jboss.naming.client.ejb.context", true);
|
||||||
return new InitialContext(prop);
|
return new InitialContext(prop);
|
||||||
}
|
}
|
||||||
|
@@ -34,7 +34,6 @@ import java.nio.file.Path;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.CompletionService;
|
import java.util.concurrent.CompletionService;
|
||||||
@@ -85,10 +84,10 @@ public class PackageSynchronizerEJB implements FileSystemSynchronizer {
|
|||||||
logger.info("Starting repository cleanup");
|
logger.info("Starting repository cleanup");
|
||||||
//Removes from DB the packages that have been deleted from filesystem
|
//Removes from DB the packages that have been deleted from filesystem
|
||||||
logger.info("Searching for packages that are no more in the filesystem");
|
logger.info("Searching for packages that are no more in the filesystem");
|
||||||
List<String> resultList = Queries.listAllPackageFiles(em)
|
Stream<String> resultList = Queries.listAllPackageFiles(em)
|
||||||
.getResultList();
|
.getResultStream();
|
||||||
logger.info("Got list of filenames from db");
|
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);
|
Path file = ctx.getFile(fileName);
|
||||||
boolean result = Files.exists(file);
|
boolean result = Files.exists(file);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
|
@@ -16,6 +16,7 @@ import jakarta.ejb.TransactionManagementType;
|
|||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import jakarta.persistence.PersistenceContext;
|
import jakarta.persistence.PersistenceContext;
|
||||||
|
import jakarta.persistence.Query;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import net.woggioni.jpacrepo.api.model.CompressionFormat;
|
import net.woggioni.jpacrepo.api.model.CompressionFormat;
|
||||||
import net.woggioni.jpacrepo.api.model.PkgData;
|
import net.woggioni.jpacrepo.api.model.PkgData;
|
||||||
@@ -79,14 +80,13 @@ public class PacmanServiceEJB implements PacmanServiceLocal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
static void deletePackage(AppConfig ctx, EntityManager em, String filename) {
|
static void deletePackage(AppConfig ctx, EntityManager em, String fileName) {
|
||||||
List<PkgData> savedFiles = Queries.getPackageByFileName(em, filename).getResultList();
|
Query deleteQuery = Queries.deletePackageByFilename(em, fileName);
|
||||||
if (savedFiles.isEmpty()) {
|
final var deletedPackages = deleteQuery.executeUpdate();
|
||||||
throw JWO.newThrowable(IllegalArgumentException.class, "Package with name %s not found", filename);
|
if (deletedPackages == 0) {
|
||||||
|
throw JWO.newThrowable(IllegalArgumentException.class, "Package with name %s not found", fileName);
|
||||||
}
|
}
|
||||||
PkgData pkg = savedFiles.getFirst();
|
Files.delete(ctx.getFile(fileName));
|
||||||
em.remove(pkg);
|
|
||||||
Files.delete(ctx.getFile(pkg));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -184,7 +184,7 @@ public class PacmanWebService {
|
|||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("file/{fileName}")
|
@Path("file/{fileName}")
|
||||||
private Response getPackageByFileName(String fileName) {
|
public Response getPackageByFileName(String fileName) {
|
||||||
try {
|
try {
|
||||||
return Response.ok(service.searchByFileName(fileName)).build();
|
return Response.ok(service.searchByFileName(fileName)).build();
|
||||||
} catch (NoResultException nre) {
|
} catch (NoResultException nre) {
|
||||||
|
@@ -2,9 +2,11 @@ package net.woggioni.jpacrepo.service.jpa;
|
|||||||
|
|
||||||
import jakarta.persistence.EntityGraph;
|
import jakarta.persistence.EntityGraph;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
|
import jakarta.persistence.Query;
|
||||||
import jakarta.persistence.Tuple;
|
import jakarta.persistence.Tuple;
|
||||||
import jakarta.persistence.TypedQuery;
|
import jakarta.persistence.TypedQuery;
|
||||||
import jakarta.persistence.criteria.CriteriaBuilder;
|
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||||
|
import jakarta.persistence.criteria.CriteriaDelete;
|
||||||
import jakarta.persistence.criteria.CriteriaQuery;
|
import jakarta.persistence.criteria.CriteriaQuery;
|
||||||
import jakarta.persistence.criteria.Path;
|
import jakarta.persistence.criteria.Path;
|
||||||
import jakarta.persistence.criteria.Predicate;
|
import jakarta.persistence.criteria.Predicate;
|
||||||
@@ -328,4 +330,25 @@ public class Queries {
|
|||||||
return graph;
|
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