From 3c63b79324b5bbecd30a668c1be7e542fe06f84e Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Tue, 8 Mar 2016 22:14:23 +1300 Subject: [PATCH] #589 - ElasticSearch - Improve update notification when not mapped but has nested invalidation --- .../ebeaninternal/server/core/PersistRequestBean.java | 9 ++++----- .../docstore/api/support/DocStoreBeanBaseAdapter.java | 9 ++++++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java index 501de1285..9b4ec4ca3 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java @@ -147,7 +147,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP this.parentBean = parentBean; this.controller = beanDescriptor.getPersistController(); this.type = type; - this.docStoreMode = calcDocStoreEvent(transaction, type); + this.docStoreMode = calcDocStoreMode(transaction, type); if (saveRecurse) { this.persistCascade = t.isPersistCascade(); } @@ -175,7 +175,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * Used to check if the Transaction has set the mode to IGNORE when doing large batch inserts that we * don't want to send to the doc store. */ - private DocStoreMode calcDocStoreEvent(SpiTransaction txn, Type type) { + private DocStoreMode calcDocStoreMode(SpiTransaction txn, Type type) { DocStoreMode txnMode = (txn == null) ? null : txn.getDocStoreMode(); return beanDescriptor.getDocStoreMode(type, txnMode); } @@ -203,7 +203,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP public void initTransIfRequiredWithBatchCascade() { if (createImplicitTransIfRequired()) { - docStoreMode = calcDocStoreEvent(transaction, type); + docStoreMode = calcDocStoreMode(transaction, type); } if (transaction.checkBatchEscalationOnCascade(this)) { // we escalated to use batch mode so flush when done @@ -308,8 +308,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * by queuing an event or direct updateAdd (via Bulk API). */ private boolean isDocStoreNotify() { - // Either queue or directly update the document store - return docStoreMode != DocStoreMode.IGNORE || beanDescriptor.docStoreAdapter().hasEmbeddedInvalidation(); + return docStoreMode != DocStoreMode.IGNORE; } public boolean isNotifyPersistListener() { diff --git a/src/main/java/com/avaje/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java b/src/main/java/com/avaje/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java index 168af4037..9c1a82237 100644 --- a/src/main/java/com/avaje/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java +++ b/src/main/java/com/avaje/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java @@ -72,7 +72,7 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter< /** * Behavior on update. */ - protected final DocStoreMode update; + protected DocStoreMode update; /** * Behavior on delete. @@ -190,6 +190,13 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter< @Override public void registerInvalidationPath(String queueId, String path, Set properties) { + if (!mapped) { + if (update == DocStoreMode.IGNORE) { + // bean type not mapped but is included as nested document + // in a doc store index so we need to update + update = DocStoreMode.UPDATE; + } + } embeddedInvalidation.add(getEmbeddedInvalidation(queueId, path, properties)); }