Skip to content

Commit 5b470e8

Browse files
committed
Using Vertx locks for file code generation instead of zookeeper
1 parent b08ecba commit 5b470e8

File tree

3 files changed

+43
-83
lines changed

3 files changed

+43
-83
lines changed

src/main/java/org/computate/frFR/java/EcrireGenClasse.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,7 @@ public class EcrireGenClasse extends EcrireClasse {
12961296
ToutEcrivain wFormPATCH;
12971297
ToutEcrivain wFormDELETE;
12981298
ToutEcrivain wFormDELETEFiltre;
1299+
ToutEcrivain wStyle;
12991300
ToutEcrivain wJsHtmInit;
13001301
ToutEcrivain wJsHtmEditionInit;
13011302
ToutEcrivain wJsRechercheInit;
@@ -2450,7 +2451,7 @@ public void genCodeClasseDebut(String langueNom, JsonObject langueConfig) throws
24502451
if(classePageFichier != null && (!classePageFichier.exists() || classePageFichier.length() == 0L)) {
24512452
auteurPageClasse = ToutEcrivain.create();
24522453
}
2453-
if(classePageFichierCss != null) {
2454+
if(classePageFichierCss != null && (!classePageFichierCss.exists() || classePageFichierCss.length() == 0L)) {
24542455
classePageFichierCss.getParentFile().mkdirs();
24552456
auteurPageCss = ToutEcrivain.create(classePageFichierCss, " ");
24562457
}

src/main/java/org/computate/frFR/java/EcrirePageClasse.java

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,7 @@ public void pageCodeClasseJava(String langueNom, JsonObject langueConfig) throws
10771077

10781078
wJsHtmInit = ToutEcrivain.create(" ");
10791079
wJsHtmEditionInit = ToutEcrivain.create(" ");
1080+
wStyle = ToutEcrivain.create(" ");
10801081
wJsEditionInit = ToutEcrivain.create(" ");
10811082
wJsRechercheInit = ToutEcrivain.create(" ");
10821083
wWebsocket = ToutEcrivain.create(" ");
@@ -2387,31 +2388,9 @@ public void pageCodeClasseJinja(String langueNom, JsonObject i18nPage) throws Ex
23872388
Integer rechercheLigneActuel;
23882389

23892390
if(rechercheListe.size() > 0) {
2390-
auteurPageCss.tl(0, "#site-results-grid {");
2391-
auteurPageCss.tl(1, "display: grid;");
2392-
auteurPageCss.tl(1, "gap: var(--site-secondary-space);");
2393-
auteurPageCss.tl(1, "background-color: var(--wa-color-surface-lowered);");
2394-
auteurPageCss.tl(1, "> * {");
2395-
auteurPageCss.tl(2, "display: grid;");
2396-
auteurPageCss.tl(2, "grid-template-columns: subgrid;");
2397-
auteurPageCss.tl(2, "grid-column: span ", rechercheListe.size(), ";");
2398-
auteurPageCss.tl(2, "align-items: center;");
2399-
auteurPageCss.tl(2, "background-color: var(--", composantsWebPrefixe, "color-surface-raised);");
2400-
auteurPageCss.tl(2, "&:not(:first-child) {");
2401-
auteurPageCss.tl(3, "padding-inline-start: var(--", composantsWebPrefixe, "space-m);");
2402-
auteurPageCss.tl(2, "}");
2403-
// auteurPageCss.tl(2, "&:hover {");
2404-
// auteurPageCss.tl(3, "background-color: var(--", composantsWebPrefixe, "color-brand-fill-quiet);");
2405-
// auteurPageCss.tl(2, "}");
2406-
auteurPageCss.tl(2, composantsWebPrefixe, "button {");
2407-
auteurPageCss.tl(3, "&::part(base) {");
2408-
auteurPageCss.tl(3, "}");
2409-
auteurPageCss.tl(2, "}");
2410-
auteurPageCss.tl(2, "@media (max-width:767px) {");
2411-
auteurPageCss.tl(3, "grid-column: span 1;");
2412-
auteurPageCss.tl(2, "}");
2413-
auteurPageCss.tl(1, "}");
2414-
auteurPageCss.tl(0, "}");
2391+
wStyle.tl(3, ":root {");
2392+
wStyle.tl(4, "--site-results-number-of-columns: ", rechercheListe.size(), ";");
2393+
wStyle.tl(3, "}");
24152394

24162395
for(Long i = rechercheListe.getStart(); i < rechercheListe.getNumFound(); i+=rechercheLignes) {
24172396
List<SolrDocument> resultatsSubstitues = rechercheListe.stream().filter(o -> BooleanUtils.isTrue((Boolean)o.get("entiteEstSubstitue_stored_boolean"))).collect(Collectors.toList());
@@ -2919,6 +2898,7 @@ public void ecrirePageHeadJinja(String langueNom, JsonObject i18nPage, Boolean e
29192898
tl(0, "{%- endblock htmStyles", classePageSuperNomSimple, " %}");
29202899
l();
29212900
tl(0, "{%- block htmStyle", classePageSuperNomSimple, " %}");
2901+
s(wStyle);
29222902
tl(0, "{{ super() }}");
29232903
tl(0, "{%- block htmStyle", classePageNomSimple, " %}");
29242904
tl(0, "{%- endblock htmStyle", classePageNomSimple, " %}");
@@ -5412,7 +5392,7 @@ public void ecrirePageBoutonsRecherche(String langueNom, JsonObject i18nPage) th
54125392
o = auteurBoutonsRechercheJinja;
54135393

54145394
tl(5, "<", composantsWebPrefixe, "scroller>");
5415-
tl(6, "<", composantsWebPrefixe, "button-group id=\"htm", i18nPage.getString(I18n.var_BoutonsRecherche), "\">");
5395+
tl(6, "<", composantsWebPrefixe, "button-group class=\"no-gradient\" id=\"htm", i18nPage.getString(I18n.var_BoutonsRecherche), "\">");
54165396

54175397
//////////////
54185398
// bouton q //
@@ -5538,7 +5518,7 @@ public void ecrirePageBoutonsPagination(String langueNom, JsonObject i18nPage) t
55385518
tl(6, "<", composantsWebPrefixe, "tooltip for=\"", i18nPage.getString(I18n.var_BoutonsPagination), i18nPage.getString(I18n.var_Suivant), "\" placement=\"top\"", "wa-".equals(composantsWebPrefixe) ? ">" : " content=\"", String.format(i18nPage.getString(I18n.str_Afficher_les_resultats_suivants), classeNomAdjectifPluriel), "", "wa-".equals(composantsWebPrefixe) ? "" : "\">", "</", composantsWebPrefixe, "tooltip>");
55395519
tl(6, "<div class=\"", composantsWebPrefixe, "caption-l \">{{ pagination.", i18nPage.getString(I18n.var_debut), "Num }} – {{ pagination.", i18nPage.getString(I18n.var_fin), "Num }} ", i18nPage.getString(I18n.var_de), " {{ pagination.", i18nPage.getString(I18n.var_numTrouve), " }} ", classeNomPluriel, "</div>");
55405520
tl(6, "<", composantsWebPrefixe, "scroller>");
5541-
tl(7, "<", composantsWebPrefixe, "button-group size=\"small\" class=\"", composantsWebPrefixe, "cluster ", composantsWebPrefixe, "gap-xs \" id=\"htm", i18nPage.getString(I18n.var_BoutonsPagination), "\">");
5521+
tl(7, "<", composantsWebPrefixe, "button-group size=\"small\" class=\"no-gradient ", composantsWebPrefixe, "cluster ", composantsWebPrefixe, "gap-xs \" id=\"htm", i18nPage.getString(I18n.var_BoutonsPagination), "\">");
55425522

55435523
t(8, "<", composantsWebPrefixe, "button id=\"", i18nPage.getString(I18n.var_BoutonsPagination), i18nPage.getString(I18n.var_Precedent), "\"", "wa-".equals(composantsWebPrefixe) ? " variant=\"brand\"" : " variant=\"primary\" outline");
55445524
s("{% if pagination.page", i18nPage.getString(I18n.var_Precedent), " is defined %}");

src/main/java/org/computate/frFR/java/RegarderRepertoire.java

Lines changed: 34 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,6 @@
4646
import org.apache.commons.io.FileUtils;
4747
import org.apache.commons.lang3.StringUtils;
4848
import org.apache.solr.common.SolrInputDocument;
49-
import org.apache.zookeeper.CreateMode;
50-
import org.apache.zookeeper.KeeperException;
51-
import org.apache.zookeeper.Watcher;
52-
import org.apache.zookeeper.ZooDefs;
53-
import org.apache.zookeeper.ZooKeeper;
54-
import org.apache.zookeeper.client.ZKClientConfig;
55-
import org.apache.zookeeper.data.Stat;
5649
import org.computate.i18n.I18n;
5750
import org.computate.vertx.config.ComputateConfigKeys;
5851
import org.slf4j.Logger;
@@ -70,6 +63,7 @@
7063
import io.vertx.core.eventbus.DeliveryOptions;
7164
import io.vertx.core.eventbus.Message;
7265
import io.vertx.core.json.JsonObject;
66+
import io.vertx.core.shareddata.SharedData;
7367

7468
/**
7569
* NomCanonique.enUS: org.computate.enUS.java.WatchDirectory
@@ -181,7 +175,6 @@ public class RegarderRepertoire extends AbstractVerticle {
181175
protected String COMPUTATE_VERTX_SRC;
182176

183177
protected WorkerExecutor workerExecutor;
184-
protected ZooKeeper zookeeper;
185178

186179
/**
187180
* r: SITE_NOM
@@ -590,40 +583,45 @@ protected Path enregistrerTout(final Path demarrer) throws IOException {
590583
private void regarderClasseEvenement(Message<Object> message) {
591584
workerExecutor.executeBlocking(() -> {
592585
Promise<Void> promise = Promise.promise();
593-
String zookeeperNodeName = null;
594-
Stat zookeeperStat = null;
595-
String cheminCompletStr = null;
586+
String orderLock = null;
596587
try {
597588
JsonObject body = ((JsonObject)message.body()).getJsonObject("context").getJsonObject("params").getJsonObject("body");
598-
cheminCompletStr = body.getString("cheminComplet");
589+
String cheminCompletStr = body.getString("cheminComplet");
599590
LOG.debug(String.format("Received request on the event bus: %s", cheminCompletStr));
600591
Path cheminComplet = Path.of(cheminCompletStr);
601-
zookeeperStat = new Stat();
602-
zookeeperNodeName = String.format("/%s/%s", ZOOKEEPER_ROOT_PATH, cheminCompletStr.replace("/", "-"));
603-
zookeeper.create(zookeeperNodeName, "reserved".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL, zookeeperStat);
604-
String classeCheminAbsolu = cheminComplet.toAbsolutePath().toString();
605-
String cp = FileUtils.readFileToString(new File(COMPUTATE_SRC + "/config/cp.txt"), "UTF-8");
606-
String classpath = String.format("%s:%s/target/classes", cp, COMPUTATE_SRC);
607-
CommandLine ligneCommande = new CommandLine("java");
608-
ligneCommande.addArgument("-cp");
609-
ligneCommande.addArgument(classpath);
610-
ligneCommande.addArgument(RegarderClasse.class.getCanonicalName());
611-
ligneCommande.addArgument(classeCheminRepertoireAppli);
612-
ligneCommande.addArgument(classeCheminAbsolu);
613-
File repertoireTravail = new File(COMPUTATE_SRC);
614-
615-
executeur.setWorkingDirectory(repertoireTravail);
616-
executeur.execute(ligneCommande);
617-
String classeNomSimple = StringUtils.substringBeforeLast(cheminComplet.getFileName().toString(), ".");
618-
String log = String.format(classeLangueConfig.getString(I18n.str_chemin_absolu), classeNomSimple);
619-
LOG.info(log);
620-
promise.complete();
592+
orderLock = String.format("/%s/%s", ZOOKEEPER_ROOT_PATH, cheminCompletStr.replace("/", "-"));
593+
SharedData sharedData = vertx.sharedData();
594+
sharedData.getLocalLockWithTimeout(orderLock, config().getLong(ComputateConfigKeys.ZOOKEEPER_CONNECTION_TIMEOUT_MILLIS, 3000L)).onSuccess(lock -> {
595+
try {
596+
String classeCheminAbsolu = cheminComplet.toAbsolutePath().toString();
597+
String cp = FileUtils.readFileToString(new File(COMPUTATE_SRC + "/config/cp.txt"), "UTF-8");
598+
String classpath = String.format("%s:%s/target/classes", cp, COMPUTATE_SRC);
599+
CommandLine ligneCommande = new CommandLine("java");
600+
ligneCommande.addArgument("-cp");
601+
ligneCommande.addArgument(classpath);
602+
ligneCommande.addArgument(RegarderClasse.class.getCanonicalName());
603+
ligneCommande.addArgument(classeCheminRepertoireAppli);
604+
ligneCommande.addArgument(classeCheminAbsolu);
605+
File repertoireTravail = new File(COMPUTATE_SRC);
606+
607+
executeur.setWorkingDirectory(repertoireTravail);
608+
executeur.execute(ligneCommande);
609+
String classeNomSimple = StringUtils.substringBeforeLast(cheminComplet.getFileName().toString(), ".");
610+
String log = String.format(classeLangueConfig.getString(I18n.str_chemin_absolu), classeNomSimple);
611+
LOG.info(log);
612+
promise.complete();
613+
lock.release();
614+
} catch(Exception ex) {
615+
LOG.error(String.format(classeLangueConfig.getString(I18n.str_UneProblemeExecutionRegarderRepertoire), cheminCompletStr), ex);
616+
promise.fail(ex);
617+
lock.release();
618+
}
619+
}).onFailure(ex -> {
620+
promise.complete();
621+
});
621622
} catch(Exception ex) {
622-
if(!(ex instanceof KeeperException.NodeExistsException))
623-
LOG.error(String.format(classeLangueConfig.getString(I18n.str_UneProblemeExecutionRegarderRepertoire), cheminCompletStr), ex);
623+
LOG.error(String.format(classeLangueConfig.getString(I18n.str_UneProblemeExecutionRegarderRepertoire), ((JsonObject)message.body()).getJsonObject("context").getJsonObject("params").getJsonObject("body").getString("cheminComplet")), ex);
624624
promise.fail(ex);
625-
} finally {
626-
zookeeper.delete(zookeeperNodeName, zookeeperStat.getVersion());
627625
}
628626
return promise.future();
629627
});
@@ -815,25 +813,6 @@ public void start(Promise<Void> startPromise) throws Exception {
815813
cheminSrcGenJava = SITE_SRC + "/src/gen/java";
816814
cheminsBin.add(SITE_SRC + "/src/main/resources");
817815

818-
String zkHostName = configuration.getString("ZOOKEEPER_HOST_NAME");
819-
Integer zkPort = Integer.parseInt(configuration.getString("ZOOKEEPER_PORT"));
820-
String zkConnectionString = String.format("%s:%s", zkHostName, zkPort);
821-
ZKClientConfig zkClientConfig = new ZKClientConfig();
822-
Integer zkSessionTimeoutMillis = Integer.parseInt(configuration.getString("ZOOKEEPER_CONNECTION_TIMEOUT_MILLIS", "3000"));
823-
CountDownLatch connectionLatch = new CountDownLatch(1);
824-
zookeeper = new ZooKeeper(zkConnectionString, zkSessionTimeoutMillis, event -> {
825-
if (event.getState() == Watcher.Event.KeeperState.SyncConnected) {
826-
connectionLatch.countDown();
827-
}
828-
}, zkClientConfig);
829-
connectionLatch.await();
830-
Stat zookeeperStat = new Stat();
831-
try {
832-
zookeeper.create(String.format("/%s", ZOOKEEPER_ROOT_PATH), "reserved".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, zookeeperStat);
833-
} catch(KeeperException.NodeExistsException ex) {
834-
LOG.info(String.format("The zookeeper root node already exists: %s", String.format("/%s", ZOOKEEPER_ROOT_PATH)));
835-
}
836-
837816
trace = true;
838817
initialiserRegarderRepertoire(classeLangueConfig);
839818
ajouterCheminsARegarder(classeLangueConfig, REGARDER);

0 commit comments

Comments
 (0)