Skip to content

Commit 3c97047

Browse files
Issue 32186 experiments variants not indexing (dotCMS#32195)
This pull request introduces several logging enhancements and minor functional updates across multiple classes to improve debugging and ensure better traceability of operations. The most notable changes include adding detailed debug logs to key methods, refining error handling during content publishing, and enforcing index policies in content versioning. ### Logging Enhancements: * Added extensive debug logging in `search` to trace query parameters, intermediate results, and final outputs in `ESContentletAPIImpl.java`. * Introduced debug logs in `getAllContentByVariants` to log variant queries and search results in `ESContentletAPIImpl.java`. * Enhanced logging in `publishContentOnExperimentVariants` to log variant processing and publishing details in `ExperimentsAPIImpl.java`. * Added debug logs to track the lifecycle of experiments, including saving, cache cleaning, and content publishing in `innerStart` of `ExperimentsAPIImpl.java`. ### Functional Updates: * Improved error handling in the `publish` method by catching generic exceptions and logging the issue in `ESContentletAPIImpl.java`. * Enforced `IndexPolicy.FORCE` during content version creation to ensure consistent indexing in `PageResourceHelper.java`. ### Minor Update: * Added an import for `IndexPolicy` in `PageResourceHelper.java` to support the new indexing functionality.
1 parent 86f71db commit 3c97047

File tree

4 files changed

+73
-11
lines changed

4 files changed

+73
-11
lines changed

dotCMS/src/main/java/com/dotcms/content/elasticsearch/business/ContentletIndexAPIImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,8 +537,10 @@ public void addContentToIndex(final Contentlet parentContenlet,
537537
}
538538

539539
Logger.info(this,
540-
"Indexing: " + parentContenlet.getIdentifier() + " : " + parentContenlet.getTitle()
541-
+ ", includeDependencies: " + includeDependencies +
540+
"Indexing: ContentletIdentifier:" + parentContenlet.getIdentifier() + " " +
541+
"ContentletInode: " + parentContenlet.getInode() + " " +
542+
"ContentletTitle: " + parentContenlet.getTitle() + " " +
543+
", includeDependencies: " + includeDependencies +
542544
", policy: " + parentContenlet.getIndexPolicy());
543545

544546
final List<Contentlet> contentToIndex = includeDependencies

dotCMS/src/main/java/com/dotcms/content/elasticsearch/business/ESContentletAPIImpl.java

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,29 +1376,48 @@ public List<Contentlet> search(String luceneQuery, int limit, int offset, String
13761376
public List<Contentlet> search(String luceneQuery, int limit, int offset, String sortBy,
13771377
User user, boolean respectFrontendRoles, int requiredPermission)
13781378
throws DotDataException, DotSecurityException {
1379+
Logger.debug(this, "search - search: " + luceneQuery);
1380+
Logger.debug(this, "search - limit: " + limit);
1381+
Logger.debug(this, "search - offset: " + offset);
1382+
Logger.debug(this, "search - sortBy: " + sortBy);
1383+
Logger.debug(this, "search - user: " + user);
1384+
Logger.debug(this, "search - respectFrontendRoles: " + respectFrontendRoles);
1385+
Logger.debug(this, "search - requiredPermission: " + requiredPermission);
1386+
13791387
PaginatedArrayList<Contentlet> contents = new PaginatedArrayList<>();
13801388
ArrayList<String> inodes = new ArrayList<>();
13811389

13821390
PaginatedArrayList<ContentletSearch> list = (PaginatedArrayList) searchIndex(luceneQuery,
13831391
limit, offset, sortBy, user, respectFrontendRoles);
13841392
contents.setTotalResults(list.getTotalResults());
1393+
Logger.debug(this, "search - list size: " + contents.getTotalResults());
13851394
for (ContentletSearch conwrap : list) {
1386-
13871395
inodes.add(conwrap.getInode());
1396+
Logger.debug(this, "search - inode Added: " + conwrap.getInode());
13881397
}
13891398

1399+
Logger.debug(this, "search - inodes: " + inodes);
13901400
List<Contentlet> contentlets = findContentlets(inodes);
1401+
Logger.debug(this, "search - contentlets size: " + contentlets.size());
1402+
Logger.debug(this, "search - contentlets: " + contentlets);
13911403
Map<String, Contentlet> map = new HashMap<>(contentlets.size());
13921404
for (Contentlet contentlet : contentlets) {
1405+
Logger.debug(this, "search - contentlet: " + contentlet);
1406+
Logger.debug(this, "search - contentlet inode: " + contentlet.getInode());
13931407
map.put(contentlet.getInode(), contentlet);
1408+
Logger.debug(this, "search - map size: " + map.size());
13941409
}
1410+
Logger.debug(this, "search - map: " + map);
13951411
for (String inode : inodes) {
1412+
Logger.debug(this, "search - inode: " + inode);
13961413
if (map.get(inode) != null) {
1414+
Logger.debug(this, "search - map.get(inode): " + map.get(inode));
13971415
contents.add(map.get(inode));
1416+
Logger.debug(this, "search - contents size: " + contents.size());
13981417
}
13991418
}
1419+
Logger.debug(this, "search - contents: " + contents);
14001420
return contents;
1401-
14021421
}
14031422

14041423
@Override
@@ -1485,14 +1504,22 @@ public List<Contentlet> getAllContentByVariants(final User user,
14851504
throws DotDataException, DotStateException,
14861505
DotSecurityException {
14871506

1507+
Logger.debug(this, "Experiments - getAllContentByVariants: " + Arrays.toString(variantNames));
1508+
14881509
final String queryWithoutParenthesis = Arrays.stream(variantNames)
14891510
.map((variant) -> "variant:" + variant)
14901511
.collect(Collectors.joining(" OR "));
14911512

14921513
final String query = "+(" + queryWithoutParenthesis + ")";
14931514

1494-
return search(query, -1, 0, null,
1515+
Logger.debug(this, "Experiments - getAllContentByVariants: query: " + query);
1516+
1517+
final List<Contentlet> search = search(query, -1, 0, null,
14951518
user, respectFrontendRoles);
1519+
1520+
Logger.debug(this, "Experiments - getAllContentByVariants: search: " + search);
1521+
1522+
return search;
14961523
}
14971524

14981525
@Override
@@ -4890,6 +4917,10 @@ public void publish(List<Contentlet> contentlets, User user, boolean respectFron
48904917
publish(contentlet, user, respectFrontendRoles);
48914918
} catch (DotContentletStateException e) {
48924919
stateError = true;
4920+
} catch (Exception e){
4921+
Logger.debug(this.getClass(),
4922+
"Unable to publish one contentlet because ",e);
4923+
stateError = true;
48934924
}
48944925
}
48954926
if (stateError) {

dotCMS/src/main/java/com/dotcms/experiments/business/ExperimentsAPIImpl.java

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -818,14 +818,19 @@ private Experiment innerStart(final Experiment persistedExperiment, final User u
818818
final boolean generateNewRunId)
819819
throws DotSecurityException, DotDataException {
820820

821+
Logger.debug(this, "Starting experiment with id: " + persistedExperiment.id().get() +", by User: " + user.getUserId() + ", and generating new runId: " + generateNewRunId);
821822
final Experiment experimentToSave = generateNewRunId
822823
? Experiment.builder().from(persistedExperiment).runningIds(getRunningIds(persistedExperiment)).build()
823824
: persistedExperiment;
824825

825826
final Experiment running = save(experimentToSave, user);
827+
Logger.debug(this, "Experiment with id: " + running.id().get() + " has been saved");
826828
cleanRunningExperimentsCache();
829+
Logger.debug(this, "Running experiments cache has been cleaned");
827830
publishExperimentPage(running, user);
831+
Logger.debug(this, "Experiment page has been published");
828832
publishContentOnExperimentVariants(user, running);
833+
Logger.debug(this, "Experiment content has been published");
829834

830835
SecurityLogger.logInfo(
831836
this.getClass(),
@@ -860,13 +865,35 @@ private void publishContentOnExperimentVariants(final User user,
860865
final Experiment runningExperiment)
861866
throws DotDataException, DotSecurityException {
862867

863-
final List<Contentlet> contentByVariants = contentletAPI.getAllContentByVariants(user, false,
864-
runningExperiment.trafficProportion().variants().stream()
865-
.map(ExperimentVariant::id).filter(id -> !id.equals(DEFAULT_VARIANT.name()))
866-
.toArray(String[]::new)).stream()
867-
.filter((contentlet -> Try.of(contentlet::isWorking)
868-
.getOrElse(false))).collect(Collectors.toList());
868+
final List<String> variantIds = new ArrayList<>();
869+
final SortedSet<ExperimentVariant> variants = runningExperiment.trafficProportion().variants();
870+
Logger.debug(this,"Variants: " + variants);
871+
for (final ExperimentVariant variant : variants) {
872+
if (!variant.id().equals(DEFAULT_VARIANT.name())) {
873+
variantIds.add(variant.id());
874+
Logger.debug(this,"Added Variant Id: " + variant.id());
875+
}
876+
}
877+
878+
final String[] variantIdArray = variantIds.toArray(new String[0]);
879+
880+
final List<Contentlet> allVariants = contentletAPI.getAllContentByVariants(user, false, variantIdArray);
881+
Logger.debug(this,"All Variants: " + allVariants);
869882

883+
final List<Contentlet> contentByVariants = new ArrayList<>();
884+
for (final Contentlet contentlet : allVariants) {
885+
boolean isWorking = false;
886+
try {
887+
isWorking = contentlet.isWorking();
888+
} catch (Exception e) {
889+
Logger.debug(this,"Error getting isWorking for contentlet: " + contentlet.getIdentifier());
890+
}
891+
if (isWorking) {
892+
contentByVariants.add(contentlet);
893+
Logger.debug(this,"Added Variant Id: " + contentlet.getIdentifier());
894+
}
895+
}
896+
Logger.debug(this,"Variants That Will Be Published: " + contentByVariants);
870897
contentletAPI.publish(contentByVariants, user, false);
871898
}
872899

dotCMS/src/main/java/com/dotcms/rest/api/v1/page/PageResourceHelper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.dotmarketing.portlets.contentlet.business.HostAPI;
4141
import com.dotmarketing.portlets.contentlet.model.Contentlet;
4242
import com.dotmarketing.portlets.contentlet.model.ContentletVersionInfo;
43+
import com.dotmarketing.portlets.contentlet.model.IndexPolicy;
4344
import com.dotmarketing.portlets.htmlpageasset.business.HTMLPageAssetAPI;
4445
import com.dotmarketing.portlets.htmlpageasset.business.render.HTMLPageAssetNotFoundException;
4546
import com.dotmarketing.portlets.htmlpageasset.model.HTMLPageAsset;
@@ -338,6 +339,7 @@ private IHTMLPage createNewVersion(final User user, final String pageInode,
338339
final Contentlet checkout = APILocator.getContentletAPI()
339340
.checkout(pageInode, user, false);
340341
checkout.setVariantId(currentVariantId);
342+
checkout.setIndexPolicy(IndexPolicy.FORCE);
341343
final Contentlet checkin = APILocator.getContentletAPI()
342344
.checkin(checkout, user, false);
343345

0 commit comments

Comments
 (0)