Skip to main content

Aggregation based comparison in Watch condition and hard-coded variables

Watch: Compare Vs Script condition

If you need to do comparisons with aggregation buckets in watchers, then instead of this:
"condition": {
  "compare": {
    "ctx.payload.aggregations.agg1.buckets.0.doc_count": {
      "gte": 5
    }
  }
}

please prefer this, as this takes care of "Index out of bound" exceptions:
"condition": {
  "script": {
    "source": "return (ctx.payload.aggregations.agg1.buckets.size() > 0 && ctx.payload.aggregations.agg1.buckets.0.doc_count >= params.threshold)",
    "lang": "painless",
    "params": {
      "threshold": 5
    }
  }
}

Hard-coded variables in scripts

  • ElasticSearch throws circuit_breaking_exception error when it sees more than 15 new dynamic scripts within a minute.
  • Sometimes this error is also thrown when master goes down abruptly.
  • This is so because, it has to compile every new/unique script it sees and this is a CPU hog.
  • You can change the settings dynamically by setting
    script.max_compilations_rate
    to a larger value, whose default value is 15/minute.
  • It then caches the compiled script, but there is an upper limit of 100 or 65,535 bytes, whichever is lower. You can configure the size of this cache by using the
    script.cache.max_size setting
    and the size of stored scripts can be changed by setting
    script.max_size_in_bytes
    setting to increase that soft limit, but if scripts are really large then a native script engine should be considered.
  • By default, scripts do not have a time-based expiration, but you can change this behaviour by using the
    script.cache.expire
    setting.

Solution

  • For ElasticSearch, an script with threshold value of 5 is different to another script with threshold 10. But if we parameterize a changing variable, then it will be a single script compiled and kept in cache with parameters injected at run time.
  • Just to be clear, hard-coded variables are different than hard-coded constants. You don't need to parameterize hard-coded constants.

Comments

Popular posts from this blog

wget and curl behind corporate proxy throws certificate is not trusted or certificate doesn't have a known issuer

If you try to run wget or curl in Ununtu/Debian behind corporate proxy, you might receive errors like: ERROR: The certificate of 'apertium.projectjj.com' is not trusted. ERROR: The certificate of 'apertium.projectjj.com' doesn't have a known issuer. wget https://apertium.projectjj.com/apt/apertium-packaging.public.gpg ERROR: cannot verify apertium.projectjj.com's certificate, issued by 'emailAddress=proxyteam@corporate.proxy.com,CN=diassl.corporate.proxy.com,OU=Division UK,O=Group name,L=Company,ST=GB,C=UK': Unable to locally verify the issuer's authority. To connect to apertium.projectjj.com insecurely, use `--no-check-certificate'. To solution is to install your company's CA certificate in Ubuntu. In Windows, open the first part of URL in your web browser. e.g. open https://apertium.projectjj.com in web browser. If you inspect the certifcate, you will see the same CN (diassl.corporate.proxy.com), as reported by the error above ...

Eclipse crashing and not starting

Problem: After restarting Eclipse, it crashes immediately and asks me to check C:\Users\username\Adobe Flash Builder 4.6\.metadata\.log In log it shows following error: !ENTRY org.eclipse.osgi 4 0 2013-02-13 11:53:46.760 !MESSAGE Application error !STACK 1 org.eclipse.swt.SWTError: Cannot initialize Drop     at org.eclipse.swt.dnd.DND.error(DND.java:266)     at org.eclipse.swt.dnd.DND.error(DND.java:227)     at org.eclipse.swt.dnd.DropTarget. (DropTarget.java:142)     at org.eclipse.ui.internal.EditorSashContainer.addDropSupport(EditorSashContainer.java:542)     at org.eclipse.ui.internal.EditorSashContainer.createControl(EditorSashContainer.java:534)     at org.eclipse.ui.internal.EditorAreaHelper. (EditorAreaHelper.java:41)     at org.eclipse.ui.internal.WorkbenchPage.init(WorkbenchPage.java:2507)     at org.eclipse.ui.internal.WorkbenchPage. (Workbench...

Procedure for name and date of birth change (Pune)

For change of name, the form (scribd) is available free of cost at Government Book Depot (Shaskiya Granthagar), which is located near Collector’s office, next to Saint Helena's School. The postal address is: Government Photozinco Press Premises and Book Depot, 5, Photozinco Press Road, Pune, MH, 411001. Wikimapia link Charges for name or date of birth change, in the Maharashtra Government Gazette: INR 120.00 per insertion (for two copies of the Gazette) For backward class applicants: INR 60.00 Charges for extra copy of the Gazette: INR 15.00 per copy (two copies are enough, so you may not want to pay extra for extra copies). Backward class applicants are required to submit a xerox of caste certificate of old name as issued by the Collector of the District concerned. Once the form is duly submitted, it normally takes 10 to 15 days for publication of advertisement in the Maharashtra Government Gazette. The Gazette copy reaches to the address filled in the form within nex...