blob: 304fbd7157b1a3b33c90d6b5a2e2cdfa6bdc9613 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61232409-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-61232409-1');
</script>
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(72949126, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
<!-- Bugyard widget embed -->
<script type="text/javascript">!function(){if("function"!=typeof window.bugyard){var a=function(){a.c(arguments)};a.q=[],a.c=function(b){a.q.push(b)},window.bugyard=a;var b=document.createElement("script");b.setAttribute("data-bugyard","610961912c35ff001493163a"),b.setAttribute("async","async"),b.setAttribute("defer","defer"),b.setAttribute("src","https://widget.bugyard.io/bugyard.min.js"),document.getElementsByTagName("head")[0].appendChild(b)}}(); window.bugyard("hideButton"); </script>
<link rel="preload" href='/assets/js/code-tabs.js?1' as="script" crossorigin>
<link rel="preload" href='/assets/js/page-nav.js' as="script" crossorigin>
<link rel="preload" href='/assets/js/docs-menu.js?20201005' as="script" crossorigin>
<style>:root{--gg-red:#ec1c24;--gg-orange:#ec1c24;--gg-orange-dark:#bc440b;--gg-orange-filter:invert(47%) sepia(61%) saturate(1950%) hue-rotate(345deg) brightness(100%) contrast(95%);--gg-dark-gray:#333333;--orange-line-thickness:3px;--block-code-background:rgba(241, 241, 241, 20%);--inline-code-background:rgba(241, 241, 241, 90%);--padding-top:25px;--link-color:#ec1c24;--body-background:#fcfcfc}header{min-height:var(--header-height);background:#fff;box-shadow:0 4px 10px 0 #eee,0 0 4px 0 #d5d5d5;z-index:1}header>.container{display:grid;grid-template-columns:auto auto 1fr auto auto auto;grid-template-areas:'left-toggle home nav ver api search lang';grid-template-rows:40px;flex-direction:row;align-items:center;justify-content:flex-start;padding:12px 20px;max-width:1400px;margin:0 auto}header nav>ul{padding:0;margin:0;list-style:none;display:inherit}header .dropdown{display:none;position:fixed;top:calc(var(--header-height) - 12px);width:auto;background:#fff;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);border-radius:4px;padding-top:10px;padding-bottom:12px;z-index:2}header .dropdown li{display:flex}header .dropdown a{color:grey!important;font-size:16px;padding-top:5px;padding-bottom:4px}header .menu{border:none;background:0 0;width:40px;height:40px;margin-right:12px;grid-area:left-toggle}header .menu img{width:18px;height:12px}header .search-close,header .top-nav-toggle{background:0 0;border:none;padding:0;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;color:var(--gg-dark-gray);font-size:26px}header .search-toggle{grid-area:search}header .top-nav-toggle{grid-area:top-toggle}header .home{grid-area:home;margin-right:auto}header .home img{height:36px}header #api-docs{grid-area:api;margin:0;display:flex}header #api-docs .dropdown{padding:.5em 0}header #api-docs a{padding:9px 14px;color:var(--gg-dark-gray)!important;text-decoration:none;white-space:nowrap}header #api-docs .dropdown-item a{font-weight:400;display:block;width:100%;min-width:150px}header #lang-selector li{list-style:none;display:flex;padding:9px 14px}header #lang-selector li a{display:flex;color:#000;align-items:center}header #lang-selector li a span{font-size:10px;margin-left:5px}header #lang-selector li a img{width:25px}header #lang-selector li .dropdown{margin-left:-70px}header #lang-selector li .dropdown .dropdown-item{padding:0 1em;margin-bottom:8px}header #lang-selector li .dropdown .dropdown-item a span{font-size:14px}header .search{margin-left:auto;margin-right:20px;grid-area:search}header .search input[type=search]{color:var(--gg-dark-gray);background:rgba(255,255,255,.8);border:1px solid #ccc;padding:10px 15px;font-family:inherit;max-width:148px;height:37px;font-size:14px;-webkit-appearance:unset;appearance:unset}header #version-selector{list-style:none;grid-area:ver;line-height:28px;border-radius:0;margin-right:10px;border:none;color:var(--gg-dark-gray);padding:5px 16px 5px 10px;white-space:nowrap;font-size:14px;width:auto;text-align:right;box-sizing:border-box;text-align-last:right;-moz-appearance:none;-webkit-appearance:none;appearance:none;direction:rtl}header #version-selector option{direction:ltr}header>nav{grid-area:nav;font-size:18px;display:flex;flex-direction:row;margin:0 20px}header #lang-selector{grid-area:lang}header .search-close{margin-right:10px}@media (max-width:600px){header .search{margin-right:5px}header .search input[type=search]{max-width:110px}}header:not(.narrow-header) .search-close,header:not(.narrow-header) .top-nav-toggle{display:none}@media (max-width:670px){header>.container{grid-template-columns:auto 1fr auto;grid-template-areas:'left-toggle home search' 'ver api lang'}header #lang-selector li{justify-content:flex-end}}pre,pre.rouge{padding:8px 15px;background:var(--block-code-background)!important;border-radius:5px;border:1px solid #e5e5e5;overflow-x:auto;min-height:36px;line-height:18px;color:#545454}code{color:#545454}pre.rouge code{background:0 0!important}:not(pre)>code{background:var(--inline-code-background);padding:.1em .5em;background-clip:padding-box;border-radius:3px;color:#545454;font-size:90%}.listingblock .content{position:relative}.highlight{color:#586e75}.highlight .c1{color:#657b83}.highlight .nt{color:#b58900}.highlight .o{color:#93a1a1}.highlight .k{color:#6c71c4}.highlight .kt{color:#cb4b16}.highlight .s,.highlight .s1{color:#859900}.highlight .nc{color:#b58900}.highlight .na{color:#268bd2}body{font-family:'Open Sans',sans-serif}h1,h2{color:#000;font-weight:400;font-family:'Open Sans'}h1{font-size:36px;line-height:40px}a{text-decoration:none;color:var(--link-color)}section{color:#545454}.admonitionblock .icon .title{display:none}body{--header-height:64px;--promotion-bar-height:35px;--footer-height:104px;--footer-gap:60px;padding:0;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:var(--body-background);font-family:'Open Sans',sans-serif}body>section{flex:1}header{position:-webkit-sticky;position:sticky;top:0;z-index:2}*{box-sizing:border-box}@media (max-width:670px){body{--header-height:97px}}.left-nav{padding:10px 20px;width:289px;overflow-y:auto;top:calc(var(--header-height) + var(--promotion-bar-height));height:calc(100vh - var(--header-height) - var(--promotion-bar-height));font-family:'Open Sans';padding-top:var(--padding-top);background-color:var(--body-background)}.left-nav li{list-style:none}.left-nav a,.left-nav button{text-decoration:none;color:#757575;font-size:16px;display:inline-flex;width:100%;margin:2px 0;padding:.25em .375em;background:0 0;border:none;font:inherit;text-align:left}.left-nav a.active{color:var(--link-color)}.left-nav .nav-group{margin-left:6px;font-size:14px}.left-nav nav{border-left:2px solid #ddd;margin-bottom:5px}.left-nav nav.collapsed{display:none}.left-nav nav>li>a,.left-nav nav>li>button{padding-left:20px;text-align:left}.left-nav nav>li>a.active{border-left:var(--orange-line-thickness) solid var(--active-color);padding-left:calc(20px - var(--orange-line-thickness))}.left-nav nav.sub_pages{border:none}.left-nav nav.sub_pages a{padding-left:32px}.left-nav .state-indicator{margin-left:auto;margin-top:5px;width:6.2px;height:10px;flex:0 0 auto;filter:invert(49%) sepia(4%) saturate(5%) hue-rotate(23deg) brightness(92%) contrast(90%)}.left-nav button.expanded .state-indicator{transform:rotate(90deg)}.right-nav{width:289px;padding:12px 26px;overflow-y:auto;height:calc(100vh - var(--header-height));top:0;position:-webkit-sticky;position:sticky;display:flex;flex-direction:column;font-family:'Open sans';padding-top:var(--padding-top);background-color:#fff}.right-nav ul{list-style:none;padding:0;margin:0}.right-nav li{padding:0}.right-nav a{--border-width:0px;font-size:14px;color:#757575;padding-left:calc(15px * var(--nesting-level) + 8px - var(--border-width));margin:.3em 0;display:inline-block}.right-nav .sectlevel1{border-left:2px solid #ddd}.right-nav .sectlevel1{--nesting-level:0}.right-nav .sectlevel2{--nesting-level:1}.right-nav .sectlevel3{--nesting-level:2}@media (max-width:1200px){.right-nav{width:230px}}.right-nav footer{font-size:12px;padding:calc(var(--footer-gap) * .3) 0 5px;text-align:left;margin:auto 0 0}section.page-docs{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:100%;grid-template-areas:'left-nav content right-nav';line-height:20px;max-width:1440px;margin:auto;width:100%}section.page-docs>article{border-left:1px solid #eee;background-color:#fff;padding:0 50px 30px;grid-area:content;overflow:hidden;font-family:sans-serif;font-size:16px;color:#545454;line-height:1.6em}section.page-docs>article h1,section.page-docs>article h2{font-family:'Open Sans'}@media (max-width:800px){section.page-docs>article{padding-left:15px;padding-right:15px}}section.page-docs .edit-link{position:relative;top:10px;right:10px;float:right;padding-top:calc(var(--header-height) + var(--padding-top));margin-top:calc((-1 * var(--header-height)))}section.page-docs h1,section.page-docs h2{margin-bottom:0}section.page-docs h2[id]{margin-top:var(--margin-top);margin-bottom:calc(var(--margin-top) * .5);z-index:-1}section.page-docs .title{font-style:italic}section.page-docs h2[id]{--margin-top:1.2em}.left-nav{bottom:0;position:-webkit-sticky;position:sticky}.left-nav{grid-area:left-nav}.right-nav{grid-area:right-nav}.left-nav__overlay{display:none;background:rgba(0,0,0,.5);z-index:1;position:fixed;top:var(--header-height);bottom:0;left:0;right:0}@media (max-width:990px){body:not(.hide-left-nav) .left-nav__overlay{display:block}nav.left-nav{background:#fafafa;grid-area:left-nav;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);min-height:calc(100vh - var(--header-height));max-height:calc(100vh - var(--header-height));position:fixed;bottom:0;top:var(--header-height);z-index:2}section.page-docs>article{grid-column-start:left-nav;grid-column-end:content;grid-row:content}}@media (max-width:800px){nav.right-nav{display:none}}:target:before{content:"";display:block;margin-top:calc(var(--header-height) * -1);height:var(--header-height);width:1px}@media (min-width:600px) and (max-width:900px){:target:before{content:"";display:block;width:1px;margin-top:-150px;height:150px}}
#header #promotion-bar { background-color: #333333; padding: 8px; }
#header #promotion-bar p { font-size: 14px; line-height: 1.4em; font-weight: 600; padding: 0; margin: 0; color: #f0f0f0; text-align: center;}
#header #promotion-bar p a { color: #FCB903; } </style>
<meta name="ignite-version" content="2.11.1" />
<title>Events | Ignite Documentation</title>
<link rel="canonical" href="/docs/2.11.1/events/events" />
<META NAME="ROBOTS" CONTENT="NOINDEX" />
<link rel="shortcut icon" href="/favicon.ico">
<meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0'>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" media="print" onload="this.media='all'">
<noscript>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" rel="stylesheet">
</noscript>
<script>
// AnchorJS - v4.2.0 - 2019-01-01
// https://github.com/bryanbraun/anchorjs
// Copyright (c) 2019 Bryan Braun; Licensed MIT
!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function f(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.base=A.hasOwnProperty("base")?A.base:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64,A.titleText=A.hasOwnProperty("titleText")?A.titleText:""}function p(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],f(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,i,n,o,s,a,r,c,h,l,u,d=[];if(f(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(e=p(A)).length)return this;for(function(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}(),t=document.querySelectorAll("[id]"),i=[].map.call(t,function(A){return A.id}),o=0;o<e.length;o++)if(this.hasAnchorJSLink(e[o]))d.push(o);else{if(e[o].hasAttribute("id"))n=e[o].getAttribute("id");else if(e[o].hasAttribute("data-anchor-id"))n=e[o].getAttribute("data-anchor-id");else{for(c=r=this.urlify(e[o].textContent),a=0;void 0!==s&&(c=r+"-"+a),a+=1,-1!==(s=i.indexOf(c)););s=void 0,i.push(c),e[o].setAttribute("id",c),n=c}n.replace(/-/g," "),(h=document.createElement("a")).className="anchorjs-link "+this.options.class,h.setAttribute("aria-label",this.options.ariaLabel),h.setAttribute("data-anchorjs-icon",this.options.icon),this.options.titleText&&(h.title=this.options.titleText),u=document.querySelector("base")?window.location.pathname+window.location.search:"",u=this.options.base||u,h.href=u+"#"+n,"always"===l&&(h.style.opacity="1"),""===this.options.icon&&(h.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(h.style.lineHeight="inherit")),"left"===this.options.placement?(h.style.position="absolute",h.style.marginLeft="-1em",h.style.paddingRight="0.5em",e[o].insertBefore(h,e[o].firstChild)):(h.style.paddingLeft="0.375em",e[o].appendChild(h))}for(o=0;o<d.length;o++)e.splice(d[o]-o,1);return this.elements=this.elements.concat(e),this},this.remove=function(A){for(var e,t,i=p(A),n=0;n<i.length;n++)(t=i[n].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(i[n]))&&this.elements.splice(e,1),i[n].removeChild(t));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){return this.options.truncate||f(this.options),A.trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}});
</script>
</head>
<body>
<header>
<!--#include virtual="/includes/promotion_banner.html" -->
<div class="container">
<button type='button' class='menu' title='Docs menu'>
<img src="/assets/images/menu-icon.svg" width="18" height="12" alt="menu icon" />
</button>
<div class='home'>
<a href="/" class='home' title='Apache Ignite home'>
<img src="/assets/images/apache_ignite_logo.svg" alt="Apache Ignite logo" width="103" height="36" >
</a>
</div>
<select id="version-selector">
<option value="2.11.1">2.11.1</option>
</select>
<nav id="api-docs"><ul>
<li><a href="#">APIs</a>
<nav class='dropdown'>
<ul>
<li class="dropdown-item"><a href="/releases/latest/javadoc/index.html">Java</a></li>
<li class="dropdown-item"><a href="/releases/latest/dotnetdoc/api/">C#/.NET</a></li>
<li class="dropdown-item"><a href="/releases/latest/cppdoc/index.html">C++</a></li>
<li class="dropdown-item"><a href="/releases/latest/scaladoc/scalar/index.html#org.apache.ignite.scalar.scalar$">Scala</a></li>
</ul>
</nav>
</li>
<li><a href="#">Examples</a>
<nav class="dropdown">
<ul>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/examples" target="_blank" rel="noopener" title="Apache Ignite Java examples">Java</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/dotnet/examples" target="_blank" rel="noopener" title="Apache Ignite C#/.NET examples">C#/.NET</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/cpp/examples" target="_blank" rel="noopener" title="Apache Ignite C++ examples">C++</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/python/examples" target="_blank" rel="noopener" title="Apache Ignite Python examples">Python</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/nodejs/examples" target="_blank" rel="noopener" title="Apache Ignite NodeJS examples">NodeJS</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/php/examples" target="_blank" rel="noopener" title="Apache Ignite PHP examples">PHP</a></li>
</ul>
</nav>
</li></ul>
</nav>
<form class='search'>
<button class="search-close" type='button'><img src='/assets/images/cancel.svg' alt="close" width="10" height="10" /></button>
<input type="search" placeholder="Search…" id="search-input">
</form>
<nav id="lang-selector"><ul>
<li><a href="#"><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span></span></a>
<nav class="dropdown">
<li class="dropdown-item"><a href="/docs/latest/" ><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span>English</span></a></li>
<li class="dropdown-item"><a href="https://www.ignite-service.cn/doc/java/" target="_blank" rel="noopener"><img src="/assets/images/icon_lang_cn_75x75.jpg" width="25" height="25" alt="Chinese language icon" /><span>Chinese</span></a></li>
</nav>
</li></ul>
</nav>
<button type='button' class='top-nav-toggle'></button>
</div>
</header>
<link rel="stylesheet" href="/assets/css/docs.css">
<section class='page-docs'>
<nav class='left-nav' data-swiftype-index='false'>
<li>
<a href="/docs/2.11.1/index" class='' >Documentation Overview</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Quick Start Guides<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/quick-start/java"
class=''
>Java</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/dotnet"
class=''
>.NET/C#</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/cpp"
class=''
>C++</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/python"
class=''
>Python</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/nodejs"
class=''
>Node.JS</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/sql"
class=''
>SQL</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/php"
class=''
>PHP</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/restapi"
class=''
>REST API</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Installation<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/installation/installing-using-zip"
class=''
>Installing Using ZIP Archive</a>
</li>
<li>
<a href="/docs/2.11.1/installation/installing-using-docker"
class=''
>Installing Using Docker</a>
</li>
<li>
<a href="/docs/2.11.1/installation/deb-rpm"
class=''
>Installing DEB or RPM package</a>
</li>
<li>
<button
type='button'
class='collapsed '>Kubernetes<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/installation/kubernetes/amazon-eks-deployment" class=''>Amazon EKS</a></li>
<li><a href="/docs/2.11.1/installation/kubernetes/azure-deployment" class=''>Azure Kubernetes Service</a></li>
<li><a href="/docs/2.11.1/installation/kubernetes/gke-deployment" class=''>Google Kubernetes Engine</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/installation/vmware-installation"
class=''
>VMWare</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Setting Up<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/understanding-configuration"
class=''
>Understanding Configuration</a>
</li>
<li>
<a href="/docs/2.11.1/setup"
class=''
>Setting Up</a>
</li>
<li>
<a href="/docs/2.11.1/logging"
class=''
>Configuring Logging</a>
</li>
<li>
<a href="/docs/2.11.1/resources-injection"
class=''
>Resources Injection</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/starting-nodes" class='' >Starting and Stopping Nodes</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/clustering/clustering"
class=''
>Overview</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/tcp-ip-discovery"
class=''
>TCP/IP Discovery</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/zookeeper-discovery"
class=''
>ZooKeeper Discovery</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/discovery-in-the-cloud"
class=''
>Discovery in the Cloud</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/network-configuration"
class=''
>Network Configuration</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/connect-client-nodes"
class=''
>Connecting Client Nodes</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/baseline-topology"
class=''
>Baseline Topology</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/running-client-nodes-behind-nat"
class=''
>Running Client Nodes Behind NAT</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Thin Clients<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/thin-clients/getting-started-with-thin-clients"
class=''
>Thin Clients Overview</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/java-thin-client"
class=''
>Java Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/dotnet-thin-client"
class=''
>.NET Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/cpp-thin-client"
class=''
>C++ Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/python-thin-client"
class=''
>Python Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/php-thin-client"
class=''
>PHP Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/nodejs-thin-client"
class=''
>Node.js Thin Client</a>
</li>
<li>
<button
type='button'
class='collapsed '>Binary Client Protocol<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/binary-client-protocol/binary-client-protocol" class=''>Binary Client Protocol</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/data-format" class=''>Data Format</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/key-value-queries" class=''>Key-Value Queries</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/sql-and-scan-queries" class=''>SQL and Scan Queries</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/binary-type-metadata" class=''>Binary Types Metadata</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/cache-configuration" class=''>Cache Configuration</a></li>
</nav>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Data Modeling<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/data-modeling/data-modeling"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.11.1/data-modeling/data-partitioning"
class=''
>Data Partitioning</a>
</li>
<li>
<a href="/docs/2.11.1/data-modeling/affinity-collocation"
class=''
>Affinity Colocation</a>
</li>
<li>
<a href="/docs/2.11.1/data-modeling/binary-marshaller"
class=''
>Binary Marshaller</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Memory<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/memory-architecture"
class=''
>Memory Architecture</a>
</li>
<li>
<a href="/docs/2.11.1/memory-configuration/data-regions"
class=''
>Configuring Data Regions</a>
</li>
<li>
<a href="/docs/2.11.1/memory-configuration/eviction-policies"
class=''
>Eviction Policies</a>
</li>
<li>
<a href="/docs/2.11.1/memory-configuration/replacement-policies"
class=''
>Replacement Policies</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Persistence<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/persistence/native-persistence"
class=''
>Ignite Persistence</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/external-storage"
class=''
>External Storage</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/swap"
class=''
>Swapping</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/custom-cache-store"
class=''
>Implementing Custom Cache Store</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/snapshot-directory"
class=''
>Configuring Snapshot Directory</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/snapshots"
class=''
>Cluster Snapshots</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/disk-compression"
class=''
>Disk Compression</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/persistence-tuning"
class=''
>Tuning Persistence</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/snapshots/snapshots" class='' >Cluster Snapshots</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Caches<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/configuring-caches/configuration-overview"
class=''
>Cache Configuration</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/configuring-backups"
class=''
>Configuring Partition Backups</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/partition-loss-policy"
class=''
>Partition Loss Policy</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/atomicity-modes"
class=''
>Atomicity Modes</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/expiry-policies"
class=''
>Expiry Policy</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/on-heap-caching"
class=''
>On-Heap Caching</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/cache-groups"
class=''
>Cache Groups</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/near-cache"
class=''
>Near Caches</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/data-rebalancing" class='' >Data Rebalancing</a>
</li>
<li>
<a href="/docs/2.11.1/data-streaming" class='' >Data Streaming</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Using Key-Value API<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/key-value-api/basic-cache-operations"
class=''
>Basic Cache Operations</a>
</li>
<li>
<a href="/docs/2.11.1/key-value-api/binary-objects"
class=''
>Working with Binary Objects</a>
</li>
<li>
<a href="/docs/2.11.1/key-value-api/using-scan-queries"
class=''
>Using Scan Queries</a>
</li>
<li>
<a href="/docs/2.11.1/read-repair"
class=''
>Read Repair</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/key-value-api/transactions" class='' >Performing Transactions</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Working with SQL<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/SQL/sql-introduction"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/schemas"
class=''
>Understanding Schemas</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/indexes"
class=''
>Defining Indexes</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/sql-api"
class=''
>Using SQL API</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/distributed-joins"
class=''
>Distributed Joins</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/sql-transactions"
class=''
>SQL Transactions</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/custom-sql-func"
class=''
>Custom SQL Functions</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/JDBC/jdbc-driver"
class=''
>JDBC Driver</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/JDBC/jdbc-client-driver"
class=''
>JDBC Client Driver</a>
</li>
<li>
<button
type='button'
class='collapsed '>ODBC Driver<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/SQL/ODBC/odbc-driver" class=''>ODBC Driver</a></li>
<li><a href="/docs/2.11.1//SQL/ODBC/connection-string-dsn" class=''>Connection String and DSN</a></li>
<li><a href="/docs/2.11.1/SQL/ODBC/querying-modifying-data" class=''>Querying and Modifying Data</a></li>
<li><a href="/docs/2.11.1/SQL/ODBC/specification" class=''>Specification</a></li>
<li><a href="/docs/2.11.1/SQL/ODBC/data-types" class=''>Data Types</a></li>
<li><a href="/docs/2.11.1/SQL/ODBC/error-codes" class=''>Error Codes</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/transactions/mvcc"
class=''
>Multiversion Concurrency Control</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>SQL Reference<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/sql-reference/sql-conformance"
class=''
>SQL Conformance</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/ddl"
class=''
>Data Definition Language (DDL)</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/dml"
class=''
>Data Manipulation Language (DML)</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/transactions"
class=''
>Transactions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/operational-commands"
class=''
>Operational Commands</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/aggregate-functions"
class=''
>Aggregate functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/numeric-functions"
class=''
>Numeric Functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/string-functions"
class=''
>String Functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/date-time-functions"
class=''
>Data and Time Functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/system-functions"
class=''
>System Functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/data-types"
class=''
>Data Types</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Distributed Computing<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/distributed-computing/distributed-computing"
class=''
>Distributed Computing API</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/cluster-groups"
class=''
>Cluster Groups</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/executor-service"
class=''
>Executor Service</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/map-reduce"
class=''
>MapReduce API</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/load-balancing"
class=''
>Load Balancing</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/fault-tolerance"
class=''
>Fault Tolerance</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/job-scheduling"
class=''
>Job Scheduling</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/collocated-computations"
class=''
>Colocating Computations with Data</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Code Deployment<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/code-deployment/deploying-user-code"
class=''
>Deploying User Code</a>
</li>
<li>
<a href="/docs/2.11.1/code-deployment/peer-class-loading"
class=''
>Peer Class Loading</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Machine Learning<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/machine-learning/machine-learning"
class=''
>Machine Learning</a>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/partition-based-dataset"
class=''
>Partition Based Dataset</a>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/updating-trained-models"
class=''
>Updating Trained Models</a>
</li>
<li>
<button
type='button'
class='collapsed '>Binary Classification<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/binary-classification/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/linear-svm" class=''>Linear SVM (Support Vector Machine)</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/decision-trees" class=''>Decision Trees</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/multilayer-perceptron" class=''>Multilayer Perceptron</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/logistic-regression" class=''>Logistic Regression</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/knn-classification" class=''>k-NN Classification</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/ann" class=''>ANN (Approximate Nearest Neighbor)</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/naive-bayes" class=''>Naive Bayes</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Regression<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/regression/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/regression/linear-regression" class=''>Linear Regression</a></li>
<li><a href="/docs/2.11.1/machine-learning/regression/decision-trees-regression" class=''>Decision Trees Regression</a></li>
<li><a href="/docs/2.11.1/machine-learning/regression/knn-regression" class=''>k-NN Regression</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/clustering/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/clustering/k-means-clustering" class=''>K-Means Clustering</a></li>
<li><a href="/docs/2.11.1/machine-learning/clustering/gaussian-mixture" class=''>Gaussian mixture (GMM)</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/preprocessing"
class=''
>Preprocessing</a>
</li>
<li>
<button
type='button'
class='collapsed '>Model Selection<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/model-selection/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/model-selection/evaluator" class=''>Evaluator</a></li>
<li><a href="/docs/2.11.1/machine-learning/model-selection/split-the-dataset-on-test-and-train-datasets" class=''>Split the dataset on test and train datasets</a></li>
<li><a href="/docs/2.11.1/machine-learning/model-selection/hyper-parameter-tuning" class=''>Hyper-parameter tuning</a></li>
<li><a href="/docs/2.11.1/machine-learning/model-selection/pipeline-api" class=''>Pipeline API</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/multiclass-classification"
class=''
>Multiclass Classification</a>
</li>
<li>
<button
type='button'
class='collapsed '>Ensemble Methods<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/introduction" class=''></a></li>
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/stacking" class=''>Stacking</a></li>
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/baggin" class=''>Bagging</a></li>
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/random-forest" class=''>Random Forest</a></li>
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/gradient-boosting" class=''>Gradient Boosting</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/recommendation-systems"
class=''
>Recommendation Systems</a>
</li>
<li>
<button
type='button'
class='collapsed '>Importing Model<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/importing-model/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/importing-model/model-import-from-gxboost" class=''>Import Model from XGBoost</a></li>
<li><a href="/docs/2.11.1/machine-learning/importing-model/model-import-from-apache-spark" class=''>Import Model from Apache Spark</a></li>
</nav>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/key-value-api/continuous-queries" class='' >Using Continuous Queries</a>
</li>
<li>
<a href="/docs/2.11.1/services/services" class='' >Using Ignite Services</a>
</li>
<li>
<a href="/docs/2.11.1/messaging" class='' >Using Ignite Messaging</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Distributed Data Structures<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/data-structures/queue-and-set"
class=''
>Queue and Set</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/atomic-types"
class=''
>Atomic Types</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/countdownlatch"
class=''
>CountDownLatch</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/atomic-sequence"
class=''
>Atomic Sequence</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/semaphore"
class=''
>Semaphore</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/id-generator"
class=''
>ID Generator</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/distributed-locks" class='' >Distributed Locks</a>
</li>
<li>
<a href="/docs/2.11.1/restapi" class='' >REST API</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>.NET Specific<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/net-specific/net-configuration-options"
class=''
>Configuration Options</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-deployment-options"
class=''
>Deployment Options</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-standalone-nodes"
class=''
>Standalone Nodes</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-async"
class=''
>Asynchronous APIs</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-logging"
class=''
>Logging</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-linq"
class=''
>LINQ</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-java-services-execution"
class=''
>Java Services Execution</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-platform-cache"
class=''
>.NET Platform Cache</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-plugins"
class=''
>Plugins</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-serialization"
class=''
>Serialization</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-cross-platform-support"
class=''
>Cross-Platform Support</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-platform-interoperability"
class=''
>Platform Interoperability</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-remote-assembly-loading"
class=''
>Remote Assembly Loading</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-troubleshooting"
class=''
>Troubleshooting</a>
</li>
<li>
<button
type='button'
class='collapsed '>Integrations<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/net-specific/asp-net-output-caching" class=''>ASP.NET Output Caching</a></li>
<li><a href="/docs/2.11.1/net-specific/asp-net-session-state-caching" class=''>ASP.NET Session State Caching</a></li>
<li><a href="/docs/2.11.1/net-specific/net-entity-framework-cache" class=''>Entity Framework 2nd Level Cache</a></li>
</nav>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>C++ Specific<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/cpp-specific/cpp-serialization"
class=''
>Serialization</a>
</li>
<li>
<a href="/docs/2.11.1/cpp-specific/cpp-platform-interoperability"
class=''
>Platform Interoperability</a>
</li>
<li>
<a href="/docs/2.11.1/cpp-specific/cpp-objects-lifetime"
class=''
>Objects Lifetime</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Monitoring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/monitoring-metrics/intro"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/cluster-id"
class=''
>Cluster ID and Tag</a>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/cluster-states"
class=''
>Cluster States</a>
</li>
<li>
<button
type='button'
class='collapsed '>Metrics<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/monitoring-metrics/configuring-metrics" class=''>Configuring Metrics</a></li>
<li><a href="/docs/2.11.1/monitoring-metrics/metrics" class=''>JMX Metrics</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>New Metrics System<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/monitoring-metrics/new-metrics-system" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/monitoring-metrics/new-metrics" class=''>Metrics</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/system-views"
class=''
>System Views</a>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/performance-statistics"
class=''
>Performance Statistics</a>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/tracing"
class=''
>Tracing</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle expanded '>Working with Events<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group expanded'>
<li>
<a href="/docs/2.11.1/events/listening-to-events"
class=''
>Enabling and Listenting to Events</a>
</li>
<li>
<a href="/docs/2.11.1/events/events"
class='active'
>Events</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Tools<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/tools/control-script"
class=''
>Control Script</a>
</li>
<li>
<a href="/docs/2.11.1/tools/visor-cmd"
class=''
>Visor CMD</a>
</li>
<li>
<a href="/docs/2.11.1/tools/gg-control-center"
class=''
>GridGain Control Center</a>
</li>
<li>
<a href="/docs/2.11.1/tools/sqlline"
class=''
>SQLLine</a>
</li>
<li>
<a href="/docs/2.11.1/tools/tableau"
class=''
>Tableau</a>
</li>
<li>
<a href="/docs/2.11.1/tools/informatica"
class=''
>Informatica</a>
</li>
<li>
<a href="/docs/2.11.1/tools/pentaho"
class=''
>Pentaho</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Security<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/security/authentication"
class=''
>Authentication</a>
</li>
<li>
<a href="/docs/2.11.1/security/ssl-tls"
class=''
>SSL/TLS</a>
</li>
<li>
<button
type='button'
class='collapsed '>Transparent Data Encryption<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/security/tde" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/security/master-key-rotation" class=''>Master key rotation</a></li>
<li><a href="/docs/2.11.1/security/cache-encryption-key-rotation" class=''>Cache encryption key rotation</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/security/sandbox"
class=''
>Sandbox</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Extensions and Integrations<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<button
type='button'
class='collapsed '>Spring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/extensions-and-integrations/spring/spring-boot" class=''>Spring Boot</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/spring/spring-data" class=''>Spring Data</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/spring/spring-caching" class=''>Spring Caching</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/spring/spring-tx" class=''>Spring Transactions</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Ignite for Spark<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/overview" class=''>Overview</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/ignitecontext-and-rdd" class=''>IgniteContext and IgniteRDD</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/ignite-dataframe" class=''>Ignite DataFrame</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/installation" class=''>Installation</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/spark-shell" class=''>Test Ignite with Spark-shell</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/troubleshooting" class=''>Troubleshooting</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/extensions-and-integrations/hibernate-l2-cache"
class=''
>Hibernate L2 Cache</a>
</li>
<li>
<a href="/docs/2.11.1/extensions-and-integrations/mybatis-l2-cache"
class=''
>MyBatis L2 Cache</a>
</li>
<li>
<button
type='button'
class='collapsed '>Streaming<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/kafka-streamer" class=''>Kafka Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/camel-streamer" class=''>Camel Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/flink-streamer" class=''>Flink Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/flume-sink" class=''>Flume Sink</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/jms-streamer" class=''>JMS Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/mqtt-streamer" class=''>MQTT Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/rocketmq-streamer" class=''>RocketMQ Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/storm-streamer" class=''>Storm Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/zeromq-streamer" class=''>ZeroMQ Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/twitter-streamer" class=''>Twitter Streamer</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Cassandra Integration<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/extensions-and-integrations/cassandra/overview" class=''>Overview</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/cassandra/configuration" class=''>Configuration</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/cassandra/usage-examples" class=''>Usage Examples</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/cassandra/ddl-generator" class=''>DDL Generator</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/extensions-and-integrations/php-pdo"
class=''
>PHP PDO</a>
</li>
<li>
<a href="/docs/2.11.1/extensions-and-integrations/performance-statistics"
class=''
>Performance Statistics</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/plugins" class='' >Plugins</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Performance and Troubleshooting<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/general-perf-tips"
class=''
>General Performance Tips</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/memory-tuning"
class=''
>Memory and JVM Tuning</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/persistence-tuning"
class=''
>Persistence Tuning</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/sql-tuning"
class=''
>SQL Tuning</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/thread-pools-tuning"
class=''
>Thread Pools Tuning</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/troubleshooting"
class=''
>Troubleshooting and Debugging</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/handling-exceptions"
class=''
>Handling Exceptions</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/yardstick-benchmarking"
class=''
>Benchmarking With Yardstick</a>
</li>
</nav>
</li>
</nav>
<div class="left-nav__overlay"></div>
<article data-swiftype-index='true'>
<a class='edit-link' href="https://github.com/apache/ignite/tree/IGNITE-7595/docs/_docs/events/events.adoc" target="_blank">Edit</a>
<h1>Events</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This page describes different event types, when and where they are generated, and how you can use them.</p>
</div>
<div class="paragraph">
<p>You can always find the most complete and up to date list of events in the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/EventType.html" target="_blank" rel="noopener">EventType</a> javadoc.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="general-information">General Information</h2>
<div class="sectionbody">
<div class="paragraph">
<p>All events implement the <code>Event</code> interface.
You may want to cast each event to the specific class to get extended information about the action the event was triggered by.
For example, the 'cache update' action triggers an event that is an instance of the <code>CacheEvent</code> class, which contains the information about the data that was modified, the ID of the subject that triggered the event, etc.</p>
</div>
<div class="paragraph">
<p>All events contain information about the node where the event was generated.
For example, when you execute an <code>IgniteClosure</code> job, the <code>EVT_JOB_STARTED</code> and <code>EVT_JOB_FINISHED</code> events contain the information about the node where the closure was executed.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="nc">IgniteEvents</span> <span class="n">events</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">events</span><span class="o">();</span>
<span class="no">UUID</span> <span class="n">uuid</span> <span class="o">=</span> <span class="n">events</span><span class="o">.</span><span class="na">remoteListen</span><span class="o">(</span><span class="k">new</span> <span class="nc">IgniteBiPredicate</span><span class="o">&lt;</span><span class="no">UUID</span><span class="o">,</span> <span class="nc">JobEvent</span><span class="o">&gt;()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">apply</span><span class="o">(</span><span class="no">UUID</span> <span class="n">uuid</span><span class="o">,</span> <span class="nc">JobEvent</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"nodeID = "</span> <span class="o">+</span> <span class="n">e</span><span class="o">.</span><span class="na">node</span><span class="o">().</span><span class="na">id</span><span class="o">()</span> <span class="o">+</span> <span class="s">", addresses="</span> <span class="o">+</span> <span class="n">e</span><span class="o">.</span><span class="na">node</span><span class="o">().</span><span class="na">addresses</span><span class="o">());</span>
<span class="k">return</span> <span class="kc">true</span><span class="o">;</span> <span class="c1">//continue listening</span>
<span class="o">}</span>
<span class="o">},</span> <span class="kc">null</span><span class="o">,</span> <span class="nc">EventType</span><span class="o">.</span><span class="na">EVT_JOB_FINISHED</span><span class="o">);</span></code></pre>
</div>
</div>
<div class="admonitionblock caution">
<table>
<tr>
<td class="icon">
<div class="title">Caution</div>
</td>
<td class="content">
<h3 id="event-ordering" class="discrete">Event Ordering</h3>
<div class="paragraph">
<p>The order of events in the event listener is not guaranteed to be the same as the order in which they were generated.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="subjectid">SubjectID</h3>
<div class="paragraph">
<p>Some events contain the <code>subjectID</code> field, which represents the ID of the entity that initiated the action:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>When the action is initiated by a server or client node, the <code>subjectID</code> is the ID of that node.</p>
</li>
<li>
<p>When the action is done by a thin client, JDBC/ODBC/REST client, the <code>subjectID</code> is generated when the client connects to the cluster and remains the same as long as the client is connected to the cluster.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Check the specific event class to learn if the <code>subjectID</code> field is present.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="cluster-state-changed-events">Cluster State Changed Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Cluster state changed events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/ClusterStateChangeEvent.html" target="_blank" rel="noopener">ClusterStateChangeEvent</a> class.</p>
</div>
<div class="paragraph">
<p>The cluster state changed events are generated when the cluster state changes, which happens either on auto-activation, or when a user changes the state manually.
The events contain the new and old states, and the list of baseline nodes after the change.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLUSTER_STATE_CHANGED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The cluster state changed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All cluster nodes.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="cache-lifecycle-events">Cache Lifecycle Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Cache Lifecycle events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/CacheEvent.html" target="_blank" rel="noopener">CacheEvent</a> class.
Each cache lifecycle event is associated with a specific cache and has a field that contains the name of the cache.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_STARTED</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A cache is started on a specific node.
Each server node holds an internal instance of a cache.
This event is fired when the instance is created, which includes the following actions:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>A cluster with existing caches is activated. The event is generated for every cache on all server nodes where the cache is configured.</p>
</li>
<li>
<p>A server node joins the cluster with existing caches (the caches are started on that node).</p>
</li>
<li>
<p>When you create a new cache dynamically by calling <code>Ignite.getOrCreateCache(&#8230;&#8203;)</code> or similar methods. The event is fired on all nodes that host the cache.</p>
</li>
<li>
<p>When you obtain an instance of a cache on a client node.</p>
</li>
<li>
<p>When you create a cache via the <a href="/docs/2.11.1/sql-reference/ddl#create-table">CREATE TABLE</a> command.</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All nodes where the cache is started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_STOPPED</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>This event happens when a cache is stopped, which includes the following actions:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The cluster is deactivated. All caches on all server nodes are stopped.</p>
</li>
<li>
<p><code>IgniteCache.close()</code> is called. The event is triggered on the node where the method is called.</p>
</li>
<li>
<p>A SQL table is dropped.</p>
</li>
<li>
<p>If you call <code>cache = Ignite.getOrCreateCache(&#8230;&#8203;)</code> and then call <code>Ignite.close()</code>, the <code>cache</code> is also closed on that node.</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All nodes where the cache is stopped.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_NODES_LEFT</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All nodes that host a specific cache have left the cluster. This can happen when a cache is deployed on a subset of server nodes or when all server nodes leave the cluster and only client nodes remain.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All remaining nodes.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="cache-events">Cache Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Cache events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/CacheEvent.html">CacheEvent</a> class and
represent the operations on cache objects, such as 'get', 'put', 'remove', 'lock', etc.</p>
</div>
<div class="paragraph">
<p>Each event contains the information about the cache, the key that is accessed by the operation, the value before and after the operation (if applicable), etc.</p>
</div>
<div class="paragraph">
<p>Cache events are also generated when you use DML commands.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_OBJECT_PUT</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">An object is put to a cache. This event is fired for every invocation of <code>IgniteCache.put()</code>. The bulk operations, such as <code>putAll(&#8230;&#8203;)</code>, produce multiple events of this type.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The primary and backup nodes for the entry.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_OBJECT_READ</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">An object is read from a cache.
This event is not emitted when you use <a href="/docs/2.11.1/key-value-api/using-scan-queries">scan queries</a> (use <a href="#cache-query-events">Cache Query Events</a> to monitor scan queries).</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where read operation is executed.
It can be either the primary or backup node (the latter case is only possible when <a href="/docs/2.11.1/configuring-caches/configuration-overview#readfrombackup">reading from backups is enabled</a>).
In transactional caches, the event can be generated on both the primary and backup nodes depending on the concurrency and isolation levels.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_OBJECT_REMOVED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">An object is removed from a cache.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The primary and backup nodes for the entry.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_OBJECT_LOCKED</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>A lock is acquired on a specific key.
Locks can be acquired only on keys in transactional caches.
User actions that acquire a lock include the following cases:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The user explicitly acquires a lock by calling <code>IgniteCache.lock()</code> or <code>IgniteCache.lockAll()</code>.</p>
</li>
<li>
<p>A lock is acquired for every atomic (non-transactional) data modifying operation (put, update, remove).
In this case, the event is triggered on both primary and backup nodes for the key.</p>
</li>
<li>
<p>Locks are acquired on the keys accessed within a transaction (depending on the <a href="/docs/2.11.1/key-value-api/transactions#concurrency-modes-and-isolation-levels">concurrency and isolation levels</a>).</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The primary or/and backup nodes for the entry depending on the <a href="/docs/2.11.1/key-value-api/transactions#concurrency-modes-and-isolation-levels">concurrency and isolation levels</a>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_OBJECT_UNLOCKED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A lock on a key is released.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The primary node for the entry.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_OBJECT_EXPIRED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The event is fired when a cache entry expires. This happens only if an <a href="/docs/2.11.1/configuring-caches/expiry-policies">expiry policy</a> is configured.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The primary and backup nodes for the entry.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_ENTRY_CREATED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This event is triggered when Ignite creates an internal entry for working with a specific object from a cache. We don&#8217;t recommend using this event. If you want to monitor cache put operations, the <code>EVT_CACHE_OBJECT_PUT</code> event should be enough for most cases.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The primary and backup nodes for the entry.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_ENTRY_DESTROYED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This event is triggered when Ignite destroys an internal entry that was created for working with a specific object from a cache.
We don&#8217;t recommend using it.
Destroying the internal entry does not remove any data from the cache.
If you want to monitor cache remove operations, use the <code>EVT_CACHE_OBJECT_REMOVED</code> event.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The primary and backup nodes for the entry.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="cache-query-events">Cache Query Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>There are two types of events that are related to cache queries:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Cache query object read events, which are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/CacheQueryReadEvent.html" target="_blank" rel="noopener">CacheQueryReadEvent</a> class.</p>
</li>
<li>
<p>Cache query executed events, which are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/CacheQueryExecutedEvent.html" target="_blank" rel="noopener">CacheQueryExecutedEvent</a> class.</p>
</li>
</ul>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_QUERY_OBJECT_READ</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">An object is read as part of a query execution. This event is generated for every object that matches the <a href="/docs/2.11.1/key-value-api/using-scan-queries#executing-scan-queries">query filter</a>.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The primary node of the object that is read.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_QUERY_EXECUTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This event is generated when a query is executed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All server nodes that host the cache.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="class-and-task-deployment-events">Class and Task Deployment Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Deployment events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/DeploymentEvent.html">DeploymentEvent</a> class.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLASS_DEPLOYED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A class (non-task) is deployed on a specific node.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the class is deployed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLASS_UNDEPLOYED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A class is undeployed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the class is undeployed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLASS_DEPLOY_FAILED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Class deployment failed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the class is to be deployed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_DEPLOYED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A task class is deployed on a specific node.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the class is deployed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_UNDEPLOYED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A task class is undeployed on a specific node.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the class is undeployed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_DEPLOY_FAILED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Class deployment failed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the class is to be deployed.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="discovery-events">Discovery Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Discovery events occur when nodes (both servers and clients) join or leave the cluster, including cases when nodes leave due to a failure.</p>
</div>
<div class="paragraph">
<p>Discovery events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/DiscoveryEvent.html">DiscoveryEvent</a> class.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_NODE_JOINED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A node joins the cluster.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All nodes in the cluster (other than the one that joined).</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_NODE_LEFT</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A node leaves the cluster.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All remaining nodes in the cluster.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_NODE_FAILED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The cluster detects that a node left the cluster in a non-graceful way.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All remaining nodes in the cluster.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_NODE_SEGMENTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This happens on a node that decides that it was segmented.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node that is segmented.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLIENT_NODE_DISCONNECTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A client node loses connection to the cluster.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The client node that disconnected from the cluster.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLIENT_NODE_RECONNECTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A client node reconnects to the cluster.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The client node that reconnected to the cluster.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="task-execution-events">Task Execution Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Task execution events are associated with different stages of <a href="/docs/2.11.1/distributed-computing/map-reduce">task execution</a>.
They are also generated when you execute <a href="/docs/2.11.1/distributed-computing/distributed-computing">simple closures</a> because internally a closure is treated as a task that produces a single job.</p>
</div>
<div class="paragraph">
<p>Task Execution events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/TaskEvent.html">TaskEvent</a> class.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_STARTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A task is started. <code>IgniteCompute.execute()</code> or other method is called</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node that initiates the task.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_REDUCED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This event represents the 'reduce' stage of the task execution flow.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the task was started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_FINISHED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The execution of the task finishes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the task was started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_FAILED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The task failed</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the task was started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_TIMEDOUT</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The execution of the task timed out. This can happen when <code>Ignite.compute().withTimeout(&#8230;&#8203;)</code> to execute tasks. When a task times out, it cancels all jobs that are being executed. It also generates the <code>EVT_TASK_FAILED</code> event.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the task was started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TASK_SESSION_ATTR_SET</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A job sets an attribute in the <a href="/docs/2.11.1/distributed-computing/map-reduce#distributed-task-session">session</a>.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the job is executed.</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p><br></p>
</div>
<div class="paragraph">
<p>Job Execution events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/JobEvent.html">JobEvent</a> class.
The job execution events are generated at different stages of job execution and are associated with particular instances of the job.
The event contains information about the task that produced the job (task name, task class, etc.).</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_MAPPED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A job is mapped to a specific node. Mapping happens on the node where the task is started. This event is generated for every job produced in the "map" stage.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node that started the task.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_QUEUED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The job is added to the queue on the node to which it was mapped.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the job is scheduled for execution.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_STARTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Execution of the job started.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the job is executed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_FINISHED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Execution of the job finished. This also includes cases when the job is cancelled.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the job is executed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_RESULTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The job returned a result to the node from which it was sent.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the task was started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_FAILED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Execution of a job fails. If the job failover strategy is configured (default), this event is accompanied by the <code>EVT_JOB_FAILED_OVER</code> event.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the job is executed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_FAILED_OVER</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The job was failed over to another node.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node that started the task.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_TIMEDOUT</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The job timed out.</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_REJECTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The job is rejected. The job can be rejected if a <a href="/docs/2.11.1/distributed-computing/job-scheduling">collision spi</a> is configured.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the job is rejected.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_JOB_CANCELLED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The job was cancelled.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the job is being executed.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="cache-rebalancing-events">Cache Rebalancing Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Cache Rebalancing events (all except for <code>EVT_CACHE_REBALANCE_OBJECT_LOADED</code> and <code>EVT_CACHE_REBALANCE_OBJECT_UNLOADED</code>) are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/CacheRebalancingEvent.html">CacheRebalancingEvent</a> class.</p>
</div>
<div class="paragraph">
<p>Rebalancing occurs on a per cache basis; therefore, each rebalancing event corresponds to a specific cache.
The event contains the name of the cache.</p>
</div>
<div class="paragraph">
<p>The process of moving a single cache partition from Node A to Node B consists of the following steps:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Node A supplies a partition (REBALANCE_PART_SUPPLIED). The objects from the partition start to move to node B.</p>
</li>
<li>
<p>Node B receives the partition data (REBALANCE_PART_LOADED).</p>
</li>
<li>
<p>Node A removes the partition from its storage (REBALANCE_PART_UNLOADED).</p>
</li>
</ol>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_REBALANCE_STARTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The rebalancing of a cache starts.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All nodes that host the cache.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_REBALANCE_STOPPED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The rebalancing of a cache stops.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">All nodes that host the cache.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_REBALANCE_PART_LOADED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A cache&#8217;s partition is loaded on the new node. This event is fired for every partition that participates in the cache rebalancing.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the partition is loaded.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_REBALANCE_PART_UNLOADED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A cache&#8217;s partition is removed from the node after it has been loaded to its new destination.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the partition was held before the rebalancing process started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_REBALANCE_OBJECT_LOADED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">An object is moved to a new node as part of cache rebalancing.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the object is loaded.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_REBALANCE_OBJECT_UNLOADED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">An object is removed from a node after it has been moved to a new node.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node from which the object is removed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_REBALANCE_PART_DATA_LOST</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A partition that is to be rebalanced is lost, for example, due to a node failure.</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CACHE_REBALANCE_PART_SUPPLIED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A node supplies a cache partition as part of the rebalancing process.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node that owns the partition.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="transaction-events">Transaction Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Transaction events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/TransactionStateChangedEvent.html">TransactionStateChangedEvent</a> class.
They allow you to get notification about different stages of transaction execution. Each event contains the <code>Transaction</code> object this event is associated with.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TX_STARTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A transaction is started. Note that in transactional caches, each atomic operation executed outside a transaction is considered a transaction with a single operation.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the transaction was started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TX_COMMITTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A transaction is committed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the transaction was started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TX_ROLLED_BACK</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A transaction is rolled back.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the transaction was executed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TX_SUSPENDED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A transaction is suspended.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the transaction was started.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_TX_RESUMED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A transaction is resumed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the transaction was started.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="snapshot-events">Snapshot Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>All snapshot events are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/SnapshotEvent.html">SnapshotEvent</a> class. The snapshot events
are always triggered at the node initiated a snapshot operation. They are also associated with the particular snapshot operation name.
These events can notify you about the states and the result of the cluster snapshot operation, which can be used for further processing in
your custom procedures.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLUSTER_SNAPSHOT_STARTED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A cluster snapshot operation is started.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the snapshot operation was initiated.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLUSTER_SNAPSHOT_FINISHED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A cluster snapshot operation is finished. The event is fired when the snapshot operation is finished on all the cluster nodes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the snapshot operation was finished.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_CLUSTER_SNAPSHOT_FAILED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A cluster snapshot operation is failed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The node where the snapshot operation was initiated. Note that the message will contain a failure description from another node. You may check the logs for details.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="node-validation-failure-events">Node Validation Failure Events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>These events are triggered when a new node cannot join the Ignite cluster because some of the cluster member nodes failed to validate it.
Validation should be understood as the configuration and state compatibility check between the joining node and the cluster member nodes.
Node validation failure events provide information about the node that tried to join the cluster and the reason for the validation failure.</p>
</div>
<div class="paragraph">
<p>Events related to node validation failures are instances of the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/events/NodeValidationFailedEvent.html">NodeValidationFailedEvent</a> class.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 50%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Event Type</th>
<th class="tableblock halign-left valign-top">Event Description</th>
<th class="tableblock halign-left valign-top">Where Event Is Fired</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">EVT_NODE_VALIDATION_FAILED</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Node validation failed.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The cluster member node that failed to validate new node that tried to join the cluster.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="copyright">
© 2022 The Apache Software Foundation.<br/>
Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation.
</div>
</article>
<nav class="right-nav" data-swiftype-index='false'>
<div class="toc-wrapper">
<ul class="sectlevel1">
<li><a href="#general-information">General Information</a>
<ul class="sectlevel2">
<li><a href="#subjectid">SubjectID</a></li>
</ul>
</li>
<li><a href="#cluster-state-changed-events">Cluster State Changed Events</a></li>
<li><a href="#cache-lifecycle-events">Cache Lifecycle Events</a></li>
<li><a href="#cache-events">Cache Events</a></li>
<li><a href="#cache-query-events">Cache Query Events</a></li>
<li><a href="#class-and-task-deployment-events">Class and Task Deployment Events</a></li>
<li><a href="#discovery-events">Discovery Events</a></li>
<li><a href="#task-execution-events">Task Execution Events</a></li>
<li><a href="#cache-rebalancing-events">Cache Rebalancing Events</a></li>
<li><a href="#transaction-events">Transaction Events</a></li>
<li><a href="#snapshot-events">Snapshot Events</a></li>
<li><a href="#node-validation-failure-events">Node Validation Failure Events</a></li>
</ul>
</div>
<nav class="promo-nav">
<!--#include virtual="/includes/docs_rightnav_promotion.html" -->
<a href="#" data-trigger-bugyard-feedback="true" id="doc-feedback-btn">Docs Feedback</a>
</nav>
</nav>
</section>
<script type='module' src='/assets/js/code-copy-to-clipboard.js' async crossorigin></script>
<script>
// inits deep anchors -- needs to be done here because of https://www.bryanbraun.com/anchorjs/#dont-run-it-too-late
anchors.add('.page-docs h1, .page-docs h2, .page-docs h3:not(.discrete), .page-docs h4, .page-docs h5');
anchors.options = {
placement: 'right',
visible: 'always'
};
</script>
<script src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
<script>
docsearch({
// Your apiKey and indexName will be given to you once
// we create your config
apiKey: '3eee686c0ebe39eff3baeb18c56fa5f8',
indexName: 'apache_ignite',
// Replace inputSelector with a CSS selector
// matching your search input
inputSelector: '#search-input',
// algoliaOptions: { 'facetFilters': ["version:$VERSION"] },
// Set debug to true to inspect the dropdown
debug: false,
});
</script>
<script type='module' src='/assets/js/index.js?1642237236' async crossorigin></script>
<script type='module' src='/assets/js/versioning.js?1642237236' async crossorigin></script>
<link rel="stylesheet" href="/assets/css/styles.css?1642237236" media="print" onload="this.media='all'">
<noscript><link media="all" rel="stylesheet" href="/assets/css/styles.css?1642237236"></noscript>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" media="print" onload="this.media='all'">
<noscript><link media="all" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"></noscript>
</body>
</html>